From da5e899afbe46a97c052229339a0237c68bc7c6a Mon Sep 17 00:00:00 2001 From: NekoInverter <7741672-NekoInverter@users.noreply.gitlab.com> Date: Wed, 20 Jan 2021 17:22:06 +0800 Subject: [PATCH] Fix insets bugs --- .../ehviewer/ui/scene/AnalyticsScene.java | 6 +-- .../hippo/ehviewer/ui/scene/BaseScene.java | 29 ++++++------ .../ehviewer/ui/scene/CookieSignInScene.java | 2 +- .../ehviewer/ui/scene/DownloadsScene.java | 33 +++++++++---- .../ehviewer/ui/scene/FavoritesScene.java | 3 +- .../ui/scene/GalleryCommentsScene.java | 17 +++++-- .../ehviewer/ui/scene/GalleryDetailScene.java | 30 +++++++++++- .../ehviewer/ui/scene/GalleryInfoScene.java | 2 +- .../ehviewer/ui/scene/GalleryListScene.java | 12 ++++- .../ui/scene/GalleryPreviewsScene.java | 3 +- .../hippo/ehviewer/ui/scene/HistoryScene.java | 31 +++++++++---- .../hippo/ehviewer/ui/scene/SignInScene.java | 2 +- .../hippo/ehviewer/ui/scene/ToolbarScene.java | 14 +----- .../hippo/ehviewer/ui/scene/WarningScene.java | 2 +- .../java/com/hippo/scene/SceneFragment.java | 15 ++++-- .../java/com/hippo/widget/ContentLayout.java | 4 +- app/src/main/res/layout/scene_analytics.xml | 5 +- .../res/layout/scene_gallery_comments.xml | 46 +++++++++---------- app/src/main/res/layout/scene_login.xml | 3 +- app/src/main/res/layout/scene_select_site.xml | 5 +- app/src/main/res/layout/scene_toolbar.xml | 2 +- app/src/main/res/layout/scene_warning.xml | 5 +- .../main/res/layout/widget_content_layout.xml | 2 - 23 files changed, 172 insertions(+), 101 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/AnalyticsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/AnalyticsScene.java index 617ab9fe5..363c6ad53 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/AnalyticsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/AnalyticsScene.java @@ -77,7 +77,7 @@ public class AnalyticsScene extends SolidScene implements View.OnClickListener { public void onClick(View v) { Context context = getContext(); MainActivity activity = getMainActivity(); - if (null == context) { + if (context == null || activity == null) { return; } @@ -91,9 +91,7 @@ public class AnalyticsScene extends SolidScene implements View.OnClickListener { Settings.putAskAnalytics(false); // Start new scene and finish it self - if (activity != null) { - startSceneForCheckStep(CHECK_STEP_ANALYTICS, getArguments()); - } + startSceneForCheckStep(CHECK_STEP_ANALYTICS, getArguments()); finish(); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java index 88de0f560..17bb3f936 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java @@ -33,6 +33,7 @@ import android.view.ViewGroup; import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.annotation.StringRes; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.FragmentActivity; @@ -199,20 +200,18 @@ public abstract class BaseScene extends SceneFragment { drawerView = null; } - public void setWhiteStatusBar(boolean set) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - View decorView = requireActivity().getWindow().getDecorView(); - int flags = decorView.getSystemUiVisibility(); - if (set && (requireActivity().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_YES) <= 0) { - flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; - } else { - flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; - } - decorView.setSystemUiVisibility(flags); - ((EhDrawerLayout) requireActivity().findViewById(R.id.draw_view)).setStatusBarBackgroundColor(set ? Color.TRANSPARENT : AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); + @RequiresApi(api = Build.VERSION_CODES.M) + public void setLightStatusBar(boolean set) { + View decorView = requireActivity().getWindow().getDecorView(); + int flags = decorView.getSystemUiVisibility(); + if (set && (requireActivity().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_YES) <= 0) { + flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } else { - ((EhDrawerLayout) requireActivity().findViewById(R.id.draw_view)).setStatusBarBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); + flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } + decorView.setSystemUiVisibility(flags); + int color = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q || set ? Color.TRANSPARENT : AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark); + ((EhDrawerLayout) requireActivity().findViewById(R.id.draw_view)).setStatusBarBackgroundColor(color); } public void onDestroyDrawerView() { @@ -220,7 +219,7 @@ public abstract class BaseScene extends SceneFragment { @SuppressLint("RtlHardcoded") @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Update left drawer locked state @@ -235,7 +234,9 @@ public abstract class BaseScene extends SceneFragment { // Hide soft ime AppHelper.hideSoftInput(getActivity()); - setWhiteStatusBar(needWhiteStatusBar()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + setLightStatusBar(needWhiteStatusBar()); + } } @Nullable diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java index ad0c7811b..29efb9b14 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java @@ -155,7 +155,7 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); showSoftInput(mIpbMemberId); } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java index 0d6614181..4c7e11d6c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java @@ -141,6 +141,10 @@ public class DownloadsScene extends ToolbarScene View life cycle ---------------*/ @Nullable + private TextView mTip; + @Nullable + private FastScroller mFastScroller; + @Nullable private EasyRecyclerView mRecyclerView; @Nullable private ViewTransition mViewTransition; @@ -333,10 +337,10 @@ public class DownloadsScene extends ToolbarScene View content = ViewUtils.$$(view, R.id.content); mRecyclerView = (EasyRecyclerView) ViewUtils.$$(content, R.id.recycler_view); - FastScroller fastScroller = (FastScroller) ViewUtils.$$(content, R.id.fast_scroller); + mFastScroller = (FastScroller) ViewUtils.$$(content, R.id.fast_scroller); mFabLayout = (FabLayout) ViewUtils.$$(view, R.id.fab_layout); - TextView tip = (TextView) ViewUtils.$$(view, R.id.tip); - mViewTransition = new ViewTransition(content, tip); + mTip = (TextView) ViewUtils.$$(view, R.id.tip); + mViewTransition = new ViewTransition(content, mTip); Context context = getContext(); AssertUtils.assertNotNull(content); @@ -344,7 +348,7 @@ public class DownloadsScene extends ToolbarScene Drawable drawable = ContextCompat.getDrawable(context, R.drawable.big_download); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); - tip.setCompoundDrawables(null, drawable, null, null); + mTip.setCompoundDrawables(null, drawable, null, null); mAdapter = new DownloadAdapter(); mAdapter.setHasStableIds(true); @@ -377,11 +381,11 @@ public class DownloadsScene extends ToolbarScene mInitPosition = -1; } - fastScroller.attachToRecyclerView(mRecyclerView); + mFastScroller.attachToRecyclerView(mRecyclerView); HandlerDrawable handlerDrawable = new HandlerDrawable(); handlerDrawable.setColor(AttrResources.getAttrColor(context, R.attr.widgetColorThemeAccent)); - fastScroller.setHandlerDrawable(handlerDrawable); - fastScroller.setOnDragHandlerListener(this); + mFastScroller.setHandlerDrawable(handlerDrawable); + mFastScroller.setOnDragHandlerListener(this); mFabLayout.setExpanded(false, false); mFabLayout.setHidePrimaryFab(true); @@ -476,7 +480,7 @@ public class DownloadsScene extends ToolbarScene } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); updateTitle(); setNavigationIcon(new DrawerArrowDrawable(getContext(), Color.WHITE)); @@ -1540,15 +1544,24 @@ public class DownloadsScene extends ToolbarScene @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(insets1.left, 0, insets1.right, 0); View statusBarBackground = v.findViewById(R.id.status_bar_background); statusBarBackground.getLayoutParams().height = insets1.top; statusBarBackground.setBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); if (mRecyclerView != null) { - mRecyclerView.setPadding(mRecyclerView.getPaddingLeft(), mRecyclerView.getPaddingTop(), mRecyclerView.getPaddingRight(), insets1.bottom); + int paddingH = getResources().getDimensionPixelOffset(R.dimen.gallery_list_margin_h); + int paddingV = getResources().getDimensionPixelOffset(R.dimen.gallery_list_margin_v); + mRecyclerView.setPadding(paddingH, paddingV, paddingH, paddingV + insets1.bottom); + } + if (mFastScroller != null) { + mFastScroller.setPadding(mFastScroller.getPaddingLeft(), mFastScroller.getPaddingTop(), mFastScroller.getPaddingRight(), insets1.bottom); + } + if (mTip != null) { + mTip.setPadding(mTip.getPaddingLeft(), mTip.getPaddingTop(), mTip.getPaddingRight(), insets1.bottom); } if (mFabLayout != null) { int corner_fab_margin = getResources().getDimensionPixelOffset(R.dimen.corner_fab_margin); - mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), corner_fab_margin + insets1.right, corner_fab_margin + insets1.bottom); + mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), mFabLayout.getPaddingRight(), corner_fab_margin + insets1.bottom); } return WindowInsetsCompat.CONSUMED; } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index 215c1f19c..407287f64 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -1387,6 +1387,7 @@ public class FavoritesScene extends BaseScene implements @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(insets1.left, 0, insets1.right, 0); if (mSearchBar != null) { int gallery_search_bar_margin_v = getResources().getDimensionPixelOffset(R.dimen.gallery_search_bar_margin_v); FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mSearchBar.getLayoutParams(); @@ -1398,7 +1399,7 @@ public class FavoritesScene extends BaseScene implements } if (mFabLayout != null) { int corner_fab_margin = getResources().getDimensionPixelOffset(R.dimen.corner_fab_margin); - mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), corner_fab_margin + insets1.right, corner_fab_margin + insets1.bottom); + mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), mFabLayout.getPaddingRight(), corner_fab_margin + insets1.bottom); } return WindowInsetsCompat.CONSUMED; } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java index c0d643e4b..d3ab80bc0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java @@ -251,7 +251,17 @@ public final class GalleryCommentsScene extends ToolbarScene @Override public void onEnd(@NonNull WindowInsetsAnimation animation) { - super.onEnd(animation); + startBottomEditPanel = 0; + startBottomFabLayout = 0; + endBottomEditPanel = 0; + endBottomFabLayout = 0; + this.animation = null; + if (mEditPanel != null) { + mEditPanel.setTranslationY(0); + } + if (mFabLayout != null) { + mFabLayout.setTranslationY(0); + } } }); } @@ -332,7 +342,7 @@ public final class GalleryCommentsScene extends ToolbarScene } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setTitle(R.string.gallery_comments); setNavigationIcon(R.drawable.v_arrow_left_dark_x24); @@ -1043,12 +1053,13 @@ public final class GalleryCommentsScene extends ToolbarScene @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(insets1.left, 0, insets1.right, 0); View statusBarBackground = v.findViewById(R.id.status_bar_background); statusBarBackground.getLayoutParams().height = insets1.top; statusBarBackground.setBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); if (mFabLayout != null) { int corner_fab_margin = getResources().getDimensionPixelOffset(R.dimen.corner_fab_margin); - mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), corner_fab_margin + insets1.right, corner_fab_margin + insets1.bottom); + mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), mFabLayout.getPaddingRight(), corner_fab_margin + insets1.bottom); } if (mEditPanel != null) { mEditPanel.setPadding(mEditPanel.getPaddingLeft(), mEditPanel.getPaddingTop(), mEditPanel.getPaddingRight(), insets1.bottom); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 33c1e1a1e..9fe7e9522 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -49,6 +49,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RatingBar; +import android.widget.ScrollView; import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; @@ -496,7 +497,15 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene View view = inflater.inflate(R.layout.scene_gallery_detail, container, false); ViewGroup main = (ViewGroup) ViewUtils.$$(view, R.id.main); - View mainView = ViewUtils.$$(main, R.id.scroll_view); + ScrollView mainView = (ScrollView) ViewUtils.$$(main, R.id.scroll_view); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + mainView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> { + if (mActionGroup != null && mHeader != null) { + //noinspection IntegerDivisionInFloatingPointContext + setLightStatusBar(mActionGroup.getY() - mHeader.findViewById(R.id.header_content).getPaddingTop() / 2 < scrollY); + } + }); + } View progressView = ViewUtils.$$(main, R.id.progress_view); mTip = (TextView) ViewUtils.$$(main, R.id.tip); mViewTransition = new ViewTransition(mainView, progressView, mTip); @@ -808,16 +817,25 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene switch (state) { case STATE_NORMAL: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + setLightStatusBar(false); + } // Show mMainView mViewTransition.showView(0, animation); // Show mBelowHeader mViewTransition2.showView(0, animation); break; case STATE_REFRESH: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + setLightStatusBar(true); + } // Show mProgressView mViewTransition.showView(1, animation); break; case STATE_REFRESH_HEADER: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + setLightStatusBar(false); + } // Show mMainView mViewTransition.showView(0, animation); // Show mProgress @@ -826,6 +844,9 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene default: case STATE_INIT: case STATE_FAILED: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + setLightStatusBar(true); + } // Show mFailedView mViewTransition.showView(2, animation); break; @@ -2195,6 +2216,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(insets1.left, 0, insets1.right, 0); if (mHeader != null) { mHeader.findViewById(R.id.header_content).setPadding(0, insets1.top, 0, 0); } @@ -2202,6 +2224,12 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene int keylineMargin = getResources().getDimensionPixelOffset(R.dimen.keyline_margin); mPreviews.setPadding(keylineMargin, keylineMargin, keylineMargin, keylineMargin + insets1.bottom); } + if (mTip != null) { + mTip.setPadding(mTip.getPaddingLeft(), mTip.getPaddingTop(), mTip.getPaddingRight(), insets1.bottom); + } + if (mProgress != null) { + mProgress.setPadding(mProgress.getPaddingLeft(), mProgress.getPaddingTop(), mProgress.getPaddingRight(), insets1.bottom); + } return WindowInsetsCompat.CONSUMED; } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java index 0e598c654..c14cfe5f5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java @@ -177,7 +177,7 @@ public final class GalleryInfoScene extends ToolbarScene { } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setTitle(R.string.gallery_info); setNavigationIcon(R.drawable.v_arrow_left_dark_x24); 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 d74eafa08..16f37b145 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 @@ -627,6 +627,13 @@ public final class GalleryListScene extends BaseScene endBottomSearchFab = 0; endBottomFabLayout = 0; this.animation = null; + if (mSearchFab != null) { + FabLayout fabLayout = (FabLayout) mSearchFab.getParent(); + fabLayout.setTranslationY(0); + } + if (mFabLayout != null) { + mFabLayout.setTranslationY(0); + } } }); } @@ -1970,6 +1977,7 @@ public final class GalleryListScene extends BaseScene @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(insets1.left, 0, insets1.right, 0); int corner_fab_margin = getResources().getDimensionPixelOffset(R.dimen.corner_fab_margin); if (mSearchBar != null) { int gallery_search_bar_margin_v = getResources().getDimensionPixelOffset(R.dimen.gallery_search_bar_margin_v); @@ -1982,10 +1990,10 @@ public final class GalleryListScene extends BaseScene } if (mSearchFab != null) { FabLayout fabLayout = (FabLayout) mSearchFab.getParent(); - fabLayout.setPadding(mSearchFab.getPaddingLeft(), mSearchFab.getPaddingTop(), corner_fab_margin + insets1.right, corner_fab_margin + insets1.bottom); + fabLayout.setPadding(mSearchFab.getPaddingLeft(), mSearchFab.getPaddingTop(), fabLayout.getPaddingRight(), corner_fab_margin + insets1.bottom); } if (mFabLayout != null) { - mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), corner_fab_margin + insets1.right, corner_fab_margin + insets1.bottom); + mFabLayout.setPadding(mFabLayout.getPaddingLeft(), mFabLayout.getPaddingTop(), mFabLayout.getPaddingRight(), corner_fab_margin + insets1.bottom); } if (mSearchLayout != null) { int paddingTopSB = getResources().getDimensionPixelOffset(R.dimen.gallery_padding_top_search_bar); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java index da783ead8..6c372c9ac 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java @@ -189,7 +189,7 @@ public class GalleryPreviewsScene extends ToolbarScene { } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setTitle(R.string.gallery_previews); setNavigationIcon(R.drawable.v_arrow_left_dark_x24); @@ -457,6 +457,7 @@ public class GalleryPreviewsScene extends ToolbarScene { @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(insets1.left, 0, insets1.right, 0); View statusBarBackground = v.findViewById(R.id.status_bar_background); statusBarBackground.getLayoutParams().height = insets1.top; statusBarBackground.setBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java index 984f24028..ef01518a6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java @@ -94,6 +94,10 @@ public class HistoryScene extends ToolbarScene { View life cycle ---------------*/ @Nullable + private TextView mTip; + @Nullable + private FastScroller mFastScroller; + @Nullable private EasyRecyclerView mRecyclerView; @Nullable private ViewTransition mViewTransition; @@ -191,9 +195,9 @@ public class HistoryScene extends ToolbarScene { View view = inflater.inflate(R.layout.scene_history, container, false); View content = ViewUtils.$$(view, R.id.content); mRecyclerView = (EasyRecyclerView) ViewUtils.$$(content, R.id.recycler_view); - FastScroller fastScroller = (FastScroller) ViewUtils.$$(content, R.id.fast_scroller); - TextView tip = (TextView) ViewUtils.$$(view, R.id.tip); - mViewTransition = new ViewTransition(content, tip); + mFastScroller = (FastScroller) ViewUtils.$$(content, R.id.fast_scroller); + mTip = (TextView) ViewUtils.$$(view, R.id.tip); + mViewTransition = new ViewTransition(content, mTip); Context context = getContext(); AssertUtils.assertNotNull(context); @@ -201,7 +205,7 @@ public class HistoryScene extends ToolbarScene { Drawable drawable = ContextCompat.getDrawable(context, R.drawable.big_history); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); - tip.setCompoundDrawables(null, drawable, null, null); + mTip.setCompoundDrawables(null, drawable, null, null); RecyclerViewTouchActionGuardManager guardManager = new RecyclerViewTouchActionGuardManager(); guardManager.setInterceptVerticalScrollingWhileAnimationRunning(true); @@ -234,10 +238,10 @@ public class HistoryScene extends ToolbarScene { guardManager.attachRecyclerView(mRecyclerView); swipeManager.attachRecyclerView(mRecyclerView); - fastScroller.attachToRecyclerView(mRecyclerView); + mFastScroller.attachToRecyclerView(mRecyclerView); HandlerDrawable handlerDrawable = new HandlerDrawable(); handlerDrawable.setColor(AttrResources.getAttrColor(context, R.attr.widgetColorThemeAccent)); - fastScroller.setHandlerDrawable(handlerDrawable); + mFastScroller.setHandlerDrawable(handlerDrawable); updateLazyList(); updateView(false); @@ -246,7 +250,7 @@ public class HistoryScene extends ToolbarScene { } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setTitle(R.string.history); setNavigationIcon(new DrawerArrowDrawable(getContext(), Color.WHITE)); @@ -698,14 +702,21 @@ public class HistoryScene extends ToolbarScene { @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(insets1.left, 0, insets1.right, 0); + View statusBarBackground = v.findViewById(R.id.status_bar_background); + statusBarBackground.getLayoutParams().height = insets1.top; + statusBarBackground.setBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); if (mRecyclerView != null) { int paddingH = getResources().getDimensionPixelOffset(R.dimen.gallery_list_margin_h); int paddingV = getResources().getDimensionPixelOffset(R.dimen.gallery_list_margin_v); mRecyclerView.setPadding(paddingH, paddingV, paddingH, paddingV + insets1.bottom); } - View statusBarBackground = v.findViewById(R.id.status_bar_background); - statusBarBackground.getLayoutParams().height = insets1.top; - statusBarBackground.setBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); + if (mFastScroller != null) { + mFastScroller.setPadding(mFastScroller.getPaddingLeft(), mFastScroller.getPaddingTop(), mFastScroller.getPaddingRight(), insets1.bottom); + } + if (mTip != null) { + mTip.setPadding(mTip.getPaddingLeft(), mTip.getPaddingTop(), mTip.getPaddingRight(), insets1.bottom); + } return WindowInsetsCompat.CONSUMED; } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java index 69f3e637e..85441c445 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java @@ -159,7 +159,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Show IME diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.java index 645826e1a..e4d252232 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.java @@ -17,7 +17,6 @@ package com.hippo.ehviewer.ui.scene; import android.graphics.drawable.Drawable; -import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.MenuItem; @@ -31,7 +30,6 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.widget.Toolbar; import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import com.hippo.android.resource.AttrResources; @@ -57,16 +55,6 @@ public abstract class ToolbarScene extends BaseScene { View view = inflater.inflate(R.layout.scene_toolbar, container, false); Toolbar toolbar = view.findViewById(R.id.toolbar); FrameLayout contentPanel = view.findViewById(R.id.content_panel); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !(this instanceof GalleryCommentsScene)) { - ViewCompat.setOnApplyWindowInsetsListener(view, (v, insets) -> { - Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); - view.setPadding(insets1.left, 0, insets1.right, insets1.bottom); - View statusBarBackground = view.findViewById(R.id.status_bar_background); - statusBarBackground.getLayoutParams().height = insets1.top; - statusBarBackground.setBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); - return WindowInsetsCompat.CONSUMED; - }); - } View contentView = onCreateViewWithToolbar(inflater, contentPanel, savedInstanceState); if (contentView == null) { @@ -85,7 +73,7 @@ public abstract class ToolbarScene extends BaseScene { } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (mToolbar != null) { if (mTempTitle != null) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java index 8f8bd61bf..3c4fc84fa 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java @@ -43,7 +43,7 @@ public final class WarningScene extends SolidScene implements View.OnClickListen return false; } - @Nullable + @NonNull @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/com/hippo/scene/SceneFragment.java b/app/src/main/java/com/hippo/scene/SceneFragment.java index fcfdb8865..d2c266d50 100644 --- a/app/src/main/java/com/hippo/scene/SceneFragment.java +++ b/app/src/main/java/com/hippo/scene/SceneFragment.java @@ -54,6 +54,10 @@ public class SceneFragment extends Fragment implements OnApplyWindowInsetsListen Bundle result = null; List mRequestSceneTagList = new ArrayList<>(0); IntList mRequestCodeList = new IntList(0); + private int paddingTop = 0; + private int paddingBottom = 0; + private int paddingLeft = 0; + private int paddingRight = 0; public void onNewArguments(@NonNull Bundle args) { } @@ -107,12 +111,15 @@ public class SceneFragment extends Fragment implements OnApplyWindowInsetsListen } @Override - @SuppressWarnings("deprecation") - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + paddingTop = view.getPaddingTop(); + paddingBottom = view.getPaddingBottom(); + paddingLeft = view.getPaddingLeft(); + paddingRight = view.getPaddingRight(); view.setTag(R.id.fragment_tag, getTag()); - view.setBackgroundDrawable(AttrResources.getAttrDrawable(getContext(), android.R.attr.windowBackground)); + view.setBackground(AttrResources.getAttrDrawable(getContext(), android.R.attr.windowBackground)); // Notify FragmentActivity activity = getActivity(); @@ -171,7 +178,7 @@ public class SceneFragment extends Fragment implements OnApplyWindowInsetsListen @Override public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); - v.setPadding(insets1.left, insets1.top, insets1.right, insets1.bottom); + v.setPadding(paddingLeft + insets1.left, insets1.top + paddingTop, paddingRight + insets1.right, insets1.bottom + paddingBottom); return WindowInsetsCompat.CONSUMED; } diff --git a/app/src/main/java/com/hippo/widget/ContentLayout.java b/app/src/main/java/com/hippo/widget/ContentLayout.java index ed6c00ed7..056cdd062 100644 --- a/app/src/main/java/com/hippo/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/widget/ContentLayout.java @@ -89,6 +89,8 @@ public class ContentLayout extends FrameLayout { private void init(Context context) { LayoutInflater.from(context).inflate(R.layout.widget_content_layout, this); + setClipChildren(false); + setClipToPadding(false); mProgressView = findViewById(R.id.progress); mTipView = findViewById(R.id.tip); @@ -171,7 +173,7 @@ public class ContentLayout extends FrameLayout { mRecyclerView.getPaddingTop(), mRecyclerView.getPaddingRight(), mRecyclerViewOriginBottom + fitPaddingBottom); mTipView.setPadding(mTipView.getPaddingLeft(), mTipView.getPaddingTop(), mTipView.getPaddingRight(), fitPaddingBottom); - mProgressView.setPadding(mTipView.getPaddingLeft(), mTipView.getPaddingTop(), mTipView.getPaddingRight(), fitPaddingBottom); + mProgressView.setPadding(mProgressView.getPaddingLeft(), mProgressView.getPaddingTop(), mProgressView.getPaddingRight(), fitPaddingBottom); mFastScroller.setPadding(mFastScroller.getPaddingLeft(), mFastScroller.getPaddingTop(), mFastScroller.getPaddingRight(), fitPaddingBottom); if (fitPaddingBottom > LayoutUtils.dp2pix(getContext(), 16)) { mBottomProgress.setPadding(0, 0, 0, fitPaddingBottom); diff --git a/app/src/main/res/layout/scene_analytics.xml b/app/src/main/res/layout/scene_analytics.xml index 15f17fd21..e09046bb5 100644 --- a/app/src/main/res/layout/scene_analytics.xml +++ b/app/src/main/res/layout/scene_analytics.xml @@ -19,7 +19,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:padding="@dimen/keyline_margin"> + android:paddingHorizontal="@dimen/keyline_margin" + android:paddingTop="@dimen/keyline_margin"> + android:paddingBottom="20dp">