From 24a64c23dc567e757345dbf84c3de6671d76b15a Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 26 Jan 2016 19:54:26 +0800 Subject: [PATCH] Improve GalleryListScene --- app/src/main/AndroidManifest.xml | 5 +- .../com/hippo/ehviewer/client/EhUtils.java | 12 ++ .../ehviewer/client/data/ListUrlBuilder.java | 1 + .../com/hippo/ehviewer/ui/MainActivity.java | 14 +- .../ehviewer/ui/scene/GalleryListScene.java | 195 +++++++++++++++--- .../hippo/ehviewer/ui/scene/LoginScene.java | 7 + .../com/hippo/ehviewer/widget/SearchBar.java | 11 +- .../hippo/ehviewer/widget/SearchLayout.java | 40 +++- .../java/com/hippo/scene/SceneFragment.java | 17 ++ .../java/com/hippo/scene/StageActivity.java | 12 +- app/src/main/res/drawable/ic_magnify_dark.xml | 32 +++ .../main/res/layout/scene_gallery_list.xml | 10 + app/src/main/res/menu/nav_drawer_main.xml | 5 + app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/strings.xml | 5 + conaco | 2 +- yorozuya | 2 +- 17 files changed, 326 insertions(+), 46 deletions(-) create mode 100644 app/src/main/res/drawable/ic_magnify_dark.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 01fe1c102..2ac6ea616 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,9 +32,8 @@ + android:launchMode="singleTask"> @@ -42,9 +41,7 @@ - - diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java index bf2fe6e31..6fbd985cb 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java @@ -127,4 +127,16 @@ public class EhUtils { return gi.title; } } + + public static String getSpecifyUploaderKeyword(String query) { + return "uploader:\"" + query + "\""; + } + + public static String getKeywordFromSpecifyUploader(String query) { + if (query.startsWith("uploader:\"") && query.endsWith("\"") && query.length() > 11) { + return query.substring(10, query.length() - 1); + } else { + return query; + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java index af2e54e85..7122a82f2 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.java @@ -242,6 +242,7 @@ public class ListUrlBuilder implements Cloneable, Parcelable { public ListUrlBuilder() {} + @SuppressWarnings("WrongConstant") protected ListUrlBuilder(Parcel in) { mMode = in.readInt(); mPageIndex = in.readInt(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index cac334af3..253d51a90 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -75,7 +75,11 @@ public final class MainActivity extends StageActivity } public void setNavCheckedItem(@IdRes int resId) { - mNavView.setCheckedItem(resId); + if (resId == 0) { + mNavView.setCheckedItem(R.id.nav_stub); + } else { + mNavView.setCheckedItem(resId); + } } private void onInit() { @@ -108,7 +112,9 @@ public final class MainActivity extends StageActivity int id = item.getItemId(); if (id == R.id.nav_homepage) { - + Bundle args = new Bundle(); + args.putString(GalleryListScene.KEY_ACTION, GalleryListScene.ACTION_HOMEPAGE); + startScene(GalleryListScene.class, args); } else if (id == R.id.nav_whats_hot) { } else if (id == R.id.nav_favourite) { @@ -121,6 +127,10 @@ public final class MainActivity extends StageActivity } + if (id != R.id.nav_stub) { + mDrawerLayout.closeDrawers(); + } + return true; } } 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 ef963422e..7ea131aa8 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 @@ -22,18 +22,23 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.design.widget.FloatingActionButton; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Spannable; import android.text.SpannableStringBuilder; +import android.text.TextUtils; import android.text.style.ImageSpan; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.widget.TextView; +import android.widget.Toast; import com.hippo.anani.SimpleAnimatorListener; import com.hippo.drawable.AddDeleteDrawable; @@ -62,14 +67,24 @@ import com.hippo.widget.LoadImageView; import com.hippo.widget.OffsetLayout; import com.hippo.yorozuya.MathUtils; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + public final class GalleryListScene extends BaseScene implements EasyRecyclerView.OnItemClickListener, SearchBar.Helper, SearchBar.OnStateChangeListener, FastScroller.OnDragHandlerListener, - SearchLayout.Helper { + SearchLayout.Helper, View.OnClickListener { + + @IntDef({STATE_NORMAL, STATE_SIMPLE_SEARCH, STATE_SEARCH, STATE_SEARCH_SHOW_LIST}) + @Retention(RetentionPolicy.SOURCE) + private @interface State {} + + private static final int BACK_PRESSED_INTERVAL = 2000; public final static String KEY_ACTION = "action"; public final static String ACTION_HOMEPAGE = "action_homepage"; public final static String ACTION_WHATS_HOT = "action_whats_hot"; + public final static String ACTION_SEARCH = "action_search"; public final static String KEY_LIST_URL_BUILDER = "list_url_builder"; @@ -87,6 +102,7 @@ public final class GalleryListScene extends BaseScene private EasyRecyclerView mRecyclerView; private SearchLayout mSearchLayout; private SearchBar mSearchBar; + private FloatingActionButton mFab; private ViewTransition mViewTransition; @@ -99,16 +115,47 @@ public final class GalleryListScene extends BaseScene private SearchBarMoveHelper mSearchBarMoveHelper; private ListUrlBuilder mUrlBuilder; + @State private int mState = STATE_NORMAL; + // Double click back exit + private long mPressBackTime = 0; + + private Animator.AnimatorListener mFabAnimatorListener = null; + @Override public int getLaunchMode() { return LAUNCH_MODE_SINGLE_TOP; } + @Override + public int getSoftInputMode() { + return WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + } + + private void handleArgs(Bundle args) { + if (args == null) { + return; + } + + String action = args.getString(KEY_ACTION); + if (ACTION_HOMEPAGE.equals(action)) { + mUrlBuilder.reset(); + } else if (ACTION_WHATS_HOT.equals(action)) { + mUrlBuilder.setMode(ListUrlBuilder.MODE_WHATS_HOT); + } else if (ACTION_SEARCH.equals(action)) { + mUrlBuilder.reset(); + // TODO + } + } + @Override public void onNewArguments(@NonNull Bundle args) { - // TODO + handleArgs(args); + onUpdateUrlBuilder(); + mHelper.refresh(); + setState(STATE_NORMAL); } @Override @@ -124,17 +171,7 @@ public final class GalleryListScene extends BaseScene public void onInit() { mUrlBuilder = new ListUrlBuilder(); - - Bundle args = getArguments(); - if (args != null) { - String action = args.getString(KEY_ACTION); - if (ACTION_HOMEPAGE.equals(action)) { - setNavCheckedItem(R.id.nav_homepage); - } else if (ACTION_WHATS_HOT.equals(action)) { - setNavCheckedItem(R.id.nav_whats_hot); - mUrlBuilder.setMode(ListUrlBuilder.MODE_WHATS_HOT); - } - } + handleArgs(getArguments()); } private void setSearchBarHint(Context context, SearchBar searchBar) { @@ -150,18 +187,40 @@ public final class GalleryListScene extends BaseScene searchBar.setEditTextHint(ssb); } - private void updateSearchBar() { + // Update search bar title, drawer checked item + private void onUpdateUrlBuilder() { ListUrlBuilder builder = mUrlBuilder; - SearchBar sb = mSearchBar; Resources resources = getResources(); - switch (builder.getMode()) { - case ListUrlBuilder.MODE_NORMAL: - if (EhUtils.NONE ==builder.getCategory()) { - sb.setTitle(resources.getString(R.string.app_name)); - } - break; - // TODO + String keyword = builder.getKeyword(); + int category = builder.getCategory(); + + String title; + if (ListUrlBuilder.MODE_NORMAL == builder.getMode() && + EhUtils.NONE == category && + TextUtils.isEmpty(keyword)) { + title = resources.getString(R.string.app_name); + } else if (ListUrlBuilder.MODE_WHATS_HOT == builder.getMode()) { + title = resources.getString(R.string.whats_hot); + } else if (!TextUtils.isEmpty(keyword)) { + title = keyword; + } else if (MathUtils.hammingWeight(category) == 1) { + title = EhUtils.getCategory(category); + } else { + title = resources.getString(R.string.search); } + mSearchBar.setTitle(title); + + int checkedItemId; + if (ListUrlBuilder.MODE_NORMAL == builder.getMode() && + EhUtils.NONE == category && + TextUtils.isEmpty(keyword)) { + checkedItemId = R.id.nav_homepage; + } else if (ListUrlBuilder.MODE_WHATS_HOT == builder.getMode()) { + checkedItemId = R.id.nav_whats_hot; + } else { + checkedItemId = 0; + } + setNavCheckedItem(checkedItemId); } @Nullable @@ -177,6 +236,7 @@ public final class GalleryListScene extends BaseScene mRecyclerView = mContentLayout.getRecyclerView(); mSearchLayout = (SearchLayout) mSearchBarLayout.findViewById(R.id.search_layout); mSearchBar = (SearchBar) mSearchBarLayout.findViewById(R.id.search_bar); + mFab = (FloatingActionButton) mSearchBarLayout.findViewById(R.id.fab); mViewTransition = new ViewTransition(mContentLayout, mSearchLayout); @@ -206,15 +266,19 @@ public final class GalleryListScene extends BaseScene mSearchBar.setHelper(this); mSearchBar.setOnStateChangeListener(this); setSearchBarHint(getContext(), mSearchBar); - updateSearchBar(); mSearchLayout.setHelper(this); + Drawable searchDrawable = VectorDrawable.create(getContext(), R.drawable.ic_magnify_dark); + mFab.setImageDrawable(searchDrawable); + mFab.setOnClickListener(this); + mSearchBarMoveHelper = new SearchBarMoveHelper(); mRecyclerView.addOnScrollListener(mSearchBarMoveHelper); mSearchLayout.addOnScrollListener(mSearchBarMoveHelper); // Refresh + onUpdateUrlBuilder(); mHelper.firstRefresh(); return view; @@ -232,16 +296,78 @@ public final class GalleryListScene extends BaseScene mUrlBuilder = savedInstanceState.getParcelable(KEY_LIST_URL_BUILDER); } + @Override + public void onClick(View v) { + if (mFab == v) { + if (mState != STATE_NORMAL) { + mSearchBar.applySearch(); + } + } + } + + private boolean checkDoubleClickExit() { + if (getStackIndex() != 0) { + return false; + } + + long time = System.currentTimeMillis(); + if (time - mPressBackTime > BACK_PRESSED_INTERVAL) { + // It is the last scene + mPressBackTime = time; + Toast.makeText(getContext(), R.string.press_twice_exit, Toast.LENGTH_SHORT).show(); + return true; + } else { + return false; + } + } + + @Override + public boolean onBackPressed() { + switch (mState) { + default: + case STATE_NORMAL: + return checkDoubleClickExit(); + case STATE_SIMPLE_SEARCH: + setState(STATE_NORMAL); + return true; + case STATE_SEARCH: + setState(STATE_NORMAL); + return true; + case STATE_SEARCH_SHOW_LIST: + setState(STATE_SEARCH); + return true; + } + } + @Override public boolean onItemClick(EasyRecyclerView parent, View view, int position, long id) { return false; } - private void setState(int state) { + private void showFab() { + mFab.setVisibility(View.VISIBLE); + mFab.setScaleX(0.0f); + mFab.setScaleY(0.0f); + mFab.animate().scaleX(1.0f).scaleY(1.0f).setListener(null).setDuration(ANIMATE_TIME).start(); + } + + private void hideFab() { + if (mFabAnimatorListener == null) { + mFabAnimatorListener = new SimpleAnimatorListener() { + @Override + public void onAnimationEnd(Animator animation) { + mFab.setVisibility(View.GONE); + } + }; + } + mFab.animate().scaleX(0.0f).scaleY(0.0f).setListener(mFabAnimatorListener).setDuration(ANIMATE_TIME).start(); + } + + private void setState(@State int state) { setState(state, true); } - private void setState(int state, boolean animation) { + private void setState(@State int state, boolean animation) { if (mState != state) { int oldState = mState; mState = state; @@ -252,18 +378,21 @@ public final class GalleryListScene extends BaseScene case STATE_SIMPLE_SEARCH: mSearchBar.setState(SearchBar.STATE_SEARCH_LIST, animation); mSearchBarMoveHelper.returnSearchBarPosition(); + showFab(); break; case STATE_SEARCH: mViewTransition.showView(1, animation); mSearchLayout.scrollSearchContainerToTop(); mSearchBar.setState(SearchBar.STATE_SEARCH, animation); mSearchBarMoveHelper.returnSearchBarPosition(); + showFab(); break; case STATE_SEARCH_SHOW_LIST: mViewTransition.showView(1, animation); mSearchLayout.scrollSearchContainerToTop(); mSearchBar.setState(SearchBar.STATE_SEARCH_LIST, animation); mSearchBarMoveHelper.returnSearchBarPosition(); + showFab(); break; } break; @@ -272,6 +401,7 @@ public final class GalleryListScene extends BaseScene case STATE_NORMAL: mSearchBar.setState(SearchBar.STATE_NORMAL, animation); mSearchBarMoveHelper.returnSearchBarPosition(); + hideFab(); break; case STATE_SEARCH: mViewTransition.showView(1, animation); @@ -293,6 +423,7 @@ public final class GalleryListScene extends BaseScene mViewTransition.showView(0, animation); mSearchBar.setState(SearchBar.STATE_NORMAL, animation); mSearchBarMoveHelper.returnSearchBarPosition(); + hideFab(); break; case STATE_SIMPLE_SEARCH: mViewTransition.showView(0, animation); @@ -311,6 +442,7 @@ public final class GalleryListScene extends BaseScene mViewTransition.showView(0, animation); mSearchBar.setState(SearchBar.STATE_NORMAL, animation); mSearchBarMoveHelper.returnSearchBarPosition(); + hideFab(); break; case STATE_SIMPLE_SEARCH: mViewTransition.showView(0, animation); @@ -362,12 +494,19 @@ public final class GalleryListScene extends BaseScene @Override public void onApplySearch(String query) { - + if (mState == STATE_SEARCH || mState == STATE_SEARCH_SHOW_LIST) { + mSearchLayout.formatListUrlBuilder(mUrlBuilder, query); + } else { + mUrlBuilder.reset(); + } + onUpdateUrlBuilder(); + mHelper.refresh(); + setState(STATE_NORMAL); } @Override public void onSearchEditTextBackPressed() { - setState(STATE_NORMAL); + onBackPressed(); } @Override @@ -678,11 +817,13 @@ public final class GalleryListScene extends BaseScene public void onSuccess(GalleryListParser.Result result) { mHelper.setPages(mTaskId, result.pages); mHelper.onGetPageData(mTaskId, result.galleryInfos); + mSearchBarMoveHelper.returnSearchBarPosition(); } @Override public void onFailure(Exception e) { mHelper.onGetExpection(mTaskId, e); + mSearchBarMoveHelper.returnSearchBarPosition(); } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java index 3b6847d7c..f5542ab36 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java @@ -27,6 +27,7 @@ import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; @@ -61,6 +62,12 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi private EhCookieStore mCookieStore; private EhRequest mSignInRequest; + @Override + public int getSoftInputMode() { + return WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java b/app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java index 5a7782c1c..3f8340b14 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java @@ -207,6 +207,14 @@ public class SearchBar extends CardView implements View.OnClickListener, mEditText.setLayoutParams(lp); } + public void applySearch() { + String query = mEditText.getText().toString().trim(); + // Put it into db + mSearchDatabase.addQuery(query); + // Callback + mHelper.onApplySearch(query); + } + @Override public void onClick(View v) { if (v == mTitleTextView) { @@ -222,8 +230,7 @@ public class SearchBar extends CardView implements View.OnClickListener, public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (v == mEditText) { if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_NULL) { - String query = mEditText.getText().toString(); - mHelper.onApplySearch(query); + applySearch(); return true; } } diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java b/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java index b655cd59b..13676469b 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.widget; -import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -41,6 +40,9 @@ import android.widget.TextView; import com.hippo.easyrecyclerview.EasyRecyclerView; import com.hippo.easyrecyclerview.MarginItemDecoration; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.client.EhUrl; +import com.hippo.ehviewer.client.EhUtils; +import com.hippo.ehviewer.client.data.ListUrlBuilder; import com.hippo.rippleold.RippleSalon; import com.hippo.widget.SimpleImageView; import com.hippo.yorozuya.ViewUtils; @@ -95,8 +97,6 @@ public class SearchLayout extends EasyRecyclerView implements CompoundButton.OnC private AdvanceSearchTable mTableAdvanceSearch; private View mActionView; - private TextView mAction1; - private TextView mAction2; private LinearLayoutManager mLayoutManager; private SearchAdapter mAdapter; @@ -113,7 +113,6 @@ public class SearchLayout extends EasyRecyclerView implements CompoundButton.OnC init(context); } - @SuppressLint("InflateParams") private void init(Context context) { Resources resources = context.getResources(); mInflater = LayoutInflater.from(context); @@ -149,13 +148,11 @@ public class SearchLayout extends EasyRecyclerView implements CompoundButton.OnC mEnableAdvanceSwitch.setSwitchPadding(resources.getDimensionPixelSize(R.dimen.switch_padding)); // Create advance view - mAdvanceView = mInflater.inflate(R.layout.search_advance, null); + mAdvanceView = mInflater.inflate(R.layout.search_advance, frameLayout, false); mTableAdvanceSearch = (AdvanceSearchTable) mAdvanceView.findViewById(R.id.search_advance_search_table); // Create action view - mActionView = mInflater.inflate(R.layout.search_action, null); - mAction1 = (TextView) mActionView.findViewById(R.id.search_action_1); - mAction2 = (TextView) mActionView.findViewById(R.id.search_action_2); + mActionView = new View(context);// TODO mInflater.inflate(R.layout.search_action, frameLayout, false); } public void setHelper(Helper helper) { @@ -221,6 +218,33 @@ public class SearchLayout extends EasyRecyclerView implements CompoundButton.OnC } } + // TODO image search + public void formatListUrlBuilder(ListUrlBuilder urlBuilder, String query) { + urlBuilder.reset(); + + int nsMode = mNormalSearchMode.getCheckedRadioButtonId(); + switch (nsMode) { + default: + case R.id.search_normal_search: + case R.id.search_specify_uploader: + if (nsMode == R.id.search_specify_uploader) { + urlBuilder.setKeyword(EhUtils.getSpecifyUploaderKeyword(query)); + } else { + urlBuilder.setKeyword(query); + } + urlBuilder.setCategory(mCategoryTable.getCategory()); + if (mEnableAdvance) { + urlBuilder.setAdvanceSearch(mTableAdvanceSearch.getAdvanceSearch()); + urlBuilder.setMinRating(mTableAdvanceSearch.getMinRating()); + } + break; + case R.id.search_specify_tag: + urlBuilder.setMode(ListUrlBuilder.MODE_TAG); + urlBuilder.setKeyword(query); + break; + } + } + public void setSearchMode(@SearchMode int searchMode, boolean animation) { if (mSearchMode != searchMode) { int oldItemCount = mAdapter.getItemCount(); diff --git a/app/src/main/java/com/hippo/scene/SceneFragment.java b/app/src/main/java/com/hippo/scene/SceneFragment.java index c3dfcf298..ff2ff1eb7 100644 --- a/app/src/main/java/com/hippo/scene/SceneFragment.java +++ b/app/src/main/java/com/hippo/scene/SceneFragment.java @@ -39,6 +39,11 @@ public class SceneFragment extends Fragment { return LAUNCH_MODE_STANDARD; } + public int getSoftInputMode() { + return 0; // WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED | + // WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED + } + public void onNewArguments(@NonNull Bundle args) {} public void startScene(Class clazz) { @@ -66,6 +71,18 @@ public class SceneFragment extends Fragment { } } + /** + * @return negative for error + */ + public int getStackIndex() { + FragmentActivity activity = getActivity(); + if (activity instanceof StageActivity) { + return ((StageActivity) activity).getStackIndex(this); + } else { + return -1; + } + } + /** * @return true for handle this back pressed action */ diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java index 370c84b8c..f87f68b7c 100644 --- a/app/src/main/java/com/hippo/scene/StageActivity.java +++ b/app/src/main/java/com/hippo/scene/StageActivity.java @@ -100,13 +100,23 @@ public abstract class StageActivity extends AppCompatActivity { } transaction.add(getContainerViewId(), scene, newTag); transaction.commit(); + + // Update SoftInputMode + getWindow().setSoftInputMode(scene.getSoftInputMode()); + } + + int getStackIndex(SceneFragment scene) { + return getStackIndex(scene.getTag()); + } + + int getStackIndex(String tag) { + return Collections.binarySearch(mSceneTagList, tag); } public void finishScene(SceneFragment scene) { finishScene(scene.getTag()); } - private void finishScene(String tag) { FragmentManager fragmentManager = getSupportFragmentManager(); diff --git a/app/src/main/res/drawable/ic_magnify_dark.xml b/app/src/main/res/drawable/ic_magnify_dark.xml new file mode 100644 index 000000000..8e798a8e8 --- /dev/null +++ b/app/src/main/res/drawable/ic_magnify_dark.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/app/src/main/res/layout/scene_gallery_list.xml b/app/src/main/res/layout/scene_gallery_list.xml index 17154c1dc..f36cf0bb0 100644 --- a/app/src/main/res/layout/scene_gallery_list.xml +++ b/app/src/main/res/layout/scene_gallery_list.xml @@ -45,4 +45,14 @@ android:layout_marginTop="8dp" app:forceNoElevation="true"/> + + diff --git a/app/src/main/res/menu/nav_drawer_main.xml b/app/src/main/res/menu/nav_drawer_main.xml index 9551570ef..7d28561d9 100644 --- a/app/src/main/res/menu/nav_drawer_main.xml +++ b/app/src/main/res/menu/nav_drawer_main.xml @@ -48,6 +48,11 @@ android:title="@string/settings" android:icon="@drawable/ic_settings_x24"/> + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 703c9f5bd..4ff0f19fc 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -68,4 +68,6 @@ 8dp + 16dp + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 296220b75..3c67723b5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -37,6 +37,7 @@ History Download Settings + Stub Username Password @@ -87,10 +88,14 @@ Skip signing in Sign in failed. But perhaps it is a mistake due to website update. Do you want to skip signing in? + Press twice to exit + Search ExHentai.org The World is Big and Pandas sit alone + Search + Normal Search Advance Options Image Search diff --git a/conaco b/conaco index 8599d0591..a6a291f16 160000 --- a/conaco +++ b/conaco @@ -1 +1 @@ -Subproject commit 8599d0591bba7992c5bca041d7436e421791e98a +Subproject commit a6a291f16e547709b25155d08d5d1852edd08e5a diff --git a/yorozuya b/yorozuya index 5ddba6178..8a8ca50a3 160000 --- a/yorozuya +++ b/yorozuya @@ -1 +1 @@ -Subproject commit 5ddba61782827e742732ea627bca18175179da63 +Subproject commit 8a8ca50a367ddad56de07eeb3a34d77293c12f8f