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 {