diff options
| author | Svetoslav <svetoslavganov@google.com> | 2014-10-16 14:44:25 -0700 |
|---|---|---|
| committer | Svetoslav <svetoslavganov@google.com> | 2014-10-16 17:35:07 -0700 |
| commit | 3ea423ae0ff56d249b6844b3a68c67ee5eba243d (patch) | |
| tree | 41873caacc9be44efd31ffa435ea67814e141894 /src/com/android/settings/accessibility | |
| parent | 4909c412fa8c495f1abba3c7d3fe0c32f08934db (diff) | |
| download | packages_apps_Settings-3ea423ae0ff56d249b6844b3a68c67ee5eba243d.tar.gz packages_apps_Settings-3ea423ae0ff56d249b6844b3a68c67ee5eba243d.tar.bz2 packages_apps_Settings-3ea423ae0ff56d249b6844b3a68c67ee5eba243d.zip | |
User to confirm credentials if an accessibility service changes encryption.
When an accessibility service is enabled we are not using the user secure
lock when encrypting the data. If the latter is already used for encryption
we are decreasing the encryption level and therefore shall challenge the
user with their secure lock.
bug:17881324
Change-Id: If8905c05e20bc6bb6a6415e501871e5ad83f3d86
Diffstat (limited to 'src/com/android/settings/accessibility')
| -rw-r--r-- | src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java | 64 |
1 files changed, 57 insertions, 7 deletions
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index 2375061dc..71b586287 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -17,8 +17,10 @@ package com.android.settings.accessibility; import android.accessibilityservice.AccessibilityServiceInfo; +import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; +import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; @@ -37,6 +39,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.android.internal.widget.LockPatternUtils; +import com.android.settings.ConfirmDeviceCredentialActivity; import com.android.settings.R; import com.android.settings.widget.ToggleSwitch; import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener; @@ -52,6 +55,10 @@ public class ToggleAccessibilityServicePreferenceFragment private static final int DIALOG_ID_ENABLE_WARNING = 1; private static final int DIALOG_ID_DISABLE_WARNING = 2; + public static final int ACTIVITY_REQUEST_CONFIRM_CREDENTIAL = 1; + + private LockPatternUtils mLockPatternUtils; + private final SettingsContentObserver mSettingsContentObserver = new SettingsContentObserver(new Handler()) { @Override @@ -68,6 +75,12 @@ public class ToggleAccessibilityServicePreferenceFragment private int mShownDialogId; @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mLockPatternUtils = new LockPatternUtils(getActivity()); + } + + @Override public void onResume() { mSettingsContentObserver.register(getContentResolver()); super.onResume(); @@ -270,26 +283,63 @@ public class ToggleAccessibilityServicePreferenceFragment } @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == ACTIVITY_REQUEST_CONFIRM_CREDENTIAL) { + if (resultCode == Activity.RESULT_OK) { + handleConfirmServiceEnabled(true); + } else { + handleConfirmServiceEnabled(false); + } + } + } + + @Override public void onClick(DialogInterface dialog, int which) { final boolean checked; switch (which) { case DialogInterface.BUTTON_POSITIVE: - checked = (mShownDialogId == DIALOG_ID_ENABLE_WARNING); - mSwitchBar.setCheckedInternal(checked); - getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked); - onPreferenceToggled(mPreferenceKey, checked); + if (mShownDialogId == DIALOG_ID_ENABLE_WARNING) { + if (LockPatternUtils.isDeviceEncrypted()) { + String title = createConfirmCredentialReasonMessage(); + Intent intent = ConfirmDeviceCredentialActivity.createIntent(title, null); + startActivityForResult(intent, ACTIVITY_REQUEST_CONFIRM_CREDENTIAL); + } else { + handleConfirmServiceEnabled(true); + } + } else { + handleConfirmServiceEnabled(false); + } break; case DialogInterface.BUTTON_NEGATIVE: checked = (mShownDialogId == DIALOG_ID_DISABLE_WARNING); - mSwitchBar.setCheckedInternal(checked); - getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked); - onPreferenceToggled(mPreferenceKey, checked); + handleConfirmServiceEnabled(checked); break; default: throw new IllegalArgumentException(); } } + private void handleConfirmServiceEnabled(boolean confirmed) { + mSwitchBar.setCheckedInternal(confirmed); + getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, confirmed); + onPreferenceToggled(mPreferenceKey, confirmed); + } + + private String createConfirmCredentialReasonMessage() { + int resId = R.string.enable_service_password_reason; + switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) { + case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: { + resId = R.string.enable_service_pattern_reason; + } break; + case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: + case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: { + resId = R.string.enable_service_pin_reason; + } break; + } + return getString(resId, getAccessibilityServiceInfo().getResolveInfo() + .loadLabel(getPackageManager())); + } + @Override protected void onInstallSwitchBarToggleSwitch() { super.onInstallSwitchBarToggleSwitch(); |
