diff options
6 files changed, 73 insertions, 11 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java index c8c0755344a4..13a8661f94dc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java @@ -140,7 +140,7 @@ public class NotificationEntryManager implements private final KeyguardEnvironment mKeyguardEnvironment; private final NotificationGroupManagerLegacy mGroupManager; - private final NotificationRankingManager mRankingManager; + private final Lazy<NotificationRankingManager> mRankingManager; private final FeatureFlags mFeatureFlags; private final ForegroundServiceDismissalFeatureController mFgsFeatureController; @@ -200,7 +200,7 @@ public class NotificationEntryManager implements public NotificationEntryManager( NotificationEntryManagerLogger logger, NotificationGroupManagerLegacy groupManager, - NotificationRankingManager rankingManager, + Lazy<NotificationRankingManager> rankingManager, KeyguardEnvironment keyguardEnvironment, FeatureFlags featureFlags, Lazy<NotificationRowBinder> notificationRowBinderLazy, @@ -419,7 +419,7 @@ public class NotificationEntryManager implements mActiveNotifications.put(entry.getKey(), entry); mGroupManager.onEntryAdded(entry); - updateRankingAndSort(mRankingManager.getRankingMap(), "addEntryInternalInternal"); + updateRankingAndSort(mRankingManager.get().getRankingMap(), "addEntryInternalInternal"); } /** @@ -886,13 +886,13 @@ public class NotificationEntryManager implements /** Resorts / filters the current notification set with the current RankingMap */ public void reapplyFilterAndSort(String reason) { - updateRankingAndSort(mRankingManager.getRankingMap(), reason); + updateRankingAndSort(mRankingManager.get().getRankingMap(), reason); } /** Calls to NotificationRankingManager and updates mSortedAndFiltered */ private void updateRankingAndSort(@NonNull RankingMap rankingMap, String reason) { mSortedAndFiltered.clear(); - mSortedAndFiltered.addAll(mRankingManager.updateRanking( + mSortedAndFiltered.addAll(mRankingManager.get().updateRanking( rankingMap, mActiveNotifications.values(), reason)); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java index e2a37f647bf5..89bb65278dce 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java @@ -80,8 +80,6 @@ import com.android.systemui.wmshell.BubblesManager; import java.util.Optional; import java.util.concurrent.Executor; -import javax.inject.Provider; - import dagger.Binds; import dagger.Lazy; import dagger.Module; @@ -102,7 +100,7 @@ public interface NotificationsModule { static NotificationEntryManager provideNotificationEntryManager( NotificationEntryManagerLogger logger, NotificationGroupManagerLegacy groupManager, - NotificationRankingManager rankingManager, + Lazy<NotificationRankingManager> rankingManager, NotificationEntryManager.KeyguardEnvironment keyguardEnvironment, FeatureFlags featureFlags, Lazy<NotificationRowBinder> notificationRowBinderLazy, diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/Execution.kt b/packages/SystemUI/src/com/android/systemui/util/concurrency/Execution.kt new file mode 100644 index 000000000000..647faeba1e77 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/Execution.kt @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.util.concurrency + +import android.os.Looper +import javax.inject.Inject + +/** + * Methods to check or assert that we're on the main thread + */ +interface Execution { + fun assertIsMainThread() + fun isMainThread(): Boolean +} + +class ExecutionImpl @Inject constructor() : Execution { + private val mainLooper = Looper.getMainLooper() + + override fun assertIsMainThread() { + if (!mainLooper.isCurrentThread) { + throw IllegalStateException("should be called from the main thread." + + " Main thread name=" + mainLooper.thread.name + + " Thread.currentThread()=" + Thread.currentThread().name) + } + } + + override fun isMainThread(): Boolean { + return mainLooper.isCurrentThread + } +} + +class FakeExecution : Execution { + var simulateMainThread = true + + override fun assertIsMainThread() { + if (!simulateMainThread) { + throw IllegalStateException("should be called from the main thread") + } + } + + override fun isMainThread(): Boolean { + return simulateMainThread + } +} diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java index 5946af383b0f..1c504961e715 100644 --- a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java +++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java @@ -24,6 +24,8 @@ import com.android.systemui.dagger.qualifiers.Main; import java.util.concurrent.Executor; +import javax.inject.Singleton; + import dagger.Binds; import dagger.Module; import dagger.Provides; @@ -40,7 +42,7 @@ public abstract class GlobalConcurrencyModule { @Binds public abstract ThreadFactory bindExecutorFactory(ThreadFactoryImpl impl); - /** Main Looper */ + /** Main Looper */ @Provides @Main public static Looper provideMainLooper() { @@ -67,4 +69,8 @@ public abstract class GlobalConcurrencyModule { return context.getMainExecutor(); } + /** */ + @Binds + @Singleton + public abstract Execution provideExecution(ExecutionImpl execution); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java index 5fc01ccd96b4..6459c0c9f441 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java @@ -190,7 +190,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase { mEntryManager = new NotificationEntryManager( mLogger, mGroupManager, - new NotificationRankingManager( + () -> new NotificationRankingManager( () -> mNotificationMediaManager, mGroupManager, mHeadsUpManager, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java index 950b95f41542..7b0c06736979 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java @@ -181,7 +181,7 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase { mEntryManager = new NotificationEntryManager( mock(NotificationEntryManagerLogger.class), mGroupMembershipManager, - new NotificationRankingManager( + () -> new NotificationRankingManager( () -> mock(NotificationMediaManager.class), mGroupMembershipManager, mHeadsUpManager, |