diff options
author | Lee Chou <leechou@google.com> | 2020-03-02 11:32:50 +0800 |
---|---|---|
committer | Lee Chou <leechou@google.com> | 2020-03-02 05:23:49 +0000 |
commit | ee81a02109a29dd838ee8d19d5f4c01252bd5c14 (patch) | |
tree | e64e1cf86ac8cee03695ad7417e0380ceecff06b /src/com/android/settings/security | |
parent | d09ecc3e9631c34146d466c18495d83392b0c1ad (diff) | |
download | packages_apps_Settings-ee81a02109a29dd838ee8d19d5f4c01252bd5c14.tar.gz packages_apps_Settings-ee81a02109a29dd838ee8d19d5f4c01252bd5c14.tar.bz2 packages_apps_Settings-ee81a02109a29dd838ee8d19d5f4c01252bd5c14.zip |
Require authorization before turning off eSIM security feature
eSIM has a feature that requires an auth check before deletion, this
adds a security check before allowing the security feature to be turned
off.
TogglePreferenceController was changed to BasePreferenceController to
separate updating the state from UI press and updating from code.
Bug: 150568010
Test: mp settingsg and manual testing
Change-Id: I9e74e173720dce7b25d2d8a1e9004862cdb5e2e0
Diffstat (limited to 'src/com/android/settings/security')
-rw-r--r-- | src/com/android/settings/security/ConfirmSimDeletionPreferenceController.java | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/com/android/settings/security/ConfirmSimDeletionPreferenceController.java b/src/com/android/settings/security/ConfirmSimDeletionPreferenceController.java index f24d8db32b..8d093c0bc4 100644 --- a/src/com/android/settings/security/ConfirmSimDeletionPreferenceController.java +++ b/src/com/android/settings/security/ConfirmSimDeletionPreferenceController.java @@ -24,11 +24,13 @@ import androidx.preference.Preference; import androidx.preference.TwoStatePreference; import com.android.settings.R; -import com.android.settings.core.TogglePreferenceController; +import com.android.settings.core.BasePreferenceController; import com.android.settings.network.telephony.MobileNetworkUtils; +import com.android.settings.wifi.dpp.WifiDppUtils; /** Enable/disable user confirmation before deleting an eSim */ -public class ConfirmSimDeletionPreferenceController extends TogglePreferenceController { +public class ConfirmSimDeletionPreferenceController extends BasePreferenceController implements + Preference.OnPreferenceChangeListener{ public static final String KEY_CONFIRM_SIM_DELETION = "confirm_sim_deletion"; private boolean mConfirmationDefaultOn; @@ -53,21 +55,39 @@ public class ConfirmSimDeletionPreferenceController extends TogglePreferenceCont == 1; } - @Override public boolean isChecked() { return getGlobalState(); } - @Override public boolean setChecked(boolean isChecked) { Settings.Global.putInt( mContext.getContentResolver(), KEY_CONFIRM_SIM_DELETION, isChecked ? 1 : 0); return true; } + // handle UI change @Override - public void updateState(Preference preference) { + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (!preference.getKey().equals(getPreferenceKey())) { + return false; + } + if (!isChecked()) { + setChecked(true); + return true; + } else { + // prevent disabling the feature until authorized + WifiDppUtils.showLockScreen(mContext, () -> { + // set data + setChecked(false); + // set UI + ((TwoStatePreference) preference).setChecked(false); + }); + return false; + } + } + @Override + public void updateState(Preference preference) { final KeyguardManager keyguardManager = mContext.getSystemService(KeyguardManager.class); if (!keyguardManager.isKeyguardSecure()) { preference.setEnabled(false); |