From b0d3a0258b06f3a8a5ce3508aa35ddf6774a69cf Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Sat, 20 Mar 2021 16:55:34 +0800 Subject: [PATCH] Fix snackbar position --- .../com/hippo/ehviewer/ui/MainActivity.java | 17 ++++---- .../hippo/ehviewer/ui/scene/BaseScene.java | 6 --- .../ehviewer/ui/scene/FavoritesScene.java | 7 +--- ...EhDrawerLayout.java => EhStageLayout.java} | 42 ++++++------------- ...dowsFullyDraggableDrawerContentLayout.java | 29 +++++++++++++ app/src/main/res/layout/activity_main.xml | 32 ++++++++------ 6 files changed, 73 insertions(+), 60 deletions(-) rename app/src/main/java/com/hippo/ehviewer/widget/{EhDrawerLayout.java => EhStageLayout.java} (65%) create mode 100644 app/src/main/java/com/hippo/widget/IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout.java 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 1cacde983..df5d63859 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -72,7 +72,7 @@ import com.hippo.ehviewer.ui.scene.SignInScene; import com.hippo.ehviewer.ui.scene.SolidScene; import com.hippo.ehviewer.ui.scene.WarningScene; import com.hippo.ehviewer.ui.scene.WebViewSignInScene; -import com.hippo.ehviewer.widget.EhDrawerLayout; +import com.hippo.ehviewer.widget.EhStageLayout; import com.hippo.io.UniFileInputStreamPipe; import com.hippo.scene.Announcer; import com.hippo.scene.SceneFragment; @@ -128,7 +128,9 @@ public final class MainActivity extends StageActivity Whole life cycle ---------------*/ @Nullable - private EhDrawerLayout mDrawerLayout; + private DrawerLayout mDrawerLayout; + @Nullable + private EhStageLayout mStageLayout; @Nullable private NavigationView mNavView; @Nullable @@ -310,7 +312,8 @@ public final class MainActivity extends StageActivity protected void onCreate2(@Nullable Bundle savedInstanceState) { setContentView(R.layout.activity_main); - mDrawerLayout = (EhDrawerLayout) ViewUtils.$$(this, R.id.draw_view); + mStageLayout = (EhStageLayout) ViewUtils.$$(this, R.id.fragment_container); + mDrawerLayout = (DrawerLayout) ViewUtils.$$(this, R.id.draw_view); mNavView = (NavigationView) ViewUtils.$$(this, R.id.nav_view); mRightDrawer = (DrawerView) ViewUtils.$$(this, R.id.right_drawer); View headerLayout = mNavView.getHeaderView(0); @@ -515,14 +518,14 @@ public final class MainActivity extends StageActivity } public void addAboveSnackView(View view) { - if (mDrawerLayout != null) { - mDrawerLayout.addAboveSnackView(view); + if (mStageLayout != null) { + mStageLayout.addAboveSnackView(view); } } public void removeAboveSnackView(View view) { - if (mDrawerLayout != null) { - mDrawerLayout.removeAboveSnackView(view); + if (mStageLayout != null) { + mStageLayout.removeAboveSnackView(view); } } 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 be8ac28ff..06475094b 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 @@ -20,7 +20,6 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.os.Parcelable; @@ -38,11 +37,8 @@ import androidx.annotation.StringRes; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.FragmentActivity; -import com.hippo.android.resource.AttrResources; import com.hippo.ehviewer.Analytics; -import com.hippo.ehviewer.R; import com.hippo.ehviewer.ui.MainActivity; -import com.hippo.ehviewer.widget.EhDrawerLayout; import com.hippo.scene.SceneFragment; import com.hippo.util.AppHelper; @@ -195,8 +191,6 @@ public abstract class BaseScene extends SceneFragment { 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); needWhiteStatusBar = set; } 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 7c91a66b4..6d206e8a7 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 @@ -72,7 +72,6 @@ import com.hippo.ehviewer.ui.MainActivity; import com.hippo.ehviewer.ui.annotation.DrawerLifeCircle; import com.hippo.ehviewer.ui.annotation.ViewLifeCircle; import com.hippo.ehviewer.ui.annotation.WholeLifeCircle; -import com.hippo.ehviewer.widget.EhDrawerLayout; import com.hippo.ehviewer.widget.GalleryInfoContentHelper; import com.hippo.ehviewer.widget.SearchBar; import com.hippo.scene.Announcer; @@ -92,8 +91,6 @@ 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 @@ -136,7 +133,7 @@ public class FavoritesScene extends BaseScene implements private DrawerArrowDrawable mLeftDrawable; private AddDeleteDrawable mActionFabDrawable; @Nullable - private EhDrawerLayout mDrawerLayout; + private DrawerLayout mDrawerLayout; @Nullable @DrawerLifeCircle private FavDrawerAdapter mDrawerAdapter; @@ -255,7 +252,7 @@ public class FavoritesScene extends BaseScene implements mContentLayout = view.findViewById(R.id.content_layout); MainActivity activity = getMainActivity(); AssertUtils.assertNotNull(activity); - mDrawerLayout = (EhDrawerLayout) ViewUtils.$$(activity, R.id.draw_view); + mDrawerLayout = (DrawerLayout) ViewUtils.$$(activity, R.id.draw_view); mRecyclerView = mContentLayout.getRecyclerView(); FastScroller fastScroller = mContentLayout.getFastScroller(); mSearchBar = (SearchBar) ViewUtils.$$(view, R.id.search_bar); diff --git a/app/src/main/java/com/hippo/ehviewer/widget/EhDrawerLayout.java b/app/src/main/java/com/hippo/ehviewer/widget/EhStageLayout.java similarity index 65% rename from app/src/main/java/com/hippo/ehviewer/widget/EhDrawerLayout.java rename to app/src/main/java/com/hippo/ehviewer/widget/EhStageLayout.java index 83548069e..38ca62091 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/EhDrawerLayout.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/EhStageLayout.java @@ -1,47 +1,31 @@ -/* - * Copyright 2016 Hippo Seven - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package com.hippo.ehviewer.widget; import android.content.Context; import android.util.AttributeSet; import android.view.View; -import android.view.animation.OvershootInterpolator; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.view.ViewCompat; -import androidx.drawerlayout.widget.DrawerLayout; +import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import com.google.android.material.snackbar.Snackbar; +import com.hippo.scene.StageLayout; import com.hippo.yorozuya.LayoutUtils; import java.util.ArrayList; import java.util.List; -public class EhDrawerLayout extends DrawerLayout implements CoordinatorLayout.AttachedBehavior { +public class EhStageLayout extends StageLayout implements CoordinatorLayout.AttachedBehavior { private List mAboveSnackViewList; - public EhDrawerLayout(Context context, AttributeSet attrs) { + public EhStageLayout(Context context, AttributeSet attrs) { super(context, attrs); } - public EhDrawerLayout(Context context, AttributeSet attrs, int defStyle) { + public EhStageLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @@ -74,35 +58,35 @@ public class EhDrawerLayout extends DrawerLayout implements CoordinatorLayout.At @NonNull @Override - public Behavior getBehavior() { - return new Behavior(); + public EhStageLayout.Behavior getBehavior() { + return new EhStageLayout.Behavior(); } - public static class Behavior extends CoordinatorLayout.Behavior { + public static class Behavior extends CoordinatorLayout.Behavior { @Override - public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull EhDrawerLayout child, @NonNull View dependency) { + public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull EhStageLayout child, @NonNull View dependency) { return dependency instanceof Snackbar.SnackbarLayout; } @Override - public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, EhDrawerLayout child, @NonNull View dependency) { + public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, EhStageLayout child, @NonNull View dependency) { for (int i = 0, n = child.getAboveSnackViewCount(); i < n; i++) { View view = child.getAboveSnackViewAt(i); if (view != null) { float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight() - LayoutUtils.dp2pix(view.getContext(), 8)); - ViewCompat.animate(view).setInterpolator(new OvershootInterpolator()).translationY(translationY).start(); + ViewCompat.animate(view).setInterpolator(new FastOutSlowInInterpolator()).translationY(translationY).setDuration(150).start(); } } return false; } @Override - public void onDependentViewRemoved(@NonNull CoordinatorLayout parent, @NonNull EhDrawerLayout child, @NonNull View dependency) { + public void onDependentViewRemoved(@NonNull CoordinatorLayout parent, @NonNull EhStageLayout child, @NonNull View dependency) { for (int i = 0, n = child.getAboveSnackViewCount(); i < n; i++) { View view = child.getAboveSnackViewAt(i); if (view != null) { - ViewCompat.animate(view).setInterpolator(new OvershootInterpolator()).translationY(0).start(); + ViewCompat.animate(view).setInterpolator(new FastOutSlowInInterpolator()).translationY(0).setDuration(75).start(); } } } diff --git a/app/src/main/java/com/hippo/widget/IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout.java b/app/src/main/java/com/hippo/widget/IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout.java new file mode 100644 index 000000000..c9596bd96 --- /dev/null +++ b/app/src/main/java/com/hippo/widget/IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout.java @@ -0,0 +1,29 @@ +package com.hippo.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.WindowInsets; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.drakeet.drawer.FullDraggableContainer; + +public class IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout extends FullDraggableContainer { + public IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout(@NonNull Context context) { + super(context); + } + + public IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout(@NonNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs) { + super(context, attrs); + } + + public IgnoreFitsSystemWindowsFullyDraggableDrawerContentLayout(@NonNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public WindowInsets onApplyWindowInsets(WindowInsets insets) { + return insets; + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index fda36e61b..bbd159c60 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -14,9 +14,8 @@ ~ limitations under the License. --> - - + android:fitsSystemWindows="true"> - + android:layout_height="match_parent" + android:fitsSystemWindows="true"> - + android:layout_height="match_parent"> - + + + + - - + +