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);