Merge "Use the new OemLockService to get OEM lock state."

This commit is contained in:
TreeHugger Robot
2017-04-19 22:53:12 +00:00
committed by Android (Google) Code Review
5 changed files with 70 additions and 91 deletions

View File

@@ -73,6 +73,7 @@
<uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
<uses-permission android:name="android.permission.READ_SEARCH_INDEXABLES" /> <uses-permission android:name="android.permission.READ_SEARCH_INDEXABLES" />
<uses-permission android:name="android.permission.OEM_UNLOCK_STATE" /> <uses-permission android:name="android.permission.OEM_UNLOCK_STATE" />
<uses-permission android:name="android.permission.MANAGE_USER_OEM_UNLOCK_STATE" />
<uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" /> <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" /> <uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.MANAGE_FINGERPRINT" /> <uses-permission android:name="android.permission.MANAGE_FINGERPRINT" />

View File

@@ -25,6 +25,7 @@ import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.service.oemlock.OemLockManager;
import android.service.persistentdata.PersistentDataBlockManager; import android.service.persistentdata.PersistentDataBlockManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -67,12 +68,14 @@ public class MasterClearConfirm extends OptionsMenuFragment {
final PersistentDataBlockManager pdbManager = (PersistentDataBlockManager) final PersistentDataBlockManager pdbManager = (PersistentDataBlockManager)
getActivity().getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE); getActivity().getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
final OemLockManager oemLockManager = (OemLockManager)
getActivity().getSystemService(Context.OEM_LOCK_SERVICE);
if (pdbManager != null && !pdbManager.getOemUnlockEnabled() && if (pdbManager != null && !oemLockManager.isOemUnlockAllowed() &&
Utils.isDeviceProvisioned(getActivity())) { Utils.isDeviceProvisioned(getActivity())) {
// if OEM unlock is enabled, this will be wiped during FR process. If disabled, it // if OEM unlock is allowed, the persistent data block will be wiped during FR
// will be wiped here, unless the device is still being provisioned, in which case // process. If disabled, it will be wiped here, unless the device is still being
// the persistent data block will be preserved. // provisioned, in which case the persistent data block will be preserved.
new AsyncTask<Void, Void, Void>() { new AsyncTask<Void, Void, Void>() {
int mOldOrientation; int mOldOrientation;
ProgressDialog mProgressDialog; ProgressDialog mProgressDialog;

View File

@@ -59,7 +59,7 @@ import android.os.UserManager;
import android.os.storage.IStorageManager; import android.os.storage.IStorageManager;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.provider.Settings; import android.provider.Settings;
import android.service.persistentdata.PersistentDataBlockManager; import android.service.oemlock.OemLockManager;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.support.v14.preference.SwitchPreference; import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.ListPreference; import android.support.v7.preference.ListPreference;
@@ -238,7 +238,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
private static final int RESULT_DEBUG_APP = 1000; private static final int RESULT_DEBUG_APP = 1000;
private static final int RESULT_MOCK_LOCATION_APP = 1001; private static final int RESULT_MOCK_LOCATION_APP = 1001;
private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
private static final String FLASH_LOCKED_PROP = "ro.boot.flash.locked"; private static final String FLASH_LOCKED_PROP = "ro.boot.flash.locked";
private static final String SHORTCUT_MANAGER_RESET_KEY = "reset_shortcut_manager_throttling"; private static final String SHORTCUT_MANAGER_RESET_KEY = "reset_shortcut_manager_throttling";
@@ -252,7 +251,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
private IWebViewUpdateService mWebViewUpdateService; private IWebViewUpdateService mWebViewUpdateService;
private UserManager mUm; private UserManager mUm;
private WifiManager mWifiManager; private WifiManager mWifiManager;
private PersistentDataBlockManager mOemUnlockManager; private OemLockManager mOemLockManager;
private TelephonyManager mTelephonyManager; private TelephonyManager mTelephonyManager;
private SwitchBar mSwitchBar; private SwitchBar mSwitchBar;
@@ -383,8 +382,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
mBackupManager = IBackupManager.Stub.asInterface( mBackupManager = IBackupManager.Stub.asInterface(
ServiceManager.getService(Context.BACKUP_SERVICE)); ServiceManager.getService(Context.BACKUP_SERVICE));
mWebViewUpdateService = WebViewFactory.getUpdateService(); mWebViewUpdateService = WebViewFactory.getUpdateService();
mOemUnlockManager = (PersistentDataBlockManager) getActivity() mOemLockManager = (OemLockManager) getSystemService(Context.OEM_LOCK_SERVICE);
.getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mUm = (UserManager) getSystemService(Context.USER_SERVICE); mUm = (UserManager) getSystemService(Context.USER_SERVICE);
@@ -431,7 +429,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
mKeepScreenOn = (RestrictedSwitchPreference) findAndInitSwitchPref(KEEP_SCREEN_ON); mKeepScreenOn = (RestrictedSwitchPreference) findAndInitSwitchPref(KEEP_SCREEN_ON);
mBtHciSnoopLog = findAndInitSwitchPref(BT_HCI_SNOOP_LOG); mBtHciSnoopLog = findAndInitSwitchPref(BT_HCI_SNOOP_LOG);
mEnableOemUnlock = (RestrictedSwitchPreference) findAndInitSwitchPref(ENABLE_OEM_UNLOCK); mEnableOemUnlock = (RestrictedSwitchPreference) findAndInitSwitchPref(ENABLE_OEM_UNLOCK);
if (!showEnableOemUnlockPreference()) { if (!showEnableOemUnlockPreference(getActivity())) {
removePreference(mEnableOemUnlock); removePreference(mEnableOemUnlock);
mEnableOemUnlock = null; mEnableOemUnlock = null;
} }
@@ -1070,18 +1068,17 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1) > 0; Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1) > 0;
} }
private static boolean showEnableOemUnlockPreference() { private static boolean showEnableOemUnlockPreference(Context context) {
return !SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals(""); return context.getSystemService(Context.OEM_LOCK_SERVICE) != null;
} }
private boolean enableOemUnlockPreference() { private boolean enableOemUnlockPreference() {
return !isBootloaderUnlocked() && OemUnlockUtils.isOemUnlockAllowed(mUm); return !isBootloaderUnlocked() && mOemLockManager.canUserAllowOemUnlock();
} }
private void updateOemUnlockOptions() { private void updateOemUnlockOptions() {
if (mEnableOemUnlock != null) { if (mEnableOemUnlock != null) {
updateSwitchPreference(mEnableOemUnlock, updateSwitchPreference(mEnableOemUnlock, mOemLockManager.isOemUnlockAllowed());
OemUnlockUtils.isOemUnlockEnabled(getActivity()));
updateOemUnlockSettingDescription(); updateOemUnlockSettingDescription();
// Showing mEnableOemUnlock preference as device has persistent data block. // Showing mEnableOemUnlock preference as device has persistent data block.
mEnableOemUnlock.setDisabledByAdmin(null); mEnableOemUnlock.setDisabledByAdmin(null);
@@ -2339,7 +2336,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) { if (which == DialogInterface.BUTTON_POSITIVE) {
OemUnlockUtils.setOemUnlockEnabled(getActivity(), true); mOemLockManager.setOemUnlockAllowedByUser(true);
} }
} }
}; };
@@ -2410,7 +2407,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
if (mEnableOemUnlock.isChecked()) { if (mEnableOemUnlock.isChecked()) {
confirmEnableOemUnlock(); confirmEnableOemUnlock();
} else { } else {
OemUnlockUtils.setOemUnlockEnabled(getActivity(), false); mOemLockManager.setOemUnlockAllowedByUser(false);
} }
} }
} else { } else {
@@ -2480,7 +2477,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
confirmEnableOemUnlock(); confirmEnableOemUnlock();
} }
} else { } else {
OemUnlockUtils.setOemUnlockEnabled(getActivity(), false); mOemLockManager.setOemUnlockAllowedByUser(false);
} }
} else if (preference == mMockLocationAppPref) { } else if (preference == mMockLocationAppPref) {
Intent intent = new Intent(getActivity(), AppPicker.class); Intent intent = new Intent(getActivity(), AppPicker.class);
@@ -2821,7 +2818,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
} }
final List<String> keys = new ArrayList<String>(); final List<String> keys = new ArrayList<String>();
if (!showEnableOemUnlockPreference()) { if (!showEnableOemUnlockPreference(context)) {
keys.add(ENABLE_OEM_UNLOCK); keys.add(ENABLE_OEM_UNLOCK);
} }
return keys; return keys;
@@ -2849,11 +2846,10 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_bootloader_unlocked; oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_bootloader_unlocked;
} else if (isSimLockedDevice()) { } else if (isSimLockedDevice()) {
oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_sim_locked_device; oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_sim_locked_device;
} else if (!OemUnlockUtils.isOemUnlockAllowed(mUm)) { } else if (!mOemLockManager.canUserAllowOemUnlock()) {
// If the device isn't SIM-locked but OEM unlock is disabled by the system via the // If the device isn't SIM-locked but OEM unlock is disallowed by some party, this
// user restriction, this means either some other carrier restriction is in place or // means either some other carrier restriction is in place or the device hasn't been
// the device hasn't been able to confirm which restrictions (SIM-lock or otherwise) // able to confirm which restrictions (SIM-lock or otherwise) apply.
// apply.
oemUnlockSummary = oemUnlockSummary =
R.string.oem_unlock_enable_disabled_summary_connectivity_or_locked; R.string.oem_unlock_enable_disabled_summary_connectivity_or_locked;
} }
@@ -2876,12 +2872,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
* Returns {@code true} if the bootloader has been unlocked. Otherwise, returns {code false}. * Returns {@code true} if the bootloader has been unlocked. Otherwise, returns {code false}.
*/ */
private boolean isBootloaderUnlocked() { private boolean isBootloaderUnlocked() {
int flashLockState = PersistentDataBlockManager.FLASH_LOCK_UNKNOWN; return mOemLockManager.isDeviceOemUnlocked();
if (mOemUnlockManager != null) {
flashLockState = mOemUnlockManager.getFlashLockState();
}
return flashLockState == PersistentDataBlockManager.FLASH_LOCK_UNLOCKED;
} }

