Loading packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java +17 −1 Original line number Diff line number Diff line Loading @@ -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.statusbar.policy.VariableDateViewController; import com.android.systemui.util.ViewController; Loading Loading @@ -71,6 +72,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader private final PrivacyDialogController mPrivacyDialogController; private final QSExpansionPathInterpolator mQSExpansionPathInterpolator; private final FeatureFlags mFeatureFlags; private final DeviceProvisionedController mDeviceProvisionedController; private final VariableDateViewController mVariableDateViewControllerDateView; private final VariableDateViewController mVariableDateViewControllerClockDateView; Loading @@ -79,6 +81,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader 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; Loading Loading @@ -119,6 +122,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()); Loading @@ -126,6 +130,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, Loading @@ -139,7 +151,8 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader PrivacyDialogController privacyDialogController, QSExpansionPathInterpolator qsExpansionPathInterpolator, FeatureFlags featureFlags, VariableDateViewController.Factory variableDateViewControllerFactory) { VariableDateViewController.Factory variableDateViewControllerFactory, DeviceProvisionedController deviceProvisionedController) { super(view); mPrivacyItemController = privacyItemController; mActivityStarter = activityStarter; Loading @@ -151,6 +164,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader mPrivacyDialogController = privacyDialogController; mQSExpansionPathInterpolator = qsExpansionPathInterpolator; mFeatureFlags = featureFlags; mDeviceProvisionedController = deviceProvisionedController; mQSCarrierGroupController = qsCarrierGroupControllerBuilder .setQSCarrierGroup(mView.findViewById(R.id.carrier_group)) Loading Loading @@ -182,6 +196,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader @Override protected void onViewAttached() { mDeviceProvisionedController.addCallback(mDeviceProvisionedListener); mPrivacyChip.setOnClickListener(mOnClickListener); mMicCameraIndicatorsEnabled = mPrivacyItemController.getMicCameraAvailable(); Loading Loading @@ -224,6 +239,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); Loading packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt +72 −1 Original line number Diff line number Diff line Loading @@ -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.statusbar.policy.VariableDateView import com.android.systemui.statusbar.policy.VariableDateViewController import com.android.systemui.util.mockito.any Loading @@ -50,6 +51,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 Loading Loading @@ -103,6 +105,7 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { @Mock private lateinit var featureFlags: FeatureFlags private lateinit var deviceProvisionedController: FakeDeviceProvisionedController private val qsExpansionPathInterpolator = QSExpansionPathInterpolator() private lateinit var controller: QuickStatusBarHeaderController Loading @@ -123,6 +126,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( Loading @@ -144,7 +150,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { privacyDialogController, qsExpansionPathInterpolator, featureFlags, variableDateViewControllerFactory variableDateViewControllerFactory, deviceProvisionedController ) } Loading Loading @@ -279,6 +286,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) Loading @@ -293,4 +328,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 } } } Loading
packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java +17 −1 Original line number Diff line number Diff line Loading @@ -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.statusbar.policy.VariableDateViewController; import com.android.systemui.util.ViewController; Loading Loading @@ -71,6 +72,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader private final PrivacyDialogController mPrivacyDialogController; private final QSExpansionPathInterpolator mQSExpansionPathInterpolator; private final FeatureFlags mFeatureFlags; private final DeviceProvisionedController mDeviceProvisionedController; private final VariableDateViewController mVariableDateViewControllerDateView; private final VariableDateViewController mVariableDateViewControllerClockDateView; Loading @@ -79,6 +81,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader 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; Loading Loading @@ -119,6 +122,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()); Loading @@ -126,6 +130,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, Loading @@ -139,7 +151,8 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader PrivacyDialogController privacyDialogController, QSExpansionPathInterpolator qsExpansionPathInterpolator, FeatureFlags featureFlags, VariableDateViewController.Factory variableDateViewControllerFactory) { VariableDateViewController.Factory variableDateViewControllerFactory, DeviceProvisionedController deviceProvisionedController) { super(view); mPrivacyItemController = privacyItemController; mActivityStarter = activityStarter; Loading @@ -151,6 +164,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader mPrivacyDialogController = privacyDialogController; mQSExpansionPathInterpolator = qsExpansionPathInterpolator; mFeatureFlags = featureFlags; mDeviceProvisionedController = deviceProvisionedController; mQSCarrierGroupController = qsCarrierGroupControllerBuilder .setQSCarrierGroup(mView.findViewById(R.id.carrier_group)) Loading Loading @@ -182,6 +196,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader @Override protected void onViewAttached() { mDeviceProvisionedController.addCallback(mDeviceProvisionedListener); mPrivacyChip.setOnClickListener(mOnClickListener); mMicCameraIndicatorsEnabled = mPrivacyItemController.getMicCameraAvailable(); Loading Loading @@ -224,6 +239,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); Loading
packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt +72 −1 Original line number Diff line number Diff line Loading @@ -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.statusbar.policy.VariableDateView import com.android.systemui.statusbar.policy.VariableDateViewController import com.android.systemui.util.mockito.any Loading @@ -50,6 +51,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 Loading Loading @@ -103,6 +105,7 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { @Mock private lateinit var featureFlags: FeatureFlags private lateinit var deviceProvisionedController: FakeDeviceProvisionedController private val qsExpansionPathInterpolator = QSExpansionPathInterpolator() private lateinit var controller: QuickStatusBarHeaderController Loading @@ -123,6 +126,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( Loading @@ -144,7 +150,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() { privacyDialogController, qsExpansionPathInterpolator, featureFlags, variableDateViewControllerFactory variableDateViewControllerFactory, deviceProvisionedController ) } Loading Loading @@ -279,6 +286,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) Loading @@ -293,4 +328,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 } } }