From 643ef593e1671b9e4c83c32607b3fd3b32a042a1 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Wed, 2 Oct 2019 12:16:24 +0100 Subject: [PATCH] Use dodgeInsetEdges to make room for the snackbar. --- .../android/util/BriarSnackbarBuilder.java | 23 ++++++++++ .../briar/android/view/DefaultBehavior.java | 16 +++++++ .../android/view/SnackbarAwareBehavior.java | 44 ------------------- .../main/res/layout/fragment_contact_list.xml | 5 ++- 4 files changed, 42 insertions(+), 46 deletions(-) create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/view/DefaultBehavior.java delete mode 100644 briar-android/src/main/java/org/briarproject/briar/android/view/SnackbarAwareBehavior.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/BriarSnackbarBuilder.java b/briar-android/src/main/java/org/briarproject/briar/android/util/BriarSnackbarBuilder.java index 4effc579b..e5399c5a5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/BriarSnackbarBuilder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/BriarSnackbarBuilder.java @@ -4,13 +4,18 @@ import android.support.annotation.ColorRes; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; +import android.support.design.widget.Snackbar.Callback; import android.view.View; import android.view.View.OnClickListener; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; +import static android.os.Build.VERSION.SDK_INT; +import static android.support.design.widget.Snackbar.LENGTH_INDEFINITE; import static android.support.v4.content.ContextCompat.getColor; +import static android.view.View.INVISIBLE; +import static android.view.View.VISIBLE; @NotNullByDefault public class BriarSnackbarBuilder { @@ -30,6 +35,24 @@ public class BriarSnackbarBuilder { R.color.briar_button_text_positive)); s.setAction(actionResId, onClickListener); } + // Workaround for https://issuetracker.google.com/issues/64285517 + if (duration == LENGTH_INDEFINITE && SDK_INT < 21) { + // Hide snackbar while it's opening to make bouncing less noticeable + s.getView().setVisibility(INVISIBLE); + s.addCallback(new Callback() { + @Override + public void onShown(Snackbar snackbar) { + snackbar.getView().setVisibility(VISIBLE); + // Request layout again in case snackbar is in wrong place + snackbar.getView().requestLayout(); + } + + @Override + public void onDismissed(Snackbar snackbar, int event) { + snackbar.getView().setVisibility(INVISIBLE); + } + }); + } return s; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/DefaultBehavior.java b/briar-android/src/main/java/org/briarproject/briar/android/view/DefaultBehavior.java new file mode 100644 index 000000000..1b42e43ae --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/DefaultBehavior.java @@ -0,0 +1,16 @@ +package org.briarproject.briar.android.view; + +import android.content.Context; +import android.support.design.widget.CoordinatorLayout.Behavior; +import android.util.AttributeSet; +import android.view.View; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +@NotNullByDefault +public class DefaultBehavior extends Behavior { + + public DefaultBehavior(Context context, AttributeSet attrs) { + super(context, attrs); + } +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/SnackbarAwareBehavior.java b/briar-android/src/main/java/org/briarproject/briar/android/view/SnackbarAwareBehavior.java deleted file mode 100644 index 2eda0bbe7..000000000 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/SnackbarAwareBehavior.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.briarproject.briar.android.view; - -import android.content.Context; -import android.support.design.widget.CoordinatorLayout; -import android.support.design.widget.CoordinatorLayout.Behavior; -import android.support.design.widget.CoordinatorLayout.LayoutParams; -import android.support.design.widget.Snackbar.SnackbarLayout; -import android.util.AttributeSet; -import android.view.View; - -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; - -@NotNullByDefault -public class SnackbarAwareBehavior extends Behavior { - - public SnackbarAwareBehavior(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public boolean onDependentViewChanged(CoordinatorLayout parent, - V child, View snackbar) { - setMargin(child, snackbar.getHeight()); - return true; - } - - @Override - public void onDependentViewRemoved(CoordinatorLayout parent, - V child, View snackbar) { - setMargin(child, 0); - } - - @Override - public boolean layoutDependsOn(CoordinatorLayout parent, - V child, View dependency) { - return dependency instanceof SnackbarLayout; - } - - private void setMargin(V child, int margin) { - LayoutParams params = (LayoutParams) child.getLayoutParams(); - params.setMargins(0, 0, 0, margin); - child.setLayoutParams(params); - } -} diff --git a/briar-android/src/main/res/layout/fragment_contact_list.xml b/briar-android/src/main/res/layout/fragment_contact_list.xml index 646c7d506..37c29899d 100644 --- a/briar-android/src/main/res/layout/fragment_contact_list.xml +++ b/briar-android/src/main/res/layout/fragment_contact_list.xml @@ -9,7 +9,7 @@ android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" - app:layout_behavior="org.briarproject.briar.android.view.SnackbarAwareBehavior" + app:layout_dodgeInsetEdges="bottom" app:scrollToEnd="false"/> + app:layout_behavior="org.briarproject.briar.android.view.DefaultBehavior" + app:layout_dodgeInsetEdges="bottom"/>