Skip to content

Instantly share code, notes, and snippets.

@andersonkxiass
Last active April 24, 2017 12:50
Show Gist options
  • Save andersonkxiass/0b722be03995ddb62faf6140eb1ab77f to your computer and use it in GitHub Desktop.
Save andersonkxiass/0b722be03995ddb62faf6140eb1ab77f 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)
void showContactsPermissionRequest(final PermissionRequest request) {
showRationaleDialog(R.string.request_permission_contacts, request);
}
@OnShowRationale(Manifest.permission.CAMERA)
void showCameraPermissionRequest(final PermissionRequest request) {
showRationaleDialog(R.string.request_permission_camera, request);
}
@OnShowRationale(Manifest.permission.ACCESS_FINE_LOCATION)
void showLocationPermissionRequest(final PermissionRequest request) {
showRationaleDialog(R.string.request_permission_location, request);
}
@OnShowRationale(Manifest.permission.READ_PHONE_STATE)
void showPhoneStatePermissionRequest(final PermissionRequest request) {
showRationaleDialog(R.string.request_permission_phone_state, request);
}
@OnShowRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void showStoragePermissionRequest(final PermissionRequest request) {
showRationaleDialog(R.string.request_permission_storage, request);
}
//Denied
@OnPermissionDenied(Manifest.permission.READ_CONTACTS)
void showDeniedForContacts() {
}
@OnPermissionDenied(Manifest.permission.CAMERA)
void showDeniedForCamera() {
}
@OnPermissionDenied(Manifest.permission.ACCESS_FINE_LOCATION)
void showDeniedForLocation() {
}
@OnPermissionDenied(Manifest.permission.READ_PHONE_STATE)
void showDeniedForPhoneState() {
}
@OnPermissionDenied(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void showDeniedForStorage() {
}
//Never Ask Again
@OnNeverAskAgain(Manifest.permission.CAMERA)
void showNeverAskForPermissions() {
}
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