Skip to content

Instantly share code, notes, and snippets.

@andersonkxiass
Last active April 24, 2017 12:49
Show Gist options
  • Save andersonkxiass/92d0d0eaa2920b67bdf6194d994a9f87 to your computer and use it in GitHub Desktop.
Save andersonkxiass/92d0d0eaa2920b67bdf6194d994a9f87 to your computer and use it in GitHub Desktop.
@RuntimePermissions
public class PermissionControlActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permissions);
checkPermissions();
}
private void checkPermissions() {
PermissionControlActivityPermissionsDispatcher.canGoWithCheck(this);
}
@NeedsPermission({Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE})
void canGo() {
//Permissions ok, go to next flow step.
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionControlActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
@OnShowRationale({Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE})
void rationalePermissionsFlow(final PermissionRequest request) {
showRationaleDialog(R.string.request_permission_contacts, request);
}
//Denied
@OnPermissionDenied({Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE})
void deniedPermissionsFlow() {
}
//Never Ask Again
@OnNeverAskAgain({Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE})
void neverAskPermissionsFlow() {
}
private void showRationaleDialog(@StringRes int messageResId, final PermissionRequest request) {
new AlertDialog.Builder(this)
.setPositiveButton(R.string.button_allow, (dialog, which) -> request.proceed())
.setNegativeButton(R.string.button_deny, (dialog, which) -> request.cancel())
.setCancelable(false)
.setMessage(messageResId)
.show();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment