From 2890ac71014ae36c132284fc53a96935afc1871e Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 27 Dec 2023 16:39:02 -0500 Subject: [PATCH] Hide spinner options for locked users 'Most Recent' and 'Most Frequent' depend on usagestats data, which is only available for unlocked users. Hide them if the user is currently locked Test: turn off work profile and view app notification list, primary & work Test: turn on work profile and view app notifications list, primary & work Fixes: 195092949 Flag: none Change-Id: Ia87b2b64824dff645286ea8910bcd2c412d070ae --- .../notification/AppNotificationRepository.kt | 13 +++++++++++++ .../notification/AppNotificationsListModel.kt | 17 +++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/spa/notification/AppNotificationRepository.kt b/src/com/android/settings/spa/notification/AppNotificationRepository.kt index f35d3089c0b..d0e700a9e34 100644 --- a/src/com/android/settings/spa/notification/AppNotificationRepository.kt +++ b/src/com/android/settings/spa/notification/AppNotificationRepository.kt @@ -27,6 +27,7 @@ import android.app.usage.UsageEvents import android.content.Context import android.content.pm.ApplicationInfo import android.os.Build +import android.os.IUserManager import android.os.RemoteException import android.os.ServiceManager import android.util.Log @@ -66,6 +67,9 @@ class AppNotificationRepository( private val notificationManager: INotificationManager = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE) ), + private val userManager: IUserManager = IUserManager.Stub.asInterface( + ServiceManager.getService(Context.USER_SERVICE) + ), ) : IAppNotificationRepository { fun getAggregatedUsageEvents(userIdFlow: Flow): Flow> = userIdFlow.map { userId -> @@ -122,6 +126,15 @@ class AppNotificationRepository( } } + fun isUserUnlocked(user: Int): Boolean { + return try { + userManager.isUserUnlocked(user) + } catch (e: Exception) { + Log.w(TAG, "Error calling UserManager", e) + false + } + } + override fun getNotificationSummary(app: ApplicationInfo): String { if (!isEnabled(app)) return context.getString(R.string.notifications_disabled) val channelCount = getChannelCount(app) diff --git a/src/com/android/settings/spa/notification/AppNotificationsListModel.kt b/src/com/android/settings/spa/notification/AppNotificationsListModel.kt index 2f3de3a099e..9f949c43ba2 100644 --- a/src/com/android/settings/spa/notification/AppNotificationsListModel.kt +++ b/src/com/android/settings/spa/notification/AppNotificationsListModel.kt @@ -34,6 +34,7 @@ import com.android.settingslib.spa.widget.ui.SpinnerOption import com.android.settingslib.spaprivileged.model.app.AppEntry import com.android.settingslib.spaprivileged.model.app.AppListModel import com.android.settingslib.spaprivileged.model.app.AppRecord +import com.android.settingslib.spaprivileged.model.app.userId import com.android.settingslib.spaprivileged.template.app.AppListItemModel import com.android.settingslib.spaprivileged.template.app.AppListTwoTargetSwitchItem import com.android.settingslib.utils.StringUtil @@ -102,13 +103,21 @@ class AppNotificationsListModel( } } - override fun getSpinnerOptions(recordList: List): List = - SpinnerItem.entries.map { + override fun getSpinnerOptions(recordList: List): List { + val options = mutableListOf(SpinnerItem.AllApps, SpinnerItem.TurnedOff) + if (repository.isUserUnlocked(recordList[0].app.userId)) { + options.add(0, SpinnerItem.MostRecent) + options.add(1, SpinnerItem.MostFrequent) + } + + return options.map { SpinnerOption( - id = it.ordinal, - text = context.getString(it.stringResId), + id = it.ordinal, + text = context.getString(it.stringResId), ) } + } + private fun formatLastSent(lastSent: Long) = StringUtil.formatRelativeTime(