diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-12-12 16:59:14 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-12-12 16:59:14 +0000 |
commit | 27db94d2ad111027c9f841a1f1628f36bdb7a2ce (patch) | |
tree | 659fbc3cb86cba9164c9a3941ddb838b1ad1d422 | |
parent | 8f5f31cb0e669cc8502cb45708327534160d729e (diff) | |
parent | c6f5d72cea1242ad6bb0c4ef3aef8c8b3ea763bc (diff) | |
download | base-27db94d2ad111027c9f841a1f1628f36bdb7a2ce.tar.gz |
Merge cherrypicks of ['ag/20346939'] into security-aosp-sc-release.android-security-12.0.0_r44
Change-Id: Ib6bb4a96b36f6f921e0bec85e30ba487dae815e0
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java | 18 | ||||
-rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt | 73 |
2 files changed, 89 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java index da75c9e45c54..b13e009cb024 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java @@ -41,6 +41,7 @@ import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusIconContainer; import com.android.systemui.statusbar.policy.Clock; +import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.util.ViewController; import java.util.List; @@ -70,11 +71,13 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader private final PrivacyDialogController mPrivacyDialogController; private final QSExpansionPathInterpolator mQSExpansionPathInterpolator; private final FeatureFlags mFeatureFlags; + private final DeviceProvisionedController mDeviceProvisionedController; private boolean mListening; private boolean mMicCameraIndicatorsEnabled; private boolean mLocationIndicatorsEnabled; private boolean mPrivacyChipLogged; + private volatile boolean mDeviceProvisioned; private final String mCameraSlot; private final String mMicSlot; private final String mLocationSlot; @@ -115,6 +118,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader @Override public void onClick(View v) { if (v == mPrivacyChip) { + if (!mDeviceProvisioned) return; // If the privacy chip is visible, it means there were some indicators mUiEventLogger.log(PrivacyChipEvent.ONGOING_INDICATORS_CHIP_CLICK); mPrivacyDialogController.showDialog(getContext()); @@ -122,6 +126,14 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader } }; + private DeviceProvisionedController.DeviceProvisionedListener mDeviceProvisionedListener = + new DeviceProvisionedController.DeviceProvisionedListener() { + @Override + public void onDeviceProvisionedChanged() { + mDeviceProvisioned = mDeviceProvisionedController.isDeviceProvisioned(); + } + }; + @Inject QuickStatusBarHeaderController(QuickStatusBarHeader view, PrivacyItemController privacyItemController, @@ -134,7 +146,8 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader SysuiColorExtractor colorExtractor, PrivacyDialogController privacyDialogController, QSExpansionPathInterpolator qsExpansionPathInterpolator, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, + DeviceProvisionedController deviceProvisionedController) { super(view); mPrivacyItemController = privacyItemController; mActivityStarter = activityStarter; @@ -146,6 +159,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader mPrivacyDialogController = privacyDialogController; mQSExpansionPathInterpolator = qsExpansionPathInterpolator; mFeatureFlags = featureFlags; + mDeviceProvisionedController = deviceProvisionedController; mQSCarrierGroupController = qsCarrierGroupControllerBuilder .setQSCarrierGroup(mView.findViewById(R.id.carrier_group)) @@ -171,6 +185,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader @Override protected void onViewAttached() { + mDeviceProvisionedController.addCallback(mDeviceProvisionedListener); mPrivacyChip.setOnClickListener(mOnClickListener); mMicCameraIndicatorsEnabled = mPrivacyItemController.getMicCameraAvailable(); @@ -210,6 +225,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader @Override protected void onViewDetached() { mColorExtractor.removeOnColorsChangedListener(mOnColorsChangedListener); + mDeviceProvisionedController.removeCallback(mDeviceProvisionedListener); mPrivacyChip.setOnClickListener(null); mStatusBarIconController.removeIconGroup(mIconManager); mQSCarrierGroupController.setOnSingleCarrierChangedListener(null); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt index 35360bd19393..87b7dad2ff73 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt @@ -36,6 +36,7 @@ import com.android.systemui.statusbar.FeatureFlags import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusIconContainer import com.android.systemui.statusbar.policy.Clock +import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.capture @@ -48,6 +49,7 @@ import org.mockito.Answers import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock import org.mockito.Mockito.`when` +import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @@ -95,6 +97,7 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { @Mock private lateinit var featureFlags: FeatureFlags + private lateinit var deviceProvisionedController: FakeDeviceProvisionedController private val qsExpansionPathInterpolator = QSExpansionPathInterpolator() private lateinit var controller: QuickStatusBarHeaderController @@ -113,6 +116,9 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { `when`(view.isAttachedToWindow).thenReturn(true) `when`(view.context).thenReturn(context) + deviceProvisionedController = FakeDeviceProvisionedController() + deviceProvisionedController.provisioned = true + cameraSlotName = mContext.resources.getString( com.android.internal.R.string.status_bar_camera) microphoneSlotName = mContext.resources.getString( @@ -133,7 +139,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { colorExtractor, privacyDialogController, qsExpansionPathInterpolator, - featureFlags + featureFlags, + deviceProvisionedController ) } @@ -268,6 +275,34 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { verify(view).setIsSingleCarrier(false) } + @Test + fun testDeviceNotProvisionedBeforeInit_clickOnChipDoesntShowDialog() { + deviceProvisionedController.provisioned = false + controller.init() + + val captor = argumentCaptor<View.OnClickListener>() + verify(privacyChip).setOnClickListener(capture(captor)) + + captor.value.onClick(privacyChip) + + verify(privacyDialogController, never()).showDialog(any(Context::class.java)) + } + + @Test + fun testDeviceNotProvisionedBeforeInit_provisionedAfter_clickOnChipDoesntShowDialog() { + deviceProvisionedController.provisioned = false + controller.init() + + deviceProvisionedController.provisioned = true + + val captor = argumentCaptor<View.OnClickListener>() + verify(privacyChip).setOnClickListener(capture(captor)) + + captor.value.onClick(privacyChip) + + verify(privacyDialogController).showDialog(any(Context::class.java)) + } + private fun stubViews() { `when`(view.findViewById<View>(anyInt())).thenReturn(mockView) `when`(view.findViewById<QSCarrierGroup>(R.id.carrier_group)).thenReturn(qsCarrierGroup) @@ -280,4 +315,40 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { `when`(privacyItemController.micCameraAvailable).thenReturn(micCamera) `when`(privacyItemController.locationAvailable).thenReturn(location) } + + // We only care about device provisioned + class FakeDeviceProvisionedController : DeviceProvisionedController { + val callbacks = mutableSetOf<DeviceProvisionedController.DeviceProvisionedListener>() + var provisioned = false + set(value) { + if (field != value) { + field = value + callbacks.forEach { it.onDeviceProvisionedChanged() } + } + } + + override fun addCallback(listener: DeviceProvisionedController.DeviceProvisionedListener) { + if (callbacks.add(listener)) { + listener.onDeviceProvisionedChanged() + } + } + + override fun removeCallback( + listener: DeviceProvisionedController.DeviceProvisionedListener + ) { + callbacks.remove(listener) + } + + override fun isDeviceProvisioned(): Boolean { + return provisioned + } + + override fun isUserSetup(currentUser: Int): Boolean { + return true + } + + override fun getCurrentUser(): Int { + return 0 + } + } } |