Merge changes I2cc194ad,I1ed99b7f,I404a307a into tm-qpr-dev
* changes: Reinflate active notifications when SHOW_NOTIFICATION_SNOOZE setting changes. New Pipeline: Move SectionClassifier to the provider package New Pipeline: Move SectionHeaderVisibilityProvider to the provider package
This commit is contained in:
@@ -19,13 +19,13 @@ package com.android.systemui.statusbar.notification.collection.coordinator;
|
|||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.StatusBarState;
|
import com.android.systemui.statusbar.StatusBarState;
|
||||||
import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||||
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
|
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import android.annotation.NonNull;
|
|||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.notification.SectionClassifier;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||||
@@ -28,6 +27,7 @@ import com.android.systemui.statusbar.notification.collection.coordinator.dagger
|
|||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
||||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
|
||||||
import com.android.systemui.statusbar.notification.collection.render.NodeController;
|
import com.android.systemui.statusbar.notification.collection.render.NodeController;
|
||||||
import com.android.systemui.statusbar.notification.collection.render.SectionHeaderController;
|
import com.android.systemui.statusbar.notification.collection.render.SectionHeaderController;
|
||||||
import com.android.systemui.statusbar.notification.dagger.AlertingHeader;
|
import com.android.systemui.statusbar.notification.dagger.AlertingHeader;
|
||||||
@@ -51,7 +51,7 @@ public class RankingCoordinator implements Coordinator {
|
|||||||
public static final boolean SHOW_ALL_SECTIONS = false;
|
public static final boolean SHOW_ALL_SECTIONS = false;
|
||||||
private final StatusBarStateController mStatusBarStateController;
|
private final StatusBarStateController mStatusBarStateController;
|
||||||
private final HighPriorityProvider mHighPriorityProvider;
|
private final HighPriorityProvider mHighPriorityProvider;
|
||||||
private final SectionClassifier mSectionClassifier;
|
private final SectionStyleProvider mSectionStyleProvider;
|
||||||
private final NodeController mSilentNodeController;
|
private final NodeController mSilentNodeController;
|
||||||
private final SectionHeaderController mSilentHeaderController;
|
private final SectionHeaderController mSilentHeaderController;
|
||||||
private final NodeController mAlertingHeaderController;
|
private final NodeController mAlertingHeaderController;
|
||||||
@@ -62,13 +62,13 @@ public class RankingCoordinator implements Coordinator {
|
|||||||
public RankingCoordinator(
|
public RankingCoordinator(
|
||||||
StatusBarStateController statusBarStateController,
|
StatusBarStateController statusBarStateController,
|
||||||
HighPriorityProvider highPriorityProvider,
|
HighPriorityProvider highPriorityProvider,
|
||||||
SectionClassifier sectionClassifier,
|
SectionStyleProvider sectionStyleProvider,
|
||||||
@AlertingHeader NodeController alertingHeaderController,
|
@AlertingHeader NodeController alertingHeaderController,
|
||||||
@SilentHeader SectionHeaderController silentHeaderController,
|
@SilentHeader SectionHeaderController silentHeaderController,
|
||||||
@SilentHeader NodeController silentNodeController) {
|
@SilentHeader NodeController silentNodeController) {
|
||||||
mStatusBarStateController = statusBarStateController;
|
mStatusBarStateController = statusBarStateController;
|
||||||
mHighPriorityProvider = highPriorityProvider;
|
mHighPriorityProvider = highPriorityProvider;
|
||||||
mSectionClassifier = sectionClassifier;
|
mSectionStyleProvider = sectionStyleProvider;
|
||||||
mAlertingHeaderController = alertingHeaderController;
|
mAlertingHeaderController = alertingHeaderController;
|
||||||
mSilentNodeController = silentNodeController;
|
mSilentNodeController = silentNodeController;
|
||||||
mSilentHeaderController = silentHeaderController;
|
mSilentHeaderController = silentHeaderController;
|
||||||
@@ -77,7 +77,7 @@ public class RankingCoordinator implements Coordinator {
|
|||||||
@Override
|
@Override
|
||||||
public void attach(NotifPipeline pipeline) {
|
public void attach(NotifPipeline pipeline) {
|
||||||
mStatusBarStateController.addCallback(mStatusBarStateCallback);
|
mStatusBarStateController.addCallback(mStatusBarStateCallback);
|
||||||
mSectionClassifier.setMinimizedSections(Collections.singleton(mMinimizedNotifSectioner));
|
mSectionStyleProvider.setMinimizedSections(Collections.singleton(mMinimizedNotifSectioner));
|
||||||
|
|
||||||
pipeline.addPreGroupFilter(mSuspendedFilter);
|
pipeline.addPreGroupFilter(mSuspendedFilter);
|
||||||
pipeline.addPreGroupFilter(mDndVisualEffectsFilter);
|
pipeline.addPreGroupFilter(mDndVisualEffectsFilter);
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ package com.android.systemui.statusbar.notification.collection.coordinator
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.statusbar.notification.AssistantFeedbackController
|
import com.android.systemui.statusbar.notification.AssistantFeedbackController
|
||||||
import com.android.systemui.statusbar.notification.SectionClassifier
|
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
|
||||||
import com.android.systemui.statusbar.notification.collection.render.NotifRowController
|
import com.android.systemui.statusbar.notification.collection.render.NotifRowController
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ import javax.inject.Inject
|
|||||||
class RowAppearanceCoordinator @Inject internal constructor(
|
class RowAppearanceCoordinator @Inject internal constructor(
|
||||||
context: Context,
|
context: Context,
|
||||||
private var mAssistantFeedbackController: AssistantFeedbackController,
|
private var mAssistantFeedbackController: AssistantFeedbackController,
|
||||||
private var mSectionClassifier: SectionClassifier
|
private var mSectionStyleProvider: SectionStyleProvider
|
||||||
) : Coordinator {
|
) : Coordinator {
|
||||||
|
|
||||||
private var entryToExpand: NotificationEntry? = null
|
private var entryToExpand: NotificationEntry? = null
|
||||||
@@ -55,7 +55,7 @@ class RowAppearanceCoordinator @Inject internal constructor(
|
|||||||
|
|
||||||
private fun onBeforeRenderList(list: List<ListEntry>) {
|
private fun onBeforeRenderList(list: List<ListEntry>) {
|
||||||
entryToExpand = list.firstOrNull()?.representativeEntry?.takeIf { entry ->
|
entryToExpand = list.firstOrNull()?.representativeEntry?.takeIf { entry ->
|
||||||
!mSectionClassifier.isMinimizedSection(entry.section!!)
|
!mSectionStyleProvider.isMinimizedSection(entry.section!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ class NotifUiAdjustment internal constructor(
|
|||||||
val smartActions: List<Notification.Action>,
|
val smartActions: List<Notification.Action>,
|
||||||
val smartReplies: List<CharSequence>,
|
val smartReplies: List<CharSequence>,
|
||||||
val isConversation: Boolean,
|
val isConversation: Boolean,
|
||||||
|
val isSnoozeEnabled: Boolean,
|
||||||
val isMinimized: Boolean,
|
val isMinimized: Boolean,
|
||||||
val needsRedaction: Boolean,
|
val needsRedaction: Boolean,
|
||||||
) {
|
) {
|
||||||
@@ -42,6 +43,7 @@ class NotifUiAdjustment internal constructor(
|
|||||||
): Boolean = when {
|
): Boolean = when {
|
||||||
oldAdjustment === newAdjustment -> false
|
oldAdjustment === newAdjustment -> false
|
||||||
oldAdjustment.isConversation != newAdjustment.isConversation -> true
|
oldAdjustment.isConversation != newAdjustment.isConversation -> true
|
||||||
|
oldAdjustment.isSnoozeEnabled != newAdjustment.isSnoozeEnabled -> true
|
||||||
oldAdjustment.isMinimized != newAdjustment.isMinimized -> true
|
oldAdjustment.isMinimized != newAdjustment.isMinimized -> true
|
||||||
oldAdjustment.needsRedaction != newAdjustment.needsRedaction -> true
|
oldAdjustment.needsRedaction != newAdjustment.needsRedaction -> true
|
||||||
areDifferent(oldAdjustment.smartActions, newAdjustment.smartActions) -> true
|
areDifferent(oldAdjustment.smartActions, newAdjustment.smartActions) -> true
|
||||||
@@ -57,9 +59,9 @@ class NotifUiAdjustment internal constructor(
|
|||||||
first.size != second.size -> true
|
first.size != second.size -> true
|
||||||
else -> first.asSequence().zip(second.asSequence()).any {
|
else -> first.asSequence().zip(second.asSequence()).any {
|
||||||
(!TextUtils.equals(it.first.title, it.second.title)) ||
|
(!TextUtils.equals(it.first.title, it.second.title)) ||
|
||||||
(areDifferent(it.first.getIcon(), it.second.getIcon())) ||
|
(areDifferent(it.first.getIcon(), it.second.getIcon())) ||
|
||||||
(it.first.actionIntent != it.second.actionIntent) ||
|
(it.first.actionIntent != it.second.actionIntent) ||
|
||||||
(areDifferent(it.first.remoteInputs, it.second.remoteInputs))
|
(areDifferent(it.first.remoteInputs, it.second.remoteInputs))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,7 +80,7 @@ class NotifUiAdjustment internal constructor(
|
|||||||
first.size != second.size -> true
|
first.size != second.size -> true
|
||||||
else -> first.asSequence().zip(second.asSequence()).any {
|
else -> first.asSequence().zip(second.asSequence()).any {
|
||||||
(!TextUtils.equals(it.first.label, it.second.label)) ||
|
(!TextUtils.equals(it.first.label, it.second.label)) ||
|
||||||
(areDifferent(it.first.choices, it.second.choices))
|
(areDifferent(it.first.choices, it.second.choices))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,4 +96,4 @@ class NotifUiAdjustment internal constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,18 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.notification.collection.inflation
|
package com.android.systemui.statusbar.notification.collection.inflation
|
||||||
|
|
||||||
|
import android.database.ContentObserver
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.UserHandle
|
||||||
|
import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
|
import com.android.systemui.dagger.qualifiers.Main
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager
|
import com.android.systemui.statusbar.NotificationLockscreenUserManager
|
||||||
import com.android.systemui.statusbar.notification.SectionClassifier
|
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
|
||||||
import com.android.systemui.util.ListenerSet
|
import com.android.systemui.util.ListenerSet
|
||||||
|
import com.android.systemui.util.settings.SecureSettings
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30,14 +36,23 @@ import javax.inject.Inject
|
|||||||
*/
|
*/
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
class NotifUiAdjustmentProvider @Inject constructor(
|
class NotifUiAdjustmentProvider @Inject constructor(
|
||||||
|
@Main private val handler: Handler,
|
||||||
|
private val secureSettings: SecureSettings,
|
||||||
private val lockscreenUserManager: NotificationLockscreenUserManager,
|
private val lockscreenUserManager: NotificationLockscreenUserManager,
|
||||||
private val sectionClassifier: SectionClassifier,
|
private val sectionStyleProvider: SectionStyleProvider
|
||||||
) {
|
) {
|
||||||
private val dirtyListeners = ListenerSet<Runnable>()
|
private val dirtyListeners = ListenerSet<Runnable>()
|
||||||
|
private var isSnoozeEnabled = false
|
||||||
|
|
||||||
fun addDirtyListener(listener: Runnable) {
|
fun addDirtyListener(listener: Runnable) {
|
||||||
if (dirtyListeners.isEmpty()) {
|
if (dirtyListeners.isEmpty()) {
|
||||||
lockscreenUserManager.addNotificationStateChangedListener(notifStateChangedListener)
|
lockscreenUserManager.addNotificationStateChangedListener(notifStateChangedListener)
|
||||||
|
updateSnoozeEnabled()
|
||||||
|
secureSettings.registerContentObserverForUser(
|
||||||
|
SHOW_NOTIFICATION_SNOOZE,
|
||||||
|
settingsObserver,
|
||||||
|
UserHandle.USER_ALL
|
||||||
|
)
|
||||||
}
|
}
|
||||||
dirtyListeners.addIfAbsent(listener)
|
dirtyListeners.addIfAbsent(listener)
|
||||||
}
|
}
|
||||||
@@ -46,6 +61,7 @@ class NotifUiAdjustmentProvider @Inject constructor(
|
|||||||
dirtyListeners.remove(listener)
|
dirtyListeners.remove(listener)
|
||||||
if (dirtyListeners.isEmpty()) {
|
if (dirtyListeners.isEmpty()) {
|
||||||
lockscreenUserManager.removeNotificationStateChangedListener(notifStateChangedListener)
|
lockscreenUserManager.removeNotificationStateChangedListener(notifStateChangedListener)
|
||||||
|
secureSettings.unregisterContentObserver(settingsObserver)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,10 +70,21 @@ class NotifUiAdjustmentProvider @Inject constructor(
|
|||||||
dirtyListeners.forEach(Runnable::run)
|
dirtyListeners.forEach(Runnable::run)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val settingsObserver = object : ContentObserver(handler) {
|
||||||
|
override fun onChange(selfChange: Boolean) {
|
||||||
|
updateSnoozeEnabled()
|
||||||
|
dirtyListeners.forEach(Runnable::run)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateSnoozeEnabled() {
|
||||||
|
isSnoozeEnabled = secureSettings.getInt(SHOW_NOTIFICATION_SNOOZE, 0) == 1
|
||||||
|
}
|
||||||
|
|
||||||
private fun isEntryMinimized(entry: NotificationEntry): Boolean {
|
private fun isEntryMinimized(entry: NotificationEntry): Boolean {
|
||||||
val section = entry.section ?: error("Entry must have a section to determine if minimized")
|
val section = entry.section ?: error("Entry must have a section to determine if minimized")
|
||||||
val parent = entry.parent ?: error("Entry must have a parent to determine if minimized")
|
val parent = entry.parent ?: error("Entry must have a parent to determine if minimized")
|
||||||
val isMinimizedSection = sectionClassifier.isMinimizedSection(section)
|
val isMinimizedSection = sectionStyleProvider.isMinimizedSection(section)
|
||||||
val isTopLevelEntry = parent == GroupEntry.ROOT_ENTRY
|
val isTopLevelEntry = parent == GroupEntry.ROOT_ENTRY
|
||||||
val isGroupSummary = parent.summary == entry
|
val isGroupSummary = parent.summary == entry
|
||||||
return isMinimizedSection && (isTopLevelEntry || isGroupSummary)
|
return isMinimizedSection && (isTopLevelEntry || isGroupSummary)
|
||||||
@@ -73,7 +100,8 @@ class NotifUiAdjustmentProvider @Inject constructor(
|
|||||||
smartActions = entry.ranking.smartActions,
|
smartActions = entry.ranking.smartActions,
|
||||||
smartReplies = entry.ranking.smartReplies,
|
smartReplies = entry.ranking.smartReplies,
|
||||||
isConversation = entry.ranking.isConversation,
|
isConversation = entry.ranking.isConversation,
|
||||||
|
isSnoozeEnabled = isSnoozeEnabled,
|
||||||
isMinimized = isEntryMinimized(entry),
|
isMinimized = isEntryMinimized(entry),
|
||||||
needsRedaction = lockscreenUserManager.needsRedaction(entry),
|
needsRedaction = lockscreenUserManager.needsRedaction(entry),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.statusbar.notification
|
package com.android.systemui.statusbar.notification.collection.provider
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
@@ -34,7 +34,7 @@ import javax.inject.Inject
|
|||||||
class SectionHeaderVisibilityProvider @Inject constructor(
|
class SectionHeaderVisibilityProvider @Inject constructor(
|
||||||
context: Context
|
context: Context
|
||||||
) {
|
) {
|
||||||
var neverShowSectionHeaders = context.resources.getBoolean(R.bool.config_notification_never_show_section_headers)
|
val neverShowSectionHeaders =
|
||||||
private set
|
context.resources.getBoolean(R.bool.config_notification_never_show_section_headers)
|
||||||
var sectionHeadersVisible = true
|
var sectionHeadersVisible = true
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.statusbar.notification
|
package com.android.systemui.statusbar.notification.collection.provider
|
||||||
|
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
||||||
@@ -26,7 +26,7 @@ import javax.inject.Inject
|
|||||||
* NOTE: This class exists to avoid putting metadata like "isMinimized" on the NotifSection
|
* NOTE: This class exists to avoid putting metadata like "isMinimized" on the NotifSection
|
||||||
*/
|
*/
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
class SectionClassifier @Inject constructor() {
|
class SectionStyleProvider @Inject constructor() {
|
||||||
private lateinit var lowPrioritySections: Set<NotifSectioner>
|
private lateinit var lowPrioritySections: Set<NotifSectioner>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -16,12 +16,12 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.notification.collection.render
|
package com.android.systemui.statusbar.notification.collection.render
|
||||||
|
|
||||||
import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider
|
|
||||||
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
|
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
|
||||||
import com.android.systemui.util.Compile
|
import com.android.systemui.util.Compile
|
||||||
import com.android.systemui.util.traceSection
|
import com.android.systemui.util.traceSection
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ package com.android.systemui.statusbar.notification.collection.render
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
|
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
|
||||||
import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider
|
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
|
||||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
||||||
import com.android.systemui.util.traceSection
|
import com.android.systemui.util.traceSection
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
|
|||||||
@@ -30,13 +30,13 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
|||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
|
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||||
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
|
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import static java.util.Objects.requireNonNull;
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
|
import android.os.Handler;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper;
|
import android.testing.TestableLooper;
|
||||||
@@ -42,7 +43,6 @@ import com.android.internal.statusbar.IStatusBarService;
|
|||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||||
import com.android.systemui.statusbar.RankingBuilder;
|
import com.android.systemui.statusbar.RankingBuilder;
|
||||||
import com.android.systemui.statusbar.notification.SectionClassifier;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntry;
|
import com.android.systemui.statusbar.notification.collection.GroupEntry;
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
|
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
||||||
@@ -57,8 +57,10 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.OnBefo
|
|||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
||||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
|
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
|
||||||
import com.android.systemui.statusbar.notification.collection.render.NotifViewBarn;
|
import com.android.systemui.statusbar.notification.collection.render.NotifViewBarn;
|
||||||
import com.android.systemui.statusbar.notification.row.NotifInflationErrorManager;
|
import com.android.systemui.statusbar.notification.row.NotifInflationErrorManager;
|
||||||
|
import com.android.systemui.util.settings.SecureSettings;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -97,8 +99,10 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
|
|||||||
@Mock private IStatusBarService mService;
|
@Mock private IStatusBarService mService;
|
||||||
@Mock private BindEventManagerImpl mBindEventManagerImpl;
|
@Mock private BindEventManagerImpl mBindEventManagerImpl;
|
||||||
@Mock private NotificationLockscreenUserManager mLockscreenUserManager;
|
@Mock private NotificationLockscreenUserManager mLockscreenUserManager;
|
||||||
|
@Mock private Handler mHandler;
|
||||||
|
@Mock private SecureSettings mSecureSettings;
|
||||||
@Spy private FakeNotifInflater mNotifInflater = new FakeNotifInflater();
|
@Spy private FakeNotifInflater mNotifInflater = new FakeNotifInflater();
|
||||||
private final SectionClassifier mSectionClassifier = new SectionClassifier();
|
private final SectionStyleProvider mSectionStyleProvider = new SectionStyleProvider();
|
||||||
|
|
||||||
private NotifUiAdjustmentProvider mAdjustmentProvider;
|
private NotifUiAdjustmentProvider mAdjustmentProvider;
|
||||||
|
|
||||||
@@ -110,8 +114,11 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mAdjustmentProvider =
|
mAdjustmentProvider = new NotifUiAdjustmentProvider(
|
||||||
new NotifUiAdjustmentProvider(mLockscreenUserManager, mSectionClassifier);
|
mHandler,
|
||||||
|
mSecureSettings,
|
||||||
|
mLockscreenUserManager,
|
||||||
|
mSectionStyleProvider);
|
||||||
mEntry = getNotificationEntryBuilder().setParent(ROOT_ENTRY).build();
|
mEntry = getNotificationEntryBuilder().setParent(ROOT_ENTRY).build();
|
||||||
mInflationError = new Exception(TEST_MESSAGE);
|
mInflationError = new Exception(TEST_MESSAGE);
|
||||||
mErrorManager = new NotifInflationErrorManager();
|
mErrorManager = new NotifInflationErrorManager();
|
||||||
@@ -495,7 +502,7 @@ public class PreparationCoordinatorTest extends SysuiTestCase {
|
|||||||
private static final int TEST_MAX_GROUP_DELAY = 100;
|
private static final int TEST_MAX_GROUP_DELAY = 100;
|
||||||
|
|
||||||
private void setSectionIsLowPriority(boolean minimized) {
|
private void setSectionIsLowPriority(boolean minimized) {
|
||||||
mSectionClassifier.setMinimizedSections(minimized
|
mSectionStyleProvider.setMinimizedSections(minimized
|
||||||
? Collections.singleton(mNotifSection.getSectioner())
|
? Collections.singleton(mNotifSection.getSectioner())
|
||||||
: Collections.emptyList());
|
: Collections.emptyList());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ import com.android.systemui.SysuiTestCase;
|
|||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.RankingBuilder;
|
import com.android.systemui.statusbar.RankingBuilder;
|
||||||
import com.android.systemui.statusbar.SbnBuilder;
|
import com.android.systemui.statusbar.SbnBuilder;
|
||||||
import com.android.systemui.statusbar.notification.SectionClassifier;
|
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||||
@@ -50,6 +49,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB
|
|||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
||||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
|
||||||
import com.android.systemui.statusbar.notification.collection.render.NodeController;
|
import com.android.systemui.statusbar.notification.collection.render.NodeController;
|
||||||
import com.android.systemui.statusbar.notification.collection.render.SectionHeaderController;
|
import com.android.systemui.statusbar.notification.collection.render.SectionHeaderController;
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ public class RankingCoordinatorTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Mock private StatusBarStateController mStatusBarStateController;
|
@Mock private StatusBarStateController mStatusBarStateController;
|
||||||
@Mock private HighPriorityProvider mHighPriorityProvider;
|
@Mock private HighPriorityProvider mHighPriorityProvider;
|
||||||
@Mock private SectionClassifier mSectionClassifier;
|
@Mock private SectionStyleProvider mSectionStyleProvider;
|
||||||
@Mock private NotifPipeline mNotifPipeline;
|
@Mock private NotifPipeline mNotifPipeline;
|
||||||
@Mock private NodeController mAlertingHeaderController;
|
@Mock private NodeController mAlertingHeaderController;
|
||||||
@Mock private NodeController mSilentNodeController;
|
@Mock private NodeController mSilentNodeController;
|
||||||
@@ -94,7 +94,7 @@ public class RankingCoordinatorTest extends SysuiTestCase {
|
|||||||
mRankingCoordinator = new RankingCoordinator(
|
mRankingCoordinator = new RankingCoordinator(
|
||||||
mStatusBarStateController,
|
mStatusBarStateController,
|
||||||
mHighPriorityProvider,
|
mHighPriorityProvider,
|
||||||
mSectionClassifier,
|
mSectionStyleProvider,
|
||||||
mAlertingHeaderController,
|
mAlertingHeaderController,
|
||||||
mSilentHeaderController,
|
mSilentHeaderController,
|
||||||
mSilentNodeController);
|
mSilentNodeController);
|
||||||
@@ -102,7 +102,7 @@ public class RankingCoordinatorTest extends SysuiTestCase {
|
|||||||
mEntry.setRanking(getRankingForUnfilteredNotif().build());
|
mEntry.setRanking(getRankingForUnfilteredNotif().build());
|
||||||
|
|
||||||
mRankingCoordinator.attach(mNotifPipeline);
|
mRankingCoordinator.attach(mNotifPipeline);
|
||||||
verify(mSectionClassifier).setMinimizedSections(any());
|
verify(mSectionStyleProvider).setMinimizedSections(any());
|
||||||
verify(mNotifPipeline, times(2)).addPreGroupFilter(mNotifFilterCaptor.capture());
|
verify(mNotifPipeline, times(2)).addPreGroupFilter(mNotifFilterCaptor.capture());
|
||||||
mCapturedSuspendedFilter = mNotifFilterCaptor.getAllValues().get(0);
|
mCapturedSuspendedFilter = mNotifFilterCaptor.getAllValues().get(0);
|
||||||
mCapturedDozingFilter = mNotifFilterCaptor.getAllValues().get(1);
|
mCapturedDozingFilter = mNotifFilterCaptor.getAllValues().get(1);
|
||||||
|
|||||||
@@ -21,13 +21,13 @@ import androidx.test.filters.SmallTest
|
|||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.statusbar.notification.AssistantFeedbackController
|
import com.android.systemui.statusbar.notification.AssistantFeedbackController
|
||||||
import com.android.systemui.statusbar.notification.FeedbackIcon
|
import com.android.systemui.statusbar.notification.FeedbackIcon
|
||||||
import com.android.systemui.statusbar.notification.SectionClassifier
|
|
||||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
|
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
|
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener
|
import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
|
||||||
import com.android.systemui.statusbar.notification.collection.render.NotifRowController
|
import com.android.systemui.statusbar.notification.collection.render.NotifRowController
|
||||||
import com.android.systemui.util.mockito.any
|
import com.android.systemui.util.mockito.any
|
||||||
import com.android.systemui.util.mockito.eq
|
import com.android.systemui.util.mockito.eq
|
||||||
@@ -53,7 +53,7 @@ class RowAppearanceCoordinatorTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Mock private lateinit var pipeline: NotifPipeline
|
@Mock private lateinit var pipeline: NotifPipeline
|
||||||
@Mock private lateinit var assistantFeedbackController: AssistantFeedbackController
|
@Mock private lateinit var assistantFeedbackController: AssistantFeedbackController
|
||||||
@Mock private lateinit var sectionClassifier: SectionClassifier
|
@Mock private lateinit var sectionStyleProvider: SectionStyleProvider
|
||||||
|
|
||||||
@Mock private lateinit var section1: NotifSection
|
@Mock private lateinit var section1: NotifSection
|
||||||
@Mock private lateinit var section2: NotifSection
|
@Mock private lateinit var section2: NotifSection
|
||||||
@@ -66,7 +66,7 @@ class RowAppearanceCoordinatorTest : SysuiTestCase() {
|
|||||||
coordinator = RowAppearanceCoordinator(
|
coordinator = RowAppearanceCoordinator(
|
||||||
mContext,
|
mContext,
|
||||||
assistantFeedbackController,
|
assistantFeedbackController,
|
||||||
sectionClassifier
|
sectionStyleProvider
|
||||||
)
|
)
|
||||||
coordinator.attach(pipeline)
|
coordinator.attach(pipeline)
|
||||||
beforeRenderListListener = withArgCaptor {
|
beforeRenderListListener = withArgCaptor {
|
||||||
@@ -82,8 +82,8 @@ class RowAppearanceCoordinatorTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSetSystemExpandedOnlyOnFirst() {
|
fun testSetSystemExpandedOnlyOnFirst() {
|
||||||
whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(false)
|
whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(false)
|
||||||
whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(false)
|
whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(false)
|
||||||
beforeRenderListListener.onBeforeRenderList(listOf(entry1, entry2))
|
beforeRenderListListener.onBeforeRenderList(listOf(entry1, entry2))
|
||||||
afterRenderEntryListener.onAfterRenderEntry(entry1, controller1)
|
afterRenderEntryListener.onAfterRenderEntry(entry1, controller1)
|
||||||
verify(controller1).setSystemExpanded(eq(true))
|
verify(controller1).setSystemExpanded(eq(true))
|
||||||
@@ -93,8 +93,8 @@ class RowAppearanceCoordinatorTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testSetSystemExpandedNeverIfMinimized() {
|
fun testSetSystemExpandedNeverIfMinimized() {
|
||||||
whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(true)
|
whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(true)
|
||||||
whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(true)
|
whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(true)
|
||||||
beforeRenderListListener.onBeforeRenderList(listOf(entry1, entry2))
|
beforeRenderListListener.onBeforeRenderList(listOf(entry1, entry2))
|
||||||
afterRenderEntryListener.onAfterRenderEntry(entry1, controller1)
|
afterRenderEntryListener.onAfterRenderEntry(entry1, controller1)
|
||||||
verify(controller1).setSystemExpanded(eq(false))
|
verify(controller1).setSystemExpanded(eq(false))
|
||||||
|
|||||||
@@ -1,29 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 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.statusbar.notification.collection.inflation
|
package com.android.systemui.statusbar.notification.collection.inflation
|
||||||
|
|
||||||
|
import android.database.ContentObserver
|
||||||
|
import android.os.Handler
|
||||||
|
import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE
|
||||||
import android.testing.AndroidTestingRunner
|
import android.testing.AndroidTestingRunner
|
||||||
import android.testing.TestableLooper.RunWithLooper
|
import android.testing.TestableLooper.RunWithLooper
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager
|
import com.android.systemui.statusbar.NotificationLockscreenUserManager
|
||||||
import com.android.systemui.statusbar.notification.SectionClassifier
|
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||||
|
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
|
||||||
|
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
|
||||||
|
import com.android.systemui.util.mockito.any
|
||||||
|
import com.android.systemui.util.mockito.eq
|
||||||
import com.android.systemui.util.mockito.mock
|
import com.android.systemui.util.mockito.mock
|
||||||
import com.android.systemui.util.mockito.withArgCaptor
|
import com.android.systemui.util.mockito.withArgCaptor
|
||||||
|
import com.android.systemui.util.settings.FakeSettings
|
||||||
|
import com.android.systemui.util.settings.SecureSettings
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mockito.clearInvocations
|
||||||
|
import org.mockito.Mockito.inOrder
|
||||||
import org.mockito.Mockito.verify
|
import org.mockito.Mockito.verify
|
||||||
|
import org.mockito.Mockito.verifyNoMoreInteractions
|
||||||
|
import org.mockito.Mockito.`when` as whenever
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@RunWith(AndroidTestingRunner::class)
|
@RunWith(AndroidTestingRunner::class)
|
||||||
@RunWithLooper
|
@RunWithLooper
|
||||||
class NotifUiAdjustmentProviderTest : SysuiTestCase() {
|
class NotifUiAdjustmentProviderTest : SysuiTestCase() {
|
||||||
private val lockscreenUserManager: NotificationLockscreenUserManager = mock()
|
private val lockscreenUserManager: NotificationLockscreenUserManager = mock()
|
||||||
private val sectionClassifier: SectionClassifier = mock()
|
private val sectionStyleProvider: SectionStyleProvider = mock()
|
||||||
|
private val handler: Handler = mock()
|
||||||
|
private val secureSettings: SecureSettings = mock()
|
||||||
|
private val uri = FakeSettings().getUriFor(SHOW_NOTIFICATION_SNOOZE)
|
||||||
|
private val dirtyListener: Runnable = mock()
|
||||||
|
|
||||||
|
private val section = NotifSection(mock(), 0)
|
||||||
|
private val entry = NotificationEntryBuilder()
|
||||||
|
.setSection(section)
|
||||||
|
.setParent(GroupEntry.ROOT_ENTRY)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
private lateinit var contentObserver: ContentObserver
|
||||||
|
|
||||||
private val adjustmentProvider = NotifUiAdjustmentProvider(
|
private val adjustmentProvider = NotifUiAdjustmentProvider(
|
||||||
|
handler,
|
||||||
|
secureSettings,
|
||||||
lockscreenUserManager,
|
lockscreenUserManager,
|
||||||
sectionClassifier,
|
sectionStyleProvider,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setup() {
|
||||||
|
verifyNoMoreInteractions(secureSettings)
|
||||||
|
adjustmentProvider.addDirtyListener(dirtyListener)
|
||||||
|
verify(secureSettings).getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())
|
||||||
|
contentObserver = withArgCaptor {
|
||||||
|
verify(secureSettings).registerContentObserverForUser(
|
||||||
|
eq(SHOW_NOTIFICATION_SNOOZE), capture(), any()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
verifyNoMoreInteractions(secureSettings, dirtyListener)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun notifLockscreenStateChangeWillNotifDirty() {
|
fun notifLockscreenStateChangeWillNotifDirty() {
|
||||||
val dirtyListener = mock<Runnable>()
|
val dirtyListener = mock<Runnable>()
|
||||||
@@ -33,6 +91,35 @@ class NotifUiAdjustmentProviderTest : SysuiTestCase() {
|
|||||||
verify(lockscreenUserManager).addNotificationStateChangedListener(capture())
|
verify(lockscreenUserManager).addNotificationStateChangedListener(capture())
|
||||||
}
|
}
|
||||||
notifLocksreenStateChangeListener.onNotificationStateChanged()
|
notifLocksreenStateChangeListener.onNotificationStateChanged()
|
||||||
verify(dirtyListener).run();
|
verify(dirtyListener).run()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun additionalAddDoesNotRegisterAgain() {
|
||||||
|
clearInvocations(secureSettings)
|
||||||
|
adjustmentProvider.addDirtyListener(mock())
|
||||||
|
verifyNoMoreInteractions(secureSettings)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun onChangeWillQueryThenNotifyDirty() {
|
||||||
|
contentObserver.onChange(false, listOf(uri), 0, 0)
|
||||||
|
with(inOrder(secureSettings, dirtyListener)) {
|
||||||
|
verify(secureSettings).getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())
|
||||||
|
verify(dirtyListener).run()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun changingSnoozeChangesProvidedAdjustment() {
|
||||||
|
whenever(secureSettings.getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())).thenReturn(0)
|
||||||
|
val original = adjustmentProvider.calculateAdjustment(entry)
|
||||||
|
assertThat(original.isSnoozeEnabled).isFalse()
|
||||||
|
|
||||||
|
whenever(secureSettings.getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())).thenReturn(1)
|
||||||
|
contentObserver.onChange(false, listOf(uri), 0, 0)
|
||||||
|
val withSnoozing = adjustmentProvider.calculateAdjustment(entry)
|
||||||
|
assertThat(withSnoozing.isSnoozeEnabled).isTrue()
|
||||||
|
assertThat(withSnoozing).isNotEqualTo(original)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.notification.collection.render
|
|||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
|
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
|
||||||
import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider
|
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||||
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
|
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
|
||||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||||
@@ -28,6 +27,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB
|
|||||||
import com.android.systemui.statusbar.notification.collection.getAttachState
|
import com.android.systemui.statusbar.notification.collection.getAttachState
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
|
||||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
|
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
|
||||||
|
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
|
||||||
import com.android.systemui.statusbar.notification.stack.BUCKET_ALERTING
|
import com.android.systemui.statusbar.notification.stack.BUCKET_ALERTING
|
||||||
import com.android.systemui.statusbar.notification.stack.BUCKET_PEOPLE
|
import com.android.systemui.statusbar.notification.stack.BUCKET_PEOPLE
|
||||||
import com.android.systemui.statusbar.notification.stack.BUCKET_SILENT
|
import com.android.systemui.statusbar.notification.stack.BUCKET_SILENT
|
||||||
|
|||||||
Reference in New Issue
Block a user