Directly call 'ctl.restart' on adbd if adb is enabled

Rather than disabling adb and relying on the settings ContentObserver to
take care of re-enabling adb, just kick adbd ourselves directly. Relying
on the ContentObserver appears to cause a race condition on some
devices.

Test: manual, run adb shell cmd testharness enable on a userdebug device
Bug: 170327166
Change-Id: I204857c14251a60886b7023ada717812cbf70c59
This commit is contained in:
William Hester
2020-10-07 12:35:56 -07:00
parent c64ccdb1ef
commit f67a41580e

View File

@@ -25,7 +25,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.debug.AdbManagerInternal;
import android.debug.AdbTransportType;
import android.location.LocationManager;
import android.os.BatteryManager;
import android.os.Binder;
@@ -162,12 +161,11 @@ public class TestHarnessModeService extends SystemService {
private void configureSettings() {
ContentResolver cr = getContext().getContentResolver();
// Stop ADB before we enable it, otherwise on userdebug/eng builds, the keys won't have
// registered with adbd, and it will prompt the user to confirm the keys.
Settings.Global.putInt(cr, Settings.Global.ADB_ENABLED, 0);
AdbManagerInternal adbManager = LocalServices.getService(AdbManagerInternal.class);
if (adbManager.isAdbEnabled(AdbTransportType.USB)) {
adbManager.stopAdbdForTransport(AdbTransportType.USB);
// If adb is already enabled, then we need to restart the daemon to pick up the change in
// keys. This is only really useful for userdebug/eng builds.
if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 1) {
SystemProperties.set("ctl.restart", "adbd");
Slog.d(TAG, "Restarted adbd");
}
// Disable the TTL for ADB keys before enabling ADB