Loading packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt +18 −14 Original line number Diff line number Diff line Loading @@ -95,12 +95,14 @@ class PrivacyItemController @Inject constructor( private var indicatorsAvailable = isPermissionsHubEnabled() @VisibleForTesting internal val devicePropertyChangedListener = object : DeviceConfig.OnPropertyChangedListener { override fun onPropertyChanged(namespace: String, name: String, value: String?) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(namespace) && SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED.equals(name)) { indicatorsAvailable = java.lang.Boolean.parseBoolean(value) internal val devicePropertiesChangedListener = object : DeviceConfig.OnPropertiesChangedListener { override fun onPropertiesChanged(properties: DeviceConfig.Properties) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(properties.getNamespace()) && properties.getKeyset().contains( SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED)) { indicatorsAvailable = properties.getBoolean( SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, false) messageHandler.removeMessages(MSG_UPDATE_LISTENING_STATE) messageHandler.sendEmptyMessage(MSG_UPDATE_LISTENING_STATE) } Loading Loading @@ -130,8 +132,10 @@ class PrivacyItemController @Inject constructor( } init { DeviceConfig.addOnPropertyChangedListener( DeviceConfig.NAMESPACE_PRIVACY, context.mainExecutor, devicePropertyChangedListener) DeviceConfig.addOnPropertiesChangedListener( DeviceConfig.NAMESPACE_PRIVACY, context.mainExecutor, devicePropertiesChangedListener) } private fun unregisterReceiver() { Loading packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +10 −9 Original line number Diff line number Diff line Loading @@ -158,14 +158,15 @@ public class QuickStatusBarHeader extends RelativeLayout implements private boolean mHasTopCutout = false; private boolean mPrivacyChipLogged = false; private final DeviceConfig.OnPropertyChangedListener mPropertyListener = new DeviceConfig.OnPropertyChangedListener() { private final DeviceConfig.OnPropertiesChangedListener mPropertiesListener = new DeviceConfig.OnPropertiesChangedListener() { @Override public void onPropertyChanged(String namespace, String name, String value) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(namespace) && SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED.equals( name)) { mPermissionsHubEnabled = Boolean.valueOf(value); public void onPropertiesChanged(DeviceConfig.Properties properties) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(properties.getNamespace()) && properties.getKeyset() .contains(SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED)) { mPermissionsHubEnabled = properties.getBoolean( SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, false); StatusIconContainer iconContainer = findViewById(R.id.statusIcons); iconContainer.setIgnoredSlots(getIgnoredIconSlots()); } Loading Loading @@ -257,8 +258,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements mPermissionsHubEnabled = PrivacyItemControllerKt.isPermissionsHubEnabled(); // Change the ignored slots when DeviceConfig flag changes DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_PRIVACY, mContext.getMainExecutor(), mPropertyListener); DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_PRIVACY, mContext.getMainExecutor(), mPropertiesListener); } Loading packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt +23 −2 Original line number Diff line number Diff line Loading @@ -48,12 +48,15 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyList import org.mockito.ArgumentMatchers.anyString import org.mockito.ArgumentMatchers.eq import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.atLeastOnce import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doReturn import org.mockito.Mockito.mock import org.mockito.Mockito.never Loading Loading @@ -281,13 +284,31 @@ class PrivacyItemControllerTest : SysuiTestCase() { @Test fun testNotListeningWhenIndicatorsDisabled() { privacyItemController.devicePropertyChangedListener.onPropertyChanged( val properties = getProperties( DeviceConfig.NAMESPACE_PRIVACY, SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, "false") false) privacyItemController.devicePropertiesChangedListener.onPropertiesChanged(properties) privacyItemController.addCallback(callback) testableLooper.processAllMessages() verify(appOpsController, never()).addCallback(eq(PrivacyItemController.OPS), any(AppOpsController.Callback::class.java)) } private fun getProperties(namespace: String, name: String, value: Boolean): DeviceConfig.Properties { val properties = mock<DeviceConfig.Properties>(DeviceConfig.Properties::class.java) doReturn(namespace).`when`(properties).getNamespace() doReturn(setOf(name)).`when`(properties).getKeyset() doAnswer { val key: String = it.getArgument(0) val defaultValue: Boolean = it.getArgument(1) if (name.equals(key, ignoreCase = true)) { value } else { defaultValue } }.`when`(properties).getBoolean(anyString(), anyBoolean()) return properties } } No newline at end of file Loading
packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt +18 −14 Original line number Diff line number Diff line Loading @@ -95,12 +95,14 @@ class PrivacyItemController @Inject constructor( private var indicatorsAvailable = isPermissionsHubEnabled() @VisibleForTesting internal val devicePropertyChangedListener = object : DeviceConfig.OnPropertyChangedListener { override fun onPropertyChanged(namespace: String, name: String, value: String?) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(namespace) && SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED.equals(name)) { indicatorsAvailable = java.lang.Boolean.parseBoolean(value) internal val devicePropertiesChangedListener = object : DeviceConfig.OnPropertiesChangedListener { override fun onPropertiesChanged(properties: DeviceConfig.Properties) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(properties.getNamespace()) && properties.getKeyset().contains( SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED)) { indicatorsAvailable = properties.getBoolean( SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, false) messageHandler.removeMessages(MSG_UPDATE_LISTENING_STATE) messageHandler.sendEmptyMessage(MSG_UPDATE_LISTENING_STATE) } Loading Loading @@ -130,8 +132,10 @@ class PrivacyItemController @Inject constructor( } init { DeviceConfig.addOnPropertyChangedListener( DeviceConfig.NAMESPACE_PRIVACY, context.mainExecutor, devicePropertyChangedListener) DeviceConfig.addOnPropertiesChangedListener( DeviceConfig.NAMESPACE_PRIVACY, context.mainExecutor, devicePropertiesChangedListener) } private fun unregisterReceiver() { Loading
packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +10 −9 Original line number Diff line number Diff line Loading @@ -158,14 +158,15 @@ public class QuickStatusBarHeader extends RelativeLayout implements private boolean mHasTopCutout = false; private boolean mPrivacyChipLogged = false; private final DeviceConfig.OnPropertyChangedListener mPropertyListener = new DeviceConfig.OnPropertyChangedListener() { private final DeviceConfig.OnPropertiesChangedListener mPropertiesListener = new DeviceConfig.OnPropertiesChangedListener() { @Override public void onPropertyChanged(String namespace, String name, String value) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(namespace) && SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED.equals( name)) { mPermissionsHubEnabled = Boolean.valueOf(value); public void onPropertiesChanged(DeviceConfig.Properties properties) { if (DeviceConfig.NAMESPACE_PRIVACY.equals(properties.getNamespace()) && properties.getKeyset() .contains(SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED)) { mPermissionsHubEnabled = properties.getBoolean( SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, false); StatusIconContainer iconContainer = findViewById(R.id.statusIcons); iconContainer.setIgnoredSlots(getIgnoredIconSlots()); } Loading Loading @@ -257,8 +258,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements mPermissionsHubEnabled = PrivacyItemControllerKt.isPermissionsHubEnabled(); // Change the ignored slots when DeviceConfig flag changes DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_PRIVACY, mContext.getMainExecutor(), mPropertyListener); DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_PRIVACY, mContext.getMainExecutor(), mPropertiesListener); } Loading
packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt +23 −2 Original line number Diff line number Diff line Loading @@ -48,12 +48,15 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyList import org.mockito.ArgumentMatchers.anyString import org.mockito.ArgumentMatchers.eq import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.atLeastOnce import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doReturn import org.mockito.Mockito.mock import org.mockito.Mockito.never Loading Loading @@ -281,13 +284,31 @@ class PrivacyItemControllerTest : SysuiTestCase() { @Test fun testNotListeningWhenIndicatorsDisabled() { privacyItemController.devicePropertyChangedListener.onPropertyChanged( val properties = getProperties( DeviceConfig.NAMESPACE_PRIVACY, SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, "false") false) privacyItemController.devicePropertiesChangedListener.onPropertiesChanged(properties) privacyItemController.addCallback(callback) testableLooper.processAllMessages() verify(appOpsController, never()).addCallback(eq(PrivacyItemController.OPS), any(AppOpsController.Callback::class.java)) } private fun getProperties(namespace: String, name: String, value: Boolean): DeviceConfig.Properties { val properties = mock<DeviceConfig.Properties>(DeviceConfig.Properties::class.java) doReturn(namespace).`when`(properties).getNamespace() doReturn(setOf(name)).`when`(properties).getKeyset() doAnswer { val key: String = it.getArgument(0) val defaultValue: Boolean = it.getArgument(1) if (name.equals(key, ignoreCase = true)) { value } else { defaultValue } }.`when`(properties).getBoolean(anyString(), anyBoolean()) return properties } } No newline at end of file