Merge changes Iba1cee95,Ic5192c78 into sc-dev
* changes: Add injectable version of Assert.isMainThread() Break circular dependency in NotificationEntryManager
This commit is contained in:
@@ -140,7 +140,7 @@ public class NotificationEntryManager implements
|
|||||||
|
|
||||||
private final KeyguardEnvironment mKeyguardEnvironment;
|
private final KeyguardEnvironment mKeyguardEnvironment;
|
||||||
private final NotificationGroupManagerLegacy mGroupManager;
|
private final NotificationGroupManagerLegacy mGroupManager;
|
||||||
private final NotificationRankingManager mRankingManager;
|
private final Lazy<NotificationRankingManager> mRankingManager;
|
||||||
private final FeatureFlags mFeatureFlags;
|
private final FeatureFlags mFeatureFlags;
|
||||||
private final ForegroundServiceDismissalFeatureController mFgsFeatureController;
|
private final ForegroundServiceDismissalFeatureController mFgsFeatureController;
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ public class NotificationEntryManager implements
|
|||||||
public NotificationEntryManager(
|
public NotificationEntryManager(
|
||||||
NotificationEntryManagerLogger logger,
|
NotificationEntryManagerLogger logger,
|
||||||
NotificationGroupManagerLegacy groupManager,
|
NotificationGroupManagerLegacy groupManager,
|
||||||
NotificationRankingManager rankingManager,
|
Lazy<NotificationRankingManager> rankingManager,
|
||||||
KeyguardEnvironment keyguardEnvironment,
|
KeyguardEnvironment keyguardEnvironment,
|
||||||
FeatureFlags featureFlags,
|
FeatureFlags featureFlags,
|
||||||
Lazy<NotificationRowBinder> notificationRowBinderLazy,
|
Lazy<NotificationRowBinder> notificationRowBinderLazy,
|
||||||
@@ -419,7 +419,7 @@ public class NotificationEntryManager implements
|
|||||||
|
|
||||||
mActiveNotifications.put(entry.getKey(), entry);
|
mActiveNotifications.put(entry.getKey(), entry);
|
||||||
mGroupManager.onEntryAdded(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 */
|
/** Resorts / filters the current notification set with the current RankingMap */
|
||||||
public void reapplyFilterAndSort(String reason) {
|
public void reapplyFilterAndSort(String reason) {
|
||||||
updateRankingAndSort(mRankingManager.getRankingMap(), reason);
|
updateRankingAndSort(mRankingManager.get().getRankingMap(), reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Calls to NotificationRankingManager and updates mSortedAndFiltered */
|
/** Calls to NotificationRankingManager and updates mSortedAndFiltered */
|
||||||
private void updateRankingAndSort(@NonNull RankingMap rankingMap, String reason) {
|
private void updateRankingAndSort(@NonNull RankingMap rankingMap, String reason) {
|
||||||
mSortedAndFiltered.clear();
|
mSortedAndFiltered.clear();
|
||||||
mSortedAndFiltered.addAll(mRankingManager.updateRanking(
|
mSortedAndFiltered.addAll(mRankingManager.get().updateRanking(
|
||||||
rankingMap, mActiveNotifications.values(), reason));
|
rankingMap, mActiveNotifications.values(), reason));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,8 +80,6 @@ import com.android.systemui.wmshell.BubblesManager;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Provider;
|
|
||||||
|
|
||||||
import dagger.Binds;
|
import dagger.Binds;
|
||||||
import dagger.Lazy;
|
import dagger.Lazy;
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
@@ -102,7 +100,7 @@ public interface NotificationsModule {
|
|||||||
static NotificationEntryManager provideNotificationEntryManager(
|
static NotificationEntryManager provideNotificationEntryManager(
|
||||||
NotificationEntryManagerLogger logger,
|
NotificationEntryManagerLogger logger,
|
||||||
NotificationGroupManagerLegacy groupManager,
|
NotificationGroupManagerLegacy groupManager,
|
||||||
NotificationRankingManager rankingManager,
|
Lazy<NotificationRankingManager> rankingManager,
|
||||||
NotificationEntryManager.KeyguardEnvironment keyguardEnvironment,
|
NotificationEntryManager.KeyguardEnvironment keyguardEnvironment,
|
||||||
FeatureFlags featureFlags,
|
FeatureFlags featureFlags,
|
||||||
Lazy<NotificationRowBinder> notificationRowBinderLazy,
|
Lazy<NotificationRowBinder> notificationRowBinderLazy,
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,8 @@ import com.android.systemui.dagger.qualifiers.Main;
|
|||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import dagger.Binds;
|
import dagger.Binds;
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
@@ -40,7 +42,7 @@ public abstract class GlobalConcurrencyModule {
|
|||||||
@Binds
|
@Binds
|
||||||
public abstract ThreadFactory bindExecutorFactory(ThreadFactoryImpl impl);
|
public abstract ThreadFactory bindExecutorFactory(ThreadFactoryImpl impl);
|
||||||
|
|
||||||
/** Main Looper */
|
/** Main Looper */
|
||||||
@Provides
|
@Provides
|
||||||
@Main
|
@Main
|
||||||
public static Looper provideMainLooper() {
|
public static Looper provideMainLooper() {
|
||||||
@@ -67,4 +69,8 @@ public abstract class GlobalConcurrencyModule {
|
|||||||
return context.getMainExecutor();
|
return context.getMainExecutor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Binds
|
||||||
|
@Singleton
|
||||||
|
public abstract Execution provideExecution(ExecutionImpl execution);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
|
|||||||
mEntryManager = new NotificationEntryManager(
|
mEntryManager = new NotificationEntryManager(
|
||||||
mLogger,
|
mLogger,
|
||||||
mGroupManager,
|
mGroupManager,
|
||||||
new NotificationRankingManager(
|
() -> new NotificationRankingManager(
|
||||||
() -> mNotificationMediaManager,
|
() -> mNotificationMediaManager,
|
||||||
mGroupManager,
|
mGroupManager,
|
||||||
mHeadsUpManager,
|
mHeadsUpManager,
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase {
|
|||||||
mEntryManager = new NotificationEntryManager(
|
mEntryManager = new NotificationEntryManager(
|
||||||
mock(NotificationEntryManagerLogger.class),
|
mock(NotificationEntryManagerLogger.class),
|
||||||
mGroupMembershipManager,
|
mGroupMembershipManager,
|
||||||
new NotificationRankingManager(
|
() -> new NotificationRankingManager(
|
||||||
() -> mock(NotificationMediaManager.class),
|
() -> mock(NotificationMediaManager.class),
|
||||||
mGroupMembershipManager,
|
mGroupMembershipManager,
|
||||||
mHeadsUpManager,
|
mHeadsUpManager,
|
||||||
|
|||||||
Reference in New Issue
Block a user