From a71c97f440b7db5cec6dddaeaa4cd37364408a74 Mon Sep 17 00:00:00 2001 From: Joshua Duong Date: Thu, 2 Jan 2020 14:53:32 -0800 Subject: [PATCH] Add Settings.Global.ADB_WIFI_ENABLED. ADB_ENABLED historically meant the state for USB debugging. Since wireless debugging can be enabled separately, define another setting for it. BUG: b/111434128 Test: make Change-Id: If3abca8e77381d6832f55d55a43c52ee1a1267d1 Merged-In: If3abca8e77381d6832f55d55a43c52ee1a1267d1 Exempt-From-Owner-Approval: cherry-pick --- core/java/android/provider/Settings.java | 8 +++++++- .../android/provider/SettingsBackupTest.java | 1 + .../providers/settings/SettingsProvider.java | 5 +++++ .../com/android/server/adb/AdbService.java | 18 ++++++++++++++++-- .../server/pm/UserRestrictionsUtils.java | 4 ++++ .../DevicePolicyManagerService.java | 1 + 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 3842def8751df..dcbbb709c5a05 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -9739,10 +9739,16 @@ public final class Settings { private static final Validator BUGREPORT_IN_POWER_MENU_VALIDATOR = BOOLEAN_VALIDATOR; /** - * Whether ADB is enabled. + * Whether ADB over USB is enabled. */ public static final String ADB_ENABLED = "adb_enabled"; + /** + * Whether ADB over Wifi is enabled. + * @hide + */ + public static final String ADB_WIFI_ENABLED = "adb_wifi_enabled"; + /** * Whether Views are allowed to save their attribute data. * @hide diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index e60e5555cc9d9..4b1691dc0a844 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -104,6 +104,7 @@ public class SettingsBackupTest { Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, Settings.Global.ADB_ALLOWED_CONNECTION_TIME, Settings.Global.ADB_ENABLED, + Settings.Global.ADB_WIFI_ENABLED, Settings.Global.ADD_USERS_WHEN_LOCKED, Settings.Global.AIRPLANE_MODE_ON, Settings.Global.AIRPLANE_MODE_RADIOS, diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index e75ad13780d59..6c1d2796add73 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -1009,6 +1009,11 @@ public class SettingsProvider extends ContentProvider { String value = setting != null ? setting.getValue() : null; updateGlobalSetting(Settings.Global.ADB_ENABLED, value, null, true, userId, true); + + setting = getGlobalSetting(Settings.Global.ADB_WIFI_ENABLED); + value = setting != null ? setting.getValue() : null; + updateGlobalSetting(Settings.Global.ADB_WIFI_ENABLED, + value, null, true, userId, true); } } finally { Binder.restoreCallingIdentity(identity); diff --git a/services/core/java/com/android/server/adb/AdbService.java b/services/core/java/com/android/server/adb/AdbService.java index f2a8615dca889..0d161b943d15f 100644 --- a/services/core/java/com/android/server/adb/AdbService.java +++ b/services/core/java/com/android/server/adb/AdbService.java @@ -134,9 +134,13 @@ public class AdbService extends IAdbManager.Stub { mIsAdbWifiEnabled = false; // register observer to listen for settings changes + mObserver = new AdbSettingsObserver(); mContentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.ADB_ENABLED), - false, new AdbSettingsObserver()); + false, mObserver); + mContentResolver.registerContentObserver( + Settings.Global.getUriFor(Settings.Global.ADB_WIFI_ENABLED), + false, mObserver); } catch (Exception e) { Slog.e(TAG, "Error in initAdbState", e); } @@ -153,6 +157,7 @@ public class AdbService extends IAdbManager.Stub { private class AdbSettingsObserver extends ContentObserver { private final Uri mAdbUsbUri = Settings.Global.getUriFor(Settings.Global.ADB_ENABLED); + private final Uri mAdbWifiUri = Settings.Global.getUriFor(Settings.Global.ADB_WIFI_ENABLED); AdbSettingsObserver() { super(null); @@ -166,8 +171,13 @@ public class AdbService extends IAdbManager.Stub { FgThread.getHandler().sendMessage(obtainMessage( AdbService::setAdbEnabled, AdbService.this, shouldEnable, AdbTransportType.USB)); + } else if (mAdbWifiUri.equals(uri)) { + boolean shouldEnable = (Settings.Global.getInt(mContentResolver, + Settings.Global.ADB_WIFI_ENABLED, 0) > 0); + FgThread.getHandler().sendMessage(obtainMessage( + AdbService::setAdbEnabled, AdbService.this, shouldEnable, + AdbTransportType.WIFI)); } - // TODO(joshuaduong): Add condition for WIFI transport } } @@ -188,6 +198,8 @@ public class AdbService extends IAdbManager.Stub { private boolean mIsAdbWifiEnabled; private AdbDebuggingManager mDebuggingManager; + private ContentObserver mObserver; + private AdbService(Context context) { mContext = context; mContentResolver = context.getContentResolver(); @@ -213,6 +225,8 @@ public class AdbService extends IAdbManager.Stub { try { Settings.Global.putInt(mContentResolver, Settings.Global.ADB_ENABLED, mIsAdbUsbEnabled ? 1 : 0); + Settings.Global.putInt(mContentResolver, + Settings.Global.ADB_WIFI_ENABLED, mIsAdbWifiEnabled ? 1 : 0); } catch (SecurityException e) { // If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't be changed. Slog.d(TAG, "ADB_ENABLED is restricted."); diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java index 3be51c58798e9..98c6c6d3861f0 100644 --- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java +++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java @@ -562,6 +562,9 @@ public class UserRestrictionsUtils { android.provider.Settings.Global.putStringForUser(cr, android.provider.Settings.Global.ADB_ENABLED, "0", userId); + android.provider.Settings.Global.putStringForUser(cr, + android.provider.Settings.Global.ADB_WIFI_ENABLED, "0", + userId); } } break; @@ -702,6 +705,7 @@ public class UserRestrictionsUtils { break; case android.provider.Settings.Global.ADB_ENABLED: + case android.provider.Settings.Global.ADB_WIFI_ENABLED: if ("0".equals(value)) { return false; } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index cbbb7fff8aea3..03f64fca55918 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -434,6 +434,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { GLOBAL_SETTINGS_WHITELIST = new ArraySet<>(); GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.ADB_ENABLED); + GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.ADB_WIFI_ENABLED); GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.AUTO_TIME); GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.AUTO_TIME_ZONE); GLOBAL_SETTINGS_WHITELIST.add(Settings.Global.DATA_ROAMING);