diff options
| author | 2022-11-02 16:20:19 -0400 | |
|---|---|---|
| committer | 2022-11-09 21:05:27 +0000 | |
| commit | daf67271ee002312fce075ed90045bf49fc19343 (patch) | |
| tree | 2dffef825b4dcba3a29a510c9c51fcfc48f3c510 | |
| parent | f0027983a03a4e25c421fc8617cfde6b8bbd472a (diff) | |
Disable click on privacy chip before provision
Test: atest QuickStatusBarHeaderControllerTest
Bug: 253043058
Change-Id: I8099dfd259b149cd18509677d623de7a352f5de0
Merged-In: I9c8f642976f3332f4d5c9db89a4917dae501f251
Merged-In: I8099dfd259b149cd18509677d623de7a352f5de0
| -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 + } + } } |