From 2e9b8c37532c53a1f2d9a29c8630794302b1b26d Mon Sep 17 00:00:00 2001 From: Damien Bargiacchi Date: Wed, 30 May 2018 13:19:41 -0700 Subject: [PATCH 1/2] Add a setting for the User Absent, Touch Off feature in Wear This is an extension of the User Absent power feature on Wear aka "for small batteries". Turning the sensor off is one of the aspects of power saving we want to take advantage of when the user is absent. Bug: 77293569 Test: make -j80 Test: Device boots Change-Id: I25a3577d8eb2d157c20ed344056138bc32e8d158 --- core/java/android/provider/Settings.java | 9 +++++++++ core/proto/android/providers/settings/global.proto | 13 ++++++++----- .../src/android/provider/SettingsBackupTest.java | 3 ++- .../providers/settings/SettingsProtoDumpUtil.java | 9 ++++++--- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 9e5efa1fe2d03..9be29967656ff 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -11038,6 +11038,15 @@ public final class Settings { public static final String USER_ABSENT_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED = "user_absent_radios_off_for_small_battery_enabled"; + /** + * Whether or not to enable the User Absent, Touch Off feature on small battery devices. + * Type: int (0 for false, 1 for true) + * Default: 0 + * @hide + */ + public static final String USER_ABSENT_TOUCH_OFF_FOR_SMALL_BATTERY_ENABLED + = "user_absent_touch_off_for_small_battery_enabled"; + /** * Whether or not to turn on Wifi when proxy is disconnected. * Type: int (0 for false, 1 for true) diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto index 99f3034310559..04e5658be5a00 100644 --- a/core/proto/android/providers/settings/global.proto +++ b/core/proto/android/providers/settings/global.proto @@ -600,14 +600,17 @@ message GlobalSettingsProto { } optional Ntp ntp = 84; - // Details about the User Absent, Radios Off feature. - message UserAbsentRadiosOff { + // Details about the User Absent For Small Battery feature. + message UserAbsentSmallBattery { option (android.msg_privacy).dest = DEST_EXPLICIT; - // Whether or not to enable the User Absent, Radios Off feature on small battery devices. - optional SettingProto enabled_for_small_battery = 1 [ (android.privacy).dest = DEST_AUTOMATIC ]; + // Whether or not to enable the User Absent, Radios Off feature + optional SettingProto radios_off_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ]; + + // Whether or not to enable the User Absent, Touch Off feature + optional SettingProto touch_off_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ]; } - optional UserAbsentRadiosOff user_absent_radios_off = 85; + optional UserAbsentSmallBattery user_absent_small_battery = 85; // Whether to disable the automatic scheduling of system updates. optional SettingProto ota_disable_automatic_update = 86 [ (android.privacy).dest = DEST_AUTOMATIC ]; diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index 156a2c0132f1a..82c02aa9ac19e 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -340,7 +340,6 @@ public class SettingsBackupTest { Settings.Global.NTP_SERVER, Settings.Global.NTP_TIMEOUT, Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE, - Settings.Global.USER_ABSENT_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED, Settings.Global.OVERLAY_DISPLAY_DEVICES, Settings.Global.PAC_CHANGE_DELAY, Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE, @@ -434,6 +433,8 @@ public class SettingsBackupTest { Settings.Global.UNGAZE_SLEEP_ENABLED, Settings.Global.UNLOCK_SOUND, Settings.Global.USE_GOOGLE_MAIL, + Settings.Global.USER_ABSENT_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED, + Settings.Global.USER_ABSENT_TOUCH_OFF_FOR_SMALL_BATTERY_ENABLED, Settings.Global.VT_IMS_ENABLED, Settings.Global.WAIT_FOR_DEBUGGER, Settings.Global.ENABLE_GPU_DEBUG_LAYERS, diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index d5efcb549e648..77eb6c472e4ad 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -963,11 +963,14 @@ class SettingsProtoDumpUtil { GlobalSettingsProto.Ntp.TIMEOUT_MS); p.end(ntpToken); - final long uaroToken = p.start(GlobalSettingsProto.USER_ABSENT_RADIOS_OFF); + final long uasbToken = p.start(GlobalSettingsProto.USER_ABSENT_SMALL_BATTERY); dumpSetting(s, p, Settings.Global.USER_ABSENT_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED, - GlobalSettingsProto.UserAbsentRadiosOff.ENABLED_FOR_SMALL_BATTERY); - p.end(uaroToken); + GlobalSettingsProto.UserAbsentSmallBattery.RADIOS_OFF_ENABLED); + dumpSetting(s, p, + Settings.Global.USER_ABSENT_TOUCH_OFF_FOR_SMALL_BATTERY_ENABLED, + GlobalSettingsProto.UserAbsentSmallBattery.TOUCH_OFF_ENABLED); + p.end(uasbToken); dumpSetting(s, p, Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE, From ae4cb673430bfb88eb6bee5f35653a496ebac4e4 Mon Sep 17 00:00:00 2001 From: Damien Bargiacchi Date: Wed, 30 May 2018 13:28:15 -0700 Subject: [PATCH 2/2] Start the WearPowerService with the other Wear system services The WearPowerService is in charge of coordinating and keeping track of devices and state concerned with power. Bug: 77293569 Change-Id: Ia40ad44a53ef6872dd7ebefd58e17179126dde92 --- services/java/com/android/server/SystemServer.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index c864190bb34b5..dc6a613c08dfa 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -201,6 +201,8 @@ public final class SystemServer { "com.google.android.clockwork.ThermalObserver"; private static final String WEAR_CONNECTIVITY_SERVICE_CLASS = "com.android.clockwork.connectivity.WearConnectivityService"; + private static final String WEAR_POWER_SERVICE_CLASS = + "com.android.clockwork.power.WearPowerService"; private static final String WEAR_SIDEKICK_SERVICE_CLASS = "com.google.android.clockwork.sidekick.SidekickService"; private static final String WEAR_DISPLAY_SERVICE_CLASS = @@ -1549,12 +1551,20 @@ public final class SystemServer { } if (isWatch) { + // Must be started before services that depend it, e.g. WearConnectivityService + traceBeginAndSlog("StartWearPowerService"); + mSystemServiceManager.startService(WEAR_POWER_SERVICE_CLASS); + traceEnd(); + traceBeginAndSlog("StartWearConnectivityService"); mSystemServiceManager.startService(WEAR_CONNECTIVITY_SERVICE_CLASS); traceEnd(); - traceBeginAndSlog("StartWearTimeService"); + traceBeginAndSlog("StartWearDisplayService"); mSystemServiceManager.startService(WEAR_DISPLAY_SERVICE_CLASS); + traceEnd(); + + traceBeginAndSlog("StartWearTimeService"); mSystemServiceManager.startService(WEAR_TIME_SERVICE_CLASS); traceEnd();