Fix snackbar position

This commit is contained in:
tehcneko committed 2021-03-20 16:55:34 +08:00
1 parent d7c1d23a73
commit b0d3a0258b
6 files changed
+73 -60

No files matched your search

@@ -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);
}
}
@@ -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;
}
@@ -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);
@@ -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<View> 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<EhDrawerLayout> {
public static class Behavior extends CoordinatorLayout.Behavior<EhStageLayout> {
@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();
}
}
}
@@ -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;
}
}