diff options
author | YoungJoon Yang <youngjoonyang@google.com> | 2023-12-29 02:10:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-12-29 02:10:34 +0000 |
commit | 409200adb110860e882917c3613c9386e1d27e63 (patch) | |
tree | 3ea3fa79b7847b00f853aaae0dfa405fd08db6f9 | |
parent | 2a12e76676bd27eb69eaaecf141e0ff5e68ca071 (diff) | |
parent | 9dd9c2c892d5f987d2b538ed895a88dccded0c6a (diff) | |
download | Permission-409200adb110860e882917c3613c9386e1d27e63.tar.gz |
Merge changes I06de9982,I0c59e40b into main
* changes:
Rephrase summary texts on permission & app chips for Wear
Add app_perms_24h_access strings for Wear
4 files changed, 102 insertions, 21 deletions
diff --git a/PermissionController/res/values/strings.xml b/PermissionController/res/values/strings.xml index d10c6fb90..b9895d611 100644 --- a/PermissionController/res/values/strings.xml +++ b/PermissionController/res/values/strings.xml @@ -1934,4 +1934,13 @@ Allow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug repo <string name="safety_label_changes_gear_description">Settings</string> <!-- Safety Label Change Notifications End --> + + <!-- Summary for showing the last access text for today for Wear [CHAR LIMIT=50] --> + <string name="wear_app_perms_24h_access">Accessed <xliff:g id="time_date" example="12:42 PM">%1$s</xliff:g></string> + + <!-- Summary for showing the last access text for yesterday for Wear [CHAR LIMIT=50] --> + <string name="wear_app_perms_24h_access_yest">Accessed yesterday <xliff:g id="time_date" example="12:42 PM">%1$s</xliff:g></string> + + <!-- Summary for showing the last access text for 7 days for Wear [CHAR LIMIT=50] --> + <string name="wear_app_perms_7d_access">Accessed <xliff:g id="time_date" example="Jan 3">%1$s</xliff:g> <xliff:g id="time_date" example="12:42 PM">%2$s</xliff:g></string> </resources> diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt index 0ccde86be..94f0b0d07 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsHelper.kt @@ -142,25 +142,27 @@ class WearAppPermissionGroupsHelper( ): String { val grantSummary = getGrantSummary(category, groupUiInfo)?.let { context.getString(it) } ?: "" - if (!Flags.wearPrivacyDashboardEnabled()) { - return grantSummary - } - val accessSummary = - viewModel.getPreferenceSummary(groupUiInfo, context, lastAccessTime).let { + val summary = StringBuilder(grantSummary) + if (Flags.wearPrivacyDashboardEnabled()) { + WearUtils.getPreferenceSummary(context, lastAccessTime).let { if (it.isNotEmpty()) { - System.lineSeparator() + it - } else { - it + summary.append(System.lineSeparator()).append(it) } } - return grantSummary + accessSummary + } + return summary.toString() } private fun getGrantSummary(category: Category?, groupUiInfo: GroupUiInfo): Int? { val subtitle = groupUiInfo.subtitle if (category != null) { when (category) { - Category.ALLOWED -> return R.string.allowed_header + Category.ALLOWED -> + return if (subtitle == PermSubtitle.BACKGROUND) { + R.string.allowed_always_header + } else { + R.string.allowed_header + } Category.ASK -> return R.string.ask_header Category.DENIED -> return R.string.denied_header else -> { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt index 559160b38..539adf4fb 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsHelper.kt @@ -28,7 +28,6 @@ import com.android.permissioncontroller.permission.ui.wear.model.WearAppPermissi import com.android.permissioncontroller.permission.utils.KotlinUtils import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupDescription import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupLabel -import com.android.permissioncontroller.permission.utils.Utils import com.android.settingslib.utils.applications.AppUtils import java.text.Collator import java.util.Random @@ -162,16 +161,7 @@ class WearPermissionAppsHelper( } val summary = if (Flags.wearPrivacyDashboardEnabled()) { - lastAccessTime?.let { - viewModel.getPreferenceSummary( - application.resources, - Utils.getPermissionLastAccessSummaryTimestamp( - lastAccessTime, - application, - permGroupName - ) - ) - } + lastAccessTime?.let { WearUtils.getPreferenceSummary(application, lastAccessTime) } } else { null } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt new file mode 100644 index 000000000..53d41f7f0 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2023 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.permissioncontroller.permission.ui.wear + +import android.content.Context +import android.text.format.DateFormat +import androidx.annotation.IntDef +import com.android.permissioncontroller.R +import java.time.ZonedDateTime +import java.time.temporal.ChronoUnit + +object WearUtils { + @Retention(AnnotationRetention.SOURCE) + @IntDef(value = [LAST_24H_TODAY, LAST_24H_YESTERDAY, LAST_7D, NOT_IN_LAST_7D]) + annotation class AppPermsLastAccessType + + const val LAST_24H_TODAY = 1 + const val LAST_24H_YESTERDAY = 2 + const val LAST_7D = 3 + const val NOT_IN_LAST_7D = 4 + + /** Get the preference summary in app permission groups and permission apps screens for Wear. */ + @JvmStatic + fun getPreferenceSummary(context: Context, lastAccessTime: Long?): String { + val summaryTimestamp = getPermissionLastAccessSummaryTimestamp(lastAccessTime, context) + val res = context.resources + return when (summaryTimestamp.second) { + LAST_24H_TODAY -> + res.getString(R.string.wear_app_perms_24h_access, summaryTimestamp.first) + LAST_24H_YESTERDAY -> + res.getString(R.string.wear_app_perms_24h_access_yest, summaryTimestamp.first) + LAST_7D -> + res.getString( + R.string.wear_app_perms_7d_access, + summaryTimestamp.third, + summaryTimestamp.first + ) + else -> "" + } + } + + @JvmStatic + private fun getPermissionLastAccessSummaryTimestamp( + lastAccessTime: Long?, + context: Context + ): Triple<String, Int, String> { + val midnightToday = + (ZonedDateTime.now().truncatedTo(ChronoUnit.DAYS).toEpochSecond() * 1000L) + val midnightYesterday = + ZonedDateTime.now().minusDays(1).truncatedTo(ChronoUnit.DAYS).toEpochSecond() * 1000L + val isLastAccessToday = (lastAccessTime != null && midnightToday <= lastAccessTime) + val isLastAccessTodayOrYesterday = + (lastAccessTime != null && midnightYesterday <= lastAccessTime) + var lastAccessTimeFormatted = "" + var lastAccessDateFormatted = "" + @AppPermsLastAccessType var lastAccessType = NOT_IN_LAST_7D + if (lastAccessTime != null) { + lastAccessTimeFormatted = DateFormat.getTimeFormat(context).format(lastAccessTime) + lastAccessDateFormatted = DateFormat.getDateFormat(context).format(lastAccessTime) + lastAccessType = + if (isLastAccessToday) LAST_24H_TODAY + else if (isLastAccessTodayOrYesterday) LAST_24H_YESTERDAY else LAST_7D + } + return Triple(lastAccessTimeFormatted, lastAccessType, lastAccessDateFormatted) + } +} |