Loading packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +25 −16 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.car.Car; import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarUxRestrictionsManager; import android.car.hardware.power.CarPowerManager.CarPowerStateListener; import android.car.trust.CarTrustAgentEnrollmentManager; import android.content.Context; import android.graphics.PixelFormat; import android.graphics.Rect; Loading Loading @@ -182,6 +181,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt private boolean mHideNavBarForKeyboard; private boolean mBottomNavBarVisible; private CarUxRestrictionManagerWrapper mCarUxRestrictionManagerWrapper; private final CarPowerStateListener mCarPowerStateListener = (int state) -> { // When the car powers on, clear all notifications and mute/unread states. Loading Loading @@ -267,14 +268,16 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt } }); // Used by onDrivingStateChanged and it can be called inside // DrivingStateHelper.connectToCarService() mSwitchToGuestTimer = new SwitchToGuestTimer(mContext); // Register a listener for driving state changes. mDrivingStateHelper = new DrivingStateHelper(mContext, this::onDrivingStateChanged); mDrivingStateHelper.connectToCarService(); mPowerManagerHelper = new PowerManagerHelper(mContext, mCarPowerStateListener); mPowerManagerHelper.connectToCarService(); mSwitchToGuestTimer = new SwitchToGuestTimer(mContext); } private void restartNavBarsIfNecessary() { Loading Loading @@ -476,13 +479,23 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt animateCollapsePanels(); } }); Car car = Car.createCar(mContext); CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE); CarNotificationListener carNotificationListener = new CarNotificationListener(); CarUxRestrictionManagerWrapper carUxRestrictionManagerWrapper = new CarUxRestrictionManagerWrapper(); carUxRestrictionManagerWrapper.setCarUxRestrictionsManager(carUxRestrictionsManager); mCarUxRestrictionManagerWrapper = new CarUxRestrictionManagerWrapper(); // This can take time if car service is not ready up to this time. // TODO(b/142808072) Refactor CarUxRestrictionManagerWrapper to allow setting // CarUxRestrictionsManager later and switch to Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT. Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_WAIT_FOREVER, (car, ready) -> { if (!ready) { return; } CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE); mCarUxRestrictionManagerWrapper.setCarUxRestrictionsManager( carUxRestrictionsManager); }); mNotificationDataManager = new NotificationDataManager(); mNotificationDataManager.setOnUnseenCountUpdateListener( Loading Loading @@ -511,7 +524,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt mNotificationClickHandlerFactory, mNotificationDataManager); mNotificationClickHandlerFactory.setNotificationDataManager(mNotificationDataManager); carNotificationListener.registerAsSystemService(mContext, carUxRestrictionManagerWrapper, carNotificationListener.registerAsSystemService(mContext, mCarUxRestrictionManagerWrapper, carHeadsUpNotificationManager, mNotificationDataManager); mNotificationView = mStatusBarWindow.findViewById(R.id.notification_view); Loading Loading @@ -611,7 +624,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt mNotificationView, PreprocessingManager.getInstance(mContext), carNotificationListener, carUxRestrictionManagerWrapper, mCarUxRestrictionManagerWrapper, mNotificationDataManager); mNotificationViewController.enable(); } Loading Loading @@ -1061,12 +1074,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt UserSwitcherController userSwitcherController = Dependency.get(UserSwitcherController.class); if (userSwitcherController.useFullscreenUserSwitcher()) { Car car = Car.createCar(mContext); CarTrustAgentEnrollmentManager enrollmentManager = (CarTrustAgentEnrollmentManager) car .getCarManager(Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE); mFullscreenUserSwitcher = new FullscreenUserSwitcher(this, mStatusBarWindow.findViewById(R.id.fullscreen_user_switcher_stub), enrollmentManager, mContext); mStatusBarWindow.findViewById(R.id.fullscreen_user_switcher_stub), mContext); } else { super.createUserSwitcher(); } Loading packages/CarSystemUI/src/com/android/systemui/statusbar/car/DrivingStateHelper.java +20 −58 Original line number Diff line number Diff line Loading @@ -17,14 +17,11 @@ package com.android.systemui.statusbar.car; import android.car.Car; import android.car.CarNotConnectedException; import android.car.Car.CarServiceLifecycleListener; import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarDrivingStateManager; import android.car.drivingstate.CarDrivingStateManager.CarDrivingStateEventListener; import android.content.ComponentName; import android.content.Context; import android.content.ServiceConnection; import android.os.IBinder; import android.util.Log; import androidx.annotation.NonNull; Loading Loading @@ -55,16 +52,11 @@ public class DrivingStateHelper { if (mDrivingStateManager == null) { return false; } try { CarDrivingStateEvent currentState = mDrivingStateManager.getCurrentCarDrivingState(); if (currentState != null) { return currentState.eventValue == CarDrivingStateEvent.DRIVING_STATE_IDLING || currentState.eventValue == CarDrivingStateEvent.DRIVING_STATE_MOVING; } } catch (CarNotConnectedException e) { Log.e(TAG, "Cannot determine current driving state. Car not connected", e); } return false; // Default to false. } Loading @@ -72,27 +64,16 @@ public class DrivingStateHelper { * Establishes connection with the Car service. */ public void connectToCarService() { mCar = Car.createCar(mContext, mCarConnectionListener); if (mCar != null) { mCar.connect(); } mCar = Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, mCarServiceLifecycleListener); } /** * Disconnects from Car service and cleans up listeners. */ public void disconnectFromCarService() { if (mCar != null) { mCar.disconnect(); } private final CarServiceLifecycleListener mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { return; } private final ServiceConnection mCarConnectionListener = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { logD("Car Service connected"); try { mDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager( mDrivingStateManager = (CarDrivingStateManager) car.getCarManager( Car.CAR_DRIVING_STATE_SERVICE); if (mDrivingStateManager != null) { mDrivingStateManager.registerListener(mDrivingStateHandler); Loading @@ -101,27 +82,8 @@ public class DrivingStateHelper { } else { Log.e(TAG, "CarDrivingStateService service not available"); } } catch (CarNotConnectedException e) { Log.e(TAG, "Car not connected", e); } } @Override public void onServiceDisconnected(ComponentName name) { destroyDrivingStateManager(); } }; private void destroyDrivingStateManager() { try { if (mDrivingStateManager != null) { mDrivingStateManager.unregisterListener(); } } catch (CarNotConnectedException e) { Log.e(TAG, "Error unregistering listeners", e); } } private void logD(String message) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, message); Loading packages/CarSystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java +16 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.statusbar.car; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.car.Car; import android.car.trust.CarTrustAgentEnrollmentManager; import android.car.userlib.CarUserManagerHelper; import android.content.BroadcastReceiver; Loading Loading @@ -50,7 +51,7 @@ public class FullscreenUserSwitcher { private final CarStatusBar mStatusBar; private final Context mContext; private final UserManager mUserManager; private final CarTrustAgentEnrollmentManager mEnrollmentManager; private CarTrustAgentEnrollmentManager mEnrollmentManager; private CarTrustAgentUnlockDialogHelper mUnlockDialogHelper; private UserGridRecyclerView.UserRecord mSelectedUser; private CarUserManagerHelper mCarUserManagerHelper; Loading @@ -64,13 +65,11 @@ public class FullscreenUserSwitcher { mContext.unregisterReceiver(mUserUnlockReceiver); } }; private final Car mCar; public FullscreenUserSwitcher(CarStatusBar statusBar, ViewStub containerStub, CarTrustAgentEnrollmentManager enrollmentManager, Context context) { public FullscreenUserSwitcher(CarStatusBar statusBar, ViewStub containerStub, Context context) { mStatusBar = statusBar; mParent = containerStub.inflate(); mEnrollmentManager = enrollmentManager; mContext = context; View container = mParent.findViewById(R.id.container); Loading @@ -86,6 +85,15 @@ public class FullscreenUserSwitcher { mUnlockDialogHelper = new CarTrustAgentUnlockDialogHelper(mContext); mUserManager = mContext.getSystemService(UserManager.class); mCar = Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, (car, ready) -> { if (!ready) { return; } mEnrollmentManager = (CarTrustAgentEnrollmentManager) car .getCarManager(Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE); }); mShortAnimDuration = container.getResources() .getInteger(android.R.integer.config_shortAnimTime); IntentFilter filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED); Loading Loading @@ -201,6 +209,9 @@ public class FullscreenUserSwitcher { } private boolean hasTrustedDevice(int uid) { if (mEnrollmentManager == null) { // car service not ready, so it cannot be available. return false; } return !mEnrollmentManager.getEnrolledDeviceInfoForUser(uid).isEmpty(); } Loading packages/CarSystemUI/src/com/android/systemui/statusbar/car/PowerManagerHelper.java +16 −44 Original line number Diff line number Diff line Loading @@ -18,13 +18,10 @@ package com.android.systemui.statusbar.car; import android.annotation.NonNull; import android.car.Car; import android.car.CarNotConnectedException; import android.car.Car.CarServiceLifecycleListener; import android.car.hardware.power.CarPowerManager; import android.car.hardware.power.CarPowerManager.CarPowerStateListener; import android.content.ComponentName; import android.content.Context; import android.content.ServiceConnection; import android.os.IBinder; import android.util.Log; /** Loading @@ -39,55 +36,30 @@ public class PowerManagerHelper { private Car mCar; private CarPowerManager mCarPowerManager; private final ServiceConnection mCarConnectionListener = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { private final CarServiceLifecycleListener mCarServiceLifecycleListener; PowerManagerHelper(Context context, @NonNull CarPowerStateListener listener) { mContext = context; mCarPowerStateListener = listener; mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { return; } Log.d(TAG, "Car Service connected"); try { mCarPowerManager = (CarPowerManager) mCar.getCarManager(Car.POWER_SERVICE); mCarPowerManager = (CarPowerManager) car.getCarManager(Car.POWER_SERVICE); if (mCarPowerManager != null) { mCarPowerManager.setListener(mCarPowerStateListener); } else { Log.e(TAG, "CarPowerManager service not available"); } } catch (CarNotConnectedException e) { Log.e(TAG, "Car not connected", e); } } @Override public void onServiceDisconnected(ComponentName name) { destroyCarPowerManager(); } }; PowerManagerHelper(Context context, @NonNull CarPowerStateListener listener) { mContext = context; mCarPowerStateListener = listener; } /** * Connect to Car service. */ void connectToCarService() { mCar = Car.createCar(mContext, mCarConnectionListener); if (mCar != null) { mCar.connect(); } } /** * Disconnects from Car service. */ void disconnectFromCarService() { if (mCar != null) { mCar.disconnect(); } } private void destroyCarPowerManager() { if (mCarPowerManager != null) { mCarPowerManager.clearListener(); } mCar = Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, mCarServiceLifecycleListener); } } packages/CarSystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java +14 −47 Original line number Diff line number Diff line Loading @@ -20,15 +20,13 @@ import static android.car.VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL; import static android.car.VehiclePropertyIds.HVAC_TEMPERATURE_DISPLAY_UNITS; import android.car.Car; import android.car.Car.CarServiceLifecycleListener; import android.car.VehicleUnit; import android.car.hardware.CarPropertyValue; import android.car.hardware.hvac.CarHvacManager; import android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback; import android.content.ComponentName; import android.content.Context; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; import android.util.Log; import java.util.ArrayList; Loading @@ -52,6 +50,7 @@ public class HvacController { private Car mCar; private CarHvacManager mHvacManager; private HashMap<HvacKey, List<TemperatureView>> mTempComponents = new HashMap<>(); /** * Callback for getting changes from {@link CarHvacManager} and setting the UI elements to * match. Loading Loading @@ -83,40 +82,18 @@ public class HvacController { + " zone: " + zone); } }; /** * If the connection to car service goes away then restart it. */ private final IBinder.DeathRecipient mRestart = new IBinder.DeathRecipient() { @Override public void binderDied() { Log.d(TAG, "Death of HVAC triggering a restart"); if (mCar != null) { mCar.disconnect(); } destroyHvacManager(); mHandler.postDelayed(() -> mCar.connect(), BIND_TO_HVAC_RETRY_DELAY); private final CarServiceLifecycleListener mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { return; } }; /** * Registers callbacks and initializes components upon connection. */ private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { try { service.linkToDeath(mRestart, 0); mHvacManager = (CarHvacManager) mCar.getCarManager(Car.HVAC_SERVICE); mHvacManager = (CarHvacManager) car.getCarManager(Car.HVAC_SERVICE); mHvacManager.registerCallback(mHardwareCallback); initComponents(); } catch (Exception e) { Log.e(TAG, "Failed to correctly connect to HVAC", e); } } @Override public void onServiceDisconnected(ComponentName name) { destroyHvacManager(); } }; public HvacController(Context context) { Loading @@ -129,18 +106,8 @@ public class HvacController { */ public void connectToCarService() { mHandler = new Handler(); mCar = Car.createCar(mContext, mServiceConnection, mHandler); if (mCar != null) { // note: this connect call handles the retries mCar.connect(); } } private void destroyHvacManager() { if (mHvacManager != null) { mHvacManager.unregisterCallback(mHardwareCallback); mHvacManager = null; } mCar = Car.createCar(mContext, /* handler= */ mHandler, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, mCarServiceLifecycleListener); } /** Loading Loading
packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +25 −16 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.car.Car; import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarUxRestrictionsManager; import android.car.hardware.power.CarPowerManager.CarPowerStateListener; import android.car.trust.CarTrustAgentEnrollmentManager; import android.content.Context; import android.graphics.PixelFormat; import android.graphics.Rect; Loading Loading @@ -182,6 +181,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt private boolean mHideNavBarForKeyboard; private boolean mBottomNavBarVisible; private CarUxRestrictionManagerWrapper mCarUxRestrictionManagerWrapper; private final CarPowerStateListener mCarPowerStateListener = (int state) -> { // When the car powers on, clear all notifications and mute/unread states. Loading Loading @@ -267,14 +268,16 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt } }); // Used by onDrivingStateChanged and it can be called inside // DrivingStateHelper.connectToCarService() mSwitchToGuestTimer = new SwitchToGuestTimer(mContext); // Register a listener for driving state changes. mDrivingStateHelper = new DrivingStateHelper(mContext, this::onDrivingStateChanged); mDrivingStateHelper.connectToCarService(); mPowerManagerHelper = new PowerManagerHelper(mContext, mCarPowerStateListener); mPowerManagerHelper.connectToCarService(); mSwitchToGuestTimer = new SwitchToGuestTimer(mContext); } private void restartNavBarsIfNecessary() { Loading Loading @@ -476,13 +479,23 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt animateCollapsePanels(); } }); Car car = Car.createCar(mContext); CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE); CarNotificationListener carNotificationListener = new CarNotificationListener(); CarUxRestrictionManagerWrapper carUxRestrictionManagerWrapper = new CarUxRestrictionManagerWrapper(); carUxRestrictionManagerWrapper.setCarUxRestrictionsManager(carUxRestrictionsManager); mCarUxRestrictionManagerWrapper = new CarUxRestrictionManagerWrapper(); // This can take time if car service is not ready up to this time. // TODO(b/142808072) Refactor CarUxRestrictionManagerWrapper to allow setting // CarUxRestrictionsManager later and switch to Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT. Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_WAIT_FOREVER, (car, ready) -> { if (!ready) { return; } CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE); mCarUxRestrictionManagerWrapper.setCarUxRestrictionsManager( carUxRestrictionsManager); }); mNotificationDataManager = new NotificationDataManager(); mNotificationDataManager.setOnUnseenCountUpdateListener( Loading Loading @@ -511,7 +524,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt mNotificationClickHandlerFactory, mNotificationDataManager); mNotificationClickHandlerFactory.setNotificationDataManager(mNotificationDataManager); carNotificationListener.registerAsSystemService(mContext, carUxRestrictionManagerWrapper, carNotificationListener.registerAsSystemService(mContext, mCarUxRestrictionManagerWrapper, carHeadsUpNotificationManager, mNotificationDataManager); mNotificationView = mStatusBarWindow.findViewById(R.id.notification_view); Loading Loading @@ -611,7 +624,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt mNotificationView, PreprocessingManager.getInstance(mContext), carNotificationListener, carUxRestrictionManagerWrapper, mCarUxRestrictionManagerWrapper, mNotificationDataManager); mNotificationViewController.enable(); } Loading Loading @@ -1061,12 +1074,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt UserSwitcherController userSwitcherController = Dependency.get(UserSwitcherController.class); if (userSwitcherController.useFullscreenUserSwitcher()) { Car car = Car.createCar(mContext); CarTrustAgentEnrollmentManager enrollmentManager = (CarTrustAgentEnrollmentManager) car .getCarManager(Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE); mFullscreenUserSwitcher = new FullscreenUserSwitcher(this, mStatusBarWindow.findViewById(R.id.fullscreen_user_switcher_stub), enrollmentManager, mContext); mStatusBarWindow.findViewById(R.id.fullscreen_user_switcher_stub), mContext); } else { super.createUserSwitcher(); } Loading
packages/CarSystemUI/src/com/android/systemui/statusbar/car/DrivingStateHelper.java +20 −58 Original line number Diff line number Diff line Loading @@ -17,14 +17,11 @@ package com.android.systemui.statusbar.car; import android.car.Car; import android.car.CarNotConnectedException; import android.car.Car.CarServiceLifecycleListener; import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarDrivingStateManager; import android.car.drivingstate.CarDrivingStateManager.CarDrivingStateEventListener; import android.content.ComponentName; import android.content.Context; import android.content.ServiceConnection; import android.os.IBinder; import android.util.Log; import androidx.annotation.NonNull; Loading Loading @@ -55,16 +52,11 @@ public class DrivingStateHelper { if (mDrivingStateManager == null) { return false; } try { CarDrivingStateEvent currentState = mDrivingStateManager.getCurrentCarDrivingState(); if (currentState != null) { return currentState.eventValue == CarDrivingStateEvent.DRIVING_STATE_IDLING || currentState.eventValue == CarDrivingStateEvent.DRIVING_STATE_MOVING; } } catch (CarNotConnectedException e) { Log.e(TAG, "Cannot determine current driving state. Car not connected", e); } return false; // Default to false. } Loading @@ -72,27 +64,16 @@ public class DrivingStateHelper { * Establishes connection with the Car service. */ public void connectToCarService() { mCar = Car.createCar(mContext, mCarConnectionListener); if (mCar != null) { mCar.connect(); } mCar = Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, mCarServiceLifecycleListener); } /** * Disconnects from Car service and cleans up listeners. */ public void disconnectFromCarService() { if (mCar != null) { mCar.disconnect(); } private final CarServiceLifecycleListener mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { return; } private final ServiceConnection mCarConnectionListener = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { logD("Car Service connected"); try { mDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager( mDrivingStateManager = (CarDrivingStateManager) car.getCarManager( Car.CAR_DRIVING_STATE_SERVICE); if (mDrivingStateManager != null) { mDrivingStateManager.registerListener(mDrivingStateHandler); Loading @@ -101,27 +82,8 @@ public class DrivingStateHelper { } else { Log.e(TAG, "CarDrivingStateService service not available"); } } catch (CarNotConnectedException e) { Log.e(TAG, "Car not connected", e); } } @Override public void onServiceDisconnected(ComponentName name) { destroyDrivingStateManager(); } }; private void destroyDrivingStateManager() { try { if (mDrivingStateManager != null) { mDrivingStateManager.unregisterListener(); } } catch (CarNotConnectedException e) { Log.e(TAG, "Error unregistering listeners", e); } } private void logD(String message) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, message); Loading
packages/CarSystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java +16 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.statusbar.car; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.car.Car; import android.car.trust.CarTrustAgentEnrollmentManager; import android.car.userlib.CarUserManagerHelper; import android.content.BroadcastReceiver; Loading Loading @@ -50,7 +51,7 @@ public class FullscreenUserSwitcher { private final CarStatusBar mStatusBar; private final Context mContext; private final UserManager mUserManager; private final CarTrustAgentEnrollmentManager mEnrollmentManager; private CarTrustAgentEnrollmentManager mEnrollmentManager; private CarTrustAgentUnlockDialogHelper mUnlockDialogHelper; private UserGridRecyclerView.UserRecord mSelectedUser; private CarUserManagerHelper mCarUserManagerHelper; Loading @@ -64,13 +65,11 @@ public class FullscreenUserSwitcher { mContext.unregisterReceiver(mUserUnlockReceiver); } }; private final Car mCar; public FullscreenUserSwitcher(CarStatusBar statusBar, ViewStub containerStub, CarTrustAgentEnrollmentManager enrollmentManager, Context context) { public FullscreenUserSwitcher(CarStatusBar statusBar, ViewStub containerStub, Context context) { mStatusBar = statusBar; mParent = containerStub.inflate(); mEnrollmentManager = enrollmentManager; mContext = context; View container = mParent.findViewById(R.id.container); Loading @@ -86,6 +85,15 @@ public class FullscreenUserSwitcher { mUnlockDialogHelper = new CarTrustAgentUnlockDialogHelper(mContext); mUserManager = mContext.getSystemService(UserManager.class); mCar = Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, (car, ready) -> { if (!ready) { return; } mEnrollmentManager = (CarTrustAgentEnrollmentManager) car .getCarManager(Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE); }); mShortAnimDuration = container.getResources() .getInteger(android.R.integer.config_shortAnimTime); IntentFilter filter = new IntentFilter(Intent.ACTION_USER_UNLOCKED); Loading Loading @@ -201,6 +209,9 @@ public class FullscreenUserSwitcher { } private boolean hasTrustedDevice(int uid) { if (mEnrollmentManager == null) { // car service not ready, so it cannot be available. return false; } return !mEnrollmentManager.getEnrolledDeviceInfoForUser(uid).isEmpty(); } Loading
packages/CarSystemUI/src/com/android/systemui/statusbar/car/PowerManagerHelper.java +16 −44 Original line number Diff line number Diff line Loading @@ -18,13 +18,10 @@ package com.android.systemui.statusbar.car; import android.annotation.NonNull; import android.car.Car; import android.car.CarNotConnectedException; import android.car.Car.CarServiceLifecycleListener; import android.car.hardware.power.CarPowerManager; import android.car.hardware.power.CarPowerManager.CarPowerStateListener; import android.content.ComponentName; import android.content.Context; import android.content.ServiceConnection; import android.os.IBinder; import android.util.Log; /** Loading @@ -39,55 +36,30 @@ public class PowerManagerHelper { private Car mCar; private CarPowerManager mCarPowerManager; private final ServiceConnection mCarConnectionListener = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { private final CarServiceLifecycleListener mCarServiceLifecycleListener; PowerManagerHelper(Context context, @NonNull CarPowerStateListener listener) { mContext = context; mCarPowerStateListener = listener; mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { return; } Log.d(TAG, "Car Service connected"); try { mCarPowerManager = (CarPowerManager) mCar.getCarManager(Car.POWER_SERVICE); mCarPowerManager = (CarPowerManager) car.getCarManager(Car.POWER_SERVICE); if (mCarPowerManager != null) { mCarPowerManager.setListener(mCarPowerStateListener); } else { Log.e(TAG, "CarPowerManager service not available"); } } catch (CarNotConnectedException e) { Log.e(TAG, "Car not connected", e); } } @Override public void onServiceDisconnected(ComponentName name) { destroyCarPowerManager(); } }; PowerManagerHelper(Context context, @NonNull CarPowerStateListener listener) { mContext = context; mCarPowerStateListener = listener; } /** * Connect to Car service. */ void connectToCarService() { mCar = Car.createCar(mContext, mCarConnectionListener); if (mCar != null) { mCar.connect(); } } /** * Disconnects from Car service. */ void disconnectFromCarService() { if (mCar != null) { mCar.disconnect(); } } private void destroyCarPowerManager() { if (mCarPowerManager != null) { mCarPowerManager.clearListener(); } mCar = Car.createCar(mContext, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, mCarServiceLifecycleListener); } }
packages/CarSystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java +14 −47 Original line number Diff line number Diff line Loading @@ -20,15 +20,13 @@ import static android.car.VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL; import static android.car.VehiclePropertyIds.HVAC_TEMPERATURE_DISPLAY_UNITS; import android.car.Car; import android.car.Car.CarServiceLifecycleListener; import android.car.VehicleUnit; import android.car.hardware.CarPropertyValue; import android.car.hardware.hvac.CarHvacManager; import android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback; import android.content.ComponentName; import android.content.Context; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; import android.util.Log; import java.util.ArrayList; Loading @@ -52,6 +50,7 @@ public class HvacController { private Car mCar; private CarHvacManager mHvacManager; private HashMap<HvacKey, List<TemperatureView>> mTempComponents = new HashMap<>(); /** * Callback for getting changes from {@link CarHvacManager} and setting the UI elements to * match. Loading Loading @@ -83,40 +82,18 @@ public class HvacController { + " zone: " + zone); } }; /** * If the connection to car service goes away then restart it. */ private final IBinder.DeathRecipient mRestart = new IBinder.DeathRecipient() { @Override public void binderDied() { Log.d(TAG, "Death of HVAC triggering a restart"); if (mCar != null) { mCar.disconnect(); } destroyHvacManager(); mHandler.postDelayed(() -> mCar.connect(), BIND_TO_HVAC_RETRY_DELAY); private final CarServiceLifecycleListener mCarServiceLifecycleListener = (car, ready) -> { if (!ready) { return; } }; /** * Registers callbacks and initializes components upon connection. */ private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { try { service.linkToDeath(mRestart, 0); mHvacManager = (CarHvacManager) mCar.getCarManager(Car.HVAC_SERVICE); mHvacManager = (CarHvacManager) car.getCarManager(Car.HVAC_SERVICE); mHvacManager.registerCallback(mHardwareCallback); initComponents(); } catch (Exception e) { Log.e(TAG, "Failed to correctly connect to HVAC", e); } } @Override public void onServiceDisconnected(ComponentName name) { destroyHvacManager(); } }; public HvacController(Context context) { Loading @@ -129,18 +106,8 @@ public class HvacController { */ public void connectToCarService() { mHandler = new Handler(); mCar = Car.createCar(mContext, mServiceConnection, mHandler); if (mCar != null) { // note: this connect call handles the retries mCar.connect(); } } private void destroyHvacManager() { if (mHvacManager != null) { mHvacManager.unregisterCallback(mHardwareCallback); mHvacManager = null; } mCar = Car.createCar(mContext, /* handler= */ mHandler, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT, mCarServiceLifecycleListener); } /** Loading