diff options
3 files changed, 26 insertions, 2 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index 7f229fb65d4c..f2a71050a72c 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -469,3 +469,13 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "register_zen_mode_content_observer_background" + namespace: "systemui" + description: "Decide whether to register zen mode content observers in the background thread." + bug: "324515627" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java index df210b073e77..600005b97610 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy; +import static com.android.systemui.Flags.registerZenModeContentObserverBackground; + import android.app.AlarmManager; import android.app.Flags; import android.app.NotificationManager; @@ -45,6 +47,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Dumpable; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.settings.UserTracker; @@ -104,6 +107,7 @@ public class ZenModeControllerImpl implements ZenModeController, Dumpable { public ZenModeControllerImpl( Context context, @Main Handler handler, + @Background Handler bgHandler, BroadcastDispatcher broadcastDispatcher, DumpManager dumpManager, GlobalSettings globalSettings, @@ -134,9 +138,18 @@ public class ZenModeControllerImpl implements ZenModeController, Dumpable { } }; mNoMan = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - globalSettings.registerContentObserver(Global.ZEN_MODE, modeContentObserver); + if (registerZenModeContentObserverBackground()) { + bgHandler.post(() -> { + globalSettings.registerContentObserver(Global.ZEN_MODE, modeContentObserver); + globalSettings.registerContentObserver(Global.ZEN_MODE_CONFIG_ETAG, + configContentObserver); + }); + } else { + globalSettings.registerContentObserver(Global.ZEN_MODE, modeContentObserver); + globalSettings.registerContentObserver(Global.ZEN_MODE_CONFIG_ETAG, + configContentObserver); + } updateZenMode(getModeSettingValueFromProvider()); - globalSettings.registerContentObserver(Global.ZEN_MODE_CONFIG_ETAG, configContentObserver); updateZenModeConfig(); updateConsolidatedNotificationPolicy(); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java index f1a2c281595d..ddd29c3f2803 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java @@ -79,6 +79,7 @@ public class ZenModeControllerImplTest extends SysuiTestCase { mController = new ZenModeControllerImpl( mContext, Handler.createAsync(TestableLooper.get(this).getLooper()), + Handler.createAsync(TestableLooper.get(this).getLooper()), mBroadcastDispatcher, mDumpManager, mGlobalSettings, |