surinfv
12/6/2017 - 9:14 AM

permissions Rx

check permissions with rxPermissions library and open apps settings page

public void checkAllPermissions() {
        final String[] permissionsArray = new String[]{
                Manifest.permission.CALL_PHONE,
                Manifest.permission.READ_CALL_LOG,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.CAMERA,
                Manifest.permission.RECORD_AUDIO,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.READ_PHONE_STATE};

        rxPermissions.request(permissionsArray)
                .subscribe(allPermissionsGranted -> {
                    if (allPermissionsGranted) {
                        ((ArmApplication) this.getApplication()).initLogger(true);
                        AppConfig.getInstance().loadPreferences();
                        setIMEI();
                    } else {
                        rxPermissions.shouldShowRequestPermissionRationale(LoginActivity.this, permissionsArray)
                                .subscribe(canAskAgain -> {
                                    if (canAskAgain) {
                                        checkAllPermissions();
                                    } else {
                                        AlertDialog.Builder permDialog = new AlertDialog.Builder(this);
                                        permDialog.setTitle(R.string.permissions_alert_title)
                                                .setMessage(R.string.permissions_alert_message)
                                                .setPositiveButton(R.string.permissions_alert_positive_button, (dialogInterface, i) -> {
                                                    checkAllPermissions();
                                                })
                                                .setNeutralButton(R.string.permissions_alert_neutral_button, (dialogInterface, i) -> {
                                                    openSettings();
                                                    LoginActivity.this.finishAndRemoveTask();
                                                });
                                        permDialog.show();
                                    }
                                });
                    }
                });
    }

    private void openSettings() {
        Intent intent = new Intent();
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        Uri uri = Uri.fromParts("package", getPackageName(), null);
        intent.setData(uri);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        startActivity(intent);
    }