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
This commit is contained in:
Chris Banes 2016-11-30 01:19:00 +00:00 committed by Travis Collins
parent 868ae2938c
commit fe0feddf23
2 changed files with 57 additions and 1 deletions

View File

@ -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();

View File

@ -58,9 +58,40 @@ import static android.support.design.widget.AnimationUtils.FAST_OUT_SLOW_IN_INTE
* <p>
* Snackbars can contain an action which is set via
* {@link #setAction(CharSequence, android.view.View.OnClickListener)}.
* <p>
* To be notified when a snackbar has been shown or dismissed, you can provide a {@link Callback}
* via {@link #setCallback(Callback)}.</p>
*/
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);
}