Merge "Disallow OEM unlock when DISALLOW_FACTORY_RESET applies" into nyc-mr1-dev
am: e6e8c92134

* commit 'e6e8c92134b7a212058d7728007407eb74720625':
  Disallow OEM unlock when DISALLOW_FACTORY_RESET applies

Change-Id: I2389a5518a55fc3131a91fb5a5d8af376d79d936
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 44cf585..cdee328 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -51,10 +51,11 @@
         android:title="@string/bt_hci_snoop_log"
         android:summary="@string/bt_hci_snoop_log_summary"/>
 
-    <SwitchPreference
+    <com.android.settingslib.RestrictedSwitchPreference
         android:key="oem_unlock_enable"
         android:title="@string/oem_unlock_enable"
-        android:summary="@string/oem_unlock_enable_summary"/>
+        android:summary="@string/oem_unlock_enable_summary"
+        settings:useAdditionalSummary="true"/>
 
     <PreferenceScreen
         android:key="running_apps"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index e28a586..6a0abe3 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -239,7 +239,7 @@
     private SwitchPreference mBugreportInPower;
     private RestrictedSwitchPreference mKeepScreenOn;
     private SwitchPreference mBtHciSnoopLog;
-    private SwitchPreference mEnableOemUnlock;
+    private RestrictedSwitchPreference mEnableOemUnlock;
     private SwitchPreference mDebugViewAttributes;
     private SwitchPreference mForceAllowOnExternal;
 
@@ -372,7 +372,7 @@
         mBugreportInPower = findAndInitSwitchPref(BUGREPORT_IN_POWER_KEY);
         mKeepScreenOn = (RestrictedSwitchPreference) findAndInitSwitchPref(KEEP_SCREEN_ON);
         mBtHciSnoopLog = findAndInitSwitchPref(BT_HCI_SNOOP_LOG);
-        mEnableOemUnlock = findAndInitSwitchPref(ENABLE_OEM_UNLOCK);
+        mEnableOemUnlock = (RestrictedSwitchPreference) findAndInitSwitchPref(ENABLE_OEM_UNLOCK);
         if (!showEnableOemUnlockPreference()) {
             removePreference(mEnableOemUnlock);
             mEnableOemUnlock = null;
@@ -1021,7 +1021,21 @@
 
     private void updateOemUnlockOptions() {
         if (mEnableOemUnlock != null) {
+            // Showing mEnableOemUnlock preference as device has persistent data block.
+            mEnableOemUnlock.setDisabledByAdmin(null);
             mEnableOemUnlock.setEnabled(enableOemUnlockPreference());
+            if (mEnableOemUnlock.isEnabled()) {
+                // mEnableOemUnlock is enabled as device's flash lock is unlocked.
+                if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
+                        UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId())) {
+                    // Set mEnableOemUnlock to disabled as restriction is set, but not by admin.
+                    mEnableOemUnlock.setEnabled(false);
+                } else {
+                    // Check restriction, disable mEnableOemUnlock and apply policy transparency.
+                    mEnableOemUnlock
+                            .checkRestrictionAndSetDisabled(UserManager.DISALLOW_FACTORY_RESET);
+                }
+            }
         }
     }