Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.

Added RationaleDialogCallback #208

Merged
merged 5 commits into from
Mar 15, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 13 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,32 +152,25 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
```

### RationaleCallbacks
Implement this callback if you want to interact with the rationale dialog.
### Interacting with the rationale dialog

```java
public class RationaleFragment extends Fragment implements EasyPermissions.RationaleCallbacks {
Implement the EasyPermissions.RationaleCallbacks if you want to interact with the rationale dialog.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: let's make it code font "`EasyPermissions.RationaleCallbacks`"


@Override
public void onRationaleAccepted(int requestCode) {
// Rationale accpets to request some permissions
// ...
}
```java
@Override
public void onRationaleAccepted(int requestCode) {
// Rationale accpets to request some permissions
// ...
}

@Override
public void onRationaleDenied(int requestCode) {
// Rationale denied to request some permissions
// ...
}
@Override
public void onRationaleDenied(int requestCode) {
// Rationale denied to request some permissions
// ...
}
```

Check out [RationaleFragment](https://github.com/googlesamples/blob/master/app/src/main/java/pub/devrel/easypermissions/sample/RationaleFragment.java) in the sample app folder for the full example.

Note that permissions are not requested when the user denies or cancel the rationale dialog and `onPermissionsDenied` will be invoked.
The user will need to reinvoke the function that requests permissions. This is callbacks can be useful for analytics tracking and UI states
updates.

Rationale callbacks don't necessarily imply permission changes. To check for those, see the EasyPermissions.PermissionCallbacks.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here: `...`.


## LICENSE

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;

public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,
EasyPermissions.RationaleCallbacks{

private static final String TAG = "MainActivity";
private static final String[] LOCATION_AND_CONTACTS =
Expand Down Expand Up @@ -147,10 +148,19 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
getString(R.string.returned_from_app_settings_to_activity,
hasCameraPermission() ? yes : no,
hasLocationAndContactsPermissions() ? yes : no,
hasSmsPermission() ? yes : no,
hasStoragePermission() ? yes : no),
hasSmsPermission() ? yes : no),
Toast.LENGTH_LONG)
.show();
}
}

@Override
public void onRationaleAccepted(int requestCode) {
Log.d(TAG, "onRationaleAccepted:" + requestCode);
}

@Override
public void onRationaleDenied(int requestCode) {
Log.d(TAG, "onRationaleDenied:" + requestCode);
}
}

This file was deleted.

7 changes: 0 additions & 7 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,4 @@
android:layout_height="wrap_content"
tools:layout="@layout/fragment_main" />

<fragment
android:id="@+id/rationalFragment"
android:name="pub.devrel.easypermissions.sample.RationaleFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:layout="@layout/fragment_rational" />

</LinearLayout>
13 changes: 0 additions & 13 deletions app/src/main/res/layout/fragment_rational.xml

This file was deleted.

3 changes: 0 additions & 3 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,13 @@
<string name="rationale_camera">This app needs access to your camera so you can take pictures.</string>
<string name="rationale_location_contacts">This app needs access to your location and contacts to know where and who you are.</string>
<string name="rationale_sms">This app needs access to your sms to read all your great messages.</string>
<string name="rationale_storage">This app needs access to your storage to save files.</string>
<string name="returned_from_app_settings_to_activity">
Returned from app settings to MainActivity with the following permissions:
\n\nCamera: %s
\nLocation &amp; Contacts: %s
\nSMS: %s
\nStorage: %s
</string>
<string name="camera">Camera</string>
<string name="location_and_contacts">Location and Contacts</string>
<string name="sms">SMS</string>
<string name="storage">Storage</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ public interface PermissionCallbacks extends ActivityCompat.OnRequestPermissions
*/
public interface RationaleCallbacks {
void onRationaleAccepted(int requestCode);
void onRationaleDenied(int requestCode);

void onRationaleDenied(int requestCode);
}

