From 37d316d50a865fe9e17ff186f156577d22db8dd8 Mon Sep 17 00:00:00 2001 From: Ricardo Amaral Date: Mon, 6 Jun 2016 11:00:22 +0100 Subject: [PATCH 1/3] Add support for Snackbar callback --- ...nAnyDeniedMultiplePermissionsListener.java | 19 +++++++++++++++++-- .../SnackbarOnDeniedPermissionListener.java | 18 ++++++++++++++++-- .../karumi/dexter/sample/SampleActivity.java | 11 +++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/dexter/src/main/java/com/karumi/dexter/listener/multi/SnackbarOnAnyDeniedMultiplePermissionsListener.java b/dexter/src/main/java/com/karumi/dexter/listener/multi/SnackbarOnAnyDeniedMultiplePermissionsListener.java index 11163c6c..c432683a 100644 --- a/dexter/src/main/java/com/karumi/dexter/listener/multi/SnackbarOnAnyDeniedMultiplePermissionsListener.java +++ b/dexter/src/main/java/com/karumi/dexter/listener/multi/SnackbarOnAnyDeniedMultiplePermissionsListener.java @@ -36,6 +36,7 @@ public class SnackbarOnAnyDeniedMultiplePermissionsListener extends EmptyMultipl private final String text; private final String buttonText; private final View.OnClickListener onButtonClickListener; + private final Snackbar.Callback snackbarCallback; /** * @param rootView Parent view to show the snackbar @@ -44,11 +45,12 @@ public class SnackbarOnAnyDeniedMultiplePermissionsListener extends EmptyMultipl * @param onButtonClickListener Action performed when the user clicks the snackbar button */ private SnackbarOnAnyDeniedMultiplePermissionsListener(ViewGroup rootView, String text, - String buttonText, View.OnClickListener onButtonClickListener) { + String buttonText, View.OnClickListener onButtonClickListener, Snackbar.Callback snackbarCallback) { this.rootView = rootView; this.text = text; this.buttonText = buttonText; this.onButtonClickListener = onButtonClickListener; + this.snackbarCallback = snackbarCallback; } @Override public void onPermissionsChecked(MultiplePermissionsReport report) { @@ -64,6 +66,9 @@ private void showSnackbar() { if (buttonText != null && onButtonClickListener != null) { snackbar.setAction(buttonText, onButtonClickListener); } + if (snackbarCallback != null) { + snackbar.setCallback(snackbarCallback); + } snackbar.show(); } @@ -76,6 +81,7 @@ public static class Builder { private final String text; private String buttonText; private View.OnClickListener onClickListener; + private Snackbar.Callback snackbarCallback; private Builder(ViewGroup rootView, String text) { this.rootView = rootView; @@ -132,11 +138,20 @@ public Builder withOpenSettingsButton(@StringRes int buttonTextResourceId) { return withOpenSettingsButton(rootView.getContext().getString(buttonTextResourceId)); } + /** + * Adds a callback to handle the snackbar {@code onDismissed} and {@code onShown} events. + */ + public Builder withCallback(Snackbar.Callback callback) { + this.snackbarCallback = callback; + return this; + } + /** * Builds a new instance of {@link SnackbarOnAnyDeniedMultiplePermissionsListener} */ public SnackbarOnAnyDeniedMultiplePermissionsListener build() { - return new SnackbarOnAnyDeniedMultiplePermissionsListener(rootView, text, buttonText, onClickListener); + return new SnackbarOnAnyDeniedMultiplePermissionsListener(rootView, text, buttonText, onClickListener, + snackbarCallback); } } } diff --git a/dexter/src/main/java/com/karumi/dexter/listener/single/SnackbarOnDeniedPermissionListener.java b/dexter/src/main/java/com/karumi/dexter/listener/single/SnackbarOnDeniedPermissionListener.java index 24015773..c90ba97a 100644 --- a/dexter/src/main/java/com/karumi/dexter/listener/single/SnackbarOnDeniedPermissionListener.java +++ b/dexter/src/main/java/com/karumi/dexter/listener/single/SnackbarOnDeniedPermissionListener.java @@ -36,6 +36,7 @@ public class SnackbarOnDeniedPermissionListener extends EmptyPermissionListener private final String text; private final String buttonText; private final View.OnClickListener onButtonClickListener; + private final Snackbar.Callback snackbarCallback; /** * @param rootView Parent view to show the snackbar @@ -44,11 +45,12 @@ public class SnackbarOnDeniedPermissionListener extends EmptyPermissionListener * @param onButtonClickListener Action performed when the user clicks the snackbar button */ private SnackbarOnDeniedPermissionListener(ViewGroup rootView, String text, String buttonText, - View.OnClickListener onButtonClickListener) { + View.OnClickListener onButtonClickListener, Snackbar.Callback snackbarCallback) { this.rootView = rootView; this.text = text; this.buttonText = buttonText; this.onButtonClickListener = onButtonClickListener; + this.snackbarCallback = snackbarCallback; } @Override public void onPermissionDenied(PermissionDeniedResponse response) { @@ -58,6 +60,9 @@ private SnackbarOnDeniedPermissionListener(ViewGroup rootView, String text, Stri if (buttonText != null && onButtonClickListener != null) { snackbar.setAction(buttonText, onButtonClickListener); } + if (snackbarCallback != null) { + snackbar.setCallback(snackbarCallback); + } snackbar.show(); } @@ -70,6 +75,7 @@ public static class Builder { private final String text; private String buttonText; private View.OnClickListener onClickListener; + private Snackbar.Callback snackbarCallback; private Builder(ViewGroup rootView, String text) { this.rootView = rootView; @@ -126,11 +132,19 @@ public Builder withOpenSettingsButton(@StringRes int buttonTextResourceId) { return withOpenSettingsButton(rootView.getContext().getString(buttonTextResourceId)); } + /** + * Adds a callback to handle the snackbar {@code onDismissed} and {@code onShown} events. + */ + public Builder withCallback(Snackbar.Callback callback) { + this.snackbarCallback = callback; + return this; + } + /** * Builds a new instance of {@link SnackbarOnDeniedPermissionListener} */ public SnackbarOnDeniedPermissionListener build() { - return new SnackbarOnDeniedPermissionListener(rootView, text, buttonText, onClickListener); + return new SnackbarOnDeniedPermissionListener(rootView, text, buttonText, onClickListener, snackbarCallback); } } } diff --git a/sample/src/main/java/com/karumi/dexter/sample/SampleActivity.java b/sample/src/main/java/com/karumi/dexter/sample/SampleActivity.java index d8e72696..5ec4483e 100644 --- a/sample/src/main/java/com/karumi/dexter/sample/SampleActivity.java +++ b/sample/src/main/java/com/karumi/dexter/sample/SampleActivity.java @@ -23,6 +23,7 @@ import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; +import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; import android.view.ViewGroup; import android.widget.TextView; @@ -153,6 +154,16 @@ private void createPermissionListeners() { SnackbarOnDeniedPermissionListener.Builder.with(rootView, R.string.contacts_permission_denied_feedback) .withOpenSettingsButton(R.string.permission_rationale_settings_button_text) + .withCallback(new Snackbar.Callback() { + @Override + public void onShown(Snackbar snackbar) { + super.onShown(snackbar); + } + @Override + public void onDismissed(Snackbar snackbar, int event) { + super.onDismissed(snackbar, event); + } + }) .build()); PermissionListener dialogOnDeniedPermissionListener = From 3d9ffcab1173a0ace297f5890ed5f1ee61ac7063 Mon Sep 17 00:00:00 2001 From: Ricardo Amaral Date: Mon, 6 Jun 2016 11:05:54 +0100 Subject: [PATCH 2/3] Update README with Snackbar.Callback examples --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 9abfdef0..2bf4fca4 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,16 @@ PermissionListener snackbarPermissionListener = SnackbarOnDeniedPermissionListener.Builder .with(rootView, "Camera access is needed to take pictures of your dog") .withOpenSettingsButton("Settings") + .withCallback(new Snackbar.Callback() { + @Override + public void onShown(Snackbar snackbar) { + // Event handler for when the given Snackbar has been dismissed + } + @Override + public void onDismissed(Snackbar snackbar, int event) { + // Event handler for when the given Snackbar is visible. + } + }) .build(); Dexter.checkPermission(snackbarPermissionListener, Manifest.permission.CAMERA); ``` @@ -114,6 +124,16 @@ MultiplePermissionsListener snackbarMultiplePermissionsListener = SnackbarOnAnyDeniedMultiplePermissionsListener.Builder .with(rootView, "Camera and audio access is needed to take pictures of your dog") .withOpenSettingsButton("Settings") + .withCallback(new Snackbar.Callback() { + @Override + public void onShown(Snackbar snackbar) { + // Event handler for when the given Snackbar has been dismissed + } + @Override + public void onDismissed(Snackbar snackbar, int event) { + // Event handler for when the given Snackbar is visible + } + }) .build(); Dexter.checkPermissions(snackbarMultiplePermissionsListener, Manifest.permission.CAMERA, Manifest.permission.READ_CONTACTS, Manifest.permission.RECORD_AUDIO); ``` From 006dcc31653bca27ef7cbb1bcb3657b64c5a0588 Mon Sep 17 00:00:00 2001 From: Ricardo Amaral Date: Mon, 6 Jun 2016 11:13:47 +0100 Subject: [PATCH 3/3] Remove little dot from comment --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2bf4fca4..899fa2af 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ PermissionListener snackbarPermissionListener = } @Override public void onDismissed(Snackbar snackbar, int event) { - // Event handler for when the given Snackbar is visible. + // Event handler for when the given Snackbar is visible } }) .build();