From fd0230bffc37482f85e6ed80a421eca1e91a0978 Mon Sep 17 00:00:00 2001 From: William Hester Date: Wed, 3 Apr 2019 16:01:58 -0700 Subject: [PATCH] Disable lock screen and enable location in THM In Test Harness Mode, the lock screen will be disabled so that tests can start immediately, and location will be enabled (for use with CTS). Bug: 80137798 Test: make, adb shell cmd testharness enable Change-Id: I08f4c06865013d2cbdf7e95cf12fdf469c30b9e7 --- .../testharness/TestHarnessModeService.java | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/testharness/TestHarnessModeService.java b/services/core/java/com/android/server/testharness/TestHarnessModeService.java index 4f118872eb0a0..0b0ff660cc01a 100644 --- a/services/core/java/com/android/server/testharness/TestHarnessModeService.java +++ b/services/core/java/com/android/server/testharness/TestHarnessModeService.java @@ -25,6 +25,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.UserInfo; import android.debug.AdbManagerInternal; +import android.location.LocationManager; import android.os.BatteryManager; import android.os.Binder; import android.os.IBinder; @@ -39,6 +40,7 @@ import android.util.Slog; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; +import com.android.internal.widget.LockPatternUtils; import com.android.server.LocalServices; import com.android.server.PersistentDataBlockManagerInternal; import com.android.server.SystemService; @@ -95,6 +97,12 @@ public class TestHarnessModeService extends SystemService { super.onBootPhase(phase); } + /** + * Begin the setup for Test Harness Mode. + * + *

Note: This is just the things that need to be done before the device finishes + * booting for the first time. Everything else should be done after the system is done booting. + */ private void setUpTestHarnessMode() { Slog.d(TAG, "Setting up test harness mode"); byte[] testHarnessModeData = getPersistentDataBlock().getTestHarnessModeData(); @@ -105,9 +113,16 @@ public class TestHarnessModeService extends SystemService { // If there is data, we should set the device as provisioned, so that we skip the setup // wizard. setDeviceProvisioned(); + disableLockScreen(); SystemProperties.set(TEST_HARNESS_MODE_PROPERTY, "1"); } + private void disableLockScreen() { + UserInfo userInfo = getPrimaryUser(); + LockPatternUtils utils = new LockPatternUtils(getContext()); + utils.setLockScreenDisabled(true, userInfo.id); + } + private void completeTestHarnessModeSetup() { Slog.d(TAG, "Completing Test Harness Mode setup."); byte[] testHarnessModeData = getPersistentDataBlock().getTestHarnessModeData(); @@ -117,8 +132,8 @@ public class TestHarnessModeService extends SystemService { } try { setUpAdbFiles(PersistentData.fromBytes(testHarnessModeData)); - disableAutoSync(); configureSettings(); + configureUser(); } catch (SetUpTestHarnessModeException e) { Slog.e(TAG, "Failed to set up Test Harness Mode. Bad data.", e); } finally { @@ -130,12 +145,6 @@ public class TestHarnessModeService extends SystemService { } } - private void disableAutoSync() { - UserInfo primaryUser = UserManager.get(getContext()).getPrimaryUser(); - ContentResolver - .setMasterSyncAutomaticallyAsUser(false, primaryUser.getUserHandle().getIdentifier()); - } - private void configureSettings() { ContentResolver cr = getContext().getContentResolver(); @@ -158,6 +167,20 @@ public class TestHarnessModeService extends SystemService { writeBytesToFile(persistentData.mAdbTempKeys, adbManager.getAdbTempKeysFile().toPath()); } + private void configureUser() { + UserInfo primaryUser = getPrimaryUser(); + + ContentResolver.setMasterSyncAutomaticallyAsUser(false, primaryUser.id); + + LocationManager locationManager = getContext().getSystemService(LocationManager.class); + locationManager.setLocationEnabledForUser(true, primaryUser.getUserHandle()); + } + + private UserInfo getPrimaryUser() { + UserManager userManager = UserManager.get(getContext()); + return userManager.getPrimaryUser(); + } + private void writeBytesToFile(byte[] keys, Path adbKeys) { try { OutputStream fileOutputStream = Files.newOutputStream(adbKeys); @@ -266,9 +289,8 @@ public class TestHarnessModeService extends SystemService { } private boolean isDeviceSecure() { - UserInfo primaryUser = UserManager.get(getContext()).getPrimaryUser(); KeyguardManager keyguardManager = getContext().getSystemService(KeyguardManager.class); - return keyguardManager.isDeviceSecure(primaryUser.id); + return keyguardManager.isDeviceSecure(getPrimaryUser().id); } private int handleEnable() {