Loading packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +7 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ import android.hardware.display.DisplayManager; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.input.InputManager; import android.location.LocationManager; import android.media.AudioManager; import android.media.IAudioService; import android.media.MediaRouter2Manager; Loading Loading @@ -687,6 +688,12 @@ public class FrameworkServicesModule { return pm; } @Provides @Singleton static LocationManager provideLocationManager(Context context) { return context.getSystemService(LocationManager.class); } @Provides @Singleton static ClipboardManager provideClipboardManager(Context context) { Loading packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogController.kt +10 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.location.LocationManager import android.os.UserHandle import android.permission.PermissionGroupUsage import android.permission.PermissionManager Loading Loading @@ -62,6 +63,7 @@ private val defaultDialogProvider = object : PrivacyDialogController.DialogProvi class PrivacyDialogController( private val permissionManager: PermissionManager, private val packageManager: PackageManager, private val locationManager: LocationManager, private val privacyItemController: PrivacyItemController, private val userTracker: UserTracker, private val activityStarter: ActivityStarter, Loading @@ -78,6 +80,7 @@ class PrivacyDialogController( constructor( permissionManager: PermissionManager, packageManager: PackageManager, locationManager: LocationManager, privacyItemController: PrivacyItemController, userTracker: UserTracker, activityStarter: ActivityStarter, Loading @@ -90,6 +93,7 @@ class PrivacyDialogController( ) : this( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -147,15 +151,17 @@ class PrivacyDialogController( @WorkerThread private fun getManagePermissionIntent( context: Context, packageName: String, userId: Int, permGroupName: CharSequence, attributionTag: CharSequence?, isAttributionSupported: Boolean ): Intent { ): Intent { lateinit var intent: Intent if (attributionTag != null && isAttributionSupported) { // We should only limit this intent to location provider if (attributionTag != null && isAttributionSupported && locationManager.isProviderPackage(null, packageName, attributionTag.toString())) { intent = Intent(Intent.ACTION_MANAGE_PERMISSION_USAGE) intent.setPackage(packageName) intent.putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, permGroupName.toString()) Loading Loading @@ -230,6 +236,7 @@ class PrivacyDialogController( it.isPhoneCall, it.permissionGroupName, getManagePermissionIntent( context, it.packageName, userId, it.permissionGroupName, Loading packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt +12 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.location.LocationManager import android.os.UserHandle import android.permission.PermissionGroupUsage import android.permission.PermissionManager Loading Loading @@ -65,6 +66,7 @@ private val defaultDialogProvider = class PrivacyDialogControllerV2( private val permissionManager: PermissionManager, private val packageManager: PackageManager, private val locationManager: LocationManager, private val privacyItemController: PrivacyItemController, private val userTracker: UserTracker, private val activityStarter: ActivityStarter, Loading @@ -82,6 +84,7 @@ class PrivacyDialogControllerV2( constructor( permissionManager: PermissionManager, packageManager: PackageManager, locationManager: LocationManager, privacyItemController: PrivacyItemController, userTracker: UserTracker, activityStarter: ActivityStarter, Loading @@ -95,6 +98,7 @@ class PrivacyDialogControllerV2( ) : this( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -166,12 +170,18 @@ class PrivacyDialogControllerV2( @WorkerThread private fun getStartViewPermissionUsageIntent( context: Context, packageName: String, permGroupName: String, attributionTag: CharSequence?, isAttributionSupported: Boolean ): Intent? { if (attributionTag != null && isAttributionSupported) { // We should only limit this intent to location provider if ( attributionTag != null && isAttributionSupported && locationManager.isProviderPackage(null, packageName, attributionTag.toString()) ) { val intent = Intent(Intent.ACTION_MANAGE_PERMISSION_USAGE) intent.setPackage(packageName) intent.putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, permGroupName) Loading Loading @@ -237,6 +247,7 @@ class PrivacyDialogControllerV2( val userId = UserHandle.getUserId(it.uid) val viewUsageIntent = getStartViewPermissionUsageIntent( context, it.packageName, it.permissionGroupName, it.attributionTag, Loading packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerTest.kt +30 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.pm.PackageManager import android.content.pm.PackageManager.ResolveInfoFlags import android.content.pm.ResolveInfo import android.content.pm.UserInfo import android.location.LocationManager import android.os.Process.SYSTEM_UID import android.os.UserHandle import android.permission.PermissionGroupUsage Loading Loading @@ -86,6 +87,8 @@ class PrivacyDialogControllerTest : SysuiTestCase() { @Mock private lateinit var packageManager: PackageManager @Mock private lateinit var locationManager: LocationManager @Mock private lateinit var privacyItemController: PrivacyItemController @Mock private lateinit var userTracker: UserTracker Loading Loading @@ -135,6 +138,7 @@ class PrivacyDialogControllerTest : SysuiTestCase() { controller = PrivacyDialogController( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -652,7 +656,7 @@ class PrivacyDialogControllerTest : SysuiTestCase() { } @Test fun testCorrectIntentSubAttribution() { fun testCorrectIntentSubAttributionForLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, attributionLabel = "TEST_LABEL" Loading @@ -660,6 +664,8 @@ class PrivacyDialogControllerTest : SysuiTestCase() { val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(true) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())) .thenAnswer { resolveInfo } Loading @@ -678,6 +684,29 @@ class PrivacyDialogControllerTest : SysuiTestCase() { } } @Test fun testCorrectIntentSubAttributionForNonLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, attributionLabel = "TEST_LABEL" ) val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(false) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())) .thenAnswer { resolveInfo } controller.showDialog(context) exhaustExecutors() dialogProvider.list?.let { list -> val navigationIntent = list.get(0).navigationIntent!! assertThat(navigationIntent.action).isEqualTo(Intent.ACTION_MANAGE_APP_PERMISSIONS) } } @Test fun testDefaultIntentOnMissingAttributionLabel() { val usage = createMockPermGroupUsage( Loading packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt +31 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.pm.PackageManager import android.content.pm.PackageManager.ResolveInfoFlags import android.content.pm.ResolveInfo import android.content.pm.UserInfo import android.location.LocationManager import android.os.Process.SYSTEM_UID import android.os.UserHandle import android.permission.PermissionGroupUsage Loading Loading @@ -86,6 +87,7 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { @Mock private lateinit var dialog: PrivacyDialogV2 @Mock private lateinit var permissionManager: PermissionManager @Mock private lateinit var packageManager: PackageManager @Mock private lateinit var locationManager: LocationManager @Mock private lateinit var privacyItemController: PrivacyItemController @Mock private lateinit var userTracker: UserTracker @Mock private lateinit var activityStarter: ActivityStarter Loading Loading @@ -136,6 +138,7 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { PrivacyDialogControllerV2( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -660,7 +663,7 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { } @Test fun testServiceIntentOnCorrectSubAttribution() { fun testServiceIntentOnCorrectSubAttributionForLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, Loading @@ -669,6 +672,8 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(true) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())).thenAnswer { resolveInfo Loading @@ -689,6 +694,31 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { } } @Test fun testServiceIntentOnCorrectSubAttributionForNonLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, attributionLabel = "TEST_LABEL" ) val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(false) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())).thenAnswer { resolveInfo } controller.showDialog(context) exhaustExecutors() dialogProvider.list?.let { list -> val navigationIntent = list.get(0).navigationIntent!! assertThat(navigationIntent.action).isEqualTo(Intent.ACTION_MANAGE_APP_PERMISSIONS) } } @Test fun testDefaultIntentOnMissingAttributionLabel() { val usage = createMockPermGroupUsage(attributionTag = TEST_ATTRIBUTION_TAG) Loading Loading
packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +7 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ import android.hardware.display.DisplayManager; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.input.InputManager; import android.location.LocationManager; import android.media.AudioManager; import android.media.IAudioService; import android.media.MediaRouter2Manager; Loading Loading @@ -687,6 +688,12 @@ public class FrameworkServicesModule { return pm; } @Provides @Singleton static LocationManager provideLocationManager(Context context) { return context.getSystemService(LocationManager.class); } @Provides @Singleton static ClipboardManager provideClipboardManager(Context context) { Loading
packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogController.kt +10 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.location.LocationManager import android.os.UserHandle import android.permission.PermissionGroupUsage import android.permission.PermissionManager Loading Loading @@ -62,6 +63,7 @@ private val defaultDialogProvider = object : PrivacyDialogController.DialogProvi class PrivacyDialogController( private val permissionManager: PermissionManager, private val packageManager: PackageManager, private val locationManager: LocationManager, private val privacyItemController: PrivacyItemController, private val userTracker: UserTracker, private val activityStarter: ActivityStarter, Loading @@ -78,6 +80,7 @@ class PrivacyDialogController( constructor( permissionManager: PermissionManager, packageManager: PackageManager, locationManager: LocationManager, privacyItemController: PrivacyItemController, userTracker: UserTracker, activityStarter: ActivityStarter, Loading @@ -90,6 +93,7 @@ class PrivacyDialogController( ) : this( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -147,15 +151,17 @@ class PrivacyDialogController( @WorkerThread private fun getManagePermissionIntent( context: Context, packageName: String, userId: Int, permGroupName: CharSequence, attributionTag: CharSequence?, isAttributionSupported: Boolean ): Intent { ): Intent { lateinit var intent: Intent if (attributionTag != null && isAttributionSupported) { // We should only limit this intent to location provider if (attributionTag != null && isAttributionSupported && locationManager.isProviderPackage(null, packageName, attributionTag.toString())) { intent = Intent(Intent.ACTION_MANAGE_PERMISSION_USAGE) intent.setPackage(packageName) intent.putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, permGroupName.toString()) Loading Loading @@ -230,6 +236,7 @@ class PrivacyDialogController( it.isPhoneCall, it.permissionGroupName, getManagePermissionIntent( context, it.packageName, userId, it.permissionGroupName, Loading
packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialogControllerV2.kt +12 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.location.LocationManager import android.os.UserHandle import android.permission.PermissionGroupUsage import android.permission.PermissionManager Loading Loading @@ -65,6 +66,7 @@ private val defaultDialogProvider = class PrivacyDialogControllerV2( private val permissionManager: PermissionManager, private val packageManager: PackageManager, private val locationManager: LocationManager, private val privacyItemController: PrivacyItemController, private val userTracker: UserTracker, private val activityStarter: ActivityStarter, Loading @@ -82,6 +84,7 @@ class PrivacyDialogControllerV2( constructor( permissionManager: PermissionManager, packageManager: PackageManager, locationManager: LocationManager, privacyItemController: PrivacyItemController, userTracker: UserTracker, activityStarter: ActivityStarter, Loading @@ -95,6 +98,7 @@ class PrivacyDialogControllerV2( ) : this( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -166,12 +170,18 @@ class PrivacyDialogControllerV2( @WorkerThread private fun getStartViewPermissionUsageIntent( context: Context, packageName: String, permGroupName: String, attributionTag: CharSequence?, isAttributionSupported: Boolean ): Intent? { if (attributionTag != null && isAttributionSupported) { // We should only limit this intent to location provider if ( attributionTag != null && isAttributionSupported && locationManager.isProviderPackage(null, packageName, attributionTag.toString()) ) { val intent = Intent(Intent.ACTION_MANAGE_PERMISSION_USAGE) intent.setPackage(packageName) intent.putExtra(Intent.EXTRA_PERMISSION_GROUP_NAME, permGroupName) Loading Loading @@ -237,6 +247,7 @@ class PrivacyDialogControllerV2( val userId = UserHandle.getUserId(it.uid) val viewUsageIntent = getStartViewPermissionUsageIntent( context, it.packageName, it.permissionGroupName, it.attributionTag, Loading
packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerTest.kt +30 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.pm.PackageManager import android.content.pm.PackageManager.ResolveInfoFlags import android.content.pm.ResolveInfo import android.content.pm.UserInfo import android.location.LocationManager import android.os.Process.SYSTEM_UID import android.os.UserHandle import android.permission.PermissionGroupUsage Loading Loading @@ -86,6 +87,8 @@ class PrivacyDialogControllerTest : SysuiTestCase() { @Mock private lateinit var packageManager: PackageManager @Mock private lateinit var locationManager: LocationManager @Mock private lateinit var privacyItemController: PrivacyItemController @Mock private lateinit var userTracker: UserTracker Loading Loading @@ -135,6 +138,7 @@ class PrivacyDialogControllerTest : SysuiTestCase() { controller = PrivacyDialogController( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -652,7 +656,7 @@ class PrivacyDialogControllerTest : SysuiTestCase() { } @Test fun testCorrectIntentSubAttribution() { fun testCorrectIntentSubAttributionForLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, attributionLabel = "TEST_LABEL" Loading @@ -660,6 +664,8 @@ class PrivacyDialogControllerTest : SysuiTestCase() { val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(true) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())) .thenAnswer { resolveInfo } Loading @@ -678,6 +684,29 @@ class PrivacyDialogControllerTest : SysuiTestCase() { } } @Test fun testCorrectIntentSubAttributionForNonLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, attributionLabel = "TEST_LABEL" ) val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(false) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())) .thenAnswer { resolveInfo } controller.showDialog(context) exhaustExecutors() dialogProvider.list?.let { list -> val navigationIntent = list.get(0).navigationIntent!! assertThat(navigationIntent.action).isEqualTo(Intent.ACTION_MANAGE_APP_PERMISSIONS) } } @Test fun testDefaultIntentOnMissingAttributionLabel() { val usage = createMockPermGroupUsage( Loading
packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogControllerV2Test.kt +31 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.pm.PackageManager import android.content.pm.PackageManager.ResolveInfoFlags import android.content.pm.ResolveInfo import android.content.pm.UserInfo import android.location.LocationManager import android.os.Process.SYSTEM_UID import android.os.UserHandle import android.permission.PermissionGroupUsage Loading Loading @@ -86,6 +87,7 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { @Mock private lateinit var dialog: PrivacyDialogV2 @Mock private lateinit var permissionManager: PermissionManager @Mock private lateinit var packageManager: PackageManager @Mock private lateinit var locationManager: LocationManager @Mock private lateinit var privacyItemController: PrivacyItemController @Mock private lateinit var userTracker: UserTracker @Mock private lateinit var activityStarter: ActivityStarter Loading Loading @@ -136,6 +138,7 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { PrivacyDialogControllerV2( permissionManager, packageManager, locationManager, privacyItemController, userTracker, activityStarter, Loading Loading @@ -660,7 +663,7 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { } @Test fun testServiceIntentOnCorrectSubAttribution() { fun testServiceIntentOnCorrectSubAttributionForLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, Loading @@ -669,6 +672,8 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(true) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())).thenAnswer { resolveInfo Loading @@ -689,6 +694,31 @@ class PrivacyDialogControllerV2Test : SysuiTestCase() { } } @Test fun testServiceIntentOnCorrectSubAttributionForNonLocationProvider() { val usage = createMockPermGroupUsage( attributionTag = TEST_ATTRIBUTION_TAG, attributionLabel = "TEST_LABEL" ) val activityInfo = createMockActivityInfo() val resolveInfo = createMockResolveInfo(activityInfo) `when`(locationManager.isProviderPackage(null, TEST_PACKAGE_NAME, TEST_ATTRIBUTION_TAG)) .thenReturn(false) `when`(permissionManager.getIndicatorAppOpUsageData(anyBoolean())).thenReturn(listOf(usage)) `when`(packageManager.resolveActivity(any(), any<ResolveInfoFlags>())).thenAnswer { resolveInfo } controller.showDialog(context) exhaustExecutors() dialogProvider.list?.let { list -> val navigationIntent = list.get(0).navigationIntent!! assertThat(navigationIntent.action).isEqualTo(Intent.ACTION_MANAGE_APP_PERMISSIONS) } } @Test fun testDefaultIntentOnMissingAttributionLabel() { val usage = createMockPermGroupUsage(attributionTag = TEST_ATTRIBUTION_TAG) Loading