Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -367,7 +367,8 @@ public class PreparationCoordinator implements Coordinator { /* reason = */ reason, /* reason = */ reason, /* showSnooze = */ adjustment.isSnoozeEnabled(), /* showSnooze = */ adjustment.isSnoozeEnabled(), /* isChildInGroup = */ adjustment.isChildInGroup(), /* isChildInGroup = */ adjustment.isChildInGroup(), /* isGroupSummary = */ adjustment.isGroupSummary() /* isGroupSummary = */ adjustment.isGroupSummary(), /* needsRedaction = */ adjustment.getNeedsRedaction() ); ); } } Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -61,5 +61,6 @@ interface NotifInflater { val showSnooze: Boolean, val showSnooze: Boolean, val isChildInGroup: Boolean = false, val isChildInGroup: Boolean = false, val isGroupSummary: Boolean = false, val isGroupSummary: Boolean = false, val needsRedaction: Boolean, ) ) } } packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt +19 −1 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Handler import android.os.HandlerExecutor import android.os.HandlerExecutor import android.os.UserHandle import android.os.UserHandle import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE import com.android.server.notification.Flags.screenshareNotificationHiding import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.settings.UserTracker import com.android.systemui.settings.UserTracker Loading @@ -30,6 +31,7 @@ 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.statusbar.notification.collection.provider.SectionStyleProvider import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController import com.android.systemui.util.ListenerSet import com.android.systemui.util.ListenerSet import com.android.systemui.util.settings.SecureSettings import com.android.systemui.util.settings.SecureSettings import javax.inject.Inject import javax.inject.Inject Loading @@ -43,6 +45,7 @@ class NotifUiAdjustmentProvider @Inject constructor( @Main private val handler: Handler, @Main private val handler: Handler, private val secureSettings: SecureSettings, private val secureSettings: SecureSettings, private val lockscreenUserManager: NotificationLockscreenUserManager, private val lockscreenUserManager: NotificationLockscreenUserManager, private val sensitiveNotifProtectionController: SensitiveNotificationProtectionController, private val sectionStyleProvider: SectionStyleProvider, private val sectionStyleProvider: SectionStyleProvider, private val userTracker: UserTracker, private val userTracker: UserTracker, private val groupMembershipManager: GroupMembershipManager, private val groupMembershipManager: GroupMembershipManager, Loading @@ -66,6 +69,11 @@ class NotifUiAdjustmentProvider @Inject constructor( fun addDirtyListener(listener: Runnable) { fun addDirtyListener(listener: Runnable) { if (dirtyListeners.isEmpty()) { if (dirtyListeners.isEmpty()) { lockscreenUserManager.addNotificationStateChangedListener(notifStateChangedListener) lockscreenUserManager.addNotificationStateChangedListener(notifStateChangedListener) if (screenshareNotificationHiding()) { sensitiveNotifProtectionController.registerSensitiveStateListener( onSensitiveStateChangedListener ) } updateSnoozeEnabled() updateSnoozeEnabled() secureSettings.registerContentObserverForUser( secureSettings.registerContentObserverForUser( SHOW_NOTIFICATION_SNOOZE, SHOW_NOTIFICATION_SNOOZE, Loading @@ -80,6 +88,11 @@ class NotifUiAdjustmentProvider @Inject constructor( dirtyListeners.remove(listener) dirtyListeners.remove(listener) if (dirtyListeners.isEmpty()) { if (dirtyListeners.isEmpty()) { lockscreenUserManager.removeNotificationStateChangedListener(notifStateChangedListener) lockscreenUserManager.removeNotificationStateChangedListener(notifStateChangedListener) if (screenshareNotificationHiding()) { sensitiveNotifProtectionController.unregisterSensitiveStateListener( onSensitiveStateChangedListener ) } secureSettings.unregisterContentObserver(settingsObserver) secureSettings.unregisterContentObserver(settingsObserver) } } } } Loading @@ -89,6 +102,8 @@ class NotifUiAdjustmentProvider @Inject constructor( dirtyListeners.forEach(Runnable::run) dirtyListeners.forEach(Runnable::run) } } private val onSensitiveStateChangedListener = Runnable { dirtyListeners.forEach(Runnable::run) } private val settingsObserver = object : ContentObserver(handler) { private val settingsObserver = object : ContentObserver(handler) { override fun onChange(selfChange: Boolean) { override fun onChange(selfChange: Boolean) { updateSnoozeEnabled() updateSnoozeEnabled() Loading Loading @@ -122,7 +137,10 @@ class NotifUiAdjustmentProvider @Inject constructor( isConversation = entry.ranking.isConversation, isConversation = entry.ranking.isConversation, isSnoozeEnabled = isSnoozeSettingsEnabled && !entry.isCanceled, isSnoozeEnabled = isSnoozeSettingsEnabled && !entry.isCanceled, isMinimized = isEntryMinimized(entry), isMinimized = isEntryMinimized(entry), needsRedaction = lockscreenUserManager.needsRedaction(entry), needsRedaction = lockscreenUserManager.needsRedaction(entry) || (screenshareNotificationHiding() && sensitiveNotifProtectionController.shouldProtectNotification(entry)), isChildInGroup = entry.sbn.isAppOrSystemGroupChild, isChildInGroup = entry.sbn.isAppOrSystemGroupChild, isGroupSummary = entry.sbn.isAppOrSystemGroupSummary, isGroupSummary = entry.sbn.isAppOrSystemGroupSummary, ) ) Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java +2 −4 Original line number Original line Diff line number Diff line Loading @@ -254,11 +254,9 @@ public class NotificationRowBinderImpl implements NotificationRowBinder { params.setUseIncreasedCollapsedHeight(useIncreasedCollapsedHeight); params.setUseIncreasedCollapsedHeight(useIncreasedCollapsedHeight); params.setUseLowPriority(isLowPriority); params.setUseLowPriority(isLowPriority); // If screenshareNotificationHiding is enabled, both public and private views should be // inflated to avoid any latency associated with reinflating all notification views when // screen share starts and stops if (screenshareNotificationHiding() if (screenshareNotificationHiding() || mNotificationLockscreenUserManager.needsRedaction(entry)) { ? inflaterParams.getNeedsRedaction() : mNotificationLockscreenUserManager.needsRedaction(entry)) { params.requireContentViews(FLAG_CONTENT_VIEW_PUBLIC); params.requireContentViews(FLAG_CONTENT_VIEW_PUBLIC); } else { } else { params.markContentViewsFreeable(FLAG_CONTENT_VIEW_PUBLIC); params.markContentViewsFreeable(FLAG_CONTENT_VIEW_PUBLIC); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -68,6 +68,7 @@ import com.android.systemui.statusbar.notification.collection.provider.SectionSt import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; 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.statusbar.policy.SensitiveNotificationProtectionController; import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.settings.SecureSettings; import org.junit.Before; import org.junit.Before; Loading Loading @@ -107,6 +108,7 @@ 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 SensitiveNotificationProtectionController mSensitiveNotifProtectionController; @Mock private Handler mHandler; @Mock private Handler mHandler; @Mock private SecureSettings mSecureSettings; @Mock private SecureSettings mSecureSettings; @Spy private FakeNotifInflater mNotifInflater = new FakeNotifInflater(); @Spy private FakeNotifInflater mNotifInflater = new FakeNotifInflater(); Loading @@ -128,6 +130,7 @@ public class PreparationCoordinatorTest extends SysuiTestCase { mHandler, mHandler, mSecureSettings, mSecureSettings, mLockscreenUserManager, mLockscreenUserManager, mSensitiveNotifProtectionController, mSectionStyleProvider, mSectionStyleProvider, mUserTracker, mUserTracker, mGroupMembershipManager mGroupMembershipManager Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -367,7 +367,8 @@ public class PreparationCoordinator implements Coordinator { /* reason = */ reason, /* reason = */ reason, /* showSnooze = */ adjustment.isSnoozeEnabled(), /* showSnooze = */ adjustment.isSnoozeEnabled(), /* isChildInGroup = */ adjustment.isChildInGroup(), /* isChildInGroup = */ adjustment.isChildInGroup(), /* isGroupSummary = */ adjustment.isGroupSummary() /* isGroupSummary = */ adjustment.isGroupSummary(), /* needsRedaction = */ adjustment.getNeedsRedaction() ); ); } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -61,5 +61,6 @@ interface NotifInflater { val showSnooze: Boolean, val showSnooze: Boolean, val isChildInGroup: Boolean = false, val isChildInGroup: Boolean = false, val isGroupSummary: Boolean = false, val isGroupSummary: Boolean = false, val needsRedaction: Boolean, ) ) } }
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt +19 −1 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.os.Handler import android.os.HandlerExecutor import android.os.HandlerExecutor import android.os.UserHandle import android.os.UserHandle import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE import com.android.server.notification.Flags.screenshareNotificationHiding import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.settings.UserTracker import com.android.systemui.settings.UserTracker Loading @@ -30,6 +31,7 @@ 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.statusbar.notification.collection.provider.SectionStyleProvider import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController import com.android.systemui.util.ListenerSet import com.android.systemui.util.ListenerSet import com.android.systemui.util.settings.SecureSettings import com.android.systemui.util.settings.SecureSettings import javax.inject.Inject import javax.inject.Inject Loading @@ -43,6 +45,7 @@ class NotifUiAdjustmentProvider @Inject constructor( @Main private val handler: Handler, @Main private val handler: Handler, private val secureSettings: SecureSettings, private val secureSettings: SecureSettings, private val lockscreenUserManager: NotificationLockscreenUserManager, private val lockscreenUserManager: NotificationLockscreenUserManager, private val sensitiveNotifProtectionController: SensitiveNotificationProtectionController, private val sectionStyleProvider: SectionStyleProvider, private val sectionStyleProvider: SectionStyleProvider, private val userTracker: UserTracker, private val userTracker: UserTracker, private val groupMembershipManager: GroupMembershipManager, private val groupMembershipManager: GroupMembershipManager, Loading @@ -66,6 +69,11 @@ class NotifUiAdjustmentProvider @Inject constructor( fun addDirtyListener(listener: Runnable) { fun addDirtyListener(listener: Runnable) { if (dirtyListeners.isEmpty()) { if (dirtyListeners.isEmpty()) { lockscreenUserManager.addNotificationStateChangedListener(notifStateChangedListener) lockscreenUserManager.addNotificationStateChangedListener(notifStateChangedListener) if (screenshareNotificationHiding()) { sensitiveNotifProtectionController.registerSensitiveStateListener( onSensitiveStateChangedListener ) } updateSnoozeEnabled() updateSnoozeEnabled() secureSettings.registerContentObserverForUser( secureSettings.registerContentObserverForUser( SHOW_NOTIFICATION_SNOOZE, SHOW_NOTIFICATION_SNOOZE, Loading @@ -80,6 +88,11 @@ class NotifUiAdjustmentProvider @Inject constructor( dirtyListeners.remove(listener) dirtyListeners.remove(listener) if (dirtyListeners.isEmpty()) { if (dirtyListeners.isEmpty()) { lockscreenUserManager.removeNotificationStateChangedListener(notifStateChangedListener) lockscreenUserManager.removeNotificationStateChangedListener(notifStateChangedListener) if (screenshareNotificationHiding()) { sensitiveNotifProtectionController.unregisterSensitiveStateListener( onSensitiveStateChangedListener ) } secureSettings.unregisterContentObserver(settingsObserver) secureSettings.unregisterContentObserver(settingsObserver) } } } } Loading @@ -89,6 +102,8 @@ class NotifUiAdjustmentProvider @Inject constructor( dirtyListeners.forEach(Runnable::run) dirtyListeners.forEach(Runnable::run) } } private val onSensitiveStateChangedListener = Runnable { dirtyListeners.forEach(Runnable::run) } private val settingsObserver = object : ContentObserver(handler) { private val settingsObserver = object : ContentObserver(handler) { override fun onChange(selfChange: Boolean) { override fun onChange(selfChange: Boolean) { updateSnoozeEnabled() updateSnoozeEnabled() Loading Loading @@ -122,7 +137,10 @@ class NotifUiAdjustmentProvider @Inject constructor( isConversation = entry.ranking.isConversation, isConversation = entry.ranking.isConversation, isSnoozeEnabled = isSnoozeSettingsEnabled && !entry.isCanceled, isSnoozeEnabled = isSnoozeSettingsEnabled && !entry.isCanceled, isMinimized = isEntryMinimized(entry), isMinimized = isEntryMinimized(entry), needsRedaction = lockscreenUserManager.needsRedaction(entry), needsRedaction = lockscreenUserManager.needsRedaction(entry) || (screenshareNotificationHiding() && sensitiveNotifProtectionController.shouldProtectNotification(entry)), isChildInGroup = entry.sbn.isAppOrSystemGroupChild, isChildInGroup = entry.sbn.isAppOrSystemGroupChild, isGroupSummary = entry.sbn.isAppOrSystemGroupSummary, isGroupSummary = entry.sbn.isAppOrSystemGroupSummary, ) ) Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java +2 −4 Original line number Original line Diff line number Diff line Loading @@ -254,11 +254,9 @@ public class NotificationRowBinderImpl implements NotificationRowBinder { params.setUseIncreasedCollapsedHeight(useIncreasedCollapsedHeight); params.setUseIncreasedCollapsedHeight(useIncreasedCollapsedHeight); params.setUseLowPriority(isLowPriority); params.setUseLowPriority(isLowPriority); // If screenshareNotificationHiding is enabled, both public and private views should be // inflated to avoid any latency associated with reinflating all notification views when // screen share starts and stops if (screenshareNotificationHiding() if (screenshareNotificationHiding() || mNotificationLockscreenUserManager.needsRedaction(entry)) { ? inflaterParams.getNeedsRedaction() : mNotificationLockscreenUserManager.needsRedaction(entry)) { params.requireContentViews(FLAG_CONTENT_VIEW_PUBLIC); params.requireContentViews(FLAG_CONTENT_VIEW_PUBLIC); } else { } else { params.markContentViewsFreeable(FLAG_CONTENT_VIEW_PUBLIC); params.markContentViewsFreeable(FLAG_CONTENT_VIEW_PUBLIC); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -68,6 +68,7 @@ import com.android.systemui.statusbar.notification.collection.provider.SectionSt import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; 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.statusbar.policy.SensitiveNotificationProtectionController; import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.settings.SecureSettings; import org.junit.Before; import org.junit.Before; Loading Loading @@ -107,6 +108,7 @@ 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 SensitiveNotificationProtectionController mSensitiveNotifProtectionController; @Mock private Handler mHandler; @Mock private Handler mHandler; @Mock private SecureSettings mSecureSettings; @Mock private SecureSettings mSecureSettings; @Spy private FakeNotifInflater mNotifInflater = new FakeNotifInflater(); @Spy private FakeNotifInflater mNotifInflater = new FakeNotifInflater(); Loading @@ -128,6 +130,7 @@ public class PreparationCoordinatorTest extends SysuiTestCase { mHandler, mHandler, mSecureSettings, mSecureSettings, mLockscreenUserManager, mLockscreenUserManager, mSensitiveNotifProtectionController, mSectionStyleProvider, mSectionStyleProvider, mUserTracker, mUserTracker, mGroupMembershipManager mGroupMembershipManager Loading