diff options
68 files changed, 796 insertions, 853 deletions
diff --git a/PermissionController/Android.bp b/PermissionController/Android.bp index 397870c20..dd1b82dc7 100644 --- a/PermissionController/Android.bp +++ b/PermissionController/Android.bp @@ -158,10 +158,10 @@ android_library { "androidx.compose.runtime_runtime", "androidx.compose.runtime_runtime-livedata", "androidx.compose.ui_ui", - "androidx.wear.compose_compose-material", "androidx.wear.compose_compose-material3", "android.content.pm.flags-aconfig-java-export", "android.os.flags-aconfig-java-export", + "wear-permission-components", ], lint: { diff --git a/PermissionController/res/values/overlayable.xml b/PermissionController/res/values/overlayable.xml index ea7929746..e94c5bd04 100644 --- a/PermissionController/res/values/overlayable.xml +++ b/PermissionController/res/values/overlayable.xml @@ -461,89 +461,6 @@ <item type="style" name="AppDataSharingUpdateSettingsIcon" /> <!-- END SAFETY LABELS STYLE --> - <!--START WEAR SPECIFIC MATERIAL2 FONT STRINGS --> - <item type="string" name="wear_material_compose_display_1_font_family" /> - <item type="string" name="wear_material_compose_display_2_font_family" /> - <item type="string" name="wear_material_compose_display_3_font_family" /> - <item type="string" name="wear_material_compose_title_1_font_family" /> - <item type="string" name="wear_material_compose_title_2_font_family" /> - <item type="string" name="wear_material_compose_title_3_font_family" /> - <item type="string" name="wear_material_compose_body_1_font_family" /> - <item type="string" name="wear_material_compose_body_2_font_family" /> - <item type="string" name="wear_material_compose_button_font_family" /> - <item type="string" name="wear_material_compose_caption_1_font_family" /> - <item type="string" name="wear_material_compose_caption_2_font_family" /> - <item type="string" name="wear_material_compose_caption_3_font_family" /> - <!--END WEAR SPECIFIC MATERIAL2 FONT STRINGS --> - - <!--START WEAR SPECIFIC MATERIAL3 FONT FACE TOKENS--> - <item type="string" name="wear_compose_material3_arc_small_font_family" /> - <item type="string" name="wear_compose_material3_arc_medium_font_family" /> - <item type="string" name="wear_compose_material3_arc_large_font_family" /> - - <item type="string" name="wear_compose_material3_body_extra_small_font_family" /> - <item type="string" name="wear_compose_material3_body_small_font_family" /> - <item type="string" name="wear_compose_material3_body_medium_font_family" /> - <item type="string" name="wear_compose_material3_body_large_font_family" /> - - <item type="string" name="wear_compose_material3_display_small_font_family" /> - <item type="string" name="wear_compose_material3_display_medium_font_family" /> - <item type="string" name="wear_compose_material3_display_large_font_family" /> - - <item type="string" name="wear_compose_material3_label_small_font_family" /> - <item type="string" name="wear_compose_material3_label_medium_font_family" /> - <item type="string" name="wear_compose_material3_label_large_font_family" /> - - <item type="string" name="wear_compose_material3_numeral_extra_small_font_family" /> - <item type="string" name="wear_compose_material3_numeral_small_font_family" /> - <item type="string" name="wear_compose_material3_numeral_medium_font_family" /> - <item type="string" name="wear_compose_material3_numeral_large_font_family" /> - <item type="string" name="wear_compose_material3_numeral_extra_large_font_family" /> - - <item type="string" name="wear_compose_material3_title_small_font_family" /> - <item type="string" name="wear_compose_material3_title_medium_font_family" /> - <item type="string" name="wear_compose_material3_title_large_font_family" /> - <!--END WEAR SPECIFIC MATERIAL3 FONT FACE TOKENS--> - - - <!--START WEAR SPECIFIC MATERIAL3 FONT SIZE TOKENS--> - <item type="dimen" name="wear_compose_material3_arc_small_font_size" /> - <item type="dimen" name="wear_compose_material3_arc_medium_font_size" /> - <item type="dimen" name="wear_compose_material3_arc_large_font_size" /> - - <item type="dimen" name="wear_compose_material3_body_extra_small_font_size" /> - <item type="dimen" name="wear_compose_material3_body_small_font_size" /> - <item type="dimen" name="wear_compose_material3_body_medium_font_size" /> - <item type="dimen" name="wear_compose_material3_body_large_font_size" /> - - <item type="dimen" name="wear_compose_material3_display_small_font_size" /> - <item type="dimen" name="wear_compose_material3_display_medium_font_size" /> - <item type="dimen" name="wear_compose_material3_display_large_font_size" /> - - <item type="dimen" name="wear_compose_material3_label_small_font_size" /> - <item type="dimen" name="wear_compose_material3_label_medium_font_size" /> - <item type="dimen" name="wear_compose_material3_label_large_font_size" /> - - <item type="dimen" name="wear_compose_material3_numeral_extra_small_font_size" /> - <item type="dimen" name="wear_compose_material3_numeral_small_font_size" /> - <item type="dimen" name="wear_compose_material3_numeral_medium_font_size" /> - <item type="dimen" name="wear_compose_material3_numeral_large_font_size" /> - <item type="dimen" name="wear_compose_material3_numeral_extra_large_font_size" /> - - <item type="dimen" name="wear_compose_material3_title_small_font_size" /> - <item type="dimen" name="wear_compose_material3_title_medium_font_size" /> - <item type="dimen" name="wear_compose_material3_title_large_font_size" /> - <!--END WEAR SPECIFIC MATERIAL3 FONT SIZE TOKENS--> - - <!--START WEAR SPECIFIC MATERIAL3 SHAPE TOKENS--> - <item type="dimen" name="wear_compose_material3_shape_corner_extra_small_size" /> - <item type="dimen" name="wear_compose_material3_shape_corner_small_size" /> - <item type="dimen" name="wear_compose_material3_shape_corner_medium_size" /> - <item type="dimen" name="wear_compose_material3_shape_corner_large_size" /> - <item type="dimen" name="wear_compose_material3_shape_corner_extra_large_size" /> - <!--END WEAR SPECIFIC MATERIAL3 SHAPE TOKENS--> - - <!-- START ENHANCED CONFIRMATION DIALOG --> <item type="style" name="Theme.EnhancedConfirmationDialog" /> <item type="style" name="Theme.EnhancedConfirmationDialogFragment" /> diff --git a/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt b/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt index 4c698cda3..2428abb4a 100644 --- a/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt @@ -30,10 +30,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView import androidx.wear.compose.material.CircularProgressIndicator -import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme +import com.android.permissioncontroller.wear.permission.components.material3.DialogButtonContent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionConfirmationDialog +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme @Composable fun WearConfirmationScreen(viewModel: WearConfirmationActivityViewModel) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt index ff3c2cbc1..aadfecd4e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt @@ -21,10 +21,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.wear.compose.material3.Dialog -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionScaffold import com.android.permissioncontroller.permission.ui.wear.model.LocationProviderInterceptDialogArgs +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionScaffold @Composable fun LocationProviderDialogScreen( diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt index 959dc9137..15d0fbe5f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionFragment.kt @@ -58,8 +58,8 @@ import com.android.permissioncontroller.permission.ui.v33.AdvancedConfirmDialogA import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionConfirmDialogViewModel import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionConfirmDialogViewModelFactory import com.android.permissioncontroller.permission.ui.wear.model.ConfirmDialogArgs -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupLabel +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme import com.android.settingslib.RestrictedLockUtils /** @@ -98,7 +98,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { userHandle: UserHandle?, caller: String?, sessionId: Long, - grantCategory: String? + grantCategory: String?, ): Bundle { val arguments = Bundle() arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName) @@ -118,7 +118,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View? { val activity = requireActivity() val packageName = @@ -145,7 +145,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { packageName, permGroupName, user, - sessionId + sessionId, ) val viewModel = ViewModelProvider(this, factory).get(AppPermissionViewModel::class.java) confirmDialogViewModel = @@ -182,14 +182,14 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { this, this, param.request, - param.buttonClickAction + param.buttonClickAction, ) } else { showConfirmDialog( ChangeRequest.GRANT_ALL_FILE_ACCESS, R.string.special_file_access_dialog, -1, - false + false, ) } setResult(param.result, permGroupName) @@ -207,7 +207,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { this, this, ChangeRequest.GRANT_BOTH, - APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__ALLOW + APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__ALLOW, ) } else { viewModel.onDenyAnyWay(args.changeRequest, args.buttonPressed, args.oneTime) @@ -225,7 +225,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { this, this, args.changeRequest!!, - args.buttonClicked!! + args.buttonClicked!!, ) confirmDialogViewModel.showAdvancedConfirmDialogLiveData.value = false } @@ -250,7 +250,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { onConfirmDialogCancelButtonClick, onAdvancedConfirmDialogOkButtonClick, onAdvancedConfirmDialogCancelButtonClick, - onDisabledAllowButtonTap + onDisabledAllowButtonTap, ) } } @@ -261,14 +261,14 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { changeRequest: ChangeRequest, @StringRes messageId: Int, buttonPressed: Int, - oneTime: Boolean + oneTime: Boolean, ) { confirmDialogViewModel.confirmDialogArgs = ConfirmDialogArgs( messageId = messageId, changeRequest = changeRequest, buttonPressed = buttonPressed, - oneTime = oneTime + oneTime = oneTime, ) confirmDialogViewModel.showConfirmDialogLiveData.value = true } @@ -284,7 +284,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { Intent() .putExtra( ManagePermissionsActivity.EXTRA_RESULT_PERMISSION_INTERACTED, - permGroupName + permGroupName, ) .putExtra(ManagePermissionsActivity.EXTRA_RESULT_PERMISSION_RESULT, result) requireActivity().setResult(Activity.RESULT_OK, intent) @@ -298,7 +298,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { ChangeRequest.GRANT_FOREGROUND, APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__ALLOW, GRANTED_ALWAYS, - false + false, ) ButtonType.ALLOW_ALWAYS -> GrantedStateChangeParam( @@ -306,7 +306,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { ChangeRequest.GRANT_BOTH, APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__ALLOW_ALWAYS, GRANTED_ALWAYS, - true + true, ) ButtonType.ALLOW_FOREGROUND -> GrantedStateChangeParam( @@ -314,7 +314,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { ChangeRequest.GRANT_FOREGROUND_ONLY, APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__ALLOW_FOREGROUND, GRANTED_FOREGROUND_ONLY, - true + true, ) ButtonType.ASK -> GrantedStateChangeParam( @@ -322,7 +322,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { ChangeRequest.REVOKE_BOTH, APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__ASK_EVERY_TIME, DENIED, - false + false, ) ButtonType.DENY -> GrantedStateChangeParam( @@ -330,7 +330,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { ChangeRequest.REVOKE_BOTH, APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__DENY, DENIED_DO_NOT_ASK_AGAIN, - false + false, ) ButtonType.DENY_FOREGROUND -> GrantedStateChangeParam( @@ -338,7 +338,7 @@ class WearAppPermissionFragment : Fragment(), ConfirmDialogShowingFragment { ChangeRequest.REVOKE_FOREGROUND, APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__DENY_FOREGROUND, DENIED_DO_NOT_ASK_AGAIN, - false + false, ) else -> throw RuntimeException("Wrong button type: $buttonType") } @@ -349,5 +349,5 @@ data class GrantedStateChangeParam( val request: ChangeRequest, val buttonClickAction: Int, val result: Int, - val requiresCustomStorageBehavior: Boolean + val requiresCustomStorageBehavior: Boolean, ) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt index 552876b7d..06d14cc14 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsFragment.kt @@ -48,7 +48,7 @@ import com.android.permissioncontroller.permission.ui.wear.model.WearAppPermissi import com.android.permissioncontroller.permission.ui.wear.model.WearAppPermissionUsagesViewModelFactory import com.android.permissioncontroller.permission.ui.wear.model.WearLocationProviderInterceptDialogViewModel import com.android.permissioncontroller.permission.ui.wear.model.WearLocationProviderInterceptDialogViewModelFactory -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme import java.time.Instant import java.util.concurrent.TimeUnit @@ -63,7 +63,7 @@ class WearAppPermissionGroupsFragment : Fragment(), PermissionsUsagesChangeCallb override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View? { val packageName = arguments?.getString(Intent.EXTRA_PACKAGE_NAME) ?: "" val user = @@ -93,7 +93,7 @@ class WearAppPermissionGroupsFragment : Fragment(), PermissionsUsagesChangeCallb val viewModel = ViewModelProvider( owner = this, - factory = AppPermissionGroupsViewModelFactory(packageName, user, sessionId) + factory = AppPermissionGroupsViewModelFactory(packageName, user, sessionId), )[AppPermissionGroupsViewModel::class.java] wearViewModel = @@ -103,13 +103,13 @@ class WearAppPermissionGroupsFragment : Fragment(), PermissionsUsagesChangeCallb val revokeDialogViewModel = ViewModelProvider( owner = this, - factory = AppPermissionGroupsRevokeDialogViewModelFactory() + factory = AppPermissionGroupsRevokeDialogViewModelFactory(), )[AppPermissionGroupsRevokeDialogViewModel::class.java] val locationProviderInterceptDialogViewModel = ViewModelProvider( owner = this, - factory = WearLocationProviderInterceptDialogViewModelFactory() + factory = WearLocationProviderInterceptDialogViewModelFactory(), )[WearLocationProviderInterceptDialogViewModel::class.java] val context = requireContext() @@ -125,7 +125,7 @@ class WearAppPermissionGroupsFragment : Fragment(), PermissionsUsagesChangeCallb maxOf( System.currentTimeMillis() - TimeUnit.DAYS.toMillis(aggregateDataFilterBeginDays), - Instant.EPOCH.toEpochMilli() + Instant.EPOCH.toEpochMilli(), ) permissionUsages.load( null, @@ -137,7 +137,7 @@ class WearAppPermissionGroupsFragment : Fragment(), PermissionsUsagesChangeCallb false, false, this, - false + false, ) } helper = @@ -151,7 +151,7 @@ class WearAppPermissionGroupsFragment : Fragment(), PermissionsUsagesChangeCallb viewModel = viewModel, wearViewModel = wearViewModel, revokeDialogViewModel = revokeDialogViewModel, - locationProviderInterceptDialogViewModel = locationProviderInterceptDialogViewModel + locationProviderInterceptDialogViewModel = locationProviderInterceptDialogViewModel, ) return ComposeView(activity).apply { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt index 5919fad0d..e375910ae 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt @@ -25,15 +25,15 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControl -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType import com.android.permissioncontroller.permission.ui.wear.model.RevokeDialogArgs -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.DialogButtonContent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionConfirmationDialog +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControl +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlType +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion @Composable fun WearAppPermissionGroupsScreen(helper: WearAppPermissionGroupsHelper) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt index 8815e7905..588f5a4da 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt @@ -30,20 +30,20 @@ import com.android.permissioncontroller.permission.ui.model.AppPermissionViewMod import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonState import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType import com.android.permissioncontroller.permission.ui.v33.AdvancedConfirmDialogArgs -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ListFooter -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.toggleChipDisabledColors -import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType -import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertConfirmIcon -import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertDismissIcon import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionConfirmDialogViewModel import com.android.permissioncontroller.permission.ui.wear.model.ConfirmDialogArgs -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material2.ListFooter +import com.android.permissioncontroller.wear.permission.components.material2.ToggleChip +import com.android.permissioncontroller.wear.permission.components.material2.toggleChipDisabledColors +import com.android.permissioncontroller.wear.permission.components.material3.DialogButtonContent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionConfirmationDialog +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlType +import com.android.permissioncontroller.wear.permission.components.material3.defaultAlertConfirmIcon +import com.android.permissioncontroller.wear.permission.components.material3.defaultAlertDismissIcon +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion import com.android.settingslib.RestrictedLockUtils @Composable diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationDialogFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationDialogFragment.kt index e81fd948d..088531a52 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationDialogFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationDialogFragment.kt @@ -27,7 +27,7 @@ import androidx.fragment.app.DialogFragment import androidx.fragment.app.viewModels import com.android.permissioncontroller.ecm.EnhancedConfirmationDialogActivity import com.android.permissioncontroller.permission.ui.wear.model.WearEnhancedConfirmationViewModel -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme class WearEnhancedConfirmationDialogFragment : DialogFragment() { private lateinit var enhancedConfirmationDialogActivity: EnhancedConfirmationDialogActivity @@ -42,7 +42,7 @@ class WearEnhancedConfirmationDialogFragment : DialogFragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View { val title = arguments?.getString(KEY_TITLE) ?: throw RuntimeException("ECM Title can't be null") diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt index ab19a9665..1e1f8ba5a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt @@ -39,20 +39,20 @@ import androidx.wear.compose.material.CircularProgressIndicator import androidx.wear.compose.material.MaterialTheme import androidx.wear.compose.material.SwipeToDismissBox import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.ui.wear.elements.CheckYourPhoneScreen -import com.android.permissioncontroller.permission.ui.wear.elements.CheckYourPhoneState -import com.android.permissioncontroller.permission.ui.wear.elements.CheckYourPhoneState.InProgress -import com.android.permissioncontroller.permission.ui.wear.elements.CheckYourPhoneState.Success -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.dismiss -import com.android.permissioncontroller.permission.ui.wear.elements.findActivity -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip -import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.ui.wear.model.WearEnhancedConfirmationViewModel import com.android.permissioncontroller.permission.ui.wear.model.WearEnhancedConfirmationViewModel.ScreenState -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.CheckYourPhoneScreen +import com.android.permissioncontroller.wear.permission.components.CheckYourPhoneState +import com.android.permissioncontroller.wear.permission.components.CheckYourPhoneState.InProgress +import com.android.permissioncontroller.wear.permission.components.CheckYourPhoneState.Success +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.dismiss +import com.android.permissioncontroller.wear.permission.components.findActivity +import com.android.permissioncontroller.wear.permission.components.material2.Chip +import com.android.permissioncontroller.wear.permission.components.material3.DialogButtonContent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionConfirmationDialog +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper @Composable fun WearEnhancedConfirmationScreen( 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 20c010781..f17e21c1f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt @@ -22,6 +22,7 @@ import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.res.stringResource +import androidx.core.util.size import androidx.wear.compose.material3.Dialog import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.GrantPermissionsActivity.ALLOW_ALWAYS_BUTTON @@ -38,13 +39,13 @@ import com.android.permissioncontroller.permission.ui.GrantPermissionsActivity.N import com.android.permissioncontroller.permission.ui.GrantPermissionsActivity.NO_UPGRADE_OT_AND_DONT_ASK_AGAIN_BUTTON import com.android.permissioncontroller.permission.ui.GrantPermissionsActivity.NO_UPGRADE_OT_BUTTON import com.android.permissioncontroller.permission.ui.wear.GrantPermissionsWearViewHandler.BUTTON_RES_ID_TO_NUM -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControl -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType import com.android.permissioncontroller.permission.ui.wear.model.WearGrantPermissionsViewModel -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion.MATERIAL3 +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControl +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlType +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion.MATERIAL3 @Composable fun WearGrantPermissionsScreen( @@ -84,7 +85,7 @@ fun WearGrantPermissionsScreen( ) } } - for (i in 0 until BUTTON_RES_ID_TO_NUM.size()) { + for (i in 0 until BUTTON_RES_ID_TO_NUM.size) { val pos: Int = BUTTON_RES_ID_TO_NUM.valueAt(i) if (buttonVisibilities.value.size <= pos) { // initial value of buttonVisibilities is empty diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt index d826e501e..72c3d2054 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt @@ -25,9 +25,9 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.model.ManageCustomPermissionsViewModel -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder @Composable fun WearManageCustomPermissionScreen( diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt index a9e83919f..96da37b9b 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionsFragment.kt @@ -26,13 +26,13 @@ import androidx.lifecycle.ViewModelProvider import com.android.permissioncontroller.Constants import com.android.permissioncontroller.permission.ui.handheld.PermissionAppsFragment import com.android.permissioncontroller.permission.ui.model.ManageCustomPermissionsViewModel -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme class WearManageCustomPermissionsFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View? { val activity = requireActivity() val application = activity.getApplication() @@ -41,14 +41,14 @@ class WearManageCustomPermissionsFragment : Fragment() { val viewModel = ViewModelProvider( this, - ViewModelProvider.AndroidViewModelFactory.getInstance(application) + ViewModelProvider.AndroidViewModelFactory.getInstance(application), ) .get(ManageCustomPermissionsViewModel::class.java) val onPermGroupClick: (String) -> Unit = { permGroupName -> viewModel.showPermissionApps( this, - PermissionAppsFragment.createArgs(permGroupName, sessionId) + PermissionAppsFragment.createArgs(permGroupName, sessionId), ) } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt index 3e347e19c..2fdf33130 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt @@ -29,13 +29,13 @@ import androidx.compose.ui.res.stringResource import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.model.livedatatypes.PermGroupPackagesUiInfo import com.android.permissioncontroller.permission.ui.model.ManageStandardPermissionsViewModel -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupIcon import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupLabel import com.android.permissioncontroller.permission.utils.StringUtils import com.android.permissioncontroller.permission.utils.Utils +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder import java.text.Collator @Composable diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt index 16ed1f067..d88554562 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionsFragment.kt @@ -27,13 +27,13 @@ import com.android.permissioncontroller.Constants import com.android.permissioncontroller.permission.ui.handheld.ManageCustomPermissionsFragment import com.android.permissioncontroller.permission.ui.handheld.PermissionAppsFragment import com.android.permissioncontroller.permission.ui.model.ManageStandardPermissionsViewModel -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme class WearManageStandardPermissionsFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View? { val activity = requireActivity() val application = activity.getApplication() @@ -42,20 +42,20 @@ class WearManageStandardPermissionsFragment : Fragment() { val viewModel: ManageStandardPermissionsViewModel = ViewModelProvider( this, - ViewModelProvider.AndroidViewModelFactory.getInstance(application) + ViewModelProvider.AndroidViewModelFactory.getInstance(application), ) .get(ManageStandardPermissionsViewModel::class.java) val onPermGroupClick: (String) -> Unit = { permGroupName -> viewModel.showPermissionApps( this, - PermissionAppsFragment.createArgs(permGroupName, sessionId) + PermissionAppsFragment.createArgs(permGroupName, sessionId), ) } val onCustomPermGroupClick = { viewModel.showCustomPermissions( this, - ManageCustomPermissionsFragment.createArgs(sessionId) + ManageCustomPermissionsFragment.createArgs(sessionId), ) } val onAutoRevokeClick = { @@ -69,7 +69,7 @@ class WearManageStandardPermissionsFragment : Fragment() { viewModel, onPermGroupClick, onCustomPermGroupClick, - onAutoRevokeClick + onAutoRevokeClick, ) } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt index 2fa6aa7f3..6f0d94d02 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt @@ -30,10 +30,10 @@ import androidx.compose.ui.res.stringResource import androidx.wear.compose.material.Text import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.Category -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionListSubHeader +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionListSubHeader /** Compose the screen associated to a [WearPermissionAppsFragment]. */ @Composable diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageDetailsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageDetailsScreen.kt index 279eaa8cc..9b65a067f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageDetailsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageDetailsScreen.kt @@ -35,11 +35,11 @@ import com.android.permissioncontroller.permission.ui.model.v31.BasePermissionUs import com.android.permissioncontroller.permission.ui.model.v31.PermissionUsageDetailsViewModel import com.android.permissioncontroller.permission.ui.model.v31.PermissionUsageDetailsViewModel.AppPermissionAccessUiInfo import com.android.permissioncontroller.permission.ui.model.v31.PermissionUsageDetailsViewModel.PermissionUsageDetailsUiState -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.utils.KotlinUtils +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder @RequiresApi(Build.VERSION_CODES.S) @Composable diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageScreen.kt index 889caba3b..b331e197b 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionUsageScreen.kt @@ -32,10 +32,10 @@ import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.handheld.v31.PermissionUsageControlPreference import com.android.permissioncontroller.permission.ui.viewmodel.v31.PermissionUsageViewModel import com.android.permissioncontroller.permission.ui.viewmodel.v31.PermissionUsagesUiState -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.utils.Utils +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder import java.text.Collator @RequiresApi(Build.VERSION_CODES.S) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt index 64acfdd96..d454cc566 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsFragment.kt @@ -41,14 +41,14 @@ import com.android.permissioncontroller.permission.ui.model.UnusedAppsViewModel. import com.android.permissioncontroller.permission.ui.model.UnusedAppsViewModelFactory import com.android.permissioncontroller.permission.ui.wear.model.WearUnusedAppsViewModel import com.android.permissioncontroller.permission.ui.wear.model.WearUnusedAppsViewModel.UnusedAppChip -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import com.android.permissioncontroller.permission.utils.KotlinUtils +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme import com.android.settingslib.utils.applications.AppUtils import java.text.Collator /** * This is a condensed version of - * [com.android.permissioncontroller.permission.ui.UnusedAppsFragment.kt], tailored for Wear. + * [com.android.permissioncontroller.permission.ui.UnusedAppsFragment], tailored for Wear. * * A fragment displaying all applications that are unused as well as the option to remove them and * to open them. @@ -62,7 +62,7 @@ class WearUnusedAppsFragment : Fragment() { private var sessionId: Long = 0L private var isFirstLoad = false private var categoryVisibilities: MutableList<Boolean> = - MutableList(UnusedPeriod.values().size) { false } + MutableList(UnusedPeriod.entries.size) { false } private var unusedAppsMap: MutableMap<UnusedPeriod, MutableMap<String, UnusedAppChip>> = initUnusedAppsMap() @@ -87,7 +87,7 @@ class WearUnusedAppsFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View? { isFirstLoad = true context = requireContext() @@ -101,7 +101,7 @@ class WearUnusedAppsFragment : Fragment() { wearViewModel = ViewModelProvider( this, - ViewModelProvider.AndroidViewModelFactory.getInstance(application) + ViewModelProvider.AndroidViewModelFactory.getInstance(application), ) .get(WearUnusedAppsViewModel::class.java) viewModel.unusedPackageCategoriesLiveData.observe( @@ -111,7 +111,7 @@ class WearUnusedAppsFragment : Fragment() { updatePackages(pkgs) updateWearViewModel(false) } - } + }, ) if (!viewModel.unusedPackageCategoriesLiveData.isInitialized) { @@ -125,7 +125,7 @@ class WearUnusedAppsFragment : Fragment() { updateWearViewModel(false) } }, - SHOW_LOAD_DELAY_MS + SHOW_LOAD_DELAY_MS, ) } else { updatePackages(viewModel.unusedPackageCategoriesLiveData.value!!) @@ -192,14 +192,14 @@ class WearUnusedAppsFragment : Fragment() { getString( R.string.auto_revoked_app_summary_two, importantLabel, - otherLabel + otherLabel, ) } else -> getString( R.string.auto_revoked_app_summary_many, importantLabel, - "${revokedPerms.size - 1}" + "${revokedPerms.size - 1}", ) } @@ -215,9 +215,9 @@ class WearUnusedAppsFragment : Fragment() { AppUtils.getAppContentDescription( context, pkgName, - user.getIdentifier() + user.getIdentifier(), ), - onChipClicked + onChipClicked, ) unusedAppsMap[period]!!.put(key, chip) } @@ -242,7 +242,7 @@ class WearUnusedAppsFragment : Fragment() { for (period in allPeriods) { Log.i( LOG_TAG, - "sessionId: $sessionId $period unused: " + "${categorizedPackages[period]}" + "sessionId: $sessionId $period unused: " + "${categorizedPackages[period]}", ) for (revokedPackageInfo in categorizedPackages[period]!!) { for (groupName in revokedPackageInfo.revokedGroups) { @@ -251,7 +251,7 @@ class WearUnusedAppsFragment : Fragment() { revokedPackageInfo.packageName, revokedPackageInfo.user, groupName, - isNewlyRevoked + isNewlyRevoked, ) } } @@ -292,7 +292,7 @@ class WearUnusedAppsFragment : Fragment() { private fun compareUnusedApps( lhs: Pair<String, UnusedAppChip>, - rhs: Pair<String, UnusedAppChip> + rhs: Pair<String, UnusedAppChip>, ): Int { var result = collator.compare(lhs.second.label, rhs.second.label) if (result == 0) { @@ -303,7 +303,7 @@ class WearUnusedAppsFragment : Fragment() { private fun updateWearViewModel(isLoading: Boolean) { wearViewModel.loadingLiveData.value = isLoading - wearViewModel.unusedPeriodCategoryVisibilitiesLiveData.setValue(categoryVisibilities) + wearViewModel.unusedPeriodCategoryVisibilitiesLiveData.value = categoryVisibilities // Need to copy to non mutable maps or compose will not update correctly val map = mutableMapOf<UnusedPeriod, Map<String, UnusedAppChip>>() @@ -311,6 +311,6 @@ class WearUnusedAppsFragment : Fragment() { map.put(period, unusedAppsMap[period]!!.toMap()) } - wearViewModel.unusedAppChipsLiveData.setValue(map.toMap()) + wearViewModel.unusedAppChipsLiveData.value = map.toMap() } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsScreen.kt index 0bde97f81..c5eef53f2 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUnusedAppsScreen.kt @@ -25,10 +25,10 @@ import com.android.permissioncontroller.R import com.android.permissioncontroller.hibernation.isHibernationEnabled import com.android.permissioncontroller.permission.ui.model.UnusedAppsViewModel.UnusedPeriod import com.android.permissioncontroller.permission.ui.model.UnusedAppsViewModel.UnusedPeriod.Companion.allPeriods -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.ui.wear.model.WearUnusedAppsViewModel +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder @Composable fun WearUnusedAppsScreen(viewModel: WearUnusedAppsViewModel) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt index 7e4e939b9..6cdf47cec 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearUtils.kt @@ -22,7 +22,6 @@ import androidx.annotation.IntDef import com.android.permissioncontroller.R import java.time.ZonedDateTime import java.time.temporal.ChronoUnit -import java.util.Locale object WearUtils { @Retention(AnnotationRetention.SOURCE) @@ -48,7 +47,7 @@ object WearUtils { res.getString( R.string.wear_app_perms_7d_access, summaryTimestamp.third, - summaryTimestamp.first + summaryTimestamp.first, ) else -> "" } @@ -57,7 +56,7 @@ object WearUtils { @JvmStatic private fun getPermissionLastAccessSummaryTimestamp( lastAccessTime: Long?, - context: Context + context: Context, ): Triple<String, Int, String> { val midnightToday = (ZonedDateTime.now().truncatedTo(ChronoUnit.DAYS).toEpochSecond() * 1000L) @@ -78,8 +77,4 @@ object WearUtils { } return Triple(lastAccessTimeFormatted, lastAccessType, lastAccessDateFormatted) } - - fun String.capitalize(): String = replaceFirstChar { - if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() - } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/RemoteConnectionProgressIndicator.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/RemoteConnectionProgressIndicator.kt deleted file mode 100644 index 244e7e3fd..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/RemoteConnectionProgressIndicator.kt +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2024 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 - * - * https://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.elements - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.unit.dp -import androidx.wear.compose.material.CircularProgressIndicator -import androidx.wear.compose.material.Icon -import androidx.wear.compose.material.MaterialTheme - -@Composable -fun RemoteConnectionProgressIndicator(iconRes: Int, modifier: Modifier) { - val indicatorPadding = 8.dp - val iconSize = 48.dp - val progressBarStrokeWidth = 4.dp - Box( - modifier = modifier.size(iconSize).clip(CircleShape), - ) { - CircularProgressIndicator( - modifier = Modifier.size(iconSize - progressBarStrokeWidth + indicatorPadding), - strokeWidth = progressBarStrokeWidth, - ) - Icon( - painter = painterResource(iconRes), - contentDescription = null, - modifier = - Modifier.align(Alignment.Center) - .size(iconSize - indicatorPadding - 8.dp) - .clip(CircleShape), - ) - } -} - -@Composable -fun RemoteConnectionSuccess(iconRes: Int, modifier: Modifier) { - val indicatorPadding = 8.dp - val iconSize = 48.dp - val backgroundColor = MaterialTheme.colors.onSurface - val contentColor = MaterialTheme.colors.surface - Box( - modifier = modifier.size(iconSize).clip(CircleShape).background(backgroundColor), - ) { - Icon( - painter = painterResource(iconRes), - contentDescription = null, - tint = contentColor, - modifier = - Modifier.align(Alignment.Center) - .size(iconSize - indicatorPadding - 8.dp) - .clip(CircleShape), - ) - } -} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTheme.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTheme.kt deleted file mode 100644 index 736d543a3..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTheme.kt +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (C) 2024 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.theme - -import android.content.Context -import android.os.Build -import androidx.annotation.RequiresApi -import androidx.annotation.StringRes -import androidx.annotation.VisibleForTesting -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.text.font.DeviceFontFamilyName -import androidx.compose.ui.text.font.Font -import androidx.compose.ui.text.font.FontFamily -import androidx.wear.compose.material.Colors -import androidx.wear.compose.material.MaterialTheme -import androidx.wear.compose.material.Typography -import androidx.wear.compose.material3.MaterialTheme as Material3Theme -import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion.MATERIAL2_5 -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion.MATERIAL3 - -/** This enum is used to specify the material version used for a specific screen */ -enum class WearPermissionMaterialUIVersion { - MATERIAL2_5, - MATERIAL3, -} - -/** - * Supports both Material 3 and Material 2_5 theme. default version for permission theme will be 2_5 - * until we migrate enough screens to 3. 2_5 version will use material 3 overlay resources if we - * enable material3 for even one screen (Permission screens will be migrated in phases). - */ -@Composable -fun WearPermissionTheme( - version: WearPermissionMaterialUIVersion = MATERIAL2_5, - content: @Composable () -> Unit, -) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) { - WearPermissionLegacyTheme(content) - } else { - // Material3 UI controls are still being used in the screen that the theme is applied - if (version == MATERIAL3) { - val material3Theme = WearOverlayableMaterial3Theme(LocalContext.current) - Material3Theme( - colorScheme = material3Theme.colorScheme, - typography = material3Theme.typography, - shapes = material3Theme.shapes, - content = content, - ) - } - // Material2_5 UI controls are still being used in the screen that the theme is applied, - // But some in-app screens(like permission grant screen) are migrated to material3. - // To avoid having two set of overlay resources, we will use material3 overlay resources to - // support material2_5 UI controls as well. - else if (version == MATERIAL2_5 && ResourceHelper.materialUIVersionInApp == MATERIAL3) { - val material3Theme = WearOverlayableMaterial3Theme(LocalContext.current) - val bridgedLegacyTheme = WearMaterialBridgedLegacyTheme.createFrom(material3Theme) - MaterialTheme( - colors = bridgedLegacyTheme.colors, - typography = bridgedLegacyTheme.typography, - shapes = bridgedLegacyTheme.shapes, - content = content, - ) - } - // We are not ready for material3 yet in any screens. - else { - WearPermissionLegacyTheme(content) - } - } -} - -/** - * The Material 2.5 Theme Wrapper for Supporting RRO with legacy resources. This theme is kept here - * for backward compatibility. When grant screen is updated to material3 will clean up legacy - * resources. - */ -@Composable -fun WearPermissionLegacyTheme(content: @Composable () -> Unit) { - val context = LocalContext.current - val colors = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - overlayColors(context) - .copy(error = MaterialTheme.colors.error, onError = MaterialTheme.colors.onError) - } else { - MaterialTheme.colors - } - MaterialTheme(colors = colors, typography = deviceDefaultTypography(context), content = content) -} - -/** - * Creates a dynamic color maps that can be overlaid. 100 - Lightest shade; 0 - Darkest Shade; In - * wear we only support dark theme for the time being. Thus the fill colors and variants are dark - * and anything on top is light. We will use this custom redirection until wear compose material - * supports color scheming. - * - * The mapping is best case match on wear material color tokens from - * /android/clockwork/common/wearable/wearmaterial/color/res/values/color-tokens.xml - * - * @param context The context required to get system resource data. - */ -@RequiresApi(Build.VERSION_CODES.S) -@VisibleForTesting -internal fun overlayColors(context: Context): Colors { - val tonalPalette = dynamicTonalPalette(context) - return Colors( - background = Color.Black, - onBackground = Color.White, - primary = tonalPalette.primary90, - primaryVariant = tonalPalette.primary80, - onPrimary = tonalPalette.primary10, - secondary = tonalPalette.tertiary90, - secondaryVariant = tonalPalette.tertiary60, - onSecondary = tonalPalette.tertiary10, - surface = tonalPalette.neutral20, - onSurface = tonalPalette.neutral95, - onSurfaceVariant = tonalPalette.neutralVariant80, - ) -} - -private fun fontFamily(context: Context, @StringRes id: Int): FontFamily { - val typefaceName = context.resources.getString(id) - val font = Font(familyName = DeviceFontFamilyName(typefaceName)) - return FontFamily(font) -} - -/* - Only customizes font family. The material 3 roles to 2.5 are mapped to the best case matching of - google3/java/com/google/android/wearable/libraries/compose/theme/GoogleMaterialTheme.kt -*/ -internal fun deviceDefaultTypography(context: Context): Typography { - val defaultTypography = Typography() - return Typography( - display1 = - defaultTypography.display1.copy( - fontFamily = - fontFamily(context, R.string.wear_material_compose_display_1_font_family) - ), - display2 = - defaultTypography.display2.copy( - fontFamily = - fontFamily(context, R.string.wear_material_compose_display_2_font_family) - ), - display3 = - defaultTypography.display3.copy( - fontFamily = - fontFamily(context, R.string.wear_material_compose_display_3_font_family) - ), - title1 = - defaultTypography.title1.copy( - fontFamily = fontFamily(context, R.string.wear_material_compose_title_1_font_family) - ), - title2 = - defaultTypography.title2.copy( - fontFamily = fontFamily(context, R.string.wear_material_compose_title_2_font_family) - ), - title3 = - defaultTypography.title3.copy( - fontFamily = fontFamily(context, R.string.wear_material_compose_title_3_font_family) - ), - body1 = - defaultTypography.body1.copy( - fontFamily = fontFamily(context, R.string.wear_material_compose_body_1_font_family) - ), - body2 = - defaultTypography.body2.copy( - fontFamily = fontFamily(context, R.string.wear_material_compose_body_2_font_family) - ), - button = - defaultTypography.button.copy( - fontFamily = fontFamily(context, R.string.wear_material_compose_button_font_family) - ), - caption1 = - defaultTypography.caption1.copy( - fontFamily = - fontFamily(context, R.string.wear_material_compose_caption_1_font_family) - ), - caption2 = - defaultTypography.caption2.copy( - fontFamily = - fontFamily(context, R.string.wear_material_compose_caption_2_font_family) - ), - caption3 = - defaultTypography.caption3.copy( - fontFamily = - fontFamily(context, R.string.wear_material_compose_caption_3_font_family) - ), - ) -} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTonalPalette.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTonalPalette.kt deleted file mode 100644 index a86af8b3d..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearPermissionTonalPalette.kt +++ /dev/null @@ -1,191 +0,0 @@ -@file:Suppress("unused") - -package com.android.permissioncontroller.permission.ui.wear.theme - -import android.R -import android.content.Context -import android.os.Build -import androidx.annotation.ColorRes -import androidx.annotation.DoNotInline -import androidx.annotation.RequiresApi -import androidx.compose.ui.graphics.Color - -/** - * Tonal Palette structure in Material. - * - * A tonal palette is comprised of 5 tonal ranges. Each tonal range includes the 13 stops, or tonal - * swatches. - * - * Tonal range names are: - * - Neutral (N) - * - Neutral variant (NV) - * - Primary (P) - * - Secondary (S) - * - Tertiary (T) - */ -internal class WearPermissionTonalPalette( - // The neutral tonal range. - val neutral100: Color, - val neutral99: Color, - val neutral95: Color, - val neutral90: Color, - val neutral80: Color, - val neutral70: Color, - val neutral60: Color, - val neutral50: Color, - val neutral40: Color, - val neutral30: Color, - val neutral20: Color, - val neutral10: Color, - val neutral0: Color, - - // The neutral variant tonal range, sometimes called "neutral 2" - val neutralVariant100: Color, - val neutralVariant99: Color, - val neutralVariant95: Color, - val neutralVariant90: Color, - val neutralVariant80: Color, - val neutralVariant70: Color, - val neutralVariant60: Color, - val neutralVariant50: Color, - val neutralVariant40: Color, - val neutralVariant30: Color, - val neutralVariant20: Color, - val neutralVariant10: Color, - val neutralVariant0: Color, - - // The primary tonal range, also known as accent 1 - val primary100: Color, - val primary99: Color, - val primary95: Color, - val primary90: Color, - val primary80: Color, - val primary70: Color, - val primary60: Color, - val primary50: Color, - val primary40: Color, - val primary30: Color, - val primary20: Color, - val primary10: Color, - val primary0: Color, - - // The Secondary tonal range, also know as accent 2 - val secondary100: Color, - val secondary99: Color, - val secondary95: Color, - val secondary90: Color, - val secondary80: Color, - val secondary70: Color, - val secondary60: Color, - val secondary50: Color, - val secondary40: Color, - val secondary30: Color, - val secondary20: Color, - val secondary10: Color, - val secondary0: Color, - - // The tertiary tonal range, also known as accent 3 - val tertiary100: Color, - val tertiary99: Color, - val tertiary95: Color, - val tertiary90: Color, - val tertiary80: Color, - val tertiary70: Color, - val tertiary60: Color, - val tertiary50: Color, - val tertiary40: Color, - val tertiary30: Color, - val tertiary20: Color, - val tertiary10: Color, - val tertiary0: Color, -) -/** Dynamic colors for wear compose material to support resource overlay. */ -@RequiresApi(Build.VERSION_CODES.S) -// TODO: once we have proper support for this on Wear 6+, we will do something similar to -// https://source.corp.google.com/h/android/platform/superproject/+/androidx-main:frameworks/support/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/DynamicTonalPalette.android.kt;l=307-362?q=dynamicTonalPalette&sq=repo:android%2Fplatform%2Fsuperproject%20b:androidx-main -// Tracking Bug: b/270720571 -internal fun dynamicTonalPalette(context: Context) = - WearPermissionTonalPalette( - // The neutral tonal range from the generated dynamic color palette. - neutral100 = ColorResourceHelper.getColor(context, R.color.system_neutral1_0), - neutral99 = ColorResourceHelper.getColor(context, R.color.system_neutral1_10), - neutral95 = ColorResourceHelper.getColor(context, R.color.system_neutral1_50), - neutral90 = ColorResourceHelper.getColor(context, R.color.system_neutral1_100), - neutral80 = ColorResourceHelper.getColor(context, R.color.system_neutral1_200), - neutral70 = ColorResourceHelper.getColor(context, R.color.system_neutral1_300), - neutral60 = ColorResourceHelper.getColor(context, R.color.system_neutral1_400), - neutral50 = ColorResourceHelper.getColor(context, R.color.system_neutral1_500), - neutral40 = ColorResourceHelper.getColor(context, R.color.system_neutral1_600), - neutral30 = ColorResourceHelper.getColor(context, R.color.system_neutral1_700), - neutral20 = ColorResourceHelper.getColor(context, R.color.system_neutral1_800), - neutral10 = ColorResourceHelper.getColor(context, R.color.system_neutral1_900), - neutral0 = ColorResourceHelper.getColor(context, R.color.system_neutral1_1000), - - // The neutral variant tonal range, sometimes called "neutral 2", from the - // generated dynamic color palette. - neutralVariant100 = ColorResourceHelper.getColor(context, R.color.system_neutral2_0), - neutralVariant99 = ColorResourceHelper.getColor(context, R.color.system_neutral2_10), - neutralVariant95 = ColorResourceHelper.getColor(context, R.color.system_neutral2_50), - neutralVariant90 = ColorResourceHelper.getColor(context, R.color.system_neutral2_100), - neutralVariant80 = ColorResourceHelper.getColor(context, R.color.system_neutral2_200), - neutralVariant70 = ColorResourceHelper.getColor(context, R.color.system_neutral2_300), - neutralVariant60 = ColorResourceHelper.getColor(context, R.color.system_neutral2_400), - neutralVariant50 = ColorResourceHelper.getColor(context, R.color.system_neutral2_500), - neutralVariant40 = ColorResourceHelper.getColor(context, R.color.system_neutral2_600), - neutralVariant30 = ColorResourceHelper.getColor(context, R.color.system_neutral2_700), - neutralVariant20 = ColorResourceHelper.getColor(context, R.color.system_neutral2_800), - neutralVariant10 = ColorResourceHelper.getColor(context, R.color.system_neutral2_900), - neutralVariant0 = ColorResourceHelper.getColor(context, R.color.system_neutral2_1000), - - // The primary tonal range from the generated dynamic color palette. - primary100 = ColorResourceHelper.getColor(context, R.color.system_accent1_0), - primary99 = ColorResourceHelper.getColor(context, R.color.system_accent1_10), - primary95 = ColorResourceHelper.getColor(context, R.color.system_accent1_50), - primary90 = ColorResourceHelper.getColor(context, R.color.system_accent1_100), - primary80 = ColorResourceHelper.getColor(context, R.color.system_accent1_200), - primary70 = ColorResourceHelper.getColor(context, R.color.system_accent1_300), - primary60 = ColorResourceHelper.getColor(context, R.color.system_accent1_400), - primary50 = ColorResourceHelper.getColor(context, R.color.system_accent1_500), - primary40 = ColorResourceHelper.getColor(context, R.color.system_accent1_600), - primary30 = ColorResourceHelper.getColor(context, R.color.system_accent1_700), - primary20 = ColorResourceHelper.getColor(context, R.color.system_accent1_800), - primary10 = ColorResourceHelper.getColor(context, R.color.system_accent1_900), - primary0 = ColorResourceHelper.getColor(context, R.color.system_accent1_1000), - - // The secondary tonal range from the generated dynamic color palette. - secondary100 = ColorResourceHelper.getColor(context, R.color.system_accent2_0), - secondary99 = ColorResourceHelper.getColor(context, R.color.system_accent2_10), - secondary95 = ColorResourceHelper.getColor(context, R.color.system_accent2_50), - secondary90 = ColorResourceHelper.getColor(context, R.color.system_accent2_100), - secondary80 = ColorResourceHelper.getColor(context, R.color.system_accent2_200), - secondary70 = ColorResourceHelper.getColor(context, R.color.system_accent2_300), - secondary60 = ColorResourceHelper.getColor(context, R.color.system_accent2_400), - secondary50 = ColorResourceHelper.getColor(context, R.color.system_accent2_500), - secondary40 = ColorResourceHelper.getColor(context, R.color.system_accent2_600), - secondary30 = ColorResourceHelper.getColor(context, R.color.system_accent2_700), - secondary20 = ColorResourceHelper.getColor(context, R.color.system_accent2_800), - secondary10 = ColorResourceHelper.getColor(context, R.color.system_accent2_900), - secondary0 = ColorResourceHelper.getColor(context, R.color.system_accent2_1000), - - // The tertiary tonal range from the generated dynamic color palette. - tertiary100 = ColorResourceHelper.getColor(context, R.color.system_accent3_0), - tertiary99 = ColorResourceHelper.getColor(context, R.color.system_accent3_10), - tertiary95 = ColorResourceHelper.getColor(context, R.color.system_accent3_50), - tertiary90 = ColorResourceHelper.getColor(context, R.color.system_accent3_100), - tertiary80 = ColorResourceHelper.getColor(context, R.color.system_accent3_200), - tertiary70 = ColorResourceHelper.getColor(context, R.color.system_accent3_300), - tertiary60 = ColorResourceHelper.getColor(context, R.color.system_accent3_400), - tertiary50 = ColorResourceHelper.getColor(context, R.color.system_accent3_500), - tertiary40 = ColorResourceHelper.getColor(context, R.color.system_accent3_600), - tertiary30 = ColorResourceHelper.getColor(context, R.color.system_accent3_700), - tertiary20 = ColorResourceHelper.getColor(context, R.color.system_accent3_800), - tertiary10 = ColorResourceHelper.getColor(context, R.color.system_accent3_900), - tertiary0 = ColorResourceHelper.getColor(context, R.color.system_accent3_1000), - ) - -private object ColorResourceHelper { - @DoNotInline - fun getColor(context: Context, @ColorRes id: Int): Color { - return Color(context.resources.getColor(id, context.theme)) - } -} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt index 156656e33..dc8f3bf88 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppFragment.kt @@ -27,11 +27,11 @@ import androidx.compose.ui.platform.ComposeView import androidx.core.os.BundleCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme import com.android.permissioncontroller.role.ui.DefaultAppViewModel import com.android.permissioncontroller.role.ui.ManageRoleHolderStateLiveData import com.android.permissioncontroller.role.ui.wear.model.DefaultAppConfirmDialogViewModel import com.android.permissioncontroller.role.ui.wear.model.DefaultAppConfirmDialogViewModelFactory +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme import com.android.role.controller.model.Role import com.android.role.controller.model.Roles @@ -46,14 +46,13 @@ class WearDefaultAppFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View? { val roleName = arguments?.getString(Intent.EXTRA_ROLE_NAME) ?: "" val user = arguments?.let { BundleCompat.getParcelable(it, Intent.EXTRA_USER, UserHandle::class.java)!! - } - ?: UserHandle.SYSTEM + } ?: UserHandle.SYSTEM val activity = requireActivity() role = @@ -82,7 +81,7 @@ class WearDefaultAppFragment : Fragment() { user, role, viewModel, - confirmDialogViewModel + confirmDialogViewModel, ) ) } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListScreen.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListScreen.kt index d5b93e318..131897fb9 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppListScreen.kt @@ -29,11 +29,11 @@ import androidx.compose.ui.res.stringResource import androidx.lifecycle.LiveData import androidx.wear.compose.material.Text import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.role.ui.RoleItem +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder @Composable fun WearDefaultAppListScreen( diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt index 60cfcda47..067c5b1be 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt @@ -25,17 +25,17 @@ import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionListFooter -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControl -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlStyle -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion import com.android.permissioncontroller.role.ui.wear.model.ConfirmDialogArgs +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.DialogButtonContent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionConfirmationDialog +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionListFooter +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControl +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlStyle +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlType +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion @Composable fun WearDefaultAppScreen(helper: WearDefaultAppHelper) { diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt index b4758c88b..5244e1a63 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt @@ -31,18 +31,18 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionListFooter -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControl -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlStyle -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion import com.android.permissioncontroller.role.UserPackage import com.android.permissioncontroller.role.ui.ManageRoleHolderStateLiveData +import com.android.permissioncontroller.wear.permission.components.ScrollableScreen +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButton +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionListFooter +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControl +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlStyle +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlType +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion @Composable fun WearRequestRoleScreen( diff --git a/PermissionController/wear-permission-components/Android.bp b/PermissionController/wear-permission-components/Android.bp new file mode 100644 index 000000000..bdd783b60 --- /dev/null +++ b/PermissionController/wear-permission-components/Android.bp @@ -0,0 +1,67 @@ +// Copyright (C) 2022 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 { + default_team: "trendy_team_android_permissions", + default_applicable_licenses: ["Android-Apache-2.0"], +} + +filegroup { + name: "wear-permission-components-sources", + srcs: [ + "src/**/*.kt", + ], + visibility: ["//visibility:private"], +} + +android_library { + name: "wear-permission-components", + manifest: "AndroidManifest.xml", + sdk_version: "system_current", + min_sdk_version: "30", + target_sdk_version: "33", + srcs: [ + ":wear-permission-components-sources", + ], + resource_dirs: ["res"], + libs: [ + "androidx.annotation_annotation", + "framework-annotations-lib", + ], + static_libs: [ + "androidx.fragment_fragment", + "androidx.appcompat_appcompat", + "androidx.compose.foundation_foundation", + "androidx.compose.runtime_runtime", + "androidx.compose.runtime_runtime-livedata", + "androidx.compose.ui_ui", + "androidx.wear.compose_compose-material", + "androidx.wear.compose_compose-material3", + ], + kotlin_lang_version: "1.9", + kotlincflags: [ + "-Werror", + "-opt-in=kotlinx.coroutines.DelicateCoroutinesApi", + "-Xjvm-default=all", + ], + installable: false, + visibility: [ + "//packages/modules:__subpackages__", + ], + apex_available: [ + "//apex_available:platform", + "com.android.permission", + "com.android.healthfitness", + ], +} diff --git a/PermissionController/wear-permission-components/AndroidManifest.xml b/PermissionController/wear-permission-components/AndroidManifest.xml new file mode 100644 index 000000000..57eca6176 --- /dev/null +++ b/PermissionController/wear-permission-components/AndroidManifest.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2022 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. + --> +<manifest package="com.android.permissioncontroller.wear.permission.components"> +</manifest> diff --git a/PermissionController/res/drawable/ic_security_update_good.xml b/PermissionController/wear-permission-components/res/drawable/ic_security_update_good.xml index 59e7a67fa..59e7a67fa 100644 --- a/PermissionController/res/drawable/ic_security_update_good.xml +++ b/PermissionController/wear-permission-components/res/drawable/ic_security_update_good.xml diff --git a/PermissionController/res/values-watch/donottranslate.xml b/PermissionController/wear-permission-components/res/values/donottranslate.xml index 03038ddd1..03038ddd1 100644 --- a/PermissionController/res/values-watch/donottranslate.xml +++ b/PermissionController/wear-permission-components/res/values/donottranslate.xml diff --git a/PermissionController/wear-permission-components/res/values/overlayable.xml b/PermissionController/wear-permission-components/res/values/overlayable.xml new file mode 100644 index 000000000..94c5972f4 --- /dev/null +++ b/PermissionController/wear-permission-components/res/values/overlayable.xml @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2019 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> + <overlayable name="WearPermissionControllerStyles"> + <policy type="product|system|vendor|odm|oem"> + <!--START WEAR SPECIFIC MATERIAL3 FONT FACE TOKENS--> + <item type="string" name="wear_compose_material3_arc_small_font_family" /> + <item type="string" name="wear_compose_material3_arc_medium_font_family" /> + <item type="string" name="wear_compose_material3_arc_large_font_family" /> + + <item type="string" name="wear_compose_material3_body_extra_small_font_family" /> + <item type="string" name="wear_compose_material3_body_small_font_family" /> + <item type="string" name="wear_compose_material3_body_medium_font_family" /> + <item type="string" name="wear_compose_material3_body_large_font_family" /> + + <item type="string" name="wear_compose_material3_display_small_font_family" /> + <item type="string" name="wear_compose_material3_display_medium_font_family" /> + <item type="string" name="wear_compose_material3_display_large_font_family" /> + + <item type="string" name="wear_compose_material3_label_small_font_family" /> + <item type="string" name="wear_compose_material3_label_medium_font_family" /> + <item type="string" name="wear_compose_material3_label_large_font_family" /> + + <item type="string" name="wear_compose_material3_numeral_extra_small_font_family" /> + <item type="string" name="wear_compose_material3_numeral_small_font_family" /> + <item type="string" name="wear_compose_material3_numeral_medium_font_family" /> + <item type="string" name="wear_compose_material3_numeral_large_font_family" /> + <item type="string" name="wear_compose_material3_numeral_extra_large_font_family" /> + + <item type="string" name="wear_compose_material3_title_small_font_family" /> + <item type="string" name="wear_compose_material3_title_medium_font_family" /> + <item type="string" name="wear_compose_material3_title_large_font_family" /> + <!--END WEAR SPECIFIC MATERIAL3 FONT FACE TOKENS--> + + + <!--START WEAR SPECIFIC MATERIAL3 FONT SIZE TOKENS--> + <item type="dimen" name="wear_compose_material3_arc_small_font_size" /> + <item type="dimen" name="wear_compose_material3_arc_medium_font_size" /> + <item type="dimen" name="wear_compose_material3_arc_large_font_size" /> + + <item type="dimen" name="wear_compose_material3_body_extra_small_font_size" /> + <item type="dimen" name="wear_compose_material3_body_small_font_size" /> + <item type="dimen" name="wear_compose_material3_body_medium_font_size" /> + <item type="dimen" name="wear_compose_material3_body_large_font_size" /> + + <item type="dimen" name="wear_compose_material3_display_small_font_size" /> + <item type="dimen" name="wear_compose_material3_display_medium_font_size" /> + <item type="dimen" name="wear_compose_material3_display_large_font_size" /> + + <item type="dimen" name="wear_compose_material3_label_small_font_size" /> + <item type="dimen" name="wear_compose_material3_label_medium_font_size" /> + <item type="dimen" name="wear_compose_material3_label_large_font_size" /> + + <item type="dimen" name="wear_compose_material3_numeral_extra_small_font_size" /> + <item type="dimen" name="wear_compose_material3_numeral_small_font_size" /> + <item type="dimen" name="wear_compose_material3_numeral_medium_font_size" /> + <item type="dimen" name="wear_compose_material3_numeral_large_font_size" /> + <item type="dimen" name="wear_compose_material3_numeral_extra_large_font_size" /> + + <item type="dimen" name="wear_compose_material3_title_small_font_size" /> + <item type="dimen" name="wear_compose_material3_title_medium_font_size" /> + <item type="dimen" name="wear_compose_material3_title_large_font_size" /> + <!--END WEAR SPECIFIC MATERIAL3 FONT SIZE TOKENS--> + + <!--START WEAR SPECIFIC MATERIAL3 SHAPE TOKENS--> + <item type="dimen" name="wear_compose_material3_shape_corner_extra_small_size" /> + <item type="dimen" name="wear_compose_material3_shape_corner_small_size" /> + <item type="dimen" name="wear_compose_material3_shape_corner_medium_size" /> + <item type="dimen" name="wear_compose_material3_shape_corner_large_size" /> + <item type="dimen" name="wear_compose_material3_shape_corner_extra_large_size" /> + <!--END WEAR SPECIFIC MATERIAL3 SHAPE TOKENS--> + </policy> + </overlayable> +</resources>
\ No newline at end of file diff --git a/PermissionController/wear-permission-components/res/values/strings.xml b/PermissionController/wear-permission-components/res/values/strings.xml new file mode 100644 index 000000000..a9956ddb5 --- /dev/null +++ b/PermissionController/wear-permission-components/res/values/strings.xml @@ -0,0 +1,7 @@ +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Accessibility description indicating that a toggle control status is on. [CHAR LIMIT=NONE] --> + <string name="on">On</string> + + <!-- Accessibility description indicating that a status is off. [CHAR LIMIT=NONE] --> + <string name="off">Off</string> +</resources>
\ No newline at end of file diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/AnnotatedText.kt b/PermissionController/wear-permission-components/src/wear.permission.components/AnnotatedText.kt index 07bb88e80..4d7954c5a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/AnnotatedText.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/AnnotatedText.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements +package com.android.permissioncontroller.wear.permission.components import android.text.Spanned import android.text.style.ClickableSpan @@ -32,10 +31,14 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.style.TextDecoration import androidx.wear.compose.material.MaterialTheme -import com.android.permissioncontroller.permission.ui.wear.WearUtils.capitalize +import java.util.Locale const val CLICKABLE_SPAN_TAG = "CLICKABLE_SPAN_TAG" +fun String.capitalize(): String = replaceFirstChar { + if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() +} + @Composable fun AnnotatedText( text: CharSequence, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/CheckYourPhone.kt b/PermissionController/wear-permission-components/src/wear.permission.components/CheckYourPhone.kt index 59376b8fa..467aae4e1 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/CheckYourPhone.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/CheckYourPhone.kt @@ -13,26 +13,32 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements +package com.android.permissioncontroller.wear.permission.components import android.content.res.Configuration +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.CircularProgressIndicator +import androidx.wear.compose.material.Icon import androidx.wear.compose.material.MaterialTheme import androidx.wear.compose.material.Scaffold import androidx.wear.compose.material.Text -import com.android.permissioncontroller.R private const val TOP_PADDING_SCREEN_PERCENTAGE = 0.1248f private const val BOTTOM_PADDING_SCREEN_PERCENTAGE = 0.0624f @@ -41,16 +47,12 @@ private const val TEXT_PADDING_SCREEN_PERCENTAGE = 0.0416f enum class CheckYourPhoneState { InProgress, - Success + Success, } /** * A screen to request the user to check their paired phone to proceed. It also allows a [message] * to be displayed. - * - * <img - * src="https://media.githubusercontent.com/media/google/horologist/main/docs/auth-composables/check_your_phone_screen_code.png" - * height="120" width="120"/> */ @Composable fun CheckYourPhoneScreen( @@ -60,9 +62,7 @@ fun CheckYourPhoneScreen( message: String? = null, ) { val configuration = LocalConfiguration.current - val isLarge = configuration.isLargeScreen - val topPadding = (configuration.screenHeightDp * TOP_PADDING_SCREEN_PERCENTAGE).dp val bottomPadding = (configuration.screenHeightDp * BOTTOM_PADDING_SCREEN_PERCENTAGE).dp val sidePadding = (configuration.screenHeightDp * SIDE_PADDING_SCREEN_PERCENTAGE).dp @@ -79,7 +79,7 @@ fun CheckYourPhoneScreen( bottom = bottomPadding, start = sidePadding, end = sidePadding, - ), + ) ) { Column( modifier = Modifier.fillMaxWidth().weight(1f).padding(horizontal = textPadding), @@ -104,21 +104,53 @@ fun CheckYourPhoneScreen( } } when (state) { - CheckYourPhoneState.InProgress -> - RemoteConnectionProgressIndicator( - iconRes = R.drawable.ic_security_update_good, - Modifier.align(Alignment.CenterHorizontally) - ) - CheckYourPhoneState.Success -> - RemoteConnectionSuccess( - iconRes = R.drawable.ic_security_update_good, - Modifier.align(Alignment.CenterHorizontally) - ) + CheckYourPhoneState.InProgress -> RemoteConnectionProgressIndicator() + CheckYourPhoneState.Success -> RemoteConnectionSuccess() } } } } +@Composable +private fun RemoteConnectionProgressIndicator() { + val indicatorPadding = 8.dp + val iconSize = 48.dp + val progressBarStrokeWidth = 4.dp + Box(modifier = Modifier.size(iconSize).clip(CircleShape)) { + CircularProgressIndicator( + modifier = Modifier.size(iconSize - progressBarStrokeWidth + indicatorPadding), + strokeWidth = progressBarStrokeWidth, + ) + Icon( + painter = painterResource(R.drawable.ic_security_update_good), + contentDescription = null, + modifier = + Modifier.align(Alignment.Center) + .size(iconSize - indicatorPadding - 8.dp) + .clip(CircleShape), + ) + } +} + +@Composable +private fun RemoteConnectionSuccess() { + val indicatorPadding = 8.dp + val iconSize = 48.dp + val backgroundColor = MaterialTheme.colors.onSurface + val contentColor = MaterialTheme.colors.surface + Box(modifier = Modifier.size(iconSize).clip(CircleShape).background(backgroundColor)) { + Icon( + painter = painterResource(R.drawable.ic_security_update_good), + contentDescription = null, + tint = contentColor, + modifier = + Modifier.align(Alignment.Center) + .size(iconSize - indicatorPadding - 8.dp) + .clip(CircleShape), + ) + } +} + /** Whether the device is considered large screen for layout adjustment purposes. */ internal val Configuration.isLargeScreen: Boolean get() = screenHeightDp > 224 diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/DrawablePainter.kt b/PermissionController/wear-permission-components/src/wear.permission.components/DrawablePainter.kt index d505a0ea4..a22fb2b96 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/DrawablePainter.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/DrawablePainter.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements +package com.android.permissioncontroller.wear.permission.components import android.graphics.drawable.Animatable import android.graphics.drawable.ColorDrawable @@ -166,5 +165,6 @@ private val Drawable.intrinsicSize: Size internal object EmptyPainter : Painter() { override val intrinsicSize: Size get() = Size.Unspecified + override fun DrawScope.onDraw() {} } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt b/PermissionController/wear-permission-components/src/wear.permission.components/ScrollableScreen.kt index bfa46ae55..5e774676e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/ScrollableScreen.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements +package com.android.permissioncontroller.wear.permission.components import android.app.Activity import android.content.Context @@ -30,9 +29,9 @@ import androidx.fragment.app.FragmentActivity import androidx.wear.compose.foundation.SwipeToDismissValue import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState import androidx.wear.compose.material.SwipeToDismissBox -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionScaffold -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionScaffold +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion /** * Screen that contains a list of items defined using the [content] parameter, adds the time text @@ -99,7 +98,7 @@ fun ScrollableScreen( } } -internal fun dismiss(activity: Activity) { +fun dismiss(activity: Activity) { if (activity is FragmentActivity) { if (!activity.supportFragmentManager.popBackStackImmediate()) { activity.finish() @@ -119,7 +118,7 @@ internal fun getBackStackEntryCount(activity: Activity): Int { } } -internal fun Context.findActivity(): Activity { +fun Context.findActivity(): Activity { var context = this while (context is ContextWrapper) { if (context is Activity) return context diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/AlertDialog.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/AlertDialog.kt index a49d8822e..652adfc07 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/AlertDialog.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/AlertDialog.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable @@ -36,11 +36,11 @@ import androidx.wear.compose.material.LocalTextStyle import androidx.wear.compose.material.MaterialTheme import androidx.wear.compose.material.Text import androidx.wear.compose.material.dialog.Dialog -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnDefaults -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnState -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.rememberColumnState -import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumnDefaults +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumnState +import com.android.permissioncontroller.wear.permission.components.material2.layout.rememberColumnState +import com.android.permissioncontroller.wear.permission.components.material3.DialogButtonContent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder /** * This component is an alternative to [AlertContent], providing the following: diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Chip.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Chip.kt index 15542ec20..f0dab21ec 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Chip.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Chip.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import android.graphics.drawable.Drawable import androidx.annotation.StringRes @@ -46,7 +46,7 @@ import androidx.wear.compose.material.Icon import androidx.wear.compose.material.MaterialTheme import androidx.wear.compose.material.Text import androidx.wear.compose.material.contentColorFor -import com.android.permissioncontroller.permission.ui.wear.elements.rememberDrawablePainter +import com.android.permissioncontroller.wear.permission.components.rememberDrawablePainter /** * This component is an alternative to [Chip], providing the following: diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Icon.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Icon.kt index 3cfac7eef..dfed0b196 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Icon.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Icon.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import android.graphics.drawable.Drawable import androidx.annotation.DrawableRes @@ -29,14 +29,14 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.wear.compose.material.Icon import androidx.wear.compose.material.LocalContentAlpha import androidx.wear.compose.material.LocalContentColor -import com.android.permissioncontroller.permission.ui.wear.elements.rememberDrawablePainter +import com.android.permissioncontroller.wear.permission.components.rememberDrawablePainter /** * This component is an alternative to [Icon], providing the following: * - a convenient way of setting the icon to be mirrored in RTL mode; */ @Composable -public fun Icon( +fun Icon( imageVector: ImageVector, contentDescription: String?, modifier: Modifier = Modifier, @@ -58,7 +58,7 @@ public fun Icon( * - a convenient way of setting the icon to be mirrored in RTL mode; */ @Composable -public fun Icon( +fun Icon( @DrawableRes id: Int, contentDescription: String?, modifier: Modifier = Modifier, @@ -122,7 +122,7 @@ fun Icon( } } -public enum class IconRtlMode { +enum class IconRtlMode { Default, Mirrored, } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ListFooter.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListFooter.kt index 4f6d47faf..ac603d492 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ListFooter.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListFooter.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ListHeader.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListHeader.kt index 2d3eb0d52..7dc26179d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ListHeader.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ListHeader.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ResponsiveDialog.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ResponsiveDialog.kt index 4cb3ab615..64597e23d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ResponsiveDialog.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ResponsiveDialog.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement.spacedBy @@ -44,14 +44,14 @@ import androidx.wear.compose.material.LocalTextStyle import androidx.wear.compose.material.MaterialTheme import androidx.wear.compose.material.PositionIndicator import androidx.wear.compose.material.Scaffold -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumn -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnDefaults.responsive -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnState -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.rememberColumnState -import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder -import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertConfirmIcon -import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertDismissIcon +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumn +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumnDefaults.responsive +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumnState +import com.android.permissioncontroller.wear.permission.components.material2.layout.rememberColumnState +import com.android.permissioncontroller.wear.permission.components.material3.DialogButtonContent +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.wear.permission.components.material3.defaultAlertConfirmIcon +import com.android.permissioncontroller.wear.permission.components.material3.defaultAlertDismissIcon @Composable fun ResponsiveDialogContent( diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChip.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ToggleChip.kt index bfb5d114d..de8e0542d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChip.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/ToggleChip.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.BoxScope @@ -44,8 +43,8 @@ import androidx.wear.compose.material.ToggleChip import androidx.wear.compose.material.ToggleChipColors import androidx.wear.compose.material.ToggleChipDefaults import androidx.wear.compose.material.contentColorFor -import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType +import com.android.permissioncontroller.wear.permission.components.R +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionToggleControlType /** * This component is an alternative to [ToggleChip], providing the following: diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Wear2Scaffold.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Wear2Scaffold.kt index 866b7f012..b5ba5b71e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Wear2Scaffold.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/Wear2Scaffold.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material2 +package com.android.permissioncontroller.wear.permission.components.material2 import android.graphics.drawable.Drawable import androidx.compose.foundation.Image @@ -54,9 +53,9 @@ import androidx.wear.compose.material.TimeText import androidx.wear.compose.material.Vignette import androidx.wear.compose.material.VignettePosition import androidx.wear.compose.material.scrollAway -import com.android.permissioncontroller.permission.ui.wear.elements.AnnotatedText -import com.android.permissioncontroller.permission.ui.wear.elements.rememberDrawablePainter -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme +import com.android.permissioncontroller.wear.permission.components.AnnotatedText +import com.android.permissioncontroller.wear.permission.components.rememberDrawablePainter +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme /** * This component is wrapper on material 2 scaffold component. It helps with time text, scroll diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/layout/ScalingLazyColumnDefaults.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/layout/ScalingLazyColumnDefaults.kt index c06fdaf14..f6fe5233c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/layout/ScalingLazyColumnDefaults.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/layout/ScalingLazyColumnDefaults.kt @@ -16,7 +16,7 @@ @file:Suppress("ObjectLiteralToLambda") -package com.android.permissioncontroller.permission.ui.wear.elements.material2.layout +package com.android.permissioncontroller.wear.permission.components.material2.layout import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues @@ -33,7 +33,7 @@ import androidx.wear.compose.foundation.lazy.ScalingLazyColumnDefaults import androidx.wear.compose.foundation.lazy.ScalingLazyListAnchorType import androidx.wear.compose.foundation.lazy.ScalingParams import androidx.wear.compose.material.ChipDefaults -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnState.RotaryMode +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumnState.RotaryMode import kotlin.math.sqrt // This file's content is copied from ScalingLazyColumnDefaults.kt from Horologist (go/horologist), diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/layout/ScalingLazyColumnState.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material2/layout/ScalingLazyColumnState.kt index 0e669f6ff..c20b23aa3 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/layout/ScalingLazyColumnState.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material2/layout/ScalingLazyColumnState.kt @@ -17,7 +17,7 @@ @file:Suppress("ObjectLiteralToLambda") @file:OptIn(ExperimentalWearFoundationApi::class) -package com.android.permissioncontroller.permission.ui.wear.elements.material2.layout +package com.android.permissioncontroller.wear.permission.components.material2.layout import androidx.compose.foundation.MutatePriority import androidx.compose.foundation.gestures.FlingBehavior @@ -42,8 +42,8 @@ import androidx.wear.compose.foundation.lazy.ScalingLazyListAnchorType import androidx.wear.compose.foundation.lazy.ScalingLazyListScope import androidx.wear.compose.foundation.lazy.ScalingLazyListState import androidx.wear.compose.foundation.lazy.ScalingParams -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnDefaults.responsiveScalingParams -import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnState.RotaryMode +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumnDefaults.responsiveScalingParams +import com.android.permissioncontroller.wear.permission.components.material2.layout.ScalingLazyColumnState.RotaryMode // This file is a copy of ScalingLazyColumnState.kt from Horologist (go/horologist), // remove it once after wear compose supports large screen dialogs. diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButton.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButton.kt index 9a89e0809..1a7524e7c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButton.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButton.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.PaddingValues @@ -33,9 +33,9 @@ import androidx.wear.compose.material3.ButtonDefaults import androidx.wear.compose.material3.LocalTextConfiguration import androidx.wear.compose.material3.LocalTextStyle import androidx.wear.compose.material3.Text -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.material2.Chip +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion /** * This component is wrapper on material Button component diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButtonStyle.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButtonStyle.kt index 36d3f9f33..114bcd4bc 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButtonStyle.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionButtonStyle.kt @@ -13,20 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.runtime.Composable import androidx.wear.compose.material.ChipColors import androidx.wear.compose.material.ChipDefaults import androidx.wear.compose.material3.ButtonColors import androidx.wear.compose.material3.ButtonDefaults -import com.android.permissioncontroller.permission.ui.wear.elements.material2.chipDefaultColors -import com.android.permissioncontroller.permission.ui.wear.elements.material2.chipDisabledColors -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle.DisabledLike -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle.Primary -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle.Secondary -import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle.Transparent +import com.android.permissioncontroller.wear.permission.components.material2.chipDefaultColors +import com.android.permissioncontroller.wear.permission.components.material2.chipDisabledColors +import com.android.permissioncontroller.wear.permission.components.material3.WearPermissionButtonStyle.DisabledLike +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 /** * This component is wrapper on material control colors, It applies the right colors based material diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionConfirmationDialog.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionConfirmationDialog.kt index 0e1bf1fbe..4ef6e8a72 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionConfirmationDialog.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionConfirmationDialog.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.size @@ -25,8 +25,8 @@ import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState import androidx.wear.compose.material3.AlertDialog as Material3AlertDialog import androidx.wear.compose.material3.AlertDialogDefaults import androidx.wear.compose.material3.Text -import com.android.permissioncontroller.permission.ui.wear.elements.material2.AlertDialog -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.material2.AlertDialog +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion data class DialogButtonContent( val icon: WearPermissionIconBuilder? = null, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionIconBuilder.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionIconBuilder.kt index 52674b50d..e5e51af66 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionIconBuilder.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionIconBuilder.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import android.graphics.drawable.Drawable import androidx.compose.foundation.layout.size @@ -29,7 +29,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.wear.compose.material3.Icon import androidx.wear.compose.material3.IconButtonDefaults -import com.android.permissioncontroller.permission.ui.wear.elements.rememberDrawablePainter +import com.android.permissioncontroller.wear.permission.components.rememberDrawablePainter /** * This class simplifies the construction of icons with various attributes like resource type, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionListFooter.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionListFooter.kt index 33f9cb41f..90ee09bab 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionListFooter.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionListFooter.kt @@ -13,17 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.unit.dp import androidx.wear.compose.material3.ButtonDefaults -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ListFooter -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.material2.ListFooter +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion /** This component is creates a transparent styled button to use as a list footer. */ @Composable diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionListSubHeader.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionListSubHeader.kt index ddcd93326..2ed6e532f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionListSubHeader.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionListSubHeader.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding @@ -23,9 +23,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.unit.dp import androidx.wear.compose.material3.ListSubHeader -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ListSubheader -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.material2.ListSubheader +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion /* This component is simplified wrapper over ListSubHeader with quick padding adjustments diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffold.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt index 35bdf583e..c1077d645 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffold.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import android.graphics.drawable.Drawable import androidx.compose.foundation.Image @@ -53,14 +53,14 @@ import androidx.wear.compose.material3.ScrollIndicator import androidx.wear.compose.material3.Text import androidx.wear.compose.material3.TimeText import androidx.wear.compose.material3.lazy.scrollTransform -import com.android.permissioncontroller.permission.ui.wear.elements.AnnotatedText -import com.android.permissioncontroller.permission.ui.wear.elements.ListScopeWrapper -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Wear2Scaffold -import com.android.permissioncontroller.permission.ui.wear.elements.rememberDrawablePainter -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion.MATERIAL2_5 -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme +import com.android.permissioncontroller.wear.permission.components.AnnotatedText +import com.android.permissioncontroller.wear.permission.components.ListScopeWrapper +import com.android.permissioncontroller.wear.permission.components.material2.Wear2Scaffold +import com.android.permissioncontroller.wear.permission.components.rememberDrawablePainter +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion.MATERIAL2_5 +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionTheme private class TransformingScopeConverter(private val scope: TransformingLazyColumnScope) : ListScopeWrapper { @@ -81,7 +81,7 @@ private class ScalingScopeConverter(private val scope: ScalingLazyListScope) : L * indicator and standard list elements like title, icon and subtitle. */ @Composable -internal fun WearPermissionScaffold( +fun WearPermissionScaffold( materialUIVersion: WearPermissionMaterialUIVersion = ResourceHelper.materialUIVersionInSettings, showTimeText: Boolean, title: String?, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffoldPaddingDefaults.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt index 14eaec4bf..93a25279c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffoldPaddingDefaults.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffoldPaddingDefaults.kt @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.foundation.layout.PaddingValues import androidx.compose.ui.unit.dp diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControl.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionToggleControl.kt index d37d17a84..1dfb90682 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControl.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionToggleControl.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.RowScope @@ -28,10 +28,10 @@ import androidx.wear.compose.material3.LocalTextConfiguration import androidx.wear.compose.material3.RadioButton import androidx.wear.compose.material3.SwitchButton import androidx.wear.compose.material3.Text -import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChip -import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +import com.android.permissioncontroller.wear.permission.components.R +import com.android.permissioncontroller.wear.permission.components.material2.ToggleChip +import com.android.permissioncontroller.wear.permission.components.theme.ResourceHelper +import com.android.permissioncontroller.wear.permission.components.theme.WearPermissionMaterialUIVersion /** Defines various toggle control types. */ enum class WearPermissionToggleControlType { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControlStyle.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionToggleControlStyle.kt index 048a06861..26a0ea0ef 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControlStyle.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionToggleControlStyle.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.elements.material3 +package com.android.permissioncontroller.wear.permission.components.material3 import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color @@ -25,8 +25,8 @@ import androidx.wear.compose.material3.RadioButtonColors import androidx.wear.compose.material3.RadioButtonDefaults.radioButtonColors import androidx.wear.compose.material3.SwitchButtonColors import androidx.wear.compose.material3.SwitchButtonDefaults.switchButtonColors -import com.android.permissioncontroller.permission.ui.wear.elements.material2.toggleChipBackgroundColors -import com.android.permissioncontroller.permission.ui.wear.elements.material2.toggleChipDisabledColors +import com.android.permissioncontroller.wear.permission.components.material2.toggleChipBackgroundColors +import com.android.permissioncontroller.wear.permission.components.material2.toggleChipDisabledColors /** * Defines toggle control styles, It helps in setting the right colors scheme to a toggle control. diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/ResourceHelper.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/ResourceHelper.kt index 2a40a625f..010d66a30 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/ResourceHelper.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/ResourceHelper.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme import android.content.Context import android.os.SystemProperties @@ -23,7 +23,7 @@ import androidx.annotation.DoNotInline import androidx.annotation.StringRes import androidx.compose.ui.graphics.Color -internal object ResourceHelper { +object ResourceHelper { private const val MATERIAL3_ENABLED_SYSPROP = "persist.cw_build.bluechip.enabled" @@ -61,7 +61,7 @@ internal object ResourceHelper { return try { val colorInt = context.resources.getColor(id, context.theme) Color(colorInt) - } catch (e: Exception) { + } catch (_: Exception) { null } } @@ -70,7 +70,7 @@ internal object ResourceHelper { fun getString(context: Context, @StringRes id: Int): String? { return try { context.resources.getString(id) - } catch (e: Exception) { + } catch (_: Exception) { null } } @@ -79,7 +79,7 @@ internal object ResourceHelper { fun getDimen(context: Context, @DimenRes id: Int): Float? { return try { context.resources.getDimension(id) / context.resources.displayMetrics.density - } catch (e: Exception) { + } catch (_: Exception) { null } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3ColorScheme.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3ColorScheme.kt index 7ac6c8114..41e8fd975 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3ColorScheme.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3ColorScheme.kt @@ -13,13 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme import android.content.Context import android.os.Build import androidx.annotation.ColorRes import androidx.annotation.RequiresApi import androidx.compose.ui.graphics.Color +import androidx.wear.compose.material.Colors import androidx.wear.compose.material3.ColorScheme /** @@ -29,6 +30,24 @@ import androidx.wear.compose.material3.ColorScheme */ internal object WearComposeMaterial3ColorScheme { + fun legacyColorScheme(): ColorScheme { + return Colors().run { + ColorScheme( + background = background, + onBackground = onBackground, + onPrimaryContainer = primary, + primaryDim = primaryVariant, + onPrimary = onPrimary, + tertiary = secondary, // Best-Fit Mapping: Refer WearMaterialBridgedTheme. + tertiaryDim = secondaryVariant, + onTertiary = onSecondary, + surfaceContainer = surface, + onSurface = onSurface, + onSurfaceVariant = onSurfaceVariant, + ) + } + } + @RequiresApi(Build.VERSION_CODES.S) fun tonalColorScheme(context: Context): ColorScheme { val tonalPalette = dynamicTonalPalette(context) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3Shapes.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Shapes.kt index f81022842..89851d60e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3Shapes.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Shapes.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme import android.content.Context import androidx.annotation.DimenRes @@ -21,7 +21,7 @@ import androidx.compose.foundation.shape.CornerBasedShape import androidx.compose.foundation.shape.CornerSize import androidx.compose.ui.unit.dp import androidx.wear.compose.material3.Shapes -import com.android.permissioncontroller.R +import com.android.permissioncontroller.wear.permission.components.R // TODO(b/324928718): Use system defined symbols. internal object WearComposeMaterial3Shapes { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3TypeScaleTokens.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3TypeScaleTokens.kt index a4ec9ee1d..df5057472 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3TypeScaleTokens.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3TypeScaleTokens.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme /* * These values are retrieved from https://carbon.googleplex.com/wear-m3/pages and diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3Typography.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Typography.kt index ceae526a7..e44a24981 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3Typography.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Typography.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme import android.content.Context import androidx.annotation.DimenRes @@ -25,7 +25,7 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontVariation import androidx.compose.ui.unit.sp import androidx.wear.compose.material3.Typography -import com.android.permissioncontroller.R +import com.android.permissioncontroller.wear.permission.components.R internal object WearComposeMaterial3Typography { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3VariableFontTokens.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3VariableFontTokens.kt index 1b42a3b05..644a1b754 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearComposeMaterial3VariableFontTokens.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3VariableFontTokens.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme import androidx.compose.ui.text.font.FontVariation diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearMaterialBridgedLegacyTheme.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearMaterialBridgedLegacyTheme.kt index 160dc2e93..51ae16477 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearMaterialBridgedLegacyTheme.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearMaterialBridgedLegacyTheme.kt @@ -13,10 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme -import android.os.Build -import androidx.annotation.RequiresApi import androidx.compose.ui.unit.sp import androidx.wear.compose.material.Colors import androidx.wear.compose.material.Shapes @@ -29,10 +27,8 @@ import androidx.wear.compose.material.Typography * However to avoid maintaining two sets of resources for overlays, this class construct 2.5 theme * from 3.0 */ -@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) internal class WearMaterialBridgedLegacyTheme private constructor(newTheme: WearOverlayableMaterial3Theme) { - val colors = newTheme.colorScheme.run { Colors( diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearOverlayableMaterial3Theme.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearOverlayableMaterial3Theme.kt index 8aeb5f74d..f6bf56f47 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/theme/WearOverlayableMaterial3Theme.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearOverlayableMaterial3Theme.kt @@ -13,11 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.wear.theme +package com.android.permissioncontroller.wear.permission.components.theme import android.content.Context import android.os.Build -import androidx.annotation.RequiresApi /** * Theme wrapper providing Material 3 styling while maintaining compatibility with Runtime Resource @@ -26,13 +25,18 @@ import androidx.annotation.RequiresApi * Uses the tonal palette from the previous Material Design version until dynamic color tokens are * available in SDK 36. */ -@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) internal class WearOverlayableMaterial3Theme(context: Context) { val colorScheme = - if (Build.VERSION.SDK_INT >= 36) { - WearComposeMaterial3ColorScheme.dynamicColorScheme(context) - } else { - WearComposeMaterial3ColorScheme.tonalColorScheme(context) + when { + Build.VERSION.SDK_INT >= 36 -> { + WearComposeMaterial3ColorScheme.dynamicColorScheme(context) + } + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + WearComposeMaterial3ColorScheme.tonalColorScheme(context) + } + else -> { + WearComposeMaterial3ColorScheme.legacyColorScheme() + } } val typography = WearComposeMaterial3Typography.dynamicTypography(context) diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearPermissionTheme.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearPermissionTheme.kt new file mode 100644 index 000000000..b1c87108c --- /dev/null +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearPermissionTheme.kt @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2024 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.wear.permission.components.theme + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import androidx.wear.compose.material.MaterialTheme +import androidx.wear.compose.material3.MaterialTheme as Material3Theme + +/** This enum is used to specify the material version used for a specific screen */ +enum class WearPermissionMaterialUIVersion { + MATERIAL2_5, + MATERIAL3, +} + +/** An overlay-able compose theme supporting both material2.5 and 3. */ +@Composable +fun WearPermissionTheme( + version: WearPermissionMaterialUIVersion = ResourceHelper.materialUIVersionInSettings, + content: @Composable () -> Unit, +) { + WearOverlayableMaterial3Theme(LocalContext.current).run { + when (version) { + WearPermissionMaterialUIVersion.MATERIAL3 -> + Material3Theme( + colorScheme = colorScheme, + typography = typography, + shapes = shapes, + content = content, + ) + // Material2_5 UI controls are still being used in the screen, + // To avoid having two set of overlay resources, we will use material3 overlay resources + // to + // support material2_5 UI controls as well. + WearPermissionMaterialUIVersion.MATERIAL2_5 -> + WearMaterialBridgedLegacyTheme.createFrom(this).run { + MaterialTheme( + colors = colors, + typography = typography, + shapes = shapes, + content = content, + ) + } + } + } +} diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearPermissionTonalPalette.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearPermissionTonalPalette.kt new file mode 100644 index 000000000..72aa3e487 --- /dev/null +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearPermissionTonalPalette.kt @@ -0,0 +1,216 @@ +@file:Suppress("unused") + +/* + * Copyright (C) 2024 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.wear.permission.components.theme + +import android.content.Context +import android.os.Build +import androidx.annotation.ColorRes +import androidx.annotation.DoNotInline +import androidx.annotation.RequiresApi +import androidx.compose.ui.graphics.Color + +/** + * Tonal Palette structure in Material. + * + * A tonal palette is comprised of 5 tonal ranges. Each tonal range includes the 13 stops, or tonal + * swatches. + * + * Tonal range names are: + * - Neutral (N) + * - Neutral variant (NV) + * - Primary (P) + * - Secondary (S) + * - Tertiary (T) + */ +internal class WearPermissionTonalPalette( + // The neutral tonal range. + val neutral100: Color, + val neutral99: Color, + val neutral95: Color, + val neutral90: Color, + val neutral80: Color, + val neutral70: Color, + val neutral60: Color, + val neutral50: Color, + val neutral40: Color, + val neutral30: Color, + val neutral20: Color, + val neutral10: Color, + val neutral0: Color, + + // The neutral variant tonal range, sometimes called "neutral 2" + val neutralVariant100: Color, + val neutralVariant99: Color, + val neutralVariant95: Color, + val neutralVariant90: Color, + val neutralVariant80: Color, + val neutralVariant70: Color, + val neutralVariant60: Color, + val neutralVariant50: Color, + val neutralVariant40: Color, + val neutralVariant30: Color, + val neutralVariant20: Color, + val neutralVariant10: Color, + val neutralVariant0: Color, + + // The primary tonal range, also known as accent 1 + val primary100: Color, + val primary99: Color, + val primary95: Color, + val primary90: Color, + val primary80: Color, + val primary70: Color, + val primary60: Color, + val primary50: Color, + val primary40: Color, + val primary30: Color, + val primary20: Color, + val primary10: Color, + val primary0: Color, + + // The Secondary tonal range, also know as accent 2 + val secondary100: Color, + val secondary99: Color, + val secondary95: Color, + val secondary90: Color, + val secondary80: Color, + val secondary70: Color, + val secondary60: Color, + val secondary50: Color, + val secondary40: Color, + val secondary30: Color, + val secondary20: Color, + val secondary10: Color, + val secondary0: Color, + + // The tertiary tonal range, also known as accent 3 + val tertiary100: Color, + val tertiary99: Color, + val tertiary95: Color, + val tertiary90: Color, + val tertiary80: Color, + val tertiary70: Color, + val tertiary60: Color, + val tertiary50: Color, + val tertiary40: Color, + val tertiary30: Color, + val tertiary20: Color, + val tertiary10: Color, + val tertiary0: Color, +) + +/** Dynamic colors for wear compose material to support resource overlay. */ +@RequiresApi(Build.VERSION_CODES.S) +internal fun dynamicTonalPalette(context: Context) = + WearPermissionTonalPalette( + // The neutral tonal range from the generated dynamic color palette. + neutral100 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_0), + neutral99 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_10), + neutral95 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_50), + neutral90 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_100), + neutral80 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_200), + neutral70 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_300), + neutral60 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_400), + neutral50 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_500), + neutral40 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_600), + neutral30 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_700), + neutral20 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_800), + neutral10 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_900), + neutral0 = ColorResourceHelper.getColor(context, android.R.color.system_neutral1_1000), + + // The neutral variant tonal range, sometimes called "neutral 2", from the + // generated dynamic color palette. + neutralVariant100 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_0), + neutralVariant99 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_10), + neutralVariant95 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_50), + neutralVariant90 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_100), + neutralVariant80 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_200), + neutralVariant70 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_300), + neutralVariant60 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_400), + neutralVariant50 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_500), + neutralVariant40 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_600), + neutralVariant30 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_700), + neutralVariant20 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_800), + neutralVariant10 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_900), + neutralVariant0 = + ColorResourceHelper.getColor(context, android.R.color.system_neutral2_1000), + + // The primary tonal range from the generated dynamic color palette. + primary100 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_0), + primary99 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_10), + primary95 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_50), + primary90 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_100), + primary80 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_200), + primary70 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_300), + primary60 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_400), + primary50 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_500), + primary40 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_600), + primary30 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_700), + primary20 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_800), + primary10 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_900), + primary0 = ColorResourceHelper.getColor(context, android.R.color.system_accent1_1000), + + // The secondary tonal range from the generated dynamic color palette. + secondary100 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_0), + secondary99 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_10), + secondary95 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_50), + secondary90 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_100), + secondary80 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_200), + secondary70 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_300), + secondary60 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_400), + secondary50 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_500), + secondary40 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_600), + secondary30 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_700), + secondary20 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_800), + secondary10 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_900), + secondary0 = ColorResourceHelper.getColor(context, android.R.color.system_accent2_1000), + + // The tertiary tonal range from the generated dynamic color palette. + tertiary100 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_0), + tertiary99 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_10), + tertiary95 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_50), + tertiary90 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_100), + tertiary80 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_200), + tertiary70 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_300), + tertiary60 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_400), + tertiary50 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_500), + tertiary40 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_600), + tertiary30 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_700), + tertiary20 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_800), + tertiary10 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_900), + tertiary0 = ColorResourceHelper.getColor(context, android.R.color.system_accent3_1000), + ) + +private object ColorResourceHelper { + @DoNotInline + fun getColor(context: Context, @ColorRes id: Int): Color { + return Color(context.resources.getColor(id, context.theme)) + } +} |