Skip to content
This repository has been archived by the owner on Jul 2, 2021. It is now read-only.

Commit

Permalink
Merge pull request #69 from rfgamaral/feature/snackbar-callback
Browse files Browse the repository at this point in the history
Add support for Snackbar.Callback to permission listeners
  • Loading branch information
pedrovgs authored Jun 13, 2016
2 parents 1c50ec7 + 006dcc3 commit 4fd1903
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 4 deletions.
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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);
```
Expand Down Expand Up @@ -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);
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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) {
Expand All @@ -64,6 +66,9 @@ private void showSnackbar() {
if (buttonText != null && onButtonClickListener != null) {
snackbar.setAction(buttonText, onButtonClickListener);
}
if (snackbarCallback != null) {
snackbar.setCallback(snackbarCallback);
}
snackbar.show();
}

Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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) {
Expand All @@ -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();
}

Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
}
}
11 changes: 11 additions & 0 deletions sample/src/main/java/com/karumi/dexter/sample/SampleActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 =
Expand Down

0 comments on commit 4fd1903

Please sign in to comment.