diff options
| author | 2024-04-22 16:45:14 -0700 | |
|---|---|---|
| committer | 2024-04-30 10:05:34 -0700 | |
| commit | c46e4fc6d1dca72462c6d456bf5042c3847745e1 (patch) | |
| tree | 18e41586e484eea2a7e3e5a5fcb4b2588ba22889 | |
| parent | 69b03fa374ab2160bcb3348a339bbf7711f10e15 (diff) | |
Fix a bug with the screen incorrectly turning off on power button press.
In certain situations, when the device is docked and the power button is
single pressed, the screen turns off instead of initiating a dream. It
appears that when this happens, DreamManagerService doesn't think the
device is charging even though PowerManagerService thinks it is. This
change reworks the charge detection logic in DreamManagerService so that
it works the same as the logic in PowerManagerService in an attempt to
fix the issue.
Bug: 329125239
Test: atest DreamManagerServiceTests
Flag: ACONFIG android.service.dreams.use_battery_changed_broadcast STAGING
Change-Id: I5344c12d471cbfc889bdf511a7e9e36c6c3b84e6
4 files changed, 45 insertions, 3 deletions
diff --git a/services/core/Android.bp b/services/core/Android.bp index 300b147509a7..8ee560b811aa 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -256,6 +256,7 @@ java_library_static { "stats_flags_lib", "core_os_flags_lib", "connectivity_flags_lib", + "dreams_flags_lib", ], javac_shard_size: 50, javacflags: [ diff --git a/services/core/java/com/android/server/dreams/Android.bp b/services/core/java/com/android/server/dreams/Android.bp new file mode 100644 index 000000000000..4078a42a09ec --- /dev/null +++ b/services/core/java/com/android/server/dreams/Android.bp @@ -0,0 +1,11 @@ +aconfig_declarations { + name: "dreams_flags", + package: "com.android.server.dreams", + container: "system", + srcs: ["*.aconfig"], +} + +java_aconfig_library { + name: "dreams_flags_lib", + aconfig_declarations: "dreams_flags", +} diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index fc63494d3c99..2def5aed2478 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -45,6 +45,7 @@ import android.database.ContentObserver; import android.hardware.display.AmbientDisplayConfiguration; import android.net.Uri; import android.os.BatteryManager; +import android.os.BatteryManagerInternal; import android.os.Binder; import android.os.Build; import android.os.Handler; @@ -118,6 +119,7 @@ public final class DreamManagerService extends SystemService { private final DreamController mController; private final PowerManager mPowerManager; private final PowerManagerInternal mPowerManagerInternal; + private final BatteryManagerInternal mBatteryManagerInternal; private final PowerManager.WakeLock mDozeWakeLock; private final ActivityTaskManagerInternal mAtmInternal; private final PackageManagerInternal mPmInternal; @@ -186,7 +188,11 @@ public final class DreamManagerService extends SystemService { private final BroadcastReceiver mChargingReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - mIsCharging = (BatteryManager.ACTION_CHARGING.equals(intent.getAction())); + if (Flags.useBatteryChangedBroadcast()) { + mIsCharging = mBatteryManagerInternal.isPowered(BatteryManager.BATTERY_PLUGGED_ANY); + } else { + mIsCharging = (BatteryManager.ACTION_CHARGING.equals(intent.getAction())); + } } }; @@ -251,6 +257,12 @@ public final class DreamManagerService extends SystemService { com.android.internal.R.bool.config_keepDreamingWhenUnplugging); mDreamsDisabledByAmbientModeSuppressionConfig = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig); + + if (Flags.useBatteryChangedBroadcast()) { + mBatteryManagerInternal = getLocalService(BatteryManagerInternal.class); + } else { + mBatteryManagerInternal = null; + } } @Override @@ -279,9 +291,15 @@ public final class DreamManagerService extends SystemService { mContext.registerReceiver( mDockStateReceiver, new IntentFilter(Intent.ACTION_DOCK_EVENT)); + IntentFilter chargingIntentFilter = new IntentFilter(); - chargingIntentFilter.addAction(BatteryManager.ACTION_CHARGING); - chargingIntentFilter.addAction(BatteryManager.ACTION_DISCHARGING); + if (Flags.useBatteryChangedBroadcast()) { + chargingIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); + chargingIntentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + } else { + chargingIntentFilter.addAction(BatteryManager.ACTION_CHARGING); + chargingIntentFilter.addAction(BatteryManager.ACTION_DISCHARGING); + } mContext.registerReceiver(mChargingReceiver, chargingIntentFilter); mSettingsObserver = new SettingsObserver(mHandler); diff --git a/services/core/java/com/android/server/dreams/flags.aconfig b/services/core/java/com/android/server/dreams/flags.aconfig new file mode 100644 index 000000000000..5d35ebd629cd --- /dev/null +++ b/services/core/java/com/android/server/dreams/flags.aconfig @@ -0,0 +1,12 @@ +package: "com.android.server.dreams" +container: "system" + +flag { + name: "use_battery_changed_broadcast" + namespace: "communal" + description: "Use ACTION_BATTERY_CHANGED broadcast to track charging state" + bug: "329125239" + metadata { + purpose: PURPOSE_BUGFIX + } +}
\ No newline at end of file |