Snap for 8570526 from a4bcae1fe2f9239e2d1f50c73263d8e6b8ca478c to mainline-tzdata4-release

Change-Id: Iae7d98e19ca9f72151178c997e21869ad9e802d8
diff --git a/src/com/android/car/carlauncher/CarLauncher.java b/src/com/android/car/carlauncher/CarLauncher.java
index 1842d15..7a62dc3 100644
--- a/src/com/android/car/carlauncher/CarLauncher.java
+++ b/src/com/android/car/carlauncher/CarLauncher.java
@@ -18,6 +18,7 @@
 
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING;
+import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_UNLOCKED;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
 
 import android.app.ActivityManager;
@@ -38,6 +39,7 @@
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.util.Log;
 import android.view.Display;
 import android.view.ViewGroup;
@@ -81,6 +83,7 @@
             new AtomicReference<>();
 
     private ActivityManager mActivityManager;
+    private UserManager mUserManager;
     private CarUserManager mCarUserManager;
     private TaskViewManager mTaskViewManager;
 
@@ -179,11 +182,20 @@
             Log.d(TAG, "UserLifecycleListener.onEvent: For User " + getUserId()
                     + ", received an event " + event);
         }
+        // When user-unlocked, if Maps isn't launched yet, then try to start it.
+        if (event.getEventType() == USER_LIFECYCLE_EVENT_TYPE_UNLOCKED
+                && getUserId() == event.getUserId()
+                && mTaskViewTaskId == INVALID_TASK_ID) {
+            startMapsInTaskView();
+            return;
+        }
 
         // When user-switching, onDestroy in the previous user's CarLauncher isn't called.
         // So tries to release the resource explicitly.
-        if (getUserId() == event.getPreviousUserId()) {
+        if (event.getEventType() == USER_LIFECYCLE_EVENT_TYPE_SWITCHING
+                && getUserId() == event.getPreviousUserId()) {
             release();
+            return;
         }
     };
 
@@ -234,8 +246,8 @@
                         return;
                     }
                     setCarUserManager((CarUserManager) car.getCarManager(Car.CAR_USER_SERVICE));
-                    // Only listen to user switching events.
                     UserLifecycleEventFilter filter = new UserLifecycleEventFilter.Builder()
+                            .addEventType(USER_LIFECYCLE_EVENT_TYPE_UNLOCKED)
                             .addEventType(USER_LIFECYCLE_EVENT_TYPE_SWITCHING).build();
                     mCarUserManager.addListener(getMainExecutor(), filter, mUserLifecycleListener);
                     CarActivityManager carAM = (CarActivityManager) car.getCarManager(
@@ -245,6 +257,7 @@
                 });
 
         mActivityManager = getSystemService(ActivityManager.class);
+        mUserManager = getSystemService(UserManager.class);
         mCarLauncherTaskId = getTaskId();
         TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
 
@@ -330,15 +343,22 @@
 
     private void startMapsInTaskView() {
         if (mTaskView == null || !mTaskViewReady) {
+            if (DEBUG) Log.d(TAG, "Can't start Maps due to TaskView isn't ready.");
+            return;
+        }
+        if (!mUserManager.isUserUnlocked()) {
+            if (DEBUG) Log.d(TAG, "Can't start Maps due to the user isn't unlocked.");
             return;
         }
         // If we happen to be be resurfaced into a multi display mode we skip launching content
         // in the activity view as we will get recreated anyway.
         if (isInMultiWindowMode() || isInPictureInPictureMode()) {
+            if (DEBUG) Log.d(TAG, "Can't start Maps due to CarLauncher isn't in a correct mode");
             return;
         }
         // Don't start Maps when the display is off for ActivityVisibilityTests.
         if (getDisplay().getState() != Display.STATE_ON) {
+            if (DEBUG) Log.d(TAG, "Can't start Maps due to the display is off");
             return;
         }
         try {