Merge changes Iba1cee95,Ic5192c78 into sc-dev

* changes:
  Add injectable version of Assert.isMainThread()
  Break circular dependency in NotificationEntryManager
This commit is contained in:
Ned Burns
2021-05-10 14:57:41 +00:00
committed by Android (Google) Code Review
6 changed files with 73 additions and 11 deletions

View File

@@ -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));
}

View File

@@ -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,

View File

@@ -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
}
}

View File

@@ -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);
}

View File

@@ -190,7 +190,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
mEntryManager = new NotificationEntryManager(
mLogger,
mGroupManager,
new NotificationRankingManager(
() -> new NotificationRankingManager(
() -> mNotificationMediaManager,
mGroupManager,
mHeadsUpManager,

View File

@@ -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,