Merge "Disable click on privacy chip before provision" into sc-qpr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
40665a799a
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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());
|
||||
@@ -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,
|
||||
@@ -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;
|
||||
@@ -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))
|
||||
@@ -182,6 +196,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
|
||||
|
||||
@Override
|
||||
protected void onViewAttached() {
|
||||
mDeviceProvisionedController.addCallback(mDeviceProvisionedListener);
|
||||
mPrivacyChip.setOnClickListener(mOnClickListener);
|
||||
|
||||
mMicCameraIndicatorsEnabled = mPrivacyItemController.getMicCameraAvailable();
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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(
|
||||
@@ -144,7 +150,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() {
|
||||
privacyDialogController,
|
||||
qsExpansionPathInterpolator,
|
||||
featureFlags,
|
||||
variableDateViewControllerFactory
|
||||
variableDateViewControllerFactory,
|
||||
deviceProvisionedController
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user