Update
This commit is contained in:
1 parent
ae7c8199bf
commit
4fccbefdd2
8 files changed
+130
-219
No files matched your search
@@ -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 {
|
||||
}
|
||||
@@ -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<Parcelable> 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);
|
||||
}
|
||||
}
|
||||
@@ -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<Parcelable> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<Parcelable> states = new SparseArray<>();
|
||||
mSceneView.saveHierarchyState(states);
|
||||
outState.putSparseParcelableArray(getStateKey(), states);
|
||||
}
|
||||
void saveInstanceState(Bundle outState) {
|
||||
SparseArray<Parcelable> states = new SparseArray<>();
|
||||
onSaveInstanceState(states);
|
||||
outState.putSparseParcelableArray(getStateKey(), states);
|
||||
}
|
||||
|
||||
protected void onRestoreInstanceState(@NotNull Bundle savedInstanceState) {
|
||||
void restoreInstanceState(@NotNull Bundle savedInstanceState) {
|
||||
if (mSceneView != null) {
|
||||
SparseArray<Parcelable> savedStates
|
||||
= savedInstanceState.getSparseParcelableArray(getStateKey());
|
||||
if (savedStates != null) {
|
||||
mSceneView.restoreHierarchyState(savedStates);
|
||||
onRestoreInstanceState(savedStates);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void onSaveInstanceState(@NotNull SparseArray<Parcelable> outState) {
|
||||
if (mSceneView != null) {
|
||||
mSceneView.saveHierarchyState(outState);
|
||||
}
|
||||
}
|
||||
|
||||
protected void onRestoreInstanceState(@NotNull SparseArray<Parcelable> savedStates) {
|
||||
if (mSceneView != null) {
|
||||
mSceneView.restoreHierarchyState(savedStates);
|
||||
}
|
||||
}
|
||||
|
||||
public void startActivityForResult(Intent intent, ActivityResultListener listener) {
|
||||
getStageActivity().startActivityForResult(intent, listener);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user