diff options
Diffstat (limited to 'app/src/main/java/com/wireguard/android/widget')
4 files changed, 50 insertions, 45 deletions
diff --git a/app/src/main/java/com/wireguard/android/widget/CustomRecyclerViewScrollListener.java b/app/src/main/java/com/wireguard/android/widget/CustomRecyclerViewScrollListener.java deleted file mode 100644 index dfdfd513..00000000 --- a/app/src/main/java/com/wireguard/android/widget/CustomRecyclerViewScrollListener.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2018 Harsh Shandilya <msfjarvis@gmail.com> - * Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.wireguard.android.widget; - -import android.support.v7.widget.RecyclerView; - -import com.wireguard.android.R; - -public abstract class CustomRecyclerViewScrollListener extends RecyclerView.OnScrollListener { - - private int scrollDist; - private boolean isVisible = true; - private static int flingThreshold; - - @Override - public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) { - super.onScrolled(recyclerView, dx, dy); - - if (flingThreshold == 0) - flingThreshold = recyclerView.getResources().getDimensionPixelSize(R.dimen.design_fab_size_normal) / 2; - - if (isVisible && scrollDist >= flingThreshold) { - hide(); - scrollDist = 0; - isVisible = false; - } else if (!isVisible && scrollDist <= -flingThreshold) { - show(); - scrollDist = 0; - isVisible = true; - } - - if (isVisible ? dy > 0 : dy < 0) { - scrollDist += dy; - } - } - - public abstract void show(); - public abstract void hide(); -} diff --git a/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionButtonBehavior.java b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionButtonBehavior.java index 84868a4c..6bc25191 100644 --- a/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionButtonBehavior.java +++ b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionButtonBehavior.java @@ -25,8 +25,7 @@ public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<Flo @Override public boolean onDependentViewChanged(final CoordinatorLayout parent, final FloatingActionsMenu child, final View dependency) { - final float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); - child.setTranslationY(translationY); + child.setBehaviorYTranslation(Math.min(0, dependency.getTranslationY() - dependency.getMeasuredHeight())); return true; } } diff --git a/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenu.java b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenu.java index e0a335d4..e71793d9 100644 --- a/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenu.java +++ b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenu.java @@ -67,6 +67,8 @@ public class FloatingActionsMenu extends ViewGroup { @Nullable private TouchDelegateGroup mTouchDelegateGroup; @Nullable private OnFloatingActionsMenuUpdateListener mListener; private final Rect touchArea = new Rect(0, 0, 0, 0); + private float scrollYTranslation; + private float behaviorYTranslation; public FloatingActionsMenu(final Context context) { this(context, null); @@ -103,6 +105,24 @@ public class FloatingActionsMenu extends ViewGroup { createAddButton(context); } + public float getScrollYTranslation() { + return scrollYTranslation; + } + + public void setScrollYTranslation(final float scrollYTranslation) { + this.scrollYTranslation = scrollYTranslation; + setTranslationY(behaviorYTranslation + scrollYTranslation); + } + + public float getBehaviorYTranslation() { + return behaviorYTranslation; + } + + public void setBehaviorYTranslation(final float behaviorYTranslation) { + this.behaviorYTranslation = behaviorYTranslation; + setTranslationY(behaviorYTranslation + scrollYTranslation); + } + public void setOnFloatingActionsMenuUpdateListener(final OnFloatingActionsMenuUpdateListener listener) { mListener = listener; } diff --git a/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java new file mode 100644 index 00000000..f526d6e8 --- /dev/null +++ b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java @@ -0,0 +1,29 @@ +/* + * Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.widget.fab; + +import android.support.v7.widget.RecyclerView; + +import com.wireguard.android.R; + +public class FloatingActionsMenuRecyclerViewScrollListener extends RecyclerView.OnScrollListener { + private static final float SCALE_FACTOR = 1.5f; + private final FloatingActionsMenu menu; + + public FloatingActionsMenuRecyclerViewScrollListener(final FloatingActionsMenu menu) { + this.menu = menu; + } + + private static float bound(float min, float proposal, float max) { + return Math.min(max, Math.max(min, proposal)); + } + + @Override + public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) { + super.onScrolled(recyclerView, dx, dy); + menu.setScrollYTranslation(bound(0, menu.getScrollYTranslation() + dy * SCALE_FACTOR, menu.getMeasuredHeight() - menu.getTranslationY())); + } +} |