diff options
Diffstat (limited to 'PermissionController')
15 files changed, 156 insertions, 32 deletions
diff --git a/PermissionController/res/layout-v33/safety_center_toggle_button.xml b/PermissionController/res/layout-v33/safety_center_toggle_button.xml index f790e734e..52d62a7ed 100644 --- a/PermissionController/res/layout-v33/safety_center_toggle_button.xml +++ b/PermissionController/res/layout-v33/safety_center_toggle_button.xml @@ -35,8 +35,10 @@ android:text="@string/available"/> </LinearLayout> + <!-- The X scale controls the direction of the arrow, based on the language direction --> <ImageView android:id="@+id/arrow_icon" style="@style/SafetyCenterQsToggleArrow" + android:scaleX="@integer/mirror_x_scale" android:visibility="gone"/> </LinearLayout> 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-Standardeinstellung)"</string> + <string name="default_app_system_default" msgid="6218386768175513760">"(System-Standardeinstellung)"</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-rUS/strings.xml b/PermissionController/res/values-es-rUS/strings.xml index 0a8908fd7..94179a6e7 100644 --- a/PermissionController/res/values-es-rUS/strings.xml +++ b/PermissionController/res/values-es-rUS/strings.xml @@ -370,7 +370,7 @@ <string name="role_dialer_request_description" msgid="6288839625724909320">"Esta app obtendrá acceso a la cámara, los contactos, micrófono, teléfono y SMS"</string> <string name="role_dialer_search_keywords" msgid="3324448983559188087">"marcador"</string> <string name="role_sms_label" msgid="8456999857547686640">"App de SMS predeterminada"</string> - <string name="role_sms_short_label" msgid="4371444488034692243">"app de SMS"</string> + <string name="role_sms_short_label" msgid="4371444488034692243">"App de SMS"</string> <string name="role_sms_description" msgid="3424020199148153513">"Apps que te permiten usar tu número de teléfono para enviar y recibir mensajes de texto cortos, fotos, videos y mucho más"</string> <string name="role_sms_request_title" msgid="7953552109601185602">"¿Quieres establecer <xliff:g id="APP_NAME">%1$s</xliff:g> como app de SMS predeterminada?"</string> <string name="role_sms_request_description" msgid="2691004766132144886">"Se le otorgará acceso a esta app a tu cámara, contactos, archivos y contenido multimedia, micrófono, teléfono y SMS"</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-ldrtl/integers.xml b/PermissionController/res/values-ldrtl/integers.xml new file mode 100644 index 000000000..ca998ad16 --- /dev/null +++ b/PermissionController/res/values-ldrtl/integers.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2025 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. +--> +<resources> + <integer name="mirror_x_scale">-1</integer> +</resources> 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">"要允许“<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>”查找、连接到附近设备以及确定附近设备的相对位置吗?"</string> <string name="permgrouprequest_device_aware_nearby_devices" msgid="5293478278408567442">"要允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>在<b><xliff:g id="DEVICE_NAME">%2$s</xliff:g></b>上查找、连接到附近设备以及确定附近设备的相对位置吗?"</string> <string name="permgroupupgraderequestdetail_nearby_devices" msgid="6877531270654738614">"要允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>查找、连接附近设备以及确定附近设备的相对位置吗?"<annotation id="link">"您可以在“设置”中允许。"</annotation></string> - <string name="permgrouprequest_fineupgrade" msgid="2334242928821697672">"要将“<xliff:g id="APP_NAME"><b>%1$s</b></xliff:g>”可以使用的位置信息从大致位置改为确切位置吗?"</string> - <string name="permgrouprequest_device_aware_fineupgrade" msgid="4453775952305587571">"要将<xliff:g id="APP_NAME"><b>%1$s</b></xliff:g>在<b><xliff:g id="DEVICE_NAME">%2$s</xliff:g></b>上的位置信息访问权限从大致位置信息改为确切位置信息吗?"</string> + <string name="permgrouprequest_fineupgrade" msgid="2334242928821697672">"要将“<xliff:g id="APP_NAME"><b>%1$s</b></xliff:g>”可以使用的位置信息从大致位置改为精确位置吗?"</string> + <string name="permgrouprequest_device_aware_fineupgrade" msgid="4453775952305587571">"要将<xliff:g id="APP_NAME"><b>%1$s</b></xliff:g>在<b><xliff:g id="DEVICE_NAME">%2$s</xliff:g></b>上的位置信息访问权限从大致位置信息改为精确位置信息吗?"</string> <string name="permgrouprequest_coarselocation" msgid="7244605063736425232">"要允许“<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>”获取此设备的大致位置信息吗?"</string> <string name="permgrouprequest_device_aware_coarselocation" msgid="8367540370912066757">"要允许<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>获取<b><xliff:g id="DEVICE_NAME">%2$s</xliff:g></b>的大致位置信息吗?"</string> <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"确切位置"</string> diff --git a/PermissionController/res/values/integers.xml b/PermissionController/res/values/integers.xml new file mode 100644 index 000000000..c65ec99de --- /dev/null +++ b/PermissionController/res/values/integers.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2025 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. +--> +<resources> + <integer name="mirror_x_scale">1</integer> +</resources> diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt index 3ed58cf4a..f918da729 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt @@ -62,6 +62,7 @@ fun WearGrantPermissionsScreen( val materialUIVersion = ResourceHelper.materialUIVersionInApp ScrollableScreen( materialUIVersion = materialUIVersion, + asScalingList = true, showTimeText = false, image = icon.value, title = groupMessage.value, diff --git a/PermissionController/tests/permissionui/AndroidTest.xml b/PermissionController/tests/permissionui/AndroidTest.xml index 9cadbd12f..2462dc4c7 100644 --- a/PermissionController/tests/permissionui/AndroidTest.xml +++ b/PermissionController/tests/permissionui/AndroidTest.xml @@ -63,6 +63,12 @@ value="/data/local/tmp/pc-permissionui/PermissionUiUseReadHeartRatePermissionApp.apk" /> </target_preparer> + <!-- Wake the screen, and dismiss keyguard --> + <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> + <option name="run-command" value="input keyevent KEYCODE_WAKEUP" /> + <option name="run-command" value="wm dismiss-keyguard" /> + </target_preparer> + <!-- Uninstall test-apps --> <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> <option name="teardown-command" value="pm uninstall android.permission.cts.appthatrequestpermission" /> 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" diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButtonStyle.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButtonStyle.kt index 114bcd4bc..f48d47b2c 100644 --- a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButtonStyle.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButtonStyle.kt @@ -16,6 +16,7 @@ package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color import androidx.wear.compose.material.ChipColors import androidx.wear.compose.material.ChipDefaults import androidx.wear.compose.material3.ButtonColors @@ -26,6 +27,7 @@ import com.android.permissioncontroller.wear.permission.components.material3.Wea import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle.Primary import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle.Secondary import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle.Transparent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle.Warning /** * This component is wrapper on material control colors, It applies the right colors based material @@ -36,6 +38,7 @@ enum class WearPermissionButtonStyle { Secondary, Transparent, DisabledLike, + Warning, } @Composable @@ -45,6 +48,11 @@ internal fun WearPermissionButtonStyle.material2ChipColors(): ChipColors { Secondary -> ChipDefaults.secondaryChipColors() Transparent -> ChipDefaults.childChipColors() DisabledLike -> chipDisabledColors() + Warning -> + ChipDefaults.secondaryChipColors( + backgroundColor = + Color(red = 65, green = 14, blue = 11, alpha = (0.8f * 255).toInt()) + ) } } @@ -55,6 +63,11 @@ internal fun WearPermissionButtonStyle.material3ButtonColors(): ButtonColors { Secondary -> ButtonDefaults.filledTonalButtonColors() Transparent -> ButtonDefaults.childButtonColors() DisabledLike -> ButtonDefaults.disabledLikeColors() + Warning -> + ButtonDefaults.buttonColors( + containerColor = + Color(red = 65, green = 14, blue = 11, alpha = (0.8f * 255).toInt()) + ) } } diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt index 208d3d6ec..87ca048bc 100644 --- a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt @@ -16,7 +16,6 @@ package com.android.permissioncontroller.wear.permission.components.material3 import android.graphics.drawable.Drawable -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.gestures.ScrollableState import androidx.compose.foundation.layout.Box @@ -30,9 +29,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource @@ -53,6 +50,7 @@ import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState import androidx.wear.compose.material3.AppScaffold import androidx.wear.compose.material3.CircularProgressIndicator +import androidx.wear.compose.material3.Icon import androidx.wear.compose.material3.IconButtonDefaults import androidx.wear.compose.material3.ListHeader import androidx.wear.compose.material3.MaterialTheme @@ -271,6 +269,7 @@ private fun BoxScope.LazyColumnView( titleItem( text = title, testTag = titleTestTag, + asScalingList = true, contentPaddingValues = paddingDefaults.titlePaddingValues(subtitle == null), ) subtitleItem( @@ -287,6 +286,7 @@ private fun BoxScope.LazyColumnView( ScalingLazyColumn( contentPadding = scrollContentPadding, state = listState as ScalingLazyListState, + autoCentering = null, modifier = Modifier.background(MaterialTheme.colorScheme.background), content = { scrollingViewContent(ScalingScopeConverter(this)) }, ) @@ -350,24 +350,25 @@ private fun ListScopeWrapper.iconItem(painter: Painter?, modifier: Modifier = Mo painter?.let { item { val iconColor = WearPermissionButtonStyle.Secondary.material3ButtonColors().iconColor - Image( - painter = it, - contentDescription = null, - contentScale = ContentScale.Crop, - modifier = modifier, - colorFilter = ColorFilter.tint(iconColor), - ) + Icon(painter = it, contentDescription = null, modifier = modifier, tint = iconColor) } } private fun ListScopeWrapper.titleItem( text: String?, + asScalingList: Boolean, testTag: String?, contentPaddingValues: PaddingValues, modifier: Modifier = Modifier, ) = text?.let { item(contentType = "header") { + val style = + if (asScalingList) { + MaterialTheme.typography.titleMedium + } else { + MaterialTheme.typography.titleLarge + } ListHeader( modifier = modifier.requiredHeightIn(1.dp), // We do not want default min height contentPadding = contentPaddingValues, @@ -376,7 +377,7 @@ private fun ListScopeWrapper.titleItem( text = it, textAlign = TextAlign.Center, modifier = Modifier.optionalTestTag(testTag), - style = MaterialTheme.typography.titleLarge.copy(hyphens = Hyphens.Auto), + style = style.copy(hyphens = Hyphens.Auto), ) } } diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt index 595fb50a3..01b8fc4be 100644 --- a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt @@ -25,15 +25,15 @@ data class WearPermissionScaffoldPaddingDefaults( private val screenHeight: Int, ) { private val scrollContentHorizontalPadding = (screenWidth * 0.052).dp - private val titleHorizontalPadding = (screenWidth * 0.0520).dp - private val subtitleHorizontalPadding = (screenWidth * 0.0624).dp + private val titleHorizontalPadding = (screenWidth * 0.1200).dp + private val subtitleHorizontalPadding = (screenWidth * 0.0416).dp private val scrollContentTopPadding = (screenHeight * 0.1664).dp private val dialogScrollContentLargeTopPadding = (screenHeight * 0.10).dp private val dialogScrollContentTopPadding = (screenHeight * 0.012).dp private val scrollContentBottomPadding = (screenHeight * 0.3646).dp private val noPadding = 0.dp private val defaultItemPadding = 4.dp - private val largeItemPadding = 8.dp + private val largeItemPadding = 12.dp private val extraLargePadding = 12.dp fun titlePaddingValues(needsLargePadding: Boolean): PaddingValues = @@ -48,7 +48,7 @@ data class WearPermissionScaffoldPaddingDefaults( PaddingValues( start = subtitleHorizontalPadding, top = if (needsLargePadding) extraLargePadding else noPadding, - bottom = largeItemPadding, + bottom = 8.dp, end = subtitleHorizontalPadding, ) |