From f4febe90c959e5e52e914e848ebdcfe3b2ebe18a Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 14 Oct 2019 14:28:52 +0100 Subject: [PATCH] Restore custom layout behaviour for handling snackbar. --- .../briar/android/view/DefaultBehavior.java | 16 ------ .../android/view/SnackbarAwareBehavior.java | 50 +++++++++++++++++++ .../main/res/layout/fragment_contact_list.xml | 5 +- 3 files changed, 52 insertions(+), 19 deletions(-) delete mode 100644 briar-android/src/main/java/org/briarproject/briar/android/view/DefaultBehavior.java create 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/view/DefaultBehavior.java b/briar-android/src/main/java/org/briarproject/briar/android/view/DefaultBehavior.java deleted file mode 100644 index 1b42e43ae..000000000 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/DefaultBehavior.java +++ /dev/null @@ -1,16 +0,0 @@ -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 new file mode 100644 index 000000000..75853e5a0 --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/SnackbarAwareBehavior.java @@ -0,0 +1,50 @@ +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; + +/** + * This behavior makes room for a snackbar at the bottom of the screen. The + * proper solution is to use layout_dodgeInsetEdges="bottom", but when used on + * a scrollable view that results in the view being pushed under the app bar + * (see https://issuetracker.google.com/issues/116541304). + */ +@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 37c29899d..646c7d506 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_dodgeInsetEdges="bottom" + app:layout_behavior="org.briarproject.briar.android.view.SnackbarAwareBehavior" app:scrollToEnd="false"/> + app:layout_behavior="org.briarproject.briar.android.view.SnackbarAwareBehavior"/>