diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/GalleryListFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/GalleryListFragment.java deleted file mode 100644 index 113f996a4..000000000 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/GalleryListFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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.ehviewer.ui.fragment; - -import android.support.v4.app.Fragment; - -public class GalleryListFragment extends Fragment { -} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/SearchFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/SearchFragment.java deleted file mode 100644 index 428233457..000000000 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/SearchFragment.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * 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.ehviewer.ui.fragment; - -import android.app.Activity; -import android.content.Intent; -import android.database.Cursor; -import android.net.Uri; -import android.os.Bundle; -import android.os.Parcelable; -import android.provider.MediaStore; -import android.support.v4.app.Fragment; -import android.util.SparseArray; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.hippo.ehviewer.R; -import com.hippo.ehviewer.data.ListUrlBuilder; -import com.hippo.ehviewer.ui.ContentActivity; -import com.hippo.ehviewer.widget.SearchLayout; -import com.hippo.scene.Scene; - -public class SearchFragment extends Fragment implements SearchLayout.SearhLayoutHelper, - Scene.ActivityResultListener { - - private static final String VIEW_STATE_TAG = "android:view_state"; - - private ContentActivity mActivity; - - private View mRootView; - private SearchLayout mSearchLayout; - - private static Scene sScene; - private static OnSearchListener sOnSearchListener; - - - public static void setScene(Scene scene) { - sScene = scene; - } - - public static void setOnSearchListener(OnSearchListener listener) { - sOnSearchListener = listener; - } - - @Override - public void onViewStateRestored(Bundle savedInstanceState) { - super.onViewStateRestored(savedInstanceState); - - if (savedInstanceState != null && mRootView != null) { - SparseArray savedStates = savedInstanceState.getSparseParcelableArray(VIEW_STATE_TAG); - if (savedStates != null) { - mRootView.restoreHierarchyState(savedStates); - } - } - } - - public View onCreateView(LayoutInflater inflater,ViewGroup container, - Bundle savedInstanceState) { - mActivity = (ContentActivity) getActivity(); - - mRootView = inflater.inflate(R.layout.fragment_search, container, false); - mSearchLayout = (SearchLayout) mRootView.findViewById(R.id.search_layout); - - mSearchLayout.setHelper(this); - - // Set fit padding bottom - int fixPaddingBottom = mActivity.getFitPaddingBottom(); - if (fixPaddingBottom != -1) { - mSearchLayout.setFitPaddingBottom(mActivity.getFitPaddingBottom()); - } - - return mRootView; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - - mRootView = null; - } - - @Override - public void onRequestSelectImage() { - Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); - sScene.startActivityForResult(intent, this); - } - - @Override - public void onRequestSearch(ListUrlBuilder lub) { - if (sOnSearchListener != null) { - sOnSearchListener.onRequestSearch(lub); - } - } - - @Override - public void onGetResult(int resultCode, Intent data) { - if (resultCode == Activity.RESULT_OK && data != null) { - Uri selectedImage = data.getData(); - String[] filePathColumn = { MediaStore.Images.Media.DATA }; - - Cursor cursor = mActivity.getContentResolver().query(selectedImage, filePathColumn, null, null, null); - cursor.moveToFirst(); - - int columnIndex = cursor.getColumnIndex(filePathColumn[0]); - String imagePath = cursor.getString(columnIndex); - cursor.close(); - - if (imagePath != null) { - mSearchLayout.onSelectImage(imagePath); - } - } - } - - public interface OnSearchListener { - public void onRequestSearch(ListUrlBuilder lub); - } -} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index 5feb07a2f..12bc2b3a3 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -15,33 +15,52 @@ package com.hippo.ehviewer.ui.scene; +import android.app.Activity; +import android.content.Intent; import android.content.res.Resources; +import android.database.Cursor; +import android.net.Uri; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; +import android.os.Parcelable; +import android.provider.MediaStore; +import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; +import android.util.SparseArray; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.data.ListUrlBuilder; -import com.hippo.ehviewer.ui.fragment.GalleryListFragment; -import com.hippo.ehviewer.ui.fragment.SearchFragment; +import com.hippo.ehviewer.data.UnsupportedSearch; +import com.hippo.ehviewer.widget.SearchLayout; import com.hippo.scene.Scene; import com.hippo.scene.StageActivity; +import com.hippo.util.Log; import com.hippo.widget.Appbar; import org.jetbrains.annotations.NotNull; -public class GalleryListScene extends Scene implements SearchFragment.OnSearchListener { +public class GalleryListScene extends Scene implements SearchLayout.SearhLayoutHelper, + Scene.ActivityResultListener { + + private final static int PAGE_INDEX_SEARCH = 0; + private final static int PAGE_INDEX_LIST = 1; + private final static int PAGE_NUMBER = 2; private StageActivity mActivity; private Resources mResources; + private View mSearchView; + private SearchLayout mSearchLayout; + + private View mListView; + private Appbar mAppbar; private ViewPager mViewPager; - private GalleryListPagerAdapter mAdapter; + private PagerAdapter mPagerAdapter; @Override public void onCreate(Bundle savedInstanceState) { @@ -51,71 +70,107 @@ public class GalleryListScene extends Scene implements SearchFragment.OnSearchLi @Override public View onCreateSceneView(Bundle savedInstanceState) { - View sceneView = mActivity.getLayoutInflater().inflate(R.layout.scene_gallery_list, null); + LayoutInflater inflater = mActivity.getLayoutInflater(); + + // Search View + mSearchView = inflater.inflate(R.layout.fragment_search, null); + mSearchLayout = (SearchLayout) mSearchView.findViewById(R.id.search_layout); + + mSearchLayout.setHelper(this); + + // List View + // TODO + mListView = new View(mActivity); + + // Main View + View sceneView = inflater.inflate(R.layout.scene_gallery_list, null); mAppbar = (Appbar) sceneView.findViewById(R.id.appbar); mViewPager = (ViewPager) sceneView.findViewById(R.id.viewPager); - mAdapter = new GalleryListPagerAdapter(getSupportFragmentManager()); - mViewPager.setAdapter(mAdapter); - mAppbar.setTitle(mResources.getString(R.string.app_name)); - SearchFragment.setScene(this); - SearchFragment.setOnSearchListener(this); + mPagerAdapter = new SimplePagerAdapter(); + mViewPager.setAdapter(mPagerAdapter); + mViewPager.setCurrentItem(PAGE_INDEX_LIST); return sceneView; } @Override - public void onResume() { - // Empty - } + protected void onRestoreInstanceState(@NotNull SparseArray savedStates) { + super.onRestoreInstanceState(savedStates); - @Override - public void onPause() { - } - - @Override - public void onDestroy() { - SearchFragment.setScene(null); - SearchFragment.setOnSearchListener(null); + // mSearchView and mListView may not in hierarchy + mSearchView.restoreHierarchyState(savedStates); + mListView.restoreHierarchyState(savedStates); } @Override public void onRequestSearch(ListUrlBuilder lub) { - + try { + Log.d(lub.build(EhClient.SOURCE_EX)); + } catch (UnsupportedSearch unsupportedSearch) { + unsupportedSearch.printStackTrace(); + } } @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); + public void onRequestSelectImage() { + Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, this); } @Override - protected void onRestoreInstanceState(@NotNull Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - } + public void onGetResult(int resultCode, Intent data) { + if (resultCode == Activity.RESULT_OK && data != null) { + Uri selectedImage = data.getData(); + String[] filePathColumn = { MediaStore.Images.Media.DATA }; - public class GalleryListPagerAdapter extends FragmentPagerAdapter { + Cursor cursor = mActivity.getContentResolver().query(selectedImage, + filePathColumn, null, null, null); + cursor.moveToFirst(); - public GalleryListPagerAdapter(FragmentManager fm) { - super(fm); - } + int columnIndex = cursor.getColumnIndex(filePathColumn[0]); + String imagePath = cursor.getString(columnIndex); + cursor.close(); - @Override - public int getCount() { - return 2; - } - - @Override - public Fragment getItem(int i) { - if (i == 0) { - SearchFragment fragment = new SearchFragment(); - return fragment; - } else { - GalleryListFragment fragment = new GalleryListFragment(); - return fragment; + if (imagePath != null) { + mSearchLayout.onSelectImage(imagePath); } } } + + private class SimplePagerAdapter extends PagerAdapter { + @Override + public int getCount() { + return PAGE_NUMBER; + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup view, int position) { + View v; + switch (position) { + default: + case PAGE_INDEX_SEARCH: + v = mSearchView; + break; + case PAGE_INDEX_LIST: + v = mListView; + break; + } + view.addView(v); + return v; + } + + @Override + public void destroyItem(ViewGroup view, int position, Object object) { + view.removeView((View) object); + } + } + } diff --git a/app/src/main/java/com/hippo/ehviewer/widget/CategoryTable.java b/app/src/main/java/com/hippo/ehviewer/widget/CategoryTable.java index c0fba788c..64e2c130a 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/CategoryTable.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/CategoryTable.java @@ -38,7 +38,6 @@ public class CategoryTable extends TableLayout { private CheckTextView mAsianPorn; private CheckTextView mMisc; - public CategoryTable(Context context) { super(context); init(); @@ -68,7 +67,7 @@ public class CategoryTable extends TableLayout { /** * Set each button checked or not according to category. * - * @param category + * @param category target category */ public void setCategory(int category) { mDoujinshi.setChecked(!Utils.int2boolean(category & EhUtils.DOUJINSHI), false); @@ -85,7 +84,7 @@ public class CategoryTable extends TableLayout { /** * Get category according to button. - * @return + * @return the category of this view */ public int getCategory() { int category = 0; diff --git a/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java b/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java index 1640d7614..dc3759403 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java @@ -51,16 +51,16 @@ public class ContentLayout extends StageLayout { @SuppressWarnings("deprecation") @Override protected boolean fitSystemWindows(@NotNull Rect insets) { - mFitPaddingLeft = insets.left; + mFitPaddingLeft = 0; mFitPaddingTop = 0; - mFitPaddingRight = insets.right; + mFitPaddingRight = 0; mFitPaddingBottom = insets.bottom; if (mOnGetPaddingListener != null) { mOnGetPaddingListener.onGetPadding(mFitPaddingLeft, mFitPaddingTop, mFitPaddingRight, mFitPaddingBottom); } - insets.set(0, insets.top, 0, 0); + insets.set(insets.left, insets.top, insets.right, 0); return super.fitSystemWindows(insets); } diff --git a/app/src/main/java/com/hippo/scene/Scene.java b/app/src/main/java/com/hippo/scene/Scene.java index cc95f7786..3d960452c 100644 --- a/app/src/main/java/com/hippo/scene/Scene.java +++ b/app/src/main/java/com/hippo/scene/Scene.java @@ -24,7 +24,6 @@ import android.view.View; import android.view.ViewParent; import com.hippo.util.AssertUtils; -import com.hippo.util.Log; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -140,8 +139,6 @@ public abstract class Scene { // Add scene view to stage layout void attachToStage() { if (mSceneView != null && !isInStage()) { - - Log.d("doAttachToStage();"); doAttachToStage(); } } @@ -178,24 +175,34 @@ public abstract class Scene { return "scene:" + Integer.toHexString(hashCode()); } - protected void onSaveInstanceState(Bundle outState) { - if (mSceneView != null) { - SparseArray states = new SparseArray<>(); - mSceneView.saveHierarchyState(states); - outState.putSparseParcelableArray(getStateKey(), states); - } + void saveInstanceState(Bundle outState) { + SparseArray states = new SparseArray<>(); + onSaveInstanceState(states); + outState.putSparseParcelableArray(getStateKey(), states); } - protected void onRestoreInstanceState(@NotNull Bundle savedInstanceState) { + void restoreInstanceState(@NotNull Bundle savedInstanceState) { if (mSceneView != null) { SparseArray savedStates = savedInstanceState.getSparseParcelableArray(getStateKey()); if (savedStates != null) { - mSceneView.restoreHierarchyState(savedStates); + onRestoreInstanceState(savedStates); } } } + protected void onSaveInstanceState(@NotNull SparseArray outState) { + if (mSceneView != null) { + mSceneView.saveHierarchyState(outState); + } + } + + protected void onRestoreInstanceState(@NotNull SparseArray savedStates) { + if (mSceneView != null) { + mSceneView.restoreHierarchyState(savedStates); + } + } + public void startActivityForResult(Intent intent, ActivityResultListener listener) { getStageActivity().startActivityForResult(intent, listener); } diff --git a/app/src/main/java/com/hippo/scene/SceneManager.java b/app/src/main/java/com/hippo/scene/SceneManager.java index 75d7d294d..4bcbed698 100644 --- a/app/src/main/java/com/hippo/scene/SceneManager.java +++ b/app/src/main/java/com/hippo/scene/SceneManager.java @@ -105,7 +105,7 @@ class SceneManager { protected void onSaveInstanceState(Bundle outState) { for (Scene scene : mSceneStack) { - scene.onSaveInstanceState(outState); + scene.saveInstanceState(outState); } } @@ -114,7 +114,7 @@ class SceneManager { // Recreate scene.create(savedInstanceState); scene.resume(); - scene.onRestoreInstanceState(savedInstanceState); + scene.restoreInstanceState(savedInstanceState); } } } diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java index b2a16430e..2a47c09cb 100644 --- a/app/src/main/java/com/hippo/scene/StageActivity.java +++ b/app/src/main/java/com/hippo/scene/StageActivity.java @@ -75,11 +75,13 @@ public abstract class StageActivity extends AbsActionBarActivity { * * @param intent the intent for new Activity * @param listener callback + * @return request code */ - public void startActivityForResult(Intent intent, Scene.ActivityResultListener listener) { + public int startActivityForResult(Intent intent, Scene.ActivityResultListener listener) { int id = mActivityResultIdGenerator.nextId(); mActivityResultListenerMap.put(id, listener); startActivityForResult(intent, id); + return id; } @Override