From 5d50fbb6c92933696fcc9aad48e43158ee28fa8c Mon Sep 17 00:00:00 2001 From: Vania Desmonda Date: Fri, 20 Dec 2024 17:25:48 +0000 Subject: [PATCH] Add SysUiProxy method to start transition on desktop task launch. This forces the task to correctly start the TRANSIT_OPEN transiiton in Desktop mode when launching an intent from the taskbar and prevent it from opening in full screen. Fixes: 361366053 Test: manual test Flag: EXEMPT bugfix Change-Id: I6d59705aa55745c3425266dacbb012dd4e2b1b03 --- .../taskbar/TaskbarActivityContext.java | 17 ++++++++++------- .../launcher3/taskbar/TaskbarManager.java | 3 ++- .../src/com/android/quickstep/SystemUiProxy.kt | 9 +++++++++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index ee9c6a1e05..7c0b899371 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -228,6 +228,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { private DeviceProfile mPersistentTaskbarDeviceProfile; private final LauncherPrefs mLauncherPrefs; + private final SystemUiProxy mSysUiProxy; private TaskbarFeatureEvaluator mTaskbarFeatureEvaluator; @@ -237,10 +238,11 @@ public class TaskbarActivityContext extends BaseTaskbarContext { @Nullable Context navigationBarPanelContext, DeviceProfile launcherDp, TaskbarNavButtonController buttonController, ScopedUnfoldTransitionProgressProvider unfoldTransitionProgressProvider, - boolean isPrimaryDisplay) { + boolean isPrimaryDisplay, SystemUiProxy sysUiProxy) { super(windowContext); mIsPrimaryDisplay = isPrimaryDisplay; mNavigationBarPanelContext = navigationBarPanelContext; + mSysUiProxy = sysUiProxy; applyDeviceProfile(launcherDp); final Resources resources = getResources(); mTaskbarFeatureEvaluator = TaskbarFeatureEvaluator.getInstance(this); @@ -1630,12 +1632,12 @@ public class TaskbarActivityContext extends BaseTaskbarContext { intent.getComponent(), info.user, intent.getSourceBounds(), null); return; } + int displayId = getDisplay() == null ? DEFAULT_DISPLAY : getDisplay().getDisplayId(); // TODO(b/216683257): Use startActivityForResult for search results that require it. if (taskInRecents != null) { // Re launch instance from recents ActivityOptionsWrapper opts = getActivityLaunchOptions(null, info); - opts.options.setLaunchDisplayId( - getDisplay() == null ? DEFAULT_DISPLAY : getDisplay().getDisplayId()); + opts.options.setLaunchDisplayId(displayId); if (ActivityManagerWrapper.getInstance() .startActivityFromRecents(taskInRecents.key, opts.options)) { mControllers.uiController.getRecentsView() @@ -1643,12 +1645,13 @@ public class TaskbarActivityContext extends BaseTaskbarContext { return; } } - ActivityOptionsWrapper opts = null; if (areDesktopTasksVisible()) { - opts = getActivityLaunchDesktopOptions(info); + ActivityOptionsWrapper opts = getActivityLaunchDesktopOptions(info); + Bundle optionsBundle = opts == null ? null : opts.options.toBundle(); + mSysUiProxy.startLaunchIntentTransition(intent, optionsBundle, displayId); + } else { + startActivity(intent, null); } - Bundle optionsBundle = opts == null ? null : opts.options.toBundle(); - startActivity(intent, optionsBundle); } catch (NullPointerException | ActivityNotFoundException | SecurityException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT) .show(); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index 3fa0e8e426..7734ad9a0f 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -795,7 +795,8 @@ public class TaskbarManager { private TaskbarActivityContext createTaskbarActivityContext(DeviceProfile dp, int displayId) { TaskbarActivityContext newTaskbar = new TaskbarActivityContext(mWindowContext, mNavigationBarPanelContext, dp, mDefaultNavButtonController, - mUnfoldProgressProvider, isDefaultDisplay(displayId)); + mUnfoldProgressProvider, isDefaultDisplay(displayId), + SystemUiProxy.INSTANCE.get(mWindowContext)); addTaskbarToMap(displayId, newTaskbar); return newTaskbar; diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.kt b/quickstep/src/com/android/quickstep/SystemUiProxy.kt index 75694af97d..f1dcdb9f56 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.kt +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.kt @@ -836,6 +836,15 @@ class SystemUiProxy @Inject constructor(@ApplicationContext private val context: splitScreen?.startIntent(intent, userId, fillInIntent, position, options, instanceId) } + /** + * Call the desktop mode interface to start a TRANSIT_OPEN transition when launching an intent + * from the taskbar so that it can be handled in desktop mode. + */ + fun startLaunchIntentTransition(intent: Intent, options: Bundle, displayId: Int) = + executeWithErrorLog({ "Failed call startLaunchIntentTransition" }) { + desktopMode?.startLaunchIntentTransition(intent, options, displayId) + } + // // One handed //