diff options
11 files changed, 69 insertions, 37 deletions
diff --git a/PermissionController/jarjar-rules.txt b/PermissionController/jarjar-rules.txt index 5ecb0241f..ceac6c3a7 100644 --- a/PermissionController/jarjar-rules.txt +++ b/PermissionController/jarjar-rules.txt @@ -26,6 +26,10 @@ rule android.os.*FeatureFlags* com.android.permissioncontroller.jarjar.@0 rule android.os.FeatureFlags* com.android.permissioncontroller.jarjar.@0 rule android.os.FeatureFlags com.android.permissioncontroller.jarjar.@0 rule android.os.Flags com.android.permissioncontroller.jarjar.@0 +rule android.xr.*FeatureFlags* com.android.permissioncontroller.jarjar.@0 +rule android.xr.FeatureFlags* com.android.permissioncontroller.jarjar.@0 +rule android.xr.FeatureFlags com.android.permissioncontroller.jarjar.@0 +rule android.xr.Flags com.android.permissioncontroller.jarjar.@0 rule com.android.permission.flags.*FeatureFlags* com.android.permissioncontroller.jarjar.@0 rule com.android.permission.flags.FeatureFlags* com.android.permissioncontroller.jarjar.@0 rule com.android.permission.flags.FeatureFlags com.android.permissioncontroller.jarjar.@0 diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java index 1297bc4c2..47f9fd591 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java @@ -81,6 +81,7 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment { new CollapsableGroupCardHelper(); private PreferenceGroup mIssuesGroup; private PreferenceGroup mEntriesGroup; + @Nullable private PreferenceGroup mPrivacyEntriesGroup; private PreferenceGroup mStaticEntriesGroup; private boolean mIsQuickSettingsFragment; @@ -263,12 +264,17 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment { if (SdkLevel.isAtLeastV() && group != null && Objects.equals(group.getId(), PRIVACY_SOURCES_GROUP_ID)) { - // Add an extra header before the privacy sources - PreferenceCategory category = new ComparablePreferenceCategory(context); - SafetyCenterResourcesApk safetyCenterResourcesApk = - new SafetyCenterResourcesApk(requireContext()); - category.setTitle(safetyCenterResourcesApk.getStringByName("privacy_title")); - mEntriesGroup.addPreference(category); + // Add a special group for the privacy sources + mPrivacyEntriesGroup = new ComparablePreferenceCategory(context); + mPrivacyEntriesGroup.setTitle( + new SafetyCenterResourcesApk(requireContext()) + .getStringByName("privacy_title")); + mEntriesGroup.addPreference(mPrivacyEntriesGroup); + + mPrivacyEntriesGroup.addPreference( + new SafetyHomepageEntryPreference( + context, group, getSafetyCenterSessionId())); + continue; } if (SafetyCenterUiFlags.getShowSubpages() && group != null) { @@ -327,10 +333,14 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment { private void updateStaticSafetyEntries(Context context, SafetyCenterData data) { mStaticEntriesGroup.removeAll(); - for (SafetyCenterStaticEntryGroup group : data.getStaticEntryGroups()) { - if (group.getTitle().toString().isEmpty()) { - // Interpret an empty title as signal to not create a titled category - addStaticEntriesTo(context, data, mStaticEntriesGroup, group.getStaticEntries()); + List<SafetyCenterStaticEntryGroup> staticEntryGroups = data.getStaticEntryGroups(); + for (int i = 0, size = staticEntryGroups.size(); i < size; i++) { + SafetyCenterStaticEntryGroup group = staticEntryGroups.get(i); + + if (i == 0 && group.getTitle().toString().isEmpty() && mPrivacyEntriesGroup != null) { + // Interpret an empty title for the first group as signal to extend the privacy + // category. + addStaticEntriesTo(context, data, mPrivacyEntriesGroup, group.getStaticEntries()); } else { PreferenceCategory category = new ComparablePreferenceCategory(context); category.setTitle(group.getTitle()); diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PermissionStorageTimeChangeReceiverTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PermissionStorageTimeChangeReceiverTest.kt index 2ae4b0585..5612b7731 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PermissionStorageTimeChangeReceiverTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PermissionStorageTimeChangeReceiverTest.kt @@ -49,7 +49,7 @@ import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.spy import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.mockito.MockitoSession @@ -125,7 +125,7 @@ class PermissionStorageTimeChangeReceiverTest { receiver.onReceive(context, Intent(Intent.ACTION_TIME_CHANGED)) verify(receiver, never()).onTimeChanged(anyLong()) - verifyZeroInteractions(editor) + verifyNoMoreInteractions(editor) } @Test @@ -133,7 +133,7 @@ class PermissionStorageTimeChangeReceiverTest { receiver.onReceive(context, Intent(Intent.ACTION_MANAGE_PERMISSIONS)) verify(receiver, never()).onTimeChanged(anyLong()) - verifyZeroInteractions(editor) + verifyNoMoreInteractions(editor) } @Test diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PersistedStoragePackageUninstalledReceiverTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PersistedStoragePackageUninstalledReceiverTest.kt index baa848960..4b89d5141 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PersistedStoragePackageUninstalledReceiverTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/service/PersistedStoragePackageUninstalledReceiverTest.kt @@ -40,7 +40,7 @@ import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.spy -import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.mockito.MockitoSession @@ -102,7 +102,7 @@ class PersistedStoragePackageUninstalledReceiverTest { receiver.onReceive(context, intent) - verifyZeroInteractions(permissionEventStorage) + verifyNoMoreInteractions(permissionEventStorage) } @Test diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/AppDataSharingUpdatesPrivacySourceTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/AppDataSharingUpdatesPrivacySourceTest.kt index d09b5093f..731022cb5 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/AppDataSharingUpdatesPrivacySourceTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/AppDataSharingUpdatesPrivacySourceTest.kt @@ -55,7 +55,7 @@ import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.eq import org.mockito.Mock import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations import org.mockito.MockitoSession @@ -102,14 +102,14 @@ class AppDataSharingUpdatesPrivacySourceTest { fun safetyCenterEnabledChanged_enabled_doesNothing() { appDataSharingUpdatesPrivacySource.safetyCenterEnabledChanged(context, true) - verifyZeroInteractions(mockSafetyCenterManager) + verifyNoMoreInteractions(mockSafetyCenterManager) } @Test fun safetyCenterEnabledChanged_disabled_doesNothing() { appDataSharingUpdatesPrivacySource.safetyCenterEnabledChanged(context, false) - verifyZeroInteractions(mockSafetyCenterManager) + verifyNoMoreInteractions(mockSafetyCenterManager) } @Test diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt index cc3b096a8..cac60e1a2 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/NotificationListenerPrivacySourceTest.kt @@ -55,7 +55,7 @@ import org.mockito.ArgumentMatchers.eq import org.mockito.Mock import org.mockito.Mockito.never import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations import org.mockito.MockitoSession @@ -209,7 +209,7 @@ class NotificationListenerPrivacySourceTest { privacySource.safetyCenterEnabledChanged(context, false) - verifyZeroInteractions(mockSafetyCenterManager) + verifyNoMoreInteractions(mockSafetyCenterManager) } @Test @@ -281,7 +281,7 @@ class NotificationListenerPrivacySourceTest { SafetyCenterReceiver.RefreshEvent.UNKNOWN ) - verifyZeroInteractions(mockSafetyCenterManager) + verifyNoMoreInteractions(mockSafetyCenterManager) } private fun setNotificationListenerCheckEnabled(enabled: Boolean) { diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/SafetyCenterReceiverTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/SafetyCenterReceiverTest.kt index a0199979d..2c166f24b 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/SafetyCenterReceiverTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/SafetyCenterReceiverTest.kt @@ -55,7 +55,7 @@ import org.mockito.ArgumentMatchers.eq import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations import org.mockito.MockitoSession @@ -199,8 +199,8 @@ class SafetyCenterReceiverTest { safetyCenterReceiver.onReceive(application, intent) advanceUntilIdle() - verifyZeroInteractions(mockPrivacySource) - verifyZeroInteractions(mockPrivacySource2) + verifyNoMoreInteractions(mockPrivacySource) + verifyNoMoreInteractions(mockPrivacySource2) } @Test @@ -214,7 +214,7 @@ class SafetyCenterReceiverTest { verify(mockPrivacySource) .rescanAndPushSafetyCenterData(application, intent, EVENT_REFRESH_REQUESTED) - verifyZeroInteractions(mockPrivacySource2) + verifyNoMoreInteractions(mockPrivacySource2) } @Test @@ -225,8 +225,8 @@ class SafetyCenterReceiverTest { safetyCenterReceiver.onReceive(application, intent) advanceUntilIdle() - verifyZeroInteractions(mockPrivacySource) - verifyZeroInteractions(mockPrivacySource2) + verifyNoMoreInteractions(mockPrivacySource) + verifyNoMoreInteractions(mockPrivacySource2) } @Test @@ -238,7 +238,7 @@ class SafetyCenterReceiverTest { safetyCenterReceiver.onReceive(application, intent) advanceUntilIdle() - verifyZeroInteractions(mockPrivacySource) - verifyZeroInteractions(mockPrivacySource2) + verifyNoMoreInteractions(mockPrivacySource) + verifyNoMoreInteractions(mockPrivacySource2) } } diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/WorkPolicyInfoTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/WorkPolicyInfoTest.kt index 38baee3ed..e2f1443e3 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/WorkPolicyInfoTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/privacysources/WorkPolicyInfoTest.kt @@ -47,7 +47,7 @@ import org.mockito.ArgumentMatchers.eq import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations import org.mockito.MockitoSession @@ -169,7 +169,7 @@ class WorkPolicyInfoTest { fun safetyCenterEnabledChanged_safetyCenterDisabled() { workPolicyInfo.safetyCenterEnabledChanged(context, false) - verifyZeroInteractions(mockSafetyCenterManager) + verifyNoMoreInteractions(mockSafetyCenterManager) } @Test @@ -196,7 +196,7 @@ class WorkPolicyInfoTest { workPolicyInfo.safetyCenterEnabledChanged(context, false) - verifyZeroInteractions(mockSafetyCenterManager) + verifyNoMoreInteractions(mockSafetyCenterManager) } @Test diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt index 4d206a2f4..396ad41df 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt @@ -46,7 +46,7 @@ import org.mockito.Mockito.doNothing import org.mockito.Mockito.mock import org.mockito.Mockito.times import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyZeroInteractions +import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations import org.mockito.MockitoSession @@ -121,14 +121,14 @@ class SafetyLabelChangesJobServiceTest { receiver.onReceive(application, Intent(Intent.ACTION_BOOT_COMPLETED)) - verifyZeroInteractions(mockJobScheduler) + verifyNoMoreInteractions(mockJobScheduler) } @Test fun onReceiveInvalidIntentAction_jobNotScheduled() { receiver.onReceive(application, Intent(Intent.ACTION_DEFAULT)) - verifyZeroInteractions(mockJobScheduler) + verifyNoMoreInteractions(mockJobScheduler) } @Test diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt index 296e45e79..208d3d6ec 100644 --- a/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/material3/WearPermissionScaffold.kt @@ -27,6 +27,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredHeightIn import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter @@ -59,7 +60,6 @@ import androidx.wear.compose.material3.ScreenScaffold 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.wear.permission.components.AnnotatedText import com.android.permissioncontroller.wear.permission.components.ListScopeWrapper import com.android.permissioncontroller.wear.permission.components.material2.Wear2Scaffold @@ -73,7 +73,7 @@ private class TransformingScopeConverter(private val scope: TransformingLazyColu ListScopeWrapper { override fun item(key: Any?, contentType: Any?, content: @Composable () -> Unit) { // TODO:https://buganizer.corp.google.com/issues/389093588. - scope.item { Box(modifier = Modifier.scrollTransform(this)) { content() } } + scope.item { content() } } override fun items( @@ -194,6 +194,11 @@ private fun WearPermissionScaffoldInternal( val scalingListState = rememberScalingLazyListState() val transformingLazyColumnState = rememberTransformingLazyColumnState() + LaunchedEffect(title, subtitle) { + // When the title/subtitle changes go to the top. Ex: A chain of permission requests. + scalingListState.scrollToItem(index = 0) + transformingLazyColumnState.scrollToItem(index = 0) + } val listState = if (asScalingList) scalingListState else transformingLazyColumnState val scrollInfoProvider = if (asScalingList) ScrollInfoProvider(scalingListState) diff --git a/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Typography.kt b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Typography.kt index e44a24981..c85381c1b 100644 --- a/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Typography.kt +++ b/PermissionController/wear-permission-components/src/wear.permission.components/theme/WearComposeMaterial3Typography.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontVariation import androidx.compose.ui.unit.sp +import androidx.wear.compose.foundation.CurvedTextStyle import androidx.wear.compose.material3.Typography import com.android.permissioncontroller.wear.permission.components.R @@ -50,6 +51,18 @@ internal object WearComposeMaterial3Typography { return FontFamily(font) } + private fun CurvedTextStyle.updatedTextStyle( + context: Context, + @StringRes fontRes: Int, + variationSettings: FontVariation.Settings? = null, + @DimenRes fontSizeRes: Int, + ): CurvedTextStyle { + val fontFamily = + fontFamily(context = context, id = fontRes, variationSettings = variationSettings) + val fontSize = ResourceHelper.getDimen(context = context, id = fontSizeRes)?.sp ?: fontSize + return copy(fontFamily = fontFamily, fontSize = fontSize) + } + private fun TextStyle.updatedTextStyle( context: Context, @StringRes fontRes: Int, |