From 73bbd4cbffd4c881b8b3a41c4ca9189fecad00a5 Mon Sep 17 00:00:00 2001 From: Andres Morales Date: Fri, 31 Oct 2014 18:23:47 -0700 Subject: [PATCH 1/2] Request PIN confirmation to enable OEM unlock Bug: 18191568 Change-Id: I1cfce5131c96711876953a28d8d642342d15201e --- res/values/strings.xml | 5 +++++ .../android/settings/DevelopmentSettings.java | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 309172728b1..2329a9ef2cc 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3392,6 +3392,11 @@ Enable OEM unlock Allow the device to be OEM unlocked + + Enter your PIN + + Enter your device PIN to enable OEM unlock + Wireless display certification diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index d410366c937..97a3b68dd88 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -31,6 +31,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.hardware.usb.IUsbManager; import android.net.wifi.WifiManager; import android.os.AsyncTask; @@ -162,6 +163,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst"; + private static final int REQUEST_CODE_ENABLE_OEM_UNLOCK = 0; + private static String DEFAULT_LOG_RING_BUFFER_SIZE_IN_BYTES = "262144"; // 256K private IWindowManager mWindowManager; @@ -1311,6 +1314,10 @@ public class DevelopmentSettings extends SettingsPreferenceFragment writeDebuggerOptions(); updateDebuggerOptions(); } + } else if (requestCode == REQUEST_CODE_ENABLE_OEM_UNLOCK) { + if (resultCode == Activity.RESULT_OK) { + Utils.setOemUnlockEnabled(getActivity(), mEnableOemUnlock.isChecked()); + } } else { super.onActivityResult(requestCode, resultCode, data); } @@ -1364,7 +1371,9 @@ public class DevelopmentSettings extends SettingsPreferenceFragment } else if (preference == mBtHciSnoopLog) { writeBtHciSnoopLogOptions(); } else if (preference == mEnableOemUnlock) { - Utils.setOemUnlockEnabled(getActivity(), mEnableOemUnlock.isChecked()); + if (!showKeyguardConfirmation(getResources(), REQUEST_CODE_ENABLE_OEM_UNLOCK)) { + Utils.setOemUnlockEnabled(getActivity(), mEnableOemUnlock.isChecked()); + } } else if (preference == mAllowMockLocation) { Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, @@ -1426,6 +1435,13 @@ public class DevelopmentSettings extends SettingsPreferenceFragment return false; } + private boolean showKeyguardConfirmation(Resources resources, int requestCode) { + return new ChooseLockSettingsHelper(getActivity(), this) + .launchConfirmationActivity(requestCode, + resources.getString(R.string.oem_unlock_enable_pin_prompt), + resources.getString(R.string.oem_unlock_enable_pin_description)); + } + @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (HDCP_CHECKING_KEY.equals(preference.getKey())) { From 48b0b241aa30c5b4c97b74e62bbd806e88fd28a0 Mon Sep 17 00:00:00 2001 From: Andres Morales Date: Tue, 4 Nov 2014 10:58:19 -0800 Subject: [PATCH 2/2] Confirm enabling OEM unlock with warning dialog Bug: 18227644 Change-Id: I326a4cf215ef0e30fd8a054964e0efeb3f627d89 --- res/values/strings.xml | 4 +++ .../android/settings/DevelopmentSettings.java | 30 +++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 2329a9ef2cc..d163ecc1bb4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3396,6 +3396,10 @@ Enter your PIN Enter your device PIN to enable OEM unlock + + Warning + + Enabling OEM unlock disables theft protection features on this device and may void your warranty. Continue? diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 97a3b68dd88..4af2baf47d2 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -1279,6 +1279,24 @@ public class DevelopmentSettings extends SettingsPreferenceFragment getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0); } + private void confirmEnableOemUnlock() { + DialogInterface.OnClickListener onConfirmListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Utils.setOemUnlockEnabled(getActivity(), true); + updateAllOptions(); + } + }; + + new AlertDialog.Builder(getActivity()) + .setTitle(R.string.confirm_enable_oem_unlock_title) + .setMessage(R.string.confirm_enable_oem_unlock_text) + .setPositiveButton(R.string.yes, onConfirmListener) + .setNegativeButton(android.R.string.cancel, null) + .create() + .show(); + } + @Override public void onSwitchChanged(Switch switchView, boolean isChecked) { if (switchView != mSwitchBar.getSwitch()) { @@ -1316,7 +1334,11 @@ public class DevelopmentSettings extends SettingsPreferenceFragment } } else if (requestCode == REQUEST_CODE_ENABLE_OEM_UNLOCK) { if (resultCode == Activity.RESULT_OK) { - Utils.setOemUnlockEnabled(getActivity(), mEnableOemUnlock.isChecked()); + if (mEnableOemUnlock.isChecked()) { + confirmEnableOemUnlock(); + } else { + Utils.setOemUnlockEnabled(getActivity(), false); + } } } else { super.onActivityResult(requestCode, resultCode, data); @@ -1372,7 +1394,11 @@ public class DevelopmentSettings extends SettingsPreferenceFragment writeBtHciSnoopLogOptions(); } else if (preference == mEnableOemUnlock) { if (!showKeyguardConfirmation(getResources(), REQUEST_CODE_ENABLE_OEM_UNLOCK)) { - Utils.setOemUnlockEnabled(getActivity(), mEnableOemUnlock.isChecked()); + if (mEnableOemUnlock.isChecked()) { + confirmEnableOemUnlock(); + } else { + Utils.setOemUnlockEnabled(getActivity(), false); + } } } else if (preference == mAllowMockLocation) { Settings.Secure.putInt(getActivity().getContentResolver(),