View File

@@ -1,61 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.development;
import android.content.Context;
import android.os.UserHandle;
import android.os.UserManager;
import android.service.persistentdata.PersistentDataBlockManager;
import android.util.Log;
public class OemUnlockUtils {
private static final String TAG = "OemUnlockUtils";
/**
* Returns whether or not this device is able to be OEM unlocked.
*/
static boolean isOemUnlockEnabled(Context context) {
PersistentDataBlockManager manager = (PersistentDataBlockManager)
context.getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
return manager.getOemUnlockEnabled();
}
/**
* Allows enabling or disabling OEM unlock on this device. OEM unlocked
* devices allow users to flash other OSes to them.
*/
static void setOemUnlockEnabled(Context context, boolean enabled) {
try {
PersistentDataBlockManager manager = (PersistentDataBlockManager)
context.getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
manager.setOemUnlockEnabled(enabled);
} catch (SecurityException e) {
Log.e(TAG, "Fail to set oem unlock.", e);
}
}
/**
* Returns {@code true} if OEM unlock is disallowed by user restriction
* {@link UserManager#DISALLOW_FACTORY_RESET} or {@link UserManager#DISALLOW_OEM_UNLOCK}.
* Otherwise, returns {@code false}.
*/
static boolean isOemUnlockAllowed(UserManager um) {
final UserHandle userHandle = UserHandle.of(UserHandle.myUserId());
return !(um.hasBaseUserRestriction(UserManager.DISALLOW_OEM_UNLOCK, userHandle)
|| um.hasBaseUserRestriction(UserManager.DISALLOW_FACTORY_RESET, userHandle));
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.service.oemlock;
/**
* Make OemLockManager available to Robolectric.
*/
public class OemLockManager {
public void setOemUnlockAllowedByCarrier(boolean allowed, byte[] signature) {}
public boolean isOemUnlockAllowedByCarrier() {
return true;
}
public void setOemUnlockAllowedByUser(boolean allowed) {}
public boolean isOemUnlockAllowedByUser() {
return false;
}
public boolean canUserAllowOemUnlock() {
return true;
}
public boolean isOemUnlockAllowed() {
return false;
}
public boolean isDeviceOemUnlocked() {
return false;
}
}