private static final String TAG = "EasyPermissions";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,27 @@ class RationaleDialogClickListener implements Dialog.OnClickListener {
private Object mHost;
private RationaleDialogConfig mConfig;
private EasyPermissions.PermissionCallbacks mCallbacks;
private EasyPermissions.RationaleCallbacks mDialogCallbacks;
private EasyPermissions.RationaleCallbacks mRationaleCallbacks;

RationaleDialogClickListener(RationaleDialogFragmentCompat compatDialogFragment,
RationaleDialogConfig config,
EasyPermissions.PermissionCallbacks callbacks,
EasyPermissions.RationaleCallbacks dialogCallback) {
EasyPermissions.RationaleCallbacks rationaleCallbacks) {

mHost = compatDialogFragment.getParentFragment() != null
? compatDialogFragment.getParentFragment()
: compatDialogFragment.getActivity();

mConfig = config;
mCallbacks = callbacks;
mDialogCallbacks = dialogCallback;
mRationaleCallbacks = rationaleCallbacks;

}

RationaleDialogClickListener(RationaleDialogFragment dialogFragment,
RationaleDialogConfig config,
EasyPermissions.PermissionCallbacks callbacks) {
EasyPermissions.PermissionCallbacks callbacks,
EasyPermissions.RationaleCallbacks dialogCallback) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
mHost = dialogFragment.getParentFragment() != null ?
Expand All @@ -49,15 +50,16 @@ class RationaleDialogClickListener implements Dialog.OnClickListener {

mConfig = config;
mCallbacks = callbacks;
mRationaleCallbacks = dialogCallback;
}

@Override
public void onClick(DialogInterface dialog, int which) {
int requestCode = mConfig.requestCode;
if (which == Dialog.BUTTON_POSITIVE) {
String[] permissions = mConfig.permissions;
if (mDialogCallbacks != null) {
mDialogCallbacks.onRationaleAccepted(requestCode);
if (mRationaleCallbacks != null) {
mRationaleCallbacks.onRationaleAccepted(requestCode);
}
if (mHost instanceof Fragment) {
PermissionHelper.newInstance((Fragment) mHost).directRequestPermissions(requestCode, permissions);
Expand All @@ -69,8 +71,8 @@ public void onClick(DialogInterface dialog, int which) {
throw new RuntimeException("Host must be an Activity or Fragment!");
}
} else {
if (mDialogCallbacks != null) {
mDialogCallbacks.onRationaleDenied(requestCode);
if (mRationaleCallbacks != null) {
mRationaleCallbacks.onRationaleDenied(requestCode);
}
notifyPermissionDenied();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class RationaleDialogFragment extends DialogFragment {
public static final String TAG = "RationaleDialogFragment";

private EasyPermissions.PermissionCallbacks mPermissionCallbacks;
private EasyPermissions.RationaleCallbacks mRationaleCallbacks;
private boolean mStateSaved = false;

public static RationaleDialogFragment newInstance(
Expand All @@ -44,13 +45,23 @@ public static RationaleDialogFragment newInstance(
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1
&& getParentFragment() != null
&& getParentFragment() instanceof EasyPermissions.PermissionCallbacks) {
mPermissionCallbacks = (EasyPermissions.PermissionCallbacks) getParentFragment();
} else if (context instanceof EasyPermissions.PermissionCallbacks) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && getParentFragment() != null) {
if (getParentFragment() instanceof EasyPermissions.PermissionCallbacks) {
mPermissionCallbacks = (EasyPermissions.PermissionCallbacks) getParentFragment();
}
if (getParentFragment() instanceof EasyPermissions.RationaleCallbacks){
mRationaleCallbacks = (EasyPermissions.RationaleCallbacks) getParentFragment();
}

}

if (context instanceof EasyPermissions.PermissionCallbacks) {
mPermissionCallbacks = (EasyPermissions.PermissionCallbacks) context;
}

if (context instanceof EasyPermissions.RationaleCallbacks) {
mRationaleCallbacks = (EasyPermissions.RationaleCallbacks) context;
}
}

@Override
Expand Down Expand Up @@ -93,7 +104,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
// Get config from arguments, create click listener
RationaleDialogConfig config = new RationaleDialogConfig(getArguments());
RationaleDialogClickListener clickListener =
new RationaleDialogClickListener(this, config, mPermissionCallbacks);
new RationaleDialogClickListener(this, config, mPermissionCallbacks, mRationaleCallbacks);

// Create an AlertDialog
return config.createFrameworkDialog(getActivity(), clickListener);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public void onAttach(Context context) {
mPermissionCallbacks = (EasyPermissions.PermissionCallbacks) getParentFragment();
}
if (getParentFragment() instanceof EasyPermissions.RationaleCallbacks){
mRationaleCallbacks = (EasyPermissions.RationaleCallbacks) getParentFragment();
mRationaleCallbacks = (EasyPermissions.RationaleCallbacks) getParentFragment();
}
}

Expand All @@ -69,7 +69,7 @@ public void onAttach(Context context) {
}

if (context instanceof EasyPermissions.RationaleCallbacks) {
mRationaleCallbacks = (EasyPermissions.RationaleCallbacks) context;
mRationaleCallbacks = (EasyPermissions.RationaleCallbacks) context;
}
}

Expand Down