Centralize user picker launch logic
Use the CarService to launch the UserPicker to reduce duplication and
centralize the logic.
Bug: 275440889
Test: manual, atest CarSystemUITests
Change-Id: Ie0c499453315752828d02b20b7c8abaf094876c2
diff --git a/src/com/android/systemui/car/keyguard/CarKeyguardOverlayViewMediator.java b/src/com/android/systemui/car/keyguard/CarKeyguardOverlayViewMediator.java
index 0d0ec18..35631bd 100644
--- a/src/com/android/systemui/car/keyguard/CarKeyguardOverlayViewMediator.java
+++ b/src/com/android/systemui/car/keyguard/CarKeyguardOverlayViewMediator.java
@@ -16,8 +16,11 @@
package com.android.systemui.car.keyguard;
+import android.car.app.CarActivityManager;
import android.content.Context;
+import android.util.Log;
+import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.users.CarSystemUIUserUtil;
import com.android.systemui.car.userswitcher.FullScreenUserSwitcherViewController;
import com.android.systemui.car.window.OverlayViewMediator;
@@ -31,20 +34,25 @@
*/
@SysUISingleton
public class CarKeyguardOverlayViewMediator implements OverlayViewMediator {
+ private static final String TAG = CarKeyguardOverlayViewMediator.class.getName();
private final Context mContext;
private final CarKeyguardViewController mCarKeyguardViewController;
private final FullScreenUserSwitcherViewController mFullScreenUserSwitcherViewController;
+ private CarActivityManager mCarActivityManager;
@Inject
public CarKeyguardOverlayViewMediator(
Context context,
CarKeyguardViewController carKeyguardViewController,
- FullScreenUserSwitcherViewController fullScreenUserSwitcherViewController
+ FullScreenUserSwitcherViewController fullScreenUserSwitcherViewController,
+ CarServiceProvider carServiceProvider
) {
mContext = context;
mCarKeyguardViewController = carKeyguardViewController;
mFullScreenUserSwitcherViewController = fullScreenUserSwitcherViewController;
+ carServiceProvider.addListener(
+ car -> mCarActivityManager = car.getCarManager(CarActivityManager.class));
}
@Override
@@ -53,7 +61,13 @@
if (CarSystemUIUserUtil.isMUMDSystemUI()) {
// TODO(b/258238612): update logic to stop passenger users
mCarKeyguardViewController.registerOnKeyguardCancelClickedListener(
- () -> CarSystemUIUserUtil.launchUserPicker(mContext));
+ () -> {
+ if (mCarActivityManager != null) {
+ mCarActivityManager.startUserPickerOnDisplay(mContext.getDisplayId());
+ } else {
+ Log.e(TAG, "Can't start UserPicker - CarActivityManager is null");
+ }
+ });
} else {
mCarKeyguardViewController.registerOnKeyguardCancelClickedListener(
mFullScreenUserSwitcherViewController::start);
diff --git a/src/com/android/systemui/car/keyguard/CarKeyguardViewMediator.java b/src/com/android/systemui/car/keyguard/CarKeyguardViewMediator.java
index d37f17b..88a0eff 100644
--- a/src/com/android/systemui/car/keyguard/CarKeyguardViewMediator.java
+++ b/src/com/android/systemui/car/keyguard/CarKeyguardViewMediator.java
@@ -53,10 +53,10 @@
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.util.DeviceConfigProxy;
-import dagger.Lazy;
-
import java.util.concurrent.Executor;
+import dagger.Lazy;
+
/**
* Car customizations on top of {@link KeyguardViewMediator}. Please refer to that class for
* more details on specific functionalities.
diff --git a/src/com/android/systemui/car/statusicon/StatusIconGroupContainerController.java b/src/com/android/systemui/car/statusicon/StatusIconGroupContainerController.java
index 658eecd..17c6b23 100644
--- a/src/com/android/systemui/car/statusicon/StatusIconGroupContainerController.java
+++ b/src/com/android/systemui/car/statusicon/StatusIconGroupContainerController.java
@@ -33,6 +33,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.qc.SystemUIQCViewController;
import com.android.systemui.car.statusicon.ui.QCPanelReadOnlyIconsController;
import com.android.systemui.car.statusicon.ui.QuickControlsEntryPointContainer;
@@ -57,6 +58,7 @@
public abstract class StatusIconGroupContainerController {
private final Context mContext;
private final UserTracker mUserTracker;
+ private final CarServiceProvider mCarServiceProvider;
private final Resources mResources;
private final BroadcastDispatcher mBroadcastDispatcher;
private final ConfigurationController mConfigurationController;
@@ -72,19 +74,21 @@
public StatusIconGroupContainerController(
Context context,
UserTracker userTracker,
+ CarServiceProvider carServiceProvider,
@Main Resources resources,
BroadcastDispatcher broadcastDispatcher,
ConfigurationController configurationController,
Provider<SystemUIQCViewController> qcViewControllerProvider,
Map<Class<?>, Provider<StatusIconController>> iconControllerCreators) {
- this(context, userTracker, resources, broadcastDispatcher, configurationController,
- qcViewControllerProvider, iconControllerCreators,
+ this(context, userTracker, carServiceProvider, resources, broadcastDispatcher,
+ configurationController, qcViewControllerProvider, iconControllerCreators,
/* qcPanelReadOnlyIconsController= */ null);
}
public StatusIconGroupContainerController(
Context context,
UserTracker userTracker,
+ CarServiceProvider carServiceProvider,
@Main Resources resources,
BroadcastDispatcher broadcastDispatcher,
ConfigurationController configurationController,
@@ -93,6 +97,7 @@
QCPanelReadOnlyIconsController qcPanelReadOnlyIconsController) {
mContext = context;
mUserTracker = userTracker;
+ mCarServiceProvider = carServiceProvider;
mResources = resources;
mBroadcastDispatcher = broadcastDispatcher;
mConfigurationController = configurationController;
@@ -158,9 +163,9 @@
if (shouldAttachPanel
&& statusIconController.getPanelContentLayout() != PANEL_CONTENT_LAYOUT_NONE) {
StatusIconPanelController panelController = new StatusIconPanelController(mContext,
- mUserTracker, mBroadcastDispatcher, mConfigurationController,
- mQCViewControllerProvider, /* isDisabledWhileDriving= */ false,
- mQCPanelReadOnlyIconsController);
+ mUserTracker, mCarServiceProvider, mBroadcastDispatcher,
+ mConfigurationController, mQCViewControllerProvider,
+ /* isDisabledWhileDriving= */ false, mQCPanelReadOnlyIconsController);
if (containerViewGroup instanceof QuickControlsEntryPointContainer) {
QuickControlsEntryPointContainer qcEntryPointContainer =
(QuickControlsEntryPointContainer) containerViewGroup;
diff --git a/src/com/android/systemui/car/statusicon/StatusIconPanelController.java b/src/com/android/systemui/car/statusicon/StatusIconPanelController.java
index d4bfd8c..92e664f 100644
--- a/src/com/android/systemui/car/statusicon/StatusIconPanelController.java
+++ b/src/com/android/systemui/car/statusicon/StatusIconPanelController.java
@@ -23,6 +23,7 @@
import android.annotation.DimenRes;
import android.annotation.LayoutRes;
import android.app.PendingIntent;
+import android.car.app.CarActivityManager;
import android.car.drivingstate.CarUxRestrictions;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -48,6 +49,7 @@
import com.android.car.ui.utils.CarUxRestrictionsUtil;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.qc.QCFooterButton;
import com.android.systemui.car.qc.QCFooterButtonView;
import com.android.systemui.car.qc.QCHeaderReadOnlyIconsContainer;
@@ -70,6 +72,7 @@
private final Context mContext;
private final UserTracker mUserTracker;
+ private final CarServiceProvider mCarServiceProvider;
private final BroadcastDispatcher mBroadcastDispatcher;
private final ConfigurationController mConfigurationController;
private final Provider<SystemUIQCViewController> mQCViewControllerProvider;
@@ -91,6 +94,7 @@
private View mAnchorView;
private ImageView mStatusIconView;
private CarUxRestrictionsUtil mCarUxRestrictionsUtil;
+ private CarActivityManager mCarActivityManager;
private float mDimValue = -1.0f;
private View.OnClickListener mOnClickListener;
private boolean mIsPanelDestroyed;
@@ -116,6 +120,11 @@
}
};
+ private final CarServiceProvider.CarServiceOnConnectedListener mCarServiceOnConnectedListener =
+ car -> {
+ mCarActivityManager = car.getCarManager(CarActivityManager.class);
+ };
+
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -168,21 +177,23 @@
public StatusIconPanelController(
Context context,
UserTracker userTracker,
+ CarServiceProvider carServiceProvider,
BroadcastDispatcher broadcastDispatcher,
ConfigurationController configurationController,
Provider<SystemUIQCViewController> qcViewControllerProvider) {
- this(context, userTracker, broadcastDispatcher, configurationController,
+ this(context, userTracker, carServiceProvider, broadcastDispatcher, configurationController,
qcViewControllerProvider, /* isDisabledWhileDriving= */ false);
}
public StatusIconPanelController(
Context context,
UserTracker userTracker,
+ CarServiceProvider carServiceProvider,
BroadcastDispatcher broadcastDispatcher,
ConfigurationController configurationController,
Provider<SystemUIQCViewController> qcViewControllerProvider,
boolean isDisabledWhileDriving) {
- this(context, userTracker, broadcastDispatcher, configurationController,
+ this(context, userTracker, carServiceProvider, broadcastDispatcher, configurationController,
qcViewControllerProvider, isDisabledWhileDriving,
/* qcPanelReadOnlyIconsController= */ null);
}
@@ -190,6 +201,7 @@
public StatusIconPanelController(
Context context,
UserTracker userTracker,
+ CarServiceProvider carServiceProvider,
BroadcastDispatcher broadcastDispatcher,
ConfigurationController configurationController,
Provider<SystemUIQCViewController> qcViewControllerProvider,
@@ -197,6 +209,7 @@
QCPanelReadOnlyIconsController qcPanelReadOnlyIconsController) {
mContext = context;
mUserTracker = userTracker;
+ mCarServiceProvider = carServiceProvider;
mBroadcastDispatcher = broadcastDispatcher;
mConfigurationController = configurationController;
mQCViewControllerProvider = qcViewControllerProvider;
@@ -309,6 +322,8 @@
throw new IllegalStateException("Attempting to attach destroyed panel");
}
+ mCarServiceProvider.addListener(mCarServiceOnConnectedListener);
+
if (mAnchorView == null) {
mAnchorView = view;
}
@@ -345,7 +360,9 @@
if (CarSystemUIUserUtil.isMUMDSystemUI()
&& mPanelLayoutRes == R.layout.qc_profile_switcher) {
// TODO(b/269490856): consider removal of UserPicker carve-outs
- CarSystemUIUserUtil.launchUserPicker(mContext);
+ if (mCarActivityManager != null) {
+ mCarActivityManager.startUserPickerOnDisplay(mContext.getDisplayId());
+ }
} else {
if (showAsDropDown) {
// TODO(b/202563671): remove yOffsetPixel when the PopupWindow API is updated.
@@ -377,6 +394,7 @@
if (mCarUxRestrictionsUtil != null) {
mCarUxRestrictionsUtil.unregister(mUxRestrictionsChangedListener);
}
+ mCarServiceProvider.removeListener(mCarServiceOnConnectedListener);
mConfigurationController.removeCallback(mConfigurationListener);
mUserTracker.removeCallback(mUserTrackerCallback);
mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver);
diff --git a/src/com/android/systemui/car/statusicon/ui/QCPanelReadOnlyIconsController.java b/src/com/android/systemui/car/statusicon/ui/QCPanelReadOnlyIconsController.java
index 0d6f9a1..15e5ab8 100644
--- a/src/com/android/systemui/car/statusicon/ui/QCPanelReadOnlyIconsController.java
+++ b/src/com/android/systemui/car/statusicon/ui/QCPanelReadOnlyIconsController.java
@@ -21,6 +21,7 @@
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.qc.SystemUIQCViewController;
import com.android.systemui.car.statusicon.StatusIconController;
import com.android.systemui.car.statusicon.StatusIconGroupContainerController;
@@ -41,13 +42,14 @@
@Inject
public QCPanelReadOnlyIconsController(Context context,
UserTracker userTracker,
+ CarServiceProvider carServiceProvider,
@Main Resources resources,
BroadcastDispatcher broadcastDispatcher,
ConfigurationController configurationController,
Provider<SystemUIQCViewController> qcViewControllerProvider,
Map<Class<?>, Provider<StatusIconController>> iconControllerCreators) {
- super(context, userTracker, resources, broadcastDispatcher, configurationController,
- qcViewControllerProvider, iconControllerCreators);
+ super(context, userTracker, carServiceProvider, resources, broadcastDispatcher,
+ configurationController, qcViewControllerProvider, iconControllerCreators);
}
@Override
diff --git a/src/com/android/systemui/car/statusicon/ui/QuickControlsEntryPointsController.java b/src/com/android/systemui/car/statusicon/ui/QuickControlsEntryPointsController.java
index a77db12..7c8854a 100644
--- a/src/com/android/systemui/car/statusicon/ui/QuickControlsEntryPointsController.java
+++ b/src/com/android/systemui/car/statusicon/ui/QuickControlsEntryPointsController.java
@@ -51,8 +51,9 @@
Provider<SystemUIQCViewController> qcViewControllerProvider,
Map<Class<?>, Provider<StatusIconController>> iconControllerCreators,
QCPanelReadOnlyIconsController qcPanelReadOnlyIconsController) {
- super(context, userTracker, resources, broadcastDispatcher, configurationController,
- qcViewControllerProvider, iconControllerCreators, qcPanelReadOnlyIconsController);
+ super(context, userTracker, carServiceProvider, resources, broadcastDispatcher,
+ configurationController, qcViewControllerProvider, iconControllerCreators,
+ qcPanelReadOnlyIconsController);
}
@Override
diff --git a/src/com/android/systemui/car/statusicon/ui/ReadOnlyIconsController.java b/src/com/android/systemui/car/statusicon/ui/ReadOnlyIconsController.java
index 867b416..1d20692 100644
--- a/src/com/android/systemui/car/statusicon/ui/ReadOnlyIconsController.java
+++ b/src/com/android/systemui/car/statusicon/ui/ReadOnlyIconsController.java
@@ -48,8 +48,8 @@
ConfigurationController configurationController,
Provider<SystemUIQCViewController> qcViewControllerProvider,
Map<Class<?>, Provider<StatusIconController>> iconControllerCreators) {
- super(context, userTracker, resources, broadcastDispatcher, configurationController,
- qcViewControllerProvider, iconControllerCreators);
+ super(context, userTracker, carServiceProvider, resources, broadcastDispatcher,
+ configurationController, qcViewControllerProvider, iconControllerCreators);
}
@Override
diff --git a/src/com/android/systemui/car/statusicon/ui/UserPickerReadOnlyIconsController.java b/src/com/android/systemui/car/statusicon/ui/UserPickerReadOnlyIconsController.java
index c05c9d0..ba1c869 100644
--- a/src/com/android/systemui/car/statusicon/ui/UserPickerReadOnlyIconsController.java
+++ b/src/com/android/systemui/car/statusicon/ui/UserPickerReadOnlyIconsController.java
@@ -48,8 +48,8 @@
ConfigurationController configurationController,
Provider<SystemUIQCViewController> qcViewControllerProvider,
Map<Class<?>, Provider<StatusIconController>> iconControllerCreators) {
- super(context, userTracker, resources, broadcastDispatcher, configurationController,
- qcViewControllerProvider, iconControllerCreators);
+ super(context, userTracker, carServiceProvider, resources, broadcastDispatcher,
+ configurationController, qcViewControllerProvider, iconControllerCreators);
}
@Override
diff --git a/src/com/android/systemui/car/systembar/CarSystemBarController.java b/src/com/android/systemui/car/systembar/CarSystemBarController.java
index 07f898f..663a401 100644
--- a/src/com/android/systemui/car/systembar/CarSystemBarController.java
+++ b/src/com/android/systemui/car/systembar/CarSystemBarController.java
@@ -36,6 +36,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.hvac.HvacPanelOverlayViewController;
import com.android.systemui.car.privacy.CameraPrivacyElementsProviderImpl;
import com.android.systemui.car.privacy.MicPrivacyElementsProviderImpl;
@@ -66,6 +67,7 @@
private final Context mContext;
private final UserTracker mUserTracker;
private final CarSystemBarViewFactory mCarSystemBarViewFactory;
+ private final CarServiceProvider mCarServiceProvider;
private final BroadcastDispatcher mBroadcastDispatcher;
private final ConfigurationController mConfigurationController;
private final ButtonSelectionStateController mButtonSelectionStateController;
@@ -120,6 +122,7 @@
public CarSystemBarController(Context context,
UserTracker userTracker,
CarSystemBarViewFactory carSystemBarViewFactory,
+ CarServiceProvider carServiceProvider,
BroadcastDispatcher broadcastDispatcher,
ConfigurationController configurationController,
ButtonSelectionStateController buttonSelectionStateController,
@@ -134,6 +137,7 @@
mContext = context;
mUserTracker = userTracker;
mCarSystemBarViewFactory = carSystemBarViewFactory;
+ mCarServiceProvider = carServiceProvider;
mBroadcastDispatcher = broadcastDispatcher;
mConfigurationController = configurationController;
mButtonSelectionStateController = buttonSelectionStateController;
@@ -465,7 +469,8 @@
@LayoutRes int panelLayoutRes) {
if (panelController == null) {
panelController = new StatusIconPanelController(mContext, mUserTracker,
- mBroadcastDispatcher, mConfigurationController, mQCViewControllerProvider);
+ mCarServiceProvider, mBroadcastDispatcher, mConfigurationController,
+ mQCViewControllerProvider);
panelController.attachPanel(mTopView.requireViewById(chipId), panelLayoutRes,
R.dimen.car_sensor_qc_panel_width, mPrivacyChipXOffset,
panelController.getDefaultYOffset(), Gravity.TOP | Gravity.END);
@@ -480,8 +485,8 @@
boolean profilePanelDisabledWhileDriving = mContext.getResources().getBoolean(
R.bool.config_profile_panel_disabled_while_driving);
mProfilePanelController = new StatusIconPanelController(mContext, mUserTracker,
- mBroadcastDispatcher, mConfigurationController, mQCViewControllerProvider,
- profilePanelDisabledWhileDriving);
+ mCarServiceProvider, mBroadcastDispatcher, mConfigurationController,
+ mQCViewControllerProvider, profilePanelDisabledWhileDriving);
mProfilePanelController.attachPanel(profilePickerView, R.layout.qc_profile_switcher,
R.dimen.car_profile_quick_controls_panel_width, Gravity.TOP | Gravity.END);
}
diff --git a/src/com/android/systemui/car/users/CarSystemUIUserUtil.java b/src/com/android/systemui/car/users/CarSystemUIUserUtil.java
index dbdce4a..c4ae42f 100644
--- a/src/com/android/systemui/car/users/CarSystemUIUserUtil.java
+++ b/src/com/android/systemui/car/users/CarSystemUIUserUtil.java
@@ -17,17 +17,14 @@
package com.android.systemui.car.users;
import android.app.ActivityManager;
-import android.app.ActivityOptions;
import android.car.CarOccupantZoneManager;
import android.content.Context;
-import android.content.Intent;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import androidx.annotation.Nullable;
-import com.android.systemui.car.userpicker.UserPickerActivity;
import com.android.systemui.settings.UserTracker;
/**
@@ -91,15 +88,4 @@
return carOccupantZoneManager.getAllDisplaysForOccupant(occupantZone).stream().anyMatch(
d -> d.getDisplayId() == displayId);
}
-
- /**
- * Launch the SystemUI UserPicker as the system user on the current primary display.
- */
- public static void launchUserPicker(Context context) {
- Intent intent = new Intent(context, UserPickerActivity.class).setFlags(
- Intent.FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
- ActivityOptions options = ActivityOptions.makeBasic()
- .setLaunchDisplayId(context.getDisplayId());
- context.startActivityAsUser(intent, options.toBundle(), UserHandle.SYSTEM);
- }
}
diff --git a/tests/src/com/android/systemui/car/statusicon/StatusIconPanelControllerTest.java b/tests/src/com/android/systemui/car/statusicon/StatusIconPanelControllerTest.java
index c426ac1..3460863 100644
--- a/tests/src/com/android/systemui/car/statusicon/StatusIconPanelControllerTest.java
+++ b/tests/src/com/android/systemui/car/statusicon/StatusIconPanelControllerTest.java
@@ -44,6 +44,7 @@
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.CarSystemUiTest;
import com.android.systemui.car.qc.SystemUIQCViewController;
import com.android.systemui.settings.UserTracker;
@@ -70,6 +71,8 @@
@Mock
private UserTracker mUserTracker;
@Mock
+ private CarServiceProvider mCarServiceProvider;
+ @Mock
private BroadcastDispatcher mBroadcastDispatcher;
@Mock
private ConfigurationController mConfigurationController;
@@ -86,7 +89,8 @@
when(mUserTracker.getUserHandle()).thenReturn(mUserHandle);
mStatusIconPanelController = new StatusIconPanelController(mContext, mUserTracker,
- mBroadcastDispatcher, mConfigurationController, () -> mSystemUIQCViewController);
+ mCarServiceProvider, mBroadcastDispatcher, mConfigurationController,
+ () -> mSystemUIQCViewController);
spyOn(mStatusIconPanelController);
mAnchorView = spy(new ImageView(mContext));
mAnchorView.setTag(mIconTag);
diff --git a/tests/src/com/android/systemui/car/systembar/CarSystemBarControllerTest.java b/tests/src/com/android/systemui/car/systembar/CarSystemBarControllerTest.java
index 18083b0..561871e 100644
--- a/tests/src/com/android/systemui/car/systembar/CarSystemBarControllerTest.java
+++ b/tests/src/com/android/systemui/car/systembar/CarSystemBarControllerTest.java
@@ -44,6 +44,7 @@
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.CarSystemUiTest;
import com.android.systemui.car.privacy.CameraPrivacyElementsProviderImpl;
import com.android.systemui.car.privacy.MicPrivacyElementsProviderImpl;
@@ -87,6 +88,8 @@
@Mock
private UserTracker mUserTracker;
@Mock
+ private CarServiceProvider mCarServiceProvider;
+ @Mock
private ActivityManager mActivityManager;
@Mock
private ButtonSelectionStateController mButtonSelectionStateController;
@@ -143,9 +146,10 @@
private CarSystemBarController createSystemBarController() {
return new CarSystemBarController(mSpiedContext, mUserTracker, mCarSystemBarViewFactory,
- mBroadcastDispatcher, mConfigurationController, mButtonSelectionStateController,
- () -> mUserNameViewController, () -> mMicPrivacyChipViewController,
- () -> mCameraPrivacyChipViewController, mButtonRoleHolderController,
+ mCarServiceProvider, mBroadcastDispatcher, mConfigurationController,
+ mButtonSelectionStateController, () -> mUserNameViewController,
+ () -> mMicPrivacyChipViewController, () -> mCameraPrivacyChipViewController,
+ mButtonRoleHolderController,
new SystemBarConfigs(mTestableResources.getResources()),
() -> mSystemUIQCViewController, () -> mMicPrivacyElementsProvider,
() -> mCameraPrivacyElementsProvider);