Improve save

This commit is contained in:
seven332 committed 2015-02-09 23:48:11 +08:00
1 parent f785848fe0
commit 9495b026b6
8 files changed
+167 -8

No files matched your search

@@ -21,11 +21,11 @@ import android.os.Bundle;
import android.support.v4.view.ViewCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.Toolbar;
import android.widget.FrameLayout;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.ui.scene.GalleryListScene;
import com.hippo.scene.StageActivity;
import com.hippo.scene.StageLayout;
import com.hippo.util.UiUtils;
public class ContentActivity extends StageActivity {
@@ -34,7 +34,7 @@ public class ContentActivity extends StageActivity {
private DrawerLayout mDrawerLayout;
private Toolbar mToolbar;
private FrameLayout mStage;
private StageLayout mStage;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -45,7 +45,7 @@ public class ContentActivity extends StageActivity {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mToolbar = (Toolbar) mDrawerLayout.findViewById(R.id.toolbar);
mStage = (FrameLayout) mDrawerLayout.findViewById(R.id.stage);
mStage = (StageLayout) mDrawerLayout.findViewById(R.id.stage);
setSupportActionBar(mToolbar);
@@ -58,7 +58,7 @@ public class ContentActivity extends StageActivity {
}
@Override
public FrameLayout getStageView() {
public StageLayout getStageView() {
return mStage;
}
}
@@ -15,12 +15,16 @@
package com.hippo.ehviewer.ui.fragment;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -33,12 +37,15 @@ import com.hippo.ehviewer.R;
import com.hippo.ehviewer.data.GalleryListUrlBuilder;
import com.hippo.ehviewer.widget.AdvanceSearchTable;
import com.hippo.ehviewer.widget.CategoryTable;
import com.hippo.util.Log;
import com.hippo.util.UiUtils;
import com.hippo.util.ViewUtils;
import com.hippo.widget.PrefixEditText;
public class SearchFragment extends Fragment implements CompoundButton.OnCheckedChangeListener {
private static final String VIEW_STATE_TAG = "android:view_state";
private static final int SEARCH_TYPE_NORMAL = 0;
private static final int SEARCH_TYPE_TAG = 1;
private static final int SEARCH_TYPE_IMAGE = 2;
@@ -59,6 +66,7 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
private OnSearchListener mOnSearchListener;
private View mRootView;
private RecyclerView mContainer;
private View mNormalView;
private CategoryTable mTableCategory;
@@ -75,11 +83,24 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
mOnSearchListener = listener;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null && mRootView != null) {
SparseArray<Parcelable> savedStates = savedInstanceState.getSparseParcelableArray(VIEW_STATE_TAG);
if (savedStates != null) {
mRootView.restoreHierarchyState(savedStates);
}
}
}
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
mActivity = getActivity();
View mRootView = inflater.inflate(R.layout.fragment_search, container, false);
mRootView = inflater.inflate(R.layout.fragment_search, container, false);
mContainer = (RecyclerView) mRootView.findViewById(R.id.search_container);
@@ -92,6 +113,13 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
return mRootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
mRootView = null;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView == mCheckSpecifyAuthor) {
@@ -153,6 +181,9 @@ public class SearchFragment extends Fragment implements CompoundButton.OnChecked
@Override
public SearchHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d("TAG", "sdsd", new Exception("onCreateViewHolder"));
View view = mInflater.inflate(R.layout.search_category, parent, false);
ViewCompat.setElevation(view, UiUtils.dp2pix(4)); // TODO
@@ -15,6 +15,7 @@
package com.hippo.ehviewer.ui.scene;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
@@ -62,6 +63,16 @@ public class GalleryListScene extends Scene implements SearchFragment.OnSearchLi
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
public class GalleryListPagerAdapter extends FragmentPagerAdapter {
public GalleryListPagerAdapter(FragmentManager fm) {
@@ -15,7 +15,10 @@
package com.hippo.scene;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.FragmentManager;
import android.util.SparseArray;
import android.view.View;
import android.widget.FrameLayout;
@@ -111,6 +114,20 @@ public abstract class Scene {
finish();
}
protected void onSaveInstanceState(Bundle outState) {
SparseArray<Parcelable> states = new SparseArray<>();
mRootView.saveHierarchyState(states);
outState.putSparseParcelableArray(Integer.toHexString(hashCode()), states);
}
protected void onRestoreInstanceState(Bundle savedInstanceState) {
SparseArray<Parcelable> savedStates
= savedInstanceState.getSparseParcelableArray(Integer.toHexString(hashCode()));
if (savedStates != null) {
mRootView.restoreHierarchyState(savedStates);
}
}
/**
* Return the FragmentManager for interacting with fragments associated
* with StageActivity.
@@ -15,7 +15,7 @@
package com.hippo.scene;
import android.widget.FrameLayout;
import android.os.Bundle;
import com.hippo.ehviewer.ui.AbsActionBarActivity;
@@ -30,7 +30,7 @@ public abstract class StageActivity extends AbsActionBarActivity {
private Scene mRetainedScene = null;
public abstract FrameLayout getStageView();
public abstract StageLayout getStageView();
private void pushScene(Class sceneClass) {
Scene scene = null;
@@ -155,6 +155,30 @@ public abstract class StageActivity extends AbsActionBarActivity {
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
for (Scene scene : mSceneStack) {
scene.onSaveInstanceState(outState);
}
if (mCurrentScene != null) {
mCurrentScene.onSaveInstanceState(outState);
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
for (Scene scene : mSceneStack) {
scene.onRestoreInstanceState(savedInstanceState);
}
if (mCurrentScene != null) {
mCurrentScene.onRestoreInstanceState(savedInstanceState);
}
}
interface SceneAction {
public void doAction();
}
@@ -0,0 +1,54 @@
/*
* Copyright (C) 2015 Hippo Seven
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hippo.scene;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.widget.FrameLayout;
public class StageLayout extends FrameLayout {
public StageLayout(Context context) {
super(context);
}
public StageLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StageLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public StageLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {
// Do nothing
}
@Override
protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
// Do nothing
}
}
@@ -18,6 +18,8 @@ package com.hippo.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
@@ -28,6 +30,9 @@ import com.nineoldandroids.animation.ObjectAnimator;
public class CheckTextView extends TextView implements OnClickListener, Hotspotable {
private static final String STATE_KEY_SUPER = "super";
private static final String STATE_KEY_CHECKED = "checked";
private static final int MASK = 0x8a000000;
private static final long ANIMATION_DURATION = 150;
@@ -115,4 +120,21 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota
return mChecked;
}
@Override
public Parcelable onSaveInstanceState() {
final Bundle state = new Bundle();
state.putParcelable(STATE_KEY_SUPER, super.onSaveInstanceState());
state.putBoolean(STATE_KEY_CHECKED, mChecked);
return state;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
if (state instanceof Bundle) {
final Bundle savedState = (Bundle) state;
super.onRestoreInstanceState(savedState.getParcelable(STATE_KEY_SUPER));
mChecked = savedState.getBoolean(STATE_KEY_CHECKED);
}
}
}