Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SummarizationOnboardingInteractor.kt +10 −8 Original line number Diff line number Diff line Loading @@ -16,19 +16,20 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor import android.app.NotificationManager import android.app.INotificationManager import android.service.notification.Adjustment.KEY_SUMMARIZATION import androidx.core.content.edit import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.kotlin.BooleanFlowOperators.allOf import com.android.systemui.util.kotlin.SharedPreferencesExt.observeBoolean import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated import com.android.systemui.utils.coroutines.flow.mapLatestConflated import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map Loading @@ -39,7 +40,8 @@ class SummarizationOnboardingInteractor constructor( notifListRepo: ActiveNotificationListRepository, private val sharedPreferencesInteractor: NotificationsSharedPreferencesInteractor, private val notificationManager: NotificationManager, private val notificationManager: INotificationManager, userInteractor: SelectedUserInteractor, @Background private val bgDispatcher: CoroutineDispatcher, ) { private val notifsPresent: Flow<Boolean> = Loading @@ -54,9 +56,8 @@ constructor( } .distinctUntilChanged() private val summarizationAvailableAndDisabled: Flow<Boolean> = flow { emit(isAvailableAndDisabled()) } private val summarizationAvailableAndDisabled: Flow<Boolean> = userInteractor.selectedUser.mapLatestConflated { userId -> isAvailableAndDisabled(userId) } val onboardingNeeded: Flow<Boolean> = allOf(onboardingUnseen, summarizationAvailableAndDisabled, notifsPresent) Loading @@ -69,10 +70,11 @@ constructor( } } private suspend fun isAvailableAndDisabled(): Boolean = private suspend fun isAvailableAndDisabled(userId: Int): Boolean = withContext(bgDispatcher) { KEY_SUMMARIZATION !in notificationManager.unsupportedAdjustmentTypes && KEY_SUMMARIZATION !in notificationManager.allowedAssistantAdjustments KEY_SUMMARIZATION !in notificationManager.getAllowedAssistantAdjustmentsForUser(userId) } } Loading packages/SystemUI/tests/utils/src/android/app/NotificationManagerKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -20,3 +20,5 @@ import com.android.systemui.kosmos.Kosmos import org.mockito.kotlin.mock var Kosmos.notificationManager: NotificationManager by Kosmos.Fixture { mock {} } var Kosmos.iNotificationManager: INotificationManager by Kosmos.Fixture { mock {} } packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SummarizatonOnboardingInteractorKosmos.kt +4 −1 Original line number Diff line number Diff line Loading @@ -16,17 +16,20 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor import android.app.iNotificationManager import android.app.notificationManager import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testDispatcher import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository import com.android.systemui.user.domain.interactor.selectedUserInteractor val Kosmos.summarizationOnboardingInteractor by Kosmos.Fixture { SummarizationOnboardingInteractor( notifListRepo = activeNotificationListRepository, sharedPreferencesInteractor = notificationsSharedPreferencesInteractor, notificationManager = notificationManager, userInteractor = selectedUserInteractor, notificationManager = iNotificationManager, bgDispatcher = testDispatcher, ) } services/core/java/com/android/server/notification/NotificationManagerService.java +8 −1 Original line number Diff line number Diff line Loading @@ -5522,7 +5522,7 @@ public class NotificationManagerService extends SystemService { @Override public List<String> getAllowedAssistantAdjustmentsForUser(@UserIdInt int userId) { checkCallerIsSystem(); checkCallerIsSystemOrSystemUi(); return new ArrayList<>(mAssistants.getAllowedAssistantAdjustments(userId)); } Loading Loading @@ -11967,6 +11967,13 @@ public class NotificationManagerService extends SystemService { throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid()); } private void checkCallerIsSystemOrSystemUi() { if (isCallerSystemOrSystemUi()) { return; } throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid()); } private void checkCallerIsSystemOrSystemUiOrShell() { checkCallerIsSystemOrSystemUiOrShell(null); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SummarizationOnboardingInteractor.kt +10 −8 Original line number Diff line number Diff line Loading @@ -16,19 +16,20 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor import android.app.NotificationManager import android.app.INotificationManager import android.service.notification.Adjustment.KEY_SUMMARIZATION import androidx.core.content.edit import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.kotlin.BooleanFlowOperators.allOf import com.android.systemui.util.kotlin.SharedPreferencesExt.observeBoolean import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated import com.android.systemui.utils.coroutines.flow.mapLatestConflated import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map Loading @@ -39,7 +40,8 @@ class SummarizationOnboardingInteractor constructor( notifListRepo: ActiveNotificationListRepository, private val sharedPreferencesInteractor: NotificationsSharedPreferencesInteractor, private val notificationManager: NotificationManager, private val notificationManager: INotificationManager, userInteractor: SelectedUserInteractor, @Background private val bgDispatcher: CoroutineDispatcher, ) { private val notifsPresent: Flow<Boolean> = Loading @@ -54,9 +56,8 @@ constructor( } .distinctUntilChanged() private val summarizationAvailableAndDisabled: Flow<Boolean> = flow { emit(isAvailableAndDisabled()) } private val summarizationAvailableAndDisabled: Flow<Boolean> = userInteractor.selectedUser.mapLatestConflated { userId -> isAvailableAndDisabled(userId) } val onboardingNeeded: Flow<Boolean> = allOf(onboardingUnseen, summarizationAvailableAndDisabled, notifsPresent) Loading @@ -69,10 +70,11 @@ constructor( } } private suspend fun isAvailableAndDisabled(): Boolean = private suspend fun isAvailableAndDisabled(userId: Int): Boolean = withContext(bgDispatcher) { KEY_SUMMARIZATION !in notificationManager.unsupportedAdjustmentTypes && KEY_SUMMARIZATION !in notificationManager.allowedAssistantAdjustments KEY_SUMMARIZATION !in notificationManager.getAllowedAssistantAdjustmentsForUser(userId) } } Loading
packages/SystemUI/tests/utils/src/android/app/NotificationManagerKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -20,3 +20,5 @@ import com.android.systemui.kosmos.Kosmos import org.mockito.kotlin.mock var Kosmos.notificationManager: NotificationManager by Kosmos.Fixture { mock {} } var Kosmos.iNotificationManager: INotificationManager by Kosmos.Fixture { mock {} }
packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SummarizatonOnboardingInteractorKosmos.kt +4 −1 Original line number Diff line number Diff line Loading @@ -16,17 +16,20 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor import android.app.iNotificationManager import android.app.notificationManager import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testDispatcher import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository import com.android.systemui.user.domain.interactor.selectedUserInteractor val Kosmos.summarizationOnboardingInteractor by Kosmos.Fixture { SummarizationOnboardingInteractor( notifListRepo = activeNotificationListRepository, sharedPreferencesInteractor = notificationsSharedPreferencesInteractor, notificationManager = notificationManager, userInteractor = selectedUserInteractor, notificationManager = iNotificationManager, bgDispatcher = testDispatcher, ) }
services/core/java/com/android/server/notification/NotificationManagerService.java +8 −1 Original line number Diff line number Diff line Loading @@ -5522,7 +5522,7 @@ public class NotificationManagerService extends SystemService { @Override public List<String> getAllowedAssistantAdjustmentsForUser(@UserIdInt int userId) { checkCallerIsSystem(); checkCallerIsSystemOrSystemUi(); return new ArrayList<>(mAssistants.getAllowedAssistantAdjustments(userId)); } Loading Loading @@ -11967,6 +11967,13 @@ public class NotificationManagerService extends SystemService { throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid()); } private void checkCallerIsSystemOrSystemUi() { if (isCallerSystemOrSystemUi()) { return; } throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid()); } private void checkCallerIsSystemOrSystemUiOrShell() { checkCallerIsSystemOrSystemUiOrShell(null); }