diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.java index 99700b77c..3f26a7073 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/BaseFragment.java @@ -1,22 +1,11 @@ package com.hippo.ehviewer.ui.fragment; -import android.os.Build; -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.StringRes; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.RecyclerView; import com.hippo.ehviewer.ui.SettingsActivity; public class BaseFragment extends Fragment { - private int paddingBottom = 0; @Override public void onStart() { @@ -40,17 +29,4 @@ public class BaseFragment extends Fragment { public void showTip(CharSequence message, int length) { ((SettingsActivity) requireActivity()).showTip(message, length); } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - paddingBottom = view.getPaddingBottom(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - ViewCompat.setOnApplyWindowInsetsListener(view, (v, insets) -> { - Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); - v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), paddingBottom + insets1.bottom); - return WindowInsetsCompat.CONSUMED; - }); - } - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/BasePreferenceFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/BasePreferenceFragment.java index 476a8800f..9ba1517c0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/BasePreferenceFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/BasePreferenceFragment.java @@ -2,24 +2,24 @@ package com.hippo.ehviewer.ui.fragment; import android.os.Build; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; -import android.widget.FrameLayout; -import android.widget.LinearLayout; +import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; -import androidx.core.view.WindowCompat; import androidx.core.view.WindowInsetsCompat; import androidx.preference.Preference; import androidx.recyclerview.widget.RecyclerView; -import com.hippo.ehviewer.R; import com.hippo.ehviewer.ui.SettingsActivity; import com.takisoft.preferencex.PreferenceFragmentCompat; +import rikka.recyclerview.RecyclerViewKt; + public class BasePreferenceFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener { @Override @@ -74,4 +74,11 @@ public class BasePreferenceFragment extends PreferenceFragmentCompat }); } } + + @Override + public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { + RecyclerView recyclerView = super.onCreateRecyclerView(inflater, parent, savedInstanceState); + RecyclerViewKt.fixEdgeEffect(recyclerView, false, true); + return recyclerView; + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java index 6baabb6ff..65ffa3d02 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java @@ -87,11 +87,6 @@ public class FilterFragment extends BaseFragment { if (defaultItemAnimator != null) { defaultItemAnimator.setSupportsChangeAnimations(false); } - recyclerView.setPadding( - recyclerView.getPaddingLeft(), - recyclerView.getPaddingTop(), - recyclerView.getPaddingRight(), - recyclerView.getPaddingBottom() + getResources().getDimensionPixelOffset(R.dimen.gallery_padding_bottom_fab)); fab.setOnClickListener(v -> showAddFilterDialog()); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.java index 9055cbed0..c6542de95 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/HostsFragment.java @@ -73,11 +73,6 @@ public class HostsFragment extends BaseFragment decoration.setShowLastDivider(true); recyclerView.addItemDecoration(decoration); recyclerView.setHasFixedSize(true); - recyclerView.setPadding( - recyclerView.getPaddingLeft(), - recyclerView.getPaddingTop(), - recyclerView.getPaddingRight(), - recyclerView.getPaddingBottom() + getResources().getDimensionPixelOffset(R.dimen.gallery_padding_bottom_fab)); fab.setOnClickListener(this); 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 944729dec..588214449 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 @@ -48,9 +48,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -115,6 +113,8 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import rikka.recyclerview.RecyclerViewKt; + @SuppressLint("RtlHardcoded") public class DownloadsScene extends ToolbarScene implements DownloadManager.DownloadInfoListener, @@ -373,11 +373,12 @@ public class DownloadsScene extends ToolbarScene int paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v); MarginItemDecoration decoration = new MarginItemDecoration(interval, paddingH, paddingV, paddingH, paddingV); mRecyclerView.addItemDecoration(decoration); - decoration.applyPaddings(mRecyclerView); if (mInitPosition >= 0) { mRecyclerView.scrollToPosition(mInitPosition); mInitPosition = -1; } + RecyclerViewKt.addVerticalPadding(mRecyclerView, paddingV / 2, 0); + RecyclerViewKt.fixEdgeEffect(mRecyclerView, false, true); mFastScroller.attachToRecyclerView(mRecyclerView); HandlerDrawable handlerDrawable = new HandlerDrawable(); @@ -1538,29 +1539,4 @@ 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) { - 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(), 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 1ff2268ba..1e407fe07 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 @@ -35,7 +35,6 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.WindowInsetsAnimation; -import android.widget.FrameLayout; import android.widget.TextView; import androidx.annotation.NonNull; @@ -43,8 +42,6 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; -import androidx.core.view.WindowInsetsCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -96,6 +93,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import rikka.recyclerview.RecyclerViewKt; + // TODO Get favorite, modify favorite, add favorite, what a mess! @SuppressLint("RtlHardcoded") public class FavoritesScene extends BaseScene implements @@ -1386,25 +1385,4 @@ 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(); - layoutParams.topMargin = insets1.top + gallery_search_bar_margin_v; - layoutParams.bottomMargin = insets1.bottom + gallery_search_bar_margin_v; - } - if (mContentLayout != null) { - mContentLayout.setTopInsets(insets1.top); - mContentLayout.setFitPaddingBottom(insets1.bottom); - } - if (mFabLayout != null) { - int corner_fab_margin = getResources().getDimensionPixelOffset(R.dimen.corner_fab_margin); - 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/GalleryAdapter.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java index b92bfd107..ef37da968 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java @@ -121,7 +121,6 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { mListDecoration = new MarginItemDecoration(interval, paddingH, paddingV, paddingH, paddingV); } recyclerView.addItemDecoration(mListDecoration); - mListDecoration.applyPaddings(recyclerView); adjustPaddings(); notifyDataSetChanged(); break; @@ -140,7 +139,6 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { mGirdDecoration = new MarginItemDecoration(interval, paddingH, paddingV, paddingH, paddingV); } recyclerView.addItemDecoration(mGirdDecoration); - mGirdDecoration.applyPaddings(recyclerView); adjustPaddings(); notifyDataSetChanged(); break; @@ -155,7 +153,7 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { switch (viewType) { default: case TYPE_LIST: - layoutId = R.layout.item_gallery_list; + layoutId = R.layout.item_history; break; case TYPE_GRID: layoutId = R.layout.item_gallery_grid; 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 a61391c26..ca8b1f814 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 @@ -50,9 +50,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; import androidx.core.text.util.LinkifyCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -98,6 +96,8 @@ import com.hippo.yorozuya.collect.IntList; import java.util.ArrayList; import java.util.List; +import rikka.recyclerview.RecyclerViewKt; + public final class GalleryCommentsScene extends ToolbarScene implements View.OnClickListener, SwipeRefreshLayout.OnRefreshListener { @@ -194,6 +194,7 @@ public final class GalleryCommentsScene extends ToolbarScene @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.scene_gallery_comments, container, false); mRecyclerView = (EasyRecyclerView) ViewUtils.$$(view, R.id.recycler_view); + RecyclerViewKt.fixEdgeEffect(mRecyclerView, false, true); TextView tip = (TextView) ViewUtils.$$(view, R.id.tip); mEditPanel = ViewUtils.$$(view, R.id.edit_panel); mSendImage = (ImageView) ViewUtils.$$(mEditPanel, R.id.send); @@ -1059,25 +1060,4 @@ 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(), mFabLayout.getPaddingRight(), corner_fab_margin + insets1.bottom); - } - if (mEditPanel != null) { - mEditPanel.setPadding(mEditPanel.getPaddingLeft(), mEditPanel.getPaddingTop(), mEditPanel.getPaddingRight(), insets1.bottom); - } - if (mRecyclerView != null) { - int paddingBottomFab = getResources().getDimensionPixelOffset(R.dimen.gallery_padding_bottom_fab); - mRecyclerView.setPadding(mRecyclerView.getPaddingLeft(), mRecyclerView.getPaddingTop(), mRecyclerView.getPaddingRight(), paddingBottomFab + insets1.bottom); - } - return WindowInsetsCompat.CONSUMED; - } } 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 6bf58daee..5afe600bd 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 @@ -60,9 +60,7 @@ import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.PopupMenu; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.transition.TransitionInflater; @@ -2182,24 +2180,4 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene EhApplication.getEhClient(context).execute(request); } } - - @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); - } - if (mPreviews != null) { - 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 11d6debbf..ea48cbfb3 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 @@ -25,8 +25,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.graphics.Insets; -import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -46,6 +44,8 @@ import com.hippo.yorozuya.ViewUtils; import java.util.ArrayList; +import rikka.recyclerview.RecyclerViewKt; + public final class GalleryInfoScene extends ToolbarScene { public static final String KEY_GALLERY_DETAIL = "gallery_detail"; @@ -169,10 +169,12 @@ public final class GalleryInfoScene extends ToolbarScene { LinearDividerItemDecoration.VERTICAL, AttrResources.getAttrColor(context, R.attr.dividerColor), LayoutUtils.dp2pix(context, 1)); - decoration.setPadding(context.getResources().getDimensionPixelOffset(R.dimen.keyline_margin)); + int keylineMargin = context.getResources().getDimensionPixelOffset(R.dimen.keyline_margin); + decoration.setPadding(keylineMargin); mRecyclerView.addItemDecoration(decoration); mRecyclerView.setClipToPadding(false); mRecyclerView.setHasFixedSize(true); + RecyclerViewKt.fixEdgeEffect(mRecyclerView, false, true); return view; } @@ -275,18 +277,4 @@ public final class GalleryInfoScene extends ToolbarScene { return mKeys == null || mValues == null ? 0 : Math.min(mKeys.size(), mValues.size()); } } - - @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 keyline_margin = getResources().getDimensionPixelOffset(R.dimen.keyline_margin); - mRecyclerView.setPadding(mRecyclerView.getPaddingLeft(), mRecyclerView.getPaddingTop(), mRecyclerView.getPaddingRight(), keyline_margin + insets1.bottom); - } - return WindowInsetsCompat.CONSUMED; - } } 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 e75f3fcbf..1868eb96d 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 @@ -42,7 +42,6 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.WindowInsetsAnimation; -import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; @@ -55,8 +54,6 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; -import androidx.core.view.WindowInsetsCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -129,6 +126,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import rikka.recyclerview.RecyclerViewKt; + @SuppressLint("RtlHardcoded") public final class GalleryListScene extends BaseScene implements SearchBar.Helper, SearchBar.OnStateChangeListener, FastScroller.OnDragHandlerListener, @@ -1976,35 +1975,4 @@ 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); - FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mSearchBar.getLayoutParams(); - layoutParams.topMargin = insets1.top + gallery_search_bar_margin_v; - layoutParams.bottomMargin = insets1.bottom + gallery_search_bar_margin_v; - } - if (mContentLayout != null) { - mContentLayout.setTopInsets(insets1.top); - mContentLayout.setFitPaddingBottom(insets1.bottom); - } - if (mSearchFab != null) { - FabLayout fabLayout = (FabLayout) mSearchFab.getParent(); - fabLayout.setPadding(mSearchFab.getPaddingLeft(), mSearchFab.getPaddingTop(), fabLayout.getPaddingRight(), corner_fab_margin + insets1.bottom); - } - if (mFabLayout != null) { - 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); - int paddingBottomFab = getResources().getDimensionPixelOffset(R.dimen.gallery_padding_bottom_fab); - mSearchLayout.setPadding(mSearchLayout.getPaddingLeft(), paddingTopSB + insets1.top, - mSearchLayout.getPaddingRight(), paddingBottomFab + insets1.bottom); - } - return WindowInsetsCompat.CONSUMED; - } } 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 6c372c9ac..33a76d199 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 @@ -33,12 +33,9 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; -import androidx.core.graphics.Insets; -import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import com.hippo.android.resource.AttrResources; import com.hippo.easyrecyclerview.EasyRecyclerView; import com.hippo.easyrecyclerview.MarginItemDecoration; import com.hippo.ehviewer.EhApplication; @@ -65,6 +62,8 @@ import com.hippo.yorozuya.ViewUtils; import java.util.ArrayList; import java.util.Locale; +import rikka.recyclerview.RecyclerViewKt; + public class GalleryPreviewsScene extends ToolbarScene { public static final String KEY_GALLERY_INFO = "gallery_info"; @@ -157,7 +156,6 @@ public class GalleryPreviewsScene extends ToolbarScene { int padding = LayoutUtils.dp2pix(context, 4); MarginItemDecoration decoration = new MarginItemDecoration(padding, padding, padding, padding, padding); mRecyclerView.addItemDecoration(decoration); - decoration.applyPaddings(mRecyclerView); mHelper = new GalleryPreviewHelper(); mContentLayout.setHelper(mHelper); @@ -453,17 +451,4 @@ public class GalleryPreviewsScene extends ToolbarScene { mSlider = null; } } - - @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 (mContentLayout != null) { - mContentLayout.setFitPaddingBottom(insets1.bottom); - } - return WindowInsetsCompat.CONSUMED; - } } 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 2f72135d2..ef6032dcf 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 @@ -35,9 +35,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; @@ -88,6 +86,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import rikka.recyclerview.RecyclerViewKt; + public class HistoryScene extends ToolbarScene { /*--------------- @@ -223,20 +223,17 @@ public class HistoryScene extends ToolbarScene { layoutManager.setColumnSize(resources.getDimensionPixelOffset(Settings.getDetailSizeResId())); layoutManager.setStrategy(AutoStaggeredGridLayoutManager.STRATEGY_MIN_SIZE); mRecyclerView.setLayoutManager(layoutManager); - //mRecyclerView.setSelector(Ripple.generateRippleDrawable(context, !AttrResources.getAttrBoolean(context, R.attr.isLightTheme), new ColorDrawable(Color.TRANSPARENT))); - //mRecyclerView.setDrawSelectorOnTop(true); mRecyclerView.setClipToPadding(false); mRecyclerView.setClipChildren(false); - //mRecyclerView.setOnItemClickListener(this); - //mRecyclerView.setOnItemLongClickListener(this); int interval = resources.getDimensionPixelOffset(R.dimen.gallery_list_interval); int paddingH = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_h); int paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v); MarginItemDecoration decoration = new MarginItemDecoration(interval, paddingH, paddingV, paddingH, paddingV); mRecyclerView.addItemDecoration(decoration); - decoration.applyPaddings(mRecyclerView); guardManager.attachRecyclerView(mRecyclerView); swipeManager.attachRecyclerView(mRecyclerView); + RecyclerViewKt.fixEdgeEffect(mRecyclerView, false, true); + RecyclerViewKt.addVerticalPadding(mRecyclerView, paddingV / 2, 0); mFastScroller.attachToRecyclerView(mRecyclerView); HandlerDrawable handlerDrawable = new HandlerDrawable(); @@ -711,25 +708,4 @@ public class HistoryScene extends ToolbarScene { updateView(true); } } - - @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); - } - 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/ToolbarScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/ToolbarScene.java index e4d252232..785abb012 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 @@ -29,10 +29,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.widget.Toolbar; -import androidx.core.graphics.Insets; -import androidx.core.view.WindowInsetsCompat; -import com.hippo.android.resource.AttrResources; import com.hippo.ehviewer.R; public abstract class ToolbarScene extends BaseScene { @@ -130,14 +127,4 @@ public abstract class ToolbarScene extends BaseScene { mTempTitle = title; } } - - @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, insets1.bottom); - View statusBarBackground = v.findViewById(R.id.status_bar_background); - statusBarBackground.getLayoutParams().height = insets1.top; - statusBarBackground.setBackgroundColor(AttrResources.getAttrColor(requireContext(), R.attr.colorPrimaryDark)); - return WindowInsetsCompat.CONSUMED; - } } diff --git a/app/src/main/java/com/hippo/scene/SceneFragment.java b/app/src/main/java/com/hippo/scene/SceneFragment.java index d2c266d50..55295b059 100644 --- a/app/src/main/java/com/hippo/scene/SceneFragment.java +++ b/app/src/main/java/com/hippo/scene/SceneFragment.java @@ -22,9 +22,6 @@ import android.view.View; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.graphics.Insets; -import androidx.core.view.OnApplyWindowInsetsListener; -import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -37,7 +34,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; -public class SceneFragment extends Fragment implements OnApplyWindowInsetsListener { +public class SceneFragment extends Fragment { public static final int LAUNCH_MODE_STANDARD = 0; public static final int LAUNCH_MODE_SINGLE_TOP = 1; @@ -54,10 +51,6 @@ 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) { } @@ -113,10 +106,6 @@ public class SceneFragment extends Fragment implements OnApplyWindowInsetsListen @Override 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.setBackground(AttrResources.getAttrDrawable(getContext(), android.R.attr.windowBackground)); @@ -175,13 +164,6 @@ public class SceneFragment extends Fragment implements OnApplyWindowInsetsListen this.result = result; } - @Override - public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { - Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); - v.setPadding(paddingLeft + insets1.left, insets1.top + paddingTop, paddingRight + insets1.right, insets1.bottom + paddingBottom); - return WindowInsetsCompat.CONSUMED; - } - @IntDef({LAUNCH_MODE_STANDARD, LAUNCH_MODE_SINGLE_TOP, LAUNCH_MODE_SINGLE_TASK}) @Retention(RetentionPolicy.SOURCE) public @interface LaunchMode { diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java index 09ffbecdb..e15f933d2 100644 --- a/app/src/main/java/com/hippo/scene/StageActivity.java +++ b/app/src/main/java/com/hippo/scene/StageActivity.java @@ -24,7 +24,6 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; @@ -196,10 +195,6 @@ public abstract class StageActivity extends EhActivity { } public void onSceneViewCreated(SceneFragment scene, Bundle savedInstanceState) { - View view = scene.getView(); - if (view != null) { - ViewCompat.setOnApplyWindowInsetsListener(view, scene); - } } public void onSceneViewDestroyed(SceneFragment scene) { diff --git a/app/src/main/java/com/hippo/widget/ContentLayout.java b/app/src/main/java/com/hippo/widget/ContentLayout.java index 1ed788282..d5bd338ff 100644 --- a/app/src/main/java/com/hippo/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/widget/ContentLayout.java @@ -16,6 +16,7 @@ package com.hippo.widget; +import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -23,7 +24,6 @@ import android.os.Bundle; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -56,6 +56,8 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import rikka.recyclerview.RecyclerViewKt; + public class ContentLayout extends FrameLayout { private CircularProgressIndicator mProgressView; @@ -88,7 +90,7 @@ public class ContentLayout extends FrameLayout { } private void init(Context context) { - LayoutInflater.from(context).inflate(R.layout.widget_content_layout, this); + ((Activity) context).getLayoutInflater().inflate(R.layout.widget_content_layout, this); setClipChildren(false); setClipToPadding(false); @@ -122,7 +124,11 @@ public class ContentLayout extends FrameLayout { resources.getColor(R.color.loading_indicator_orange)); mBottomProgress.setIndeterminateAnimationType(LinearProgressIndicator.INDETERMINATE_ANIMATION_TYPE_CONTIGUOUS); - mRecyclerViewOriginTop = mRecyclerView.getPaddingTop(); + int paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v); + + RecyclerViewKt.addVerticalPadding(mRecyclerView, paddingV / 2, paddingV / 2); + RecyclerViewKt.fixEdgeEffect(mRecyclerView, false, true); + mRecyclerViewOriginBottom = mRecyclerView.getPaddingBottom(); } @@ -154,15 +160,15 @@ public class ContentLayout extends FrameLayout { mFastScroller.detachedFromRecyclerView(); } - public void setFitPaddingTop(int fitPaddingTop) { - // RecyclerView - mRecyclerView.setPadding(mRecyclerView.getPaddingLeft(), mRecyclerViewOriginTop + fitPaddingTop, mRecyclerView.getPaddingRight(), mRecyclerView.getPaddingBottom()); - // RefreshLayout - mRefreshLayout.setProgressViewOffset(true, 0, fitPaddingTop + LayoutUtils.dp2pix(getContext(), 32)); // TODO + @Override + public void setPadding(int left, int top, int right, int bottom) { + super.setPadding(left, top, right, 0); + setFitPaddingBottom(bottom); } - public void setTopInsets(int topInsets) { - setPadding(0, topInsets, 0, 0); + public void setFitPaddingTop(int fitPaddingTop) { + // RefreshLayout + mRefreshLayout.setProgressViewOffset(true, 0, fitPaddingTop + LayoutUtils.dp2pix(getContext(), 32)); // TODO } public void setFitPaddingBottom(int fitPaddingBottom) { diff --git a/app/src/main/res/layout-land/activity_set_security.xml b/app/src/main/res/layout-land/activity_set_security.xml index 9a9d8ef18..176a3ac8c 100755 --- a/app/src/main/res/layout-land/activity_set_security.xml +++ b/app/src/main/res/layout-land/activity_set_security.xml @@ -17,9 +17,11 @@ + android:baselineAligned="true" + app:fitSystemWindowsInsets="bottom"> + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:layout_height="match_parent" + app:fitSystemWindowsInsets="bottom" /> + android:text="@string/no_filter" + app:fitSystemWindowsInsets="bottom" /> + android:paddingBottom="@dimen/corner_fab_margin" + app:fitSystemWindowsInsets="bottom"> + android:clipToPadding="false" + app:fitSystemWindowsInsets="bottom" /> + android:textSize="@dimen/text_super_large" + app:fitSystemWindowsInsets="bottom" /> + android:paddingBottom="@dimen/corner_fab_margin" + app:fitSystemWindowsInsets="bottom"> + android:paddingHorizontal="@dimen/keyline_margin" + app:fitSystemWindowsInsets="bottom"> + android:orientation="vertical" + app:fitSystemWindowsInsets="bottom"> - @@ -30,7 +31,8 @@ android:layout_height="0dp" android:layout_weight="1" android:background="?attr/galleryDetailHeaderBackgroundColor" - android:elevation="4dp" /> + android:elevation="4dp" + app:fitSystemWindowsInsets="top" /> + android:background="@android:color/transparent" + app:fitSystemWindowsInsets="top"> + android:showDividers="middle" + app:fitSystemWindowsInsets="bottom"> - + android:clipChildren="false" + android:clipToPadding="false" + android:paddingHorizontal="@dimen/gallery_list_margin_v"> diff --git a/app/src/main/res/layout/preference_recyclerview.xml b/app/src/main/res/layout/preference_recyclerview.xml new file mode 100644 index 000000000..0e1bd4fe1 --- /dev/null +++ b/app/src/main/res/layout/preference_recyclerview.xml @@ -0,0 +1,34 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/scene_analytics.xml b/app/src/main/res/layout/scene_analytics.xml index e09046bb5..6b1f9c55d 100644 --- a/app/src/main/res/layout/scene_analytics.xml +++ b/app/src/main/res/layout/scene_analytics.xml @@ -20,7 +20,8 @@ android:layout_height="match_parent" android:orientation="vertical" android:paddingHorizontal="@dimen/keyline_margin" - android:paddingTop="@dimen/keyline_margin"> + android:paddingTop="@dimen/keyline_margin" + app:fitSystemWindowsInsets="top|bottom"> + android:padding="@dimen/keyline_margin" + app:fitSystemWindowsInsets="top|bottom"> + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:layout_height="match_parent" + app:fitSystemWindowsInsets="bottom" /> + android:layout_height="match_parent" + app:fitSystemWindowsInsets="top|bottom" /> + android:layout_marginVertical="@dimen/gallery_search_bar_margin_v" + app:layout_fitSystemWindowsInsets="top|bottom" /> + android:paddingBottom="@dimen/corner_fab_margin" + app:fitSystemWindowsInsets="top|bottom"> + android:clipToPadding="false" + app:fitSystemWindowsInsets="bottom" /> @@ -41,7 +42,8 @@ android:layout_gravity="center" android:drawablePadding="8dp" android:gravity="center_horizontal" - android:text="@string/no_one_comments_gallery" /> + android:text="@string/no_one_comments_gallery" + app:fitSystemWindowsInsets="bottom" /> + android:visibility="invisible" + app:fitSystemWindowsInsets="bottom"> + android:paddingBottom="@dimen/corner_fab_margin" + app:fitSystemWindowsInsets="bottom"> @@ -35,7 +36,8 @@ style="@style/ProgressView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" /> + android:layout_gravity="center" + app:fitSystemWindowsInsets="top|bottom" /> + android:gravity="center_horizontal" + app:fitSystemWindowsInsets="top|bottom" /> diff --git a/app/src/main/res/layout/scene_gallery_info.xml b/app/src/main/res/layout/scene_gallery_info.xml index 4c49787cc..952c605dc 100644 --- a/app/src/main/res/layout/scene_gallery_info.xml +++ b/app/src/main/res/layout/scene_gallery_info.xml @@ -15,8 +15,8 @@ --> + app:fitSystemWindowsInsets="bottom" /> diff --git a/app/src/main/res/layout/scene_gallery_list.xml b/app/src/main/res/layout/scene_gallery_list.xml index 1deb561e0..5f107f193 100644 --- a/app/src/main/res/layout/scene_gallery_list.xml +++ b/app/src/main/res/layout/scene_gallery_list.xml @@ -18,17 +18,20 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_layout" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:clipChildren="false"> + android:layout_height="match_parent" + app:fitSystemWindowsInsets="top|bottom" /> + android:layout_height="match_parent" + app:layout_fitSystemWindowsInsets="top|bottom" /> + android:layout_marginVertical="@dimen/gallery_search_bar_margin_v" + app:layout_fitSystemWindowsInsets="top|bottom" /> + android:paddingBottom="@dimen/corner_fab_margin" + app:fitSystemWindowsInsets="top|bottom"> + android:paddingBottom="@dimen/corner_fab_margin" + app:fitSystemWindowsInsets="top|bottom"> + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:layout_height="match_parent" + app:fitSystemWindowsInsets="bottom" /> + android:text="@string/no_history" + app:fitSystemWindowsInsets="bottom" /> diff --git a/app/src/main/res/layout/scene_login.xml b/app/src/main/res/layout/scene_login.xml index f454b972d..3340e8b3f 100644 --- a/app/src/main/res/layout/scene_login.xml +++ b/app/src/main/res/layout/scene_login.xml @@ -18,7 +18,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + app:fitSystemWindowsInsets="top|bottom"> + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + app:fitSystemWindowsInsets="top|bottom"> + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + app:fitSystemWindowsInsets="top|bottom"> + android:paddingTop="@dimen/keyline_margin" + app:fitSystemWindowsInsets="top|bottom"> - - - + app:statusBarForeground="@color/colorPrimaryDark"> + + + + android:paddingTop="@dimen/keyline_margin" + app:fitSystemWindowsInsets="top|bottom">