From fe0feddf23c96256b2d459aec4cf8a30e4129810 Mon Sep 17 00:00:00 2001 From: Chris Banes Date: Wed, 30 Nov 2016 01:19:00 +0000 Subject: [PATCH] am 494333e7: am 2b7796be: am f833f728: am c0b8bcbb: Merge "Add a Callback to Snackbar" into lmp-mr1-ub-dev * commit '494333e7fd20ed4400fcb716399fe58316c8f0f9': Add a Callback to Snackbar GitOrigin-RevId=6aa1fe9076fcbcb1ef909f6b89439094c1917dd9 PiperOrigin-RevId: 140548725 --- api/current.txt | 7 +++ .../support/design/widget/Snackbar.java | 51 ++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index 8009a894f..0ccb12051 100644 --- a/api/current.txt +++ b/api/current.txt @@ -219,6 +219,7 @@ package android.support.design.widget { method public android.support.design.widget.Snackbar setAction(java.lang.CharSequence, android.view.View.OnClickListener); method public android.support.design.widget.Snackbar setActionTextColor(android.content.res.ColorStateList); method public android.support.design.widget.Snackbar setActionTextColor(int); + method public void setCallback(android.support.design.widget.Snackbar.Callback); method public android.support.design.widget.Snackbar setDuration(int); method public android.support.design.widget.Snackbar setText(java.lang.CharSequence); method public android.support.design.widget.Snackbar setText(int); @@ -227,6 +228,12 @@ package android.support.design.widget { field public static final int LENGTH_SHORT = -1; // 0xffffffff } + public static abstract class Snackbar.Callback { + ctor public Snackbar.Callback(); + method public void onDismissed(android.support.design.widget.Snackbar); + method public void onShown(android.support.design.widget.Snackbar); + } + public class SwipeDismissBehavior extends android.support.design.widget.CoordinatorLayout.Behavior { ctor public SwipeDismissBehavior(); method public int getDragState(); diff --git a/src/android/support/design/widget/Snackbar.java b/src/android/support/design/widget/Snackbar.java index 80c24f124..f3df4f9e0 100644 --- a/src/android/support/design/widget/Snackbar.java +++ b/src/android/support/design/widget/Snackbar.java @@ -58,9 +58,40 @@ import static android.support.design.widget.AnimationUtils.FAST_OUT_SLOW_IN_INTE *

* Snackbars can contain an action which is set via * {@link #setAction(CharSequence, android.view.View.OnClickListener)}. + *

+ * To be notified when a snackbar has been shown or dismissed, you can provide a {@link Callback} + * via {@link #setCallback(Callback)}.

*/ public class Snackbar { + /** + * Callback class for {@link Snackbar} instances. + * + * @see Snackbar#setCallback(Callback) + */ + public static abstract class Callback { + /** + * Called when the given {@link Snackbar} has been dismissed, either through a time-out, + * having been manually dismissed, or an action being clicked. + * + * @param snackbar The snackbar which has been dismissed. + * @see Snackbar#dismiss() + */ + public void onDismissed(Snackbar snackbar) { + // empty + } + + /** + * Called when the given {@link Snackbar} is visible. + * + * @param snackbar The snackbar which is now visible. + * @see Snackbar#show() + */ + public void onShown(Snackbar snackbar) { + // empty + } + } + /** * @hide */ @@ -110,6 +141,7 @@ public class Snackbar { private final Context mContext; private final SnackbarLayout mView; private int mDuration; + private Callback mCallback; Snackbar(ViewGroup parent) { mParent = parent; @@ -314,6 +346,13 @@ public class Snackbar { SnackbarManager.getInstance().dismiss(mManagerCallback); } + /** + * Set a callback to be called when this the visibility of this {@link Snackbar} changes. + */ + public void setCallback(Callback callback) { + mCallback = callback; + } + private final SnackbarManager.Callback mManagerCallback = new SnackbarManager.Callback() { @Override public void show() { @@ -394,6 +433,9 @@ public class Snackbar { @Override public void onAnimationEnd(View view) { + if (mCallback != null) { + mCallback.onShown(Snackbar.this); + } SnackbarManager.getInstance().onShown(mManagerCallback); } }).start(); @@ -404,6 +446,9 @@ public class Snackbar { anim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationEnd(Animation animation) { + if (mCallback != null) { + mCallback.onShown(Snackbar.this); + } SnackbarManager.getInstance().onShown(mManagerCallback); } @@ -464,7 +509,11 @@ public class Snackbar { private void onViewHidden() { // First remove the view from the parent mParent.removeView(mView); - // Now, tell the SnackbarManager that it has been dismissed + // Now call the dismiss listener (if available) + if (mCallback != null) { + mCallback.onDismissed(this); + } + // Finally, tell the SnackbarManager that it has been dismissed SnackbarManager.getInstance().onDismissed(mManagerCallback); }