This commit is contained in:
seven332 committed 2015-03-01 01:32:53 +08:00
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);
}
+18 -11
View File
@@ -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