Initialize user lifecycle state in initClusterHome()

There were cases that the current user was unlocked even before the
ClusterHomeApplication was created thus the listener did not receive the
user_unlocked lifecycle event to start the UI_TYPE_START activity.
Now initClusterHome() calls UserManager#isUserUnlocked() to initialize
mUserLifeCycleEvent field with the correct state.

Bug: 312519113

Test: Manually using the emulator

Change-Id: I8c01cd56ae8d20567102fc4f91d653f1bd4f2ef8
diff --git a/ClusterHomeSample/src/com/android/car/cluster/home/ClusterHomeApplication.java b/ClusterHomeSample/src/com/android/car/cluster/home/ClusterHomeApplication.java
index 30e368f..280e589 100644
--- a/ClusterHomeSample/src/com/android/car/cluster/home/ClusterHomeApplication.java
+++ b/ClusterHomeSample/src/com/android/car/cluster/home/ClusterHomeApplication.java
@@ -58,6 +58,7 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.util.ArraySet;
 import android.util.Log;
 import android.view.Display;
@@ -79,10 +80,11 @@
     private static final byte UI_AVAILABLE = 1;
 
     private PackageManager mPackageManager;
+    private UserManager mUserManager;
     private IActivityTaskManager mAtm;
     private InputManager mInputManager;
     private ClusterHomeManager mHomeManager;
-    private CarUserManager mUserManager;
+    private CarUserManager mCarUserManager;
     private CarInputManager mCarInputManager;
     private CarAppFocusManager mAppFocusManager;
     private ClusterState mClusterState;
@@ -160,6 +162,7 @@
                 ComponentName.unflattenFromString(getString(R.string.config_clusterPhoneActivity)));
         mDefaultClusterActivitySize = mClusterActivities.size();
         mPackageManager = getApplicationContext().getPackageManager();
+        mUserManager = getApplicationContext().getSystemService(UserManager.class);
         mAtm = ActivityTaskManager.getService();
         try {
             mAtm.registerTaskStackListener(mTaskStackListener);
@@ -173,7 +176,7 @@
                 (car, ready) -> {
                     if (!ready) return;
                     mHomeManager = (ClusterHomeManager) car.getCarManager(Car.CLUSTER_HOME_SERVICE);
-                    mUserManager = (CarUserManager) car.getCarManager(Car.CAR_USER_SERVICE);
+                    mCarUserManager = (CarUserManager) car.getCarManager(Car.CAR_USER_SERVICE);
                     mCarInputManager = (CarInputManager) car.getCarManager(Car.CAR_INPUT_SERVICE);
                     mAppFocusManager = (CarAppFocusManager) car.getCarManager(
                             Car.APP_FOCUS_SERVICE);
@@ -195,6 +198,7 @@
         if (mIsLightMode) {
             return;
         }
+
         mHomeManager.registerClusterStateListener(getMainExecutor(), mClusterHomeCallback);
         mClusterState = mHomeManager.getClusterState();
         if (!mClusterState.on) {
@@ -202,14 +206,16 @@
         }
         mUiAvailability = buildUiAvailability(ActivityManager.getCurrentUser());
         mHomeManager.reportState(mClusterState.uiType, UI_TYPE_CLUSTER_NONE, mUiAvailability);
-        mHomeManager.registerClusterStateListener(getMainExecutor(), mClusterHomeCallback);
 
         // Using the filter, only listens to the current user starting or unlocked events.
         UserLifecycleEventFilter filter = new UserLifecycleEventFilter.Builder()
                 .addUser(UserHandle.CURRENT)
                 .addEventType(USER_LIFECYCLE_EVENT_TYPE_STARTING)
                 .addEventType(USER_LIFECYCLE_EVENT_TYPE_UNLOCKED).build();
-        mUserManager.addListener(getMainExecutor(), filter, mUserLifecycleListener);
+        mCarUserManager.addListener(getMainExecutor(), filter, mUserLifecycleListener);
+        if (mUserManager.isUserUnlocked(UserHandle.of(ActivityManager.getCurrentUser()))) {
+            mUserLifeCycleEvent = USER_LIFECYCLE_EVENT_TYPE_UNLOCKED;
+        }
 
         mAppFocusManager.addFocusListener(mAppFocusChangedListener,
                 CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
@@ -232,7 +238,7 @@
     public void onTerminate() {
         if (!mIsLightMode) {
             mCarInputManager.releaseInputEventCapture(DISPLAY_TYPE_INSTRUMENT_CLUSTER);
-            mUserManager.removeListener(mUserLifecycleListener);
+            mCarUserManager.removeListener(mUserLifecycleListener);
             mHomeManager.unregisterClusterStateListener(mClusterHomeCallback);
             try {
                 mAtm.unregisterTaskStackListener(mTaskStackListener);