summaryrefslogtreecommitdiff
path: root/PermissionController
diff options
context:
space:
mode:
Diffstat (limited to 'PermissionController')
-rw-r--r--PermissionController/res/values-de/strings.xml2
-rw-r--r--PermissionController/res/values-el/strings.xml10
-rw-r--r--PermissionController/res/values-es/strings.xml4
-rw-r--r--PermissionController/res/values-zh-rCN/strings.xml6
-rw-r--r--PermissionController/src/com/android/permissioncontroller/appops/data/repository/v31/AppOpRepository.kt17
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/GetPermissionGroupUsageDetailsUseCase.kt3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/PermissionUsageUtils.kt4
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java2
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt4
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt12
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java19
-rw-r--r--PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/domain/usecase/GetPermissionGroupUsageDetailsUseCaseTest.kt12
-rw-r--r--PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt54
-rw-r--r--PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt21
14 files changed, 122 insertions, 48 deletions
diff --git a/PermissionController/res/values-de/strings.xml b/PermissionController/res/values-de/strings.xml
index 8d52ca43d..69bcee8b4 100644
--- a/PermissionController/res/values-de/strings.xml
+++ b/PermissionController/res/values-de/strings.xml
@@ -443,7 +443,7 @@
<string name="default_app_recommended" msgid="5669584821778942909">"Für dein Gerät optimiert"</string>
<string name="default_app_others" msgid="7793029848126079876">"Sonstige"</string>
<string name="default_app_none" msgid="9084592086808194457">"Keine"</string>
- <string name="default_app_system_default" msgid="6218386768175513760">"(System-Standard­einstellung)"</string>
+ <string name="default_app_system_default" msgid="6218386768175513760">"(System-Stan­dard­einstellung)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Keine Apps"</string>
<string name="default_payment_app_other_nfc_services" msgid="5957633798695758917">"Andere NFC‑Dienste"</string>
<string name="car_default_app_selected" msgid="5416420830430644174">"Ausgewählt"</string>
diff --git a/PermissionController/res/values-el/strings.xml b/PermissionController/res/values-el/strings.xml
index 97f62ba24..b066c75ca 100644
--- a/PermissionController/res/values-el/strings.xml
+++ b/PermissionController/res/values-el/strings.xml
@@ -455,13 +455,13 @@
<string name="home_missing_work_profile_support" msgid="1756855847669387977">"Δεν υποστηρίζει προφίλ εργασίας"</string>
<string name="encryption_unaware_confirmation_message" msgid="8274491794636402484">"Σημείωση: Εάν έχετε ορίσει ένα κλείδωμα οθόνης και επανεκκινήσετε τη συσκευή, η εκκίνηση αυτής της εφαρμογής δεν θα είναι δυνατή έως ότου ξεκλειδώσετε τη συσκευή σας."</string>
<string name="assistant_confirmation_message" msgid="7476540402884416212">"Ο βοηθός θα μπορεί να διαβάσει πληροφορίες σχετικά με τις εφαρμογές που χρησιμοποιούνται στο σύστημά σας, συμπεριλαμβανομένων πληροφοριών που είναι ορατές στην οθόνη σας ή προσβάσιμες εντός των εφαρμογών."</string>
- <string name="incident_report_channel_name" msgid="3144954065936288440">"Κοινοποίηση δεδομένων εντοπισμού σφαλμάτων"</string>
- <string name="incident_report_notification_title" msgid="4635984625656519773">"Κοινοποίηση λεπτομερ. δεδομ. εντοπισμού σφαλμάτων;"</string>
- <string name="incident_report_notification_text" msgid="3376480583513587923">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> θέλει να ανεβάσει πληροφορίες εντοπισμού σφαλμάτων."</string>
- <string name="incident_report_dialog_title" msgid="669104389325204095">"Κοινοπ. δεδομ. εντοπισμού και διόρθωσης σφαλμάτων;"</string>
+ <string name="incident_report_channel_name" msgid="3144954065936288440">"Κοινοποίηση δεδομένων αποσφαλμάτωσης"</string>
+ <string name="incident_report_notification_title" msgid="4635984625656519773">"Κοινοποίηση λεπτομερ. δεδομ. αποσφαλμάτωσης;"</string>
+ <string name="incident_report_notification_text" msgid="3376480583513587923">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> θέλει να ανεβάσει πληροφορίες αποσφαλμάτωσης."</string>
+ <string name="incident_report_dialog_title" msgid="669104389325204095">"Κοινοπ. δεδομ. αποσφαλμάτωσης;"</string>
<string name="incident_report_dialog_intro" msgid="5897733669850951832">"Το σύστημα εντόπισε ένα πρόβλημα."</string>
<string name="incident_report_dialog_text" msgid="1819244417678973362">"Η εφαρμογή <xliff:g id="APP_NAME_0">%1$s</xliff:g> ζητάει να ανεβάσει μια αναφορά σφάλματος από αυτή τη συσκευή η οποία λήφθηκε στις <xliff:g id="DATE">%2$s</xliff:g>, <xliff:g id="TIME">%3$s</xliff:g>. Οι αναφορές σφάλματος περιλαμβάνουν προσωπικά στοιχεία σχετικά με τη συσκευή σας ή στοιχεία που έχουν καταγράψει οι εφαρμογές, για παράδειγμα, ονόματα χρηστών, δεδομένα τοποθεσίας, αναγνωριστικά συσκευών και πληροφορίες δικτύου. Να κοινοποιείτε τις αναφορές σφάλματος μόνο σε άτομα και εφαρμογές στα οποία θεωρείτε ότι μπορείτε να εμπιστεύεστε αυτές τις πληροφορίες.\n\nΝα επιτραπεί στην εφαρμογή <xliff:g id="APP_NAME_1">%4$s</xliff:g> να ανεβάσει μια αναφορά σφάλματος;"</string>
- <string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Παρουσιάστηκε ένα σφάλμα κατά την επεξεργασία της αναφοράς σφάλματος για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>. Γι\' αυτόν τον λόγο, η κοινοποίηση λεπτομερών δεδομένων εντοπισμού και διόρθωσης σφαλμάτων απορρίφθηκε. Λυπούμαστε για τη διακοπή."</string>
+ <string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Παρουσιάστηκε ένα σφάλμα κατά την επεξεργασία της αναφοράς σφάλματος για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>. Γι\' αυτόν τον λόγο, η κοινοποίηση λεπτομερών δεδομένων αποσφαλμάτωσης απορρίφθηκε. Λυπούμαστε για τη διακοπή."</string>
<string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Να επιτρέπεται"</string>
<string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Να μην επιτρέπεται"</string>
<string name="adjust_user_sensitive_title" msgid="4196724451314280527">"Σύνθετες ρυθμίσεις"</string>
diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml
index 6c2e76289..6ec8bb7b1 100644
--- a/PermissionController/res/values-es/strings.xml
+++ b/PermissionController/res/values-es/strings.xml
@@ -252,13 +252,13 @@
<string name="app_permission_most_recent_denied_summary" msgid="7659497197737708112">"Actualmente denegado / Último acceso: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string>
<string name="app_permission_never_accessed_summary" msgid="401346181461975090">"No ha accedido nunca"</string>
<string name="app_permission_never_accessed_denied_summary" msgid="6596000497490905146">"Denegado / Último acceso: Nunca"</string>
- <string name="allowed_header" msgid="7769277978004790414">"Permitidas"</string>
+ <string name="allowed_header" msgid="7769277978004790414">"Con permiso"</string>
<string name="allowed_always_header" msgid="6455903312589013545">"Con permiso siempre"</string>
<string name="allowed_foreground_header" msgid="6845655788447833353">"Permitidas solo mientras se usan"</string>
<string name="allowed_storage_scoped" msgid="5383645873719086975">"Pueden acceder solo al contenido multimedia"</string>
<string name="allowed_storage_full" msgid="5356699280625693530">"Pueden gestionar todos los archivos"</string>
<string name="ask_header" msgid="2633816846459944376">"Preguntar siempre"</string>
- <string name="denied_header" msgid="903209608358177654">"No permitido"</string>
+ <string name="denied_header" msgid="903209608358177654">"Sin permiso"</string>
<string name="permission_group_name_with_device_name" msgid="8798741850536024820">"<xliff:g id="PERM_GROUP_NAME">%1$s</xliff:g> en <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="storage_footer_hyperlink_text" msgid="8873343987957834810">"Ver más aplicaciones que pueden acceder a todos los archivos"</string>
<string name="days" msgid="609563020985571393">"{count,plural, =1{1 día}many{# días}other{# días}}"</string>
diff --git a/PermissionController/res/values-zh-rCN/strings.xml b/PermissionController/res/values-zh-rCN/strings.xml
index 59168c3ae..6e1a2d1a3 100644
--- a/PermissionController/res/values-zh-rCN/strings.xml
+++ b/PermissionController/res/values-zh-rCN/strings.xml
@@ -196,7 +196,7 @@
<string name="precise_image_description" msgid="6349638632303619872">"确切位置"</string>
<string name="approximate_image_description" msgid="938803699637069884">"大致位置"</string>
<string name="app_permission_location_accuracy" msgid="7166912915040018669">"使用确切位置"</string>
- <string name="app_permission_location_accuracy_subtitle" msgid="2654077606404987210">"确切位置关闭时,应用可以获取您的大致位置"</string>
+ <string name="app_permission_location_accuracy_subtitle" msgid="2654077606404987210">"精确位置关闭时,应用可以获取您的大致位置"</string>
<string name="app_permission_title" msgid="2090897901051370711">"<xliff:g id="PERM">%1$s</xliff:g>权限"</string>
<string name="app_permission_header" msgid="2951363137032603806">"是否允许此应用获得“<xliff:g id="PERM">%1$s</xliff:g>”权限"</string>
<string name="app_permission_header_with_device_name" msgid="7193042925656173271">"此应用在<xliff:g id="DEVICE_NAME">%2$s</xliff:g>上的<xliff:g id="PERM">%1$s</xliff:g>访问权限"</string>
@@ -487,8 +487,8 @@
<string name="permgrouprequest_nearby_devices" msgid="2272829282660436700">"要允许“&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;”查找、连接到附近设备以及确定附近设备的相对位置吗?"</string>
<string name="permgrouprequest_device_aware_nearby_devices" msgid="5293478278408567442">"要允许&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;在&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;上查找、连接到附近设备以及确定附近设备的相对位置吗?"</string>
<string name="permgroupupgraderequestdetail_nearby_devices" msgid="6877531270654738614">"要允许&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;查找、连接附近设备以及确定附近设备的相对位置吗?"<annotation id="link">"您可以在“设置”中允许。"</annotation></string>
- <string name="permgrouprequest_fineupgrade" msgid="2334242928821697672">"要将“<xliff:g id="APP_NAME">&lt;b&gt;%1$s&lt;/b&gt;</xliff:g>”可以使用的位置信息从大致位置改为确切位置吗?"</string>
- <string name="permgrouprequest_device_aware_fineupgrade" msgid="4453775952305587571">"要将<xliff:g id="APP_NAME">&lt;b&gt;%1$s&lt;/b&gt;</xliff:g>在&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;上的位置信息访问权限从大致位置信息改为确切位置信息吗?"</string>
+ <string name="permgrouprequest_fineupgrade" msgid="2334242928821697672">"要将“<xliff:g id="APP_NAME">&lt;b&gt;%1$s&lt;/b&gt;</xliff:g>”可以使用的位置信息从大致位置改为精确位置吗?"</string>
+ <string name="permgrouprequest_device_aware_fineupgrade" msgid="4453775952305587571">"要将<xliff:g id="APP_NAME">&lt;b&gt;%1$s&lt;/b&gt;</xliff:g>在&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;上的位置信息访问权限从大致位置信息改为精确位置信息吗?"</string>
<string name="permgrouprequest_coarselocation" msgid="7244605063736425232">"要允许“&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;”获取此设备的大致位置信息吗?"</string>
<string name="permgrouprequest_device_aware_coarselocation" msgid="8367540370912066757">"要允许&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;获取&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;的大致位置信息吗?"</string>
<string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"确切位置"</string>
diff --git a/PermissionController/src/com/android/permissioncontroller/appops/data/repository/v31/AppOpRepository.kt b/PermissionController/src/com/android/permissioncontroller/appops/data/repository/v31/AppOpRepository.kt
index 21ced3b28..7a59aa2bc 100644
--- a/PermissionController/src/com/android/permissioncontroller/appops/data/repository/v31/AppOpRepository.kt
+++ b/PermissionController/src/com/android/permissioncontroller/appops/data/repository/v31/AppOpRepository.kt
@@ -27,7 +27,6 @@ import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED
import android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXY
import android.app.Application
import android.os.UserHandle
-import android.permission.flags.Flags
import android.util.Log
import com.android.modules.utils.build.SdkLevel
import com.android.permissioncontroller.DeviceUtils
@@ -74,7 +73,7 @@ interface AppOpRepository {
*/
fun getDiscreteOps(
opNames: List<String>,
- coroutineScope: CoroutineScope
+ coroutineScope: CoroutineScope,
): Flow<List<DiscretePackageOpsModel>>
companion object {
@@ -82,7 +81,7 @@ interface AppOpRepository {
fun getInstance(
application: Application,
- permissionRepository: PermissionRepository
+ permissionRepository: PermissionRepository,
): AppOpRepository =
instance
?: synchronized(this) {
@@ -104,7 +103,7 @@ class AppOpRepositoryImpl(
override fun getDiscreteOps(
opNames: List<String>,
- coroutineScope: CoroutineScope
+ coroutineScope: CoroutineScope,
): Flow<List<DiscretePackageOpsModel>> {
return callbackFlow {
var job: Job? = null
@@ -112,9 +111,7 @@ class AppOpRepositoryImpl(
fun sendUpdate() {
if (job == null || job?.isActive == false) {
- job = coroutineScope.launch(dispatcher) {
- trySend(getDiscreteOps(opNames))
- }
+ job = coroutineScope.launch(dispatcher) { trySend(getDiscreteOps(opNames)) }
}
}
@@ -229,10 +226,10 @@ class AppOpRepositoryImpl(
packageOps.ops.map { opEntry ->
AppOpUsageModel(
opEntry.opStr,
- opEntry.getLastAccessTime(OPS_LAST_ACCESS_FLAGS)
+ opEntry.getLastAccessTime(OPS_LAST_ACCESS_FLAGS),
)
},
- UserHandle.getUserHandleForUid(packageOps.uid).identifier
+ UserHandle.getUserHandleForUid(packageOps.uid).identifier,
)
}
}
@@ -254,7 +251,7 @@ class AppOpRepositoryImpl(
if (SdkLevel.isAtLeastT()) {
opNames.add(AppOpsManager.OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO)
}
- if (SdkLevel.isAtLeastV() && Flags.locationBypassPrivacyDashboardEnabled()) {
+ if (SdkLevel.isAtLeastV()) {
opNames.add(AppOpsManager.OPSTR_EMERGENCY_LOCATION)
}
return opNames
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/GetPermissionGroupUsageDetailsUseCase.kt b/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/GetPermissionGroupUsageDetailsUseCase.kt
index 5ba649fd3..cc49b4ef3 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/GetPermissionGroupUsageDetailsUseCase.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/GetPermissionGroupUsageDetailsUseCase.kt
@@ -227,8 +227,7 @@ class GetPermissionGroupUsageDetailsUseCase(
}
}
- private fun isLocationByPassEnabled(): Boolean =
- SdkLevel.isAtLeastV() && Flags.locationBypassPrivacyDashboardEnabled()
+ private fun isLocationByPassEnabled(): Boolean = SdkLevel.isAtLeastV()
/**
* Determine if an op should be in its own cluster and hence display as an individual entry in
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/PermissionUsageUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/PermissionUsageUtils.kt
index 7f5910ac1..9526d0bdd 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/PermissionUsageUtils.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/domain/usecase/v31/PermissionUsageUtils.kt
@@ -21,7 +21,6 @@ import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.UserHandle
-import android.permission.flags.Flags
import androidx.annotation.VisibleForTesting
import com.android.modules.utils.build.SdkLevel
import com.android.permissioncontroller.permission.data.repository.v31.PermissionRepository
@@ -99,5 +98,4 @@ private fun isTelecomPackage(packageName: String, permissionGroup: String): Bool
permissionGroup == Manifest.permission_group.MICROPHONE)
}
-fun isLocationByPassEnabled(): Boolean =
- SdkLevel.isAtLeastV() && Flags.locationBypassPrivacyDashboardEnabled()
+fun isLocationByPassEnabled(): Boolean = SdkLevel.isAtLeastV()
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
index 969ac17eb..e995588b2 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java
@@ -492,7 +492,7 @@ public final class AppPermissionGroupsFragment extends SettingsWithLargeHeader i
}
private boolean isArchivingEnabled() {
- return SdkLevel.isAtLeastV() && Flags.archivingReadOnly();
+ return SdkLevel.isAtLeastV();
}
private void setAutoRevokeToggleState(HibernationSettingState state) {
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt
index ad21ab220..d8eeb8fd9 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt
@@ -30,7 +30,6 @@ import android.graphics.drawable.Drawable
import android.location.LocationManager
import android.os.Build
import android.os.UserHandle
-import android.permission.flags.Flags
import androidx.annotation.RequiresApi
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.AndroidViewModel
@@ -406,8 +405,7 @@ class PermissionUsageDetailsViewModel(
}
}
- private fun isLocationByPassEnabled(): Boolean =
- SdkLevel.isAtLeastV() && Flags.locationBypassPrivacyDashboardEnabled()
+ private fun isLocationByPassEnabled(): Boolean = SdkLevel.isAtLeastV()
fun create(
app: Application,
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt
index 93a1a66df..1693b32d1 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt
@@ -45,7 +45,7 @@ object PermissionMapping {
listOf(
Manifest.permission_group.LOCATION,
Manifest.permission_group.CAMERA,
- Manifest.permission_group.MICROPHONE
+ Manifest.permission_group.MICROPHONE,
)
@JvmField
@@ -55,7 +55,7 @@ object PermissionMapping {
listOf(
Manifest.permission_group.STORAGE,
Manifest.permission_group.READ_MEDIA_AURAL,
- Manifest.permission_group.READ_MEDIA_VISUAL
+ Manifest.permission_group.READ_MEDIA_VISUAL,
)
val PARTIAL_MEDIA_PERMISSIONS: MutableSet<String> = mutableSetOf()
@@ -370,7 +370,7 @@ object PermissionMapping {
val appSupportsPickerPrompt =
group.permissions[Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED]?.isImplicit ==
- false
+ false
return if (appSupportsPickerPrompt) {
PARTIAL_MEDIA_PERMISSIONS
@@ -402,11 +402,7 @@ object PermissionMapping {
if (opName == AppOpsManager.OPSTR_PHONE_CALL_CAMERA) {
return Manifest.permission_group.CAMERA
}
- if (
- SdkLevel.isAtLeastV() &&
- Flags.locationBypassPrivacyDashboardEnabled() &&
- opName == AppOpsManager.OPSTR_EMERGENCY_LOCATION
- ) {
+ if (SdkLevel.isAtLeastV() && opName == AppOpsManager.OPSTR_EMERGENCY_LOCATION) {
return Manifest.permission_group.LOCATION
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
index 327142896..93e5abc70 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/Utils.java
@@ -1109,10 +1109,23 @@ public final class Utils {
return false;
}
- // Always show Fitness&Wellness chip on Wear.
+ // Only show Fitness&Wellness chip on Wear if the app is requesting system permissions.
if (Flags.replaceBodySensorPermissionEnabled()
- && pm.hasSystemFeature(PackageManager.FEATURE_WATCH)) {
- return true;
+ && pm.hasSystemFeature(PackageManager.FEATURE_WATCH)) {
+ Set<String> requestedPermissions = new HashSet<>(packageInfo.getRequestedPermissions());
+ for (PermissionInfo permission : permissions) {
+ if (!requestedPermissions.contains(permission.name)) {
+ continue;
+ }
+ String appOpStr = AppOpsManager.permissionToOp(permission.name);
+ if (appOpStr != null
+ && !appOpStr.equals(AppOpsManager.OPSTR_READ_WRITE_HEALTH_DATA)) {
+ // Found system health permission. Show the chip.
+ return true;
+ }
+ }
+ // No valid system permissions are requested.
+ return false;
}
// Check in permission is already granted as we should not hide it in the UX at that point.
diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/domain/usecase/GetPermissionGroupUsageDetailsUseCaseTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/domain/usecase/GetPermissionGroupUsageDetailsUseCaseTest.kt
index cb36de2b1..b73113ffc 100644
--- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/domain/usecase/GetPermissionGroupUsageDetailsUseCaseTest.kt
+++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/domain/usecase/GetPermissionGroupUsageDetailsUseCaseTest.kt
@@ -21,10 +21,12 @@ import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
+import android.os.Build
import android.os.UserHandle
import android.permission.flags.Flags
import android.platform.test.annotations.RequiresFlagsEnabled
import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
import com.android.dx.mockito.inline.extended.ExtendedMockito
import com.android.modules.utils.build.SdkLevel
import com.android.permissioncontroller.PermissionControllerApplication
@@ -846,7 +848,10 @@ class GetPermissionGroupUsageDetailsUseCaseTest {
@Test
@Ignore("b/365004787")
- @RequiresFlagsEnabled(Flags.FLAG_LOCATION_BYPASS_PRIVACY_DASHBOARD_ENABLED)
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ codeName = "VanillaIceCream",
+ )
fun emergencyAccessesAreNotClusteredWithRegularAccesses() = runTest {
Assume.assumeTrue(SdkLevel.isAtLeastV())
val appOpEvents =
@@ -870,7 +875,10 @@ class GetPermissionGroupUsageDetailsUseCaseTest {
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_LOCATION_BYPASS_PRIVACY_DASHBOARD_ENABLED)
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ codeName = "VanillaIceCream",
+ )
fun emergencyAccessesAreClustered() = runTest {
Assume.assumeTrue(SdkLevel.isAtLeastV())
val appOpEvents =
diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt
index ecc7e161f..10670c5d5 100644
--- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt
+++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAllAppPermissionFragmentTest.kt
@@ -54,6 +54,11 @@ class HealthConnectAllAppPermissionFragmentTest : BasePermissionUiTest() {
fun uninstallTestApp() {
uninstallTestApps()
}
+
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE,
+ maxSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ )
@Test
fun usedHealthConnectPermissionsAreListed() {
installTestAppThatUsesHealthConnectPermission()
@@ -67,6 +72,24 @@ class HealthConnectAllAppPermissionFragmentTest : BasePermissionUiTest() {
}
}
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
+ @Test
+ fun usedHealthConnectPermissionsAreListed_healthFitnessBrand() {
+ installTestAppThatUsesHealthConnectPermission()
+
+ startManageAppPermissionsActivity()
+
+ eventually {
+ waitFindObject(By.text(HEALTH_FITNESS_LABEL))
+ waitFindObject(By.text(HEALTH_CONNECT_PERMISSION_READ_FLOORS_CLIMBED_LABEL))
+ waitFindObject(By.text(HEALTH_CONNECT_PERMISSION_READ_STEPS_LABEL))
+ }
+ }
+
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE,
+ maxSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ )
@Test
fun invalidUngrantedUsedHealthConnectPermissionsAreNotListed() {
installInvalidTestAppThatUsesHealthConnectPermission()
@@ -78,13 +101,37 @@ class HealthConnectAllAppPermissionFragmentTest : BasePermissionUiTest() {
assertNull(
waitFindObjectOrNull(
By.text(HEALTH_CONNECT_PERMISSION_READ_FLOORS_CLIMBED_LABEL),
- TIMEOUT_SHORT
+ TIMEOUT_SHORT,
+ )
+ )
+ assertNull(
+ waitFindObjectOrNull(
+ By.text(HEALTH_CONNECT_PERMISSION_READ_STEPS_LABEL),
+ TIMEOUT_SHORT,
+ )
+ )
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
+ @Test
+ fun invalidUngrantedUsedHealthConnectPermissionsAreNotListed_healthFitnessBrand() {
+ installInvalidTestAppThatUsesHealthConnectPermission()
+
+ startManageAppPermissionsActivity()
+
+ eventually {
+ assertNull(waitFindObjectOrNull(By.text(HEALTH_FITNESS_LABEL), TIMEOUT_SHORT))
+ assertNull(
+ waitFindObjectOrNull(
+ By.text(HEALTH_CONNECT_PERMISSION_READ_FLOORS_CLIMBED_LABEL),
+ TIMEOUT_SHORT,
)
)
assertNull(
waitFindObjectOrNull(
By.text(HEALTH_CONNECT_PERMISSION_READ_STEPS_LABEL),
- TIMEOUT_SHORT
+ TIMEOUT_SHORT,
)
)
}
@@ -104,7 +151,7 @@ class HealthConnectAllAppPermissionFragmentTest : BasePermissionUiTest() {
}
},
Until.newWindow(),
- TIMEOUT_SHORT
+ TIMEOUT_SHORT,
)
waitFindObject(By.descContains(MORE_OPTIONS)).click()
@@ -114,6 +161,7 @@ class HealthConnectAllAppPermissionFragmentTest : BasePermissionUiTest() {
companion object {
// Health connect label uses a non breaking space
private const val HEALTH_CONNECT_LABEL = "Health\u00A0Connect"
+ private const val HEALTH_FITNESS_LABEL = "Health, fitness and wellness"
private const val HEALTH_CONNECT_PERMISSION_READ_FLOORS_CLIMBED =
"android.permission.health.READ_FLOORS_CLIMBED"
private const val HEALTH_CONNECT_PERMISSION_READ_FLOORS_CLIMBED_LABEL =
diff --git a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt
index d4d4be6ec..a0de2f7cd 100644
--- a/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt
+++ b/PermissionController/tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/HealthConnectAppPermissionFragmentTest.kt
@@ -68,6 +68,10 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
uninstallTestApps()
}
+ @SdkSuppress(
+ minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE,
+ maxSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM,
+ )
@Test
fun usedHealthConnectPermissionsAreListed_handHeldDevices() {
assumeFalse(context.packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH))
@@ -78,6 +82,17 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
eventually { waitFindObject(By.text(HEALTH_CONNECT_LABEL)) }
}
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
+ @Test
+ fun usedHealthConnectPermissionsAreListed_handHeldDevices_healthFitnessBrand() {
+ assumeFalse(context.packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH))
+ installTestAppThatUsesHealthConnectPermission()
+
+ startManageAppPermissionsActivity()
+
+ eventually { waitFindObject(By.text(HEALTH_FITNESS_LABEL)) }
+ }
+
@Test
fun invalidUngrantedUsedHealthConnectPermissionsAreNotListed_handHeldDevices() {
assumeFalse(context.packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH))
@@ -86,6 +101,7 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
startManageAppPermissionsActivity()
waitUntilObjectGone(By.text(HEALTH_CONNECT_LABEL), TIMEOUT_SHORT)
+ waitUntilObjectGone(By.text(HEALTH_FITNESS_LABEL), TIMEOUT_SHORT)
}
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
@@ -121,7 +137,7 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
startManageAppPermissionsActivity()
- eventually { waitFindObject(By.text(HEALTH_CONNECT_LABEL)) }
+ eventually { waitFindObject(By.text(HEALTH_FITNESS_LABEL)) }
}
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava")
@@ -133,7 +149,7 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
startManageAppPermissionsActivity()
- waitUntilObjectGone(By.text(HEALTH_CONNECT_LABEL), TIMEOUT_SHORT)
+ waitUntilObjectGone(By.text(HEALTH_FITNESS_LABEL), TIMEOUT_SHORT)
}
private fun startManageAppPermissionsActivity() {
@@ -152,6 +168,7 @@ class HealthConnectAppPermissionFragmentTest : BasePermissionUiTest() {
private const val FITNESS_AND_WELLNESS_LABEL = "Fitness and wellness"
// Health connect label uses a non breaking space
private const val HEALTH_CONNECT_LABEL = "Health\u00A0Connect"
+ private const val HEALTH_FITNESS_LABEL = "Health, fitness and wellness"
private const val HEALTH_CONNECT_PERMISSION_READ_FLOORS_CLIMBED =
"android.permission.health.READ_FLOORS_CLIMBED"