summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author William Hester <williamhester@google.com> 2022-05-24 13:31:57 -0700
committer William Hester <williamhester@google.com> 2022-05-27 15:56:16 -0700
commitdfca3dbdb6b7fd922d78b5776d7da65c30d6f8fb (patch)
tree585a6453e831d6c4a32fc8a9588e7bf36f79801a
parentf012e83299e33e15071f09b952c13770bc8e6551 (diff)
Consolidate point where ADB is enabled for Test Harness Mode
Test Harness Mode relies on enabling ADB upon boot. However, currently, there appears to be a race condition when enabling ADB. Test Harness Mode enables ADB in PHASE_BOOT_COMPLETED, and ADB sets itself up in PHASE_ACTIVITY_MANAGER_READY, both by writing a setting. It appears that sometimes, the setting for initializing ADB's state commits *after* the setting to enable ADB for Test Harness Mode, which means that ADB turns on for a brief moment, then off until the device is manually fixed. This changes it so that the AdbService checks the Test Harness Mode property when initializing ADB state, always enabling ADB on boot if Test Harness Mode is enabled. Bug: 232813060 Test: tested with user and userdebug builds, both enable adb correctly Change-Id: I518415dda275bc3d563820ead611e5f017368c95
-rw-r--r--services/core/java/com/android/server/adb/AdbService.java34
-rw-r--r--services/core/java/com/android/server/testharness/OWNERS1
-rw-r--r--services/core/java/com/android/server/testharness/TestHarnessModeService.java6
3 files changed, 23 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/adb/AdbService.java b/services/core/java/com/android/server/adb/AdbService.java
index 2845fbfc6ebf..69f6d3abe245 100644
--- a/services/core/java/com/android/server/adb/AdbService.java
+++ b/services/core/java/com/android/server/adb/AdbService.java
@@ -56,6 +56,7 @@ import com.android.internal.util.dump.DualDumpOutputStream;
import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
+import com.android.server.testharness.TestHarnessModeService;
import java.io.File;
import java.io.FileDescriptor;
@@ -163,18 +164,8 @@ public class AdbService extends IAdbManager.Stub {
}
}
- private void initAdbState() {
+ private void registerContentObservers() {
try {
- /*
- * Use the normal bootmode persistent prop to maintain state of adb across
- * all boot modes.
- */
- mIsAdbUsbEnabled = containsFunction(
- SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY, ""),
- UsbManager.USB_FUNCTION_ADB);
- mIsAdbWifiEnabled = "1".equals(
- SystemProperties.get(WIFI_PERSISTENT_CONFIG_PROPERTY, "0"));
-
// register observer to listen for settings changes
mObserver = new AdbSettingsObserver();
mContentResolver.registerContentObserver(
@@ -184,7 +175,7 @@ public class AdbService extends IAdbManager.Stub {
Settings.Global.getUriFor(Settings.Global.ADB_WIFI_ENABLED),
false, mObserver);
} catch (Exception e) {
- Slog.e(TAG, "Error in initAdbState", e);
+ Slog.e(TAG, "Error in registerContentObservers", e);
}
}
@@ -248,7 +239,7 @@ public class AdbService extends IAdbManager.Stub {
mContentResolver = context.getContentResolver();
mDebuggingManager = new AdbDebuggingManager(context);
- initAdbState();
+ registerContentObservers();
LocalServices.addService(AdbManagerInternal.class, new AdbManagerInternalImpl());
}
@@ -259,10 +250,23 @@ public class AdbService extends IAdbManager.Stub {
public void systemReady() {
if (DEBUG) Slog.d(TAG, "systemReady");
+ /*
+ * Use the normal bootmode persistent prop to maintain state of adb across
+ * all boot modes.
+ */
+ mIsAdbUsbEnabled = containsFunction(
+ SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY, ""),
+ UsbManager.USB_FUNCTION_ADB);
+ boolean shouldEnableAdbUsb = mIsAdbUsbEnabled
+ || SystemProperties.getBoolean(
+ TestHarnessModeService.TEST_HARNESS_MODE_PROPERTY, false);
+ mIsAdbWifiEnabled = "1".equals(
+ SystemProperties.get(WIFI_PERSISTENT_CONFIG_PROPERTY, "0"));
+
// make sure the ADB_ENABLED setting value matches the current state
try {
Settings.Global.putInt(mContentResolver,
- Settings.Global.ADB_ENABLED, mIsAdbUsbEnabled ? 1 : 0);
+ Settings.Global.ADB_ENABLED, shouldEnableAdbUsb ? 1 : 0);
Settings.Global.putInt(mContentResolver,
Settings.Global.ADB_WIFI_ENABLED, mIsAdbWifiEnabled ? 1 : 0);
} catch (SecurityException e) {
@@ -272,7 +276,7 @@ public class AdbService extends IAdbManager.Stub {
}
/**
- * Callend in response to {@code SystemService.PHASE_BOOT_COMPLETED} from {@code SystemServer}.
+ * Called in response to {@code SystemService.PHASE_BOOT_COMPLETED} from {@code SystemServer}.
*/
public void bootCompleted() {
if (DEBUG) Slog.d(TAG, "boot completed");
diff --git a/services/core/java/com/android/server/testharness/OWNERS b/services/core/java/com/android/server/testharness/OWNERS
new file mode 100644
index 000000000000..ffbbeb9312b9
--- /dev/null
+++ b/services/core/java/com/android/server/testharness/OWNERS
@@ -0,0 +1 @@
+williamhester@google.com
diff --git a/services/core/java/com/android/server/testharness/TestHarnessModeService.java b/services/core/java/com/android/server/testharness/TestHarnessModeService.java
index 8b2b8b1cfbac..b6a413524c5c 100644
--- a/services/core/java/com/android/server/testharness/TestHarnessModeService.java
+++ b/services/core/java/com/android/server/testharness/TestHarnessModeService.java
@@ -69,8 +69,8 @@ import java.util.Set;
* automatic updates, etc.) are all disabled by default but may be re-enabled by the user.
*/
public class TestHarnessModeService extends SystemService {
+ public static final String TEST_HARNESS_MODE_PROPERTY = "persist.sys.test_harness";
private static final String TAG = TestHarnessModeService.class.getSimpleName();
- private static final String TEST_HARNESS_MODE_PROPERTY = "persist.sys.test_harness";
private PersistentDataBlockManagerInternal mPersistentDataBlockManagerInternal;
@@ -168,9 +168,9 @@ public class TestHarnessModeService extends SystemService {
Slog.d(TAG, "Restarted adbd");
}
- // Disable the TTL for ADB keys before enabling ADB
+ // Disable the TTL for ADB keys before ADB is enabled as a part of AdbService's
+ // initialization.
Settings.Global.putLong(cr, Settings.Global.ADB_ALLOWED_CONNECTION_TIME, 0);
- Settings.Global.putInt(cr, Settings.Global.ADB_ENABLED, 1);
Settings.Global.putInt(cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
Settings.Global.putInt(cr, Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0);
Settings.Global.putInt(