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
This commit is contained in:
Julia Reynolds
2023-12-27 16:39:02 -05:00
parent dbb2337ce0
commit 2890ac7101
2 changed files with 26 additions and 4 deletions

View File

@@ -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<Int>): Flow<Map<String, NotificationSentState>> =
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)

View File

@@ -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<AppNotificationsRecord>): List<SpinnerOption> =
SpinnerItem.entries.map {
override fun getSpinnerOptions(recordList: List<AppNotificationsRecord>): List<SpinnerOption> {
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),
)
}
}
private fun formatLastSent(lastSent: Long) =
StringUtil.formatRelativeTime(