diff options
7 files changed, 59 insertions, 47 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/ComponentUtils.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/common/ComponentUtils.kt new file mode 100644 index 000000000000..67592e60e954 --- /dev/null +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/ComponentUtils.kt @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.wm.shell.common + +import android.app.PendingIntent +import android.content.ComponentName +import android.content.Intent +import com.android.wm.shell.ShellTaskOrganizer + +/** Utils to obtain [ComponentName]s. */ +object ComponentUtils { + /** Retrieves the package name from an [Intent]. */ + @JvmStatic + fun getPackageName(intent: Intent?): String? = intent?.component?.packageName + + /** Retrieves the package name from a [PendingIntent]. */ + @JvmStatic + fun getPackageName(pendingIntent: PendingIntent?): String? = + getPackageName(pendingIntent?.intent) + + /** Retrieves the package name from a [taskId]. */ + @JvmStatic + fun getPackageName(taskId: Int, taskOrganizer: ShellTaskOrganizer): String? { + val taskInfo = taskOrganizer.getRunningTaskInfo(taskId) + return getPackageName(taskInfo?.baseIntent) + } +} diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenUtils.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenUtils.java index 9113c0a53178..83e5e31bd125 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenUtils.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenUtils.java @@ -27,14 +27,10 @@ import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSIT import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED; import android.app.ActivityManager; -import android.app.PendingIntent; -import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Rect; -import androidx.annotation.Nullable; - import com.android.internal.util.ArrayUtils; import com.android.wm.shell.Flags; import com.android.wm.shell.ShellTaskOrganizer; @@ -65,31 +61,6 @@ public class SplitScreenUtils { && ArrayUtils.contains(CONTROLLED_WINDOWING_MODES, taskInfo.getWindowingMode()); } - /** Retrieve package name from an intent */ - @Nullable - public static String getPackageName(Intent intent) { - if (intent == null || intent.getComponent() == null) { - return null; - } - return intent.getComponent().getPackageName(); - } - - /** Retrieve package name from a PendingIntent */ - @Nullable - public static String getPackageName(PendingIntent pendingIntent) { - if (pendingIntent == null || pendingIntent.getIntent() == null) { - return null; - } - return getPackageName(pendingIntent.getIntent()); - } - - /** Retrieve package name from a taskId */ - @Nullable - public static String getPackageName(int taskId, ShellTaskOrganizer taskOrganizer) { - final ActivityManager.RunningTaskInfo taskInfo = taskOrganizer.getRunningTaskInfo(taskId); - return taskInfo != null ? getPackageName(taskInfo.baseIntent) : null; - } - /** Retrieve user id from a taskId */ public static int getUserId(int taskId, ShellTaskOrganizer taskOrganizer) { final ActivityManager.RunningTaskInfo taskInfo = taskOrganizer.getRunningTaskInfo(taskId); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java index bd676ce69cfe..bba778d9f438 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java @@ -68,12 +68,12 @@ import androidx.annotation.Nullable; import com.android.internal.protolog.ProtoLog; import com.android.wm.shell.R; import com.android.wm.shell.ShellTaskOrganizer; +import com.android.wm.shell.common.ComponentUtils; import com.android.wm.shell.common.pip.PipBoundsAlgorithm; import com.android.wm.shell.common.pip.PipBoundsState; import com.android.wm.shell.common.pip.PipDisplayLayoutState; import com.android.wm.shell.common.pip.PipMenuController; import com.android.wm.shell.common.pip.PipUtils; -import com.android.wm.shell.common.split.SplitScreenUtils; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.shared.TransitionUtil; import com.android.wm.shell.shared.pip.PipContentOverlay; @@ -1359,7 +1359,7 @@ public class PipTransition extends PipTransitionController { public boolean isPackageActiveInPip(@Nullable String packageName) { final TaskInfo inPipTask = mPipOrganizer.getTaskInfo(); return packageName != null && inPipTask != null && mPipOrganizer.isInPip() - && packageName.equals(SplitScreenUtils.getPackageName(inPipTask.baseIntent)); + && packageName.equals(ComponentUtils.getPackageName(inPipTask.baseIntent)); } private void updatePipForUnhandledTransition(@NonNull TransitionInfo.Change pipChange, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java index 38015ca6d45f..0a42c71ce095 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java @@ -57,12 +57,12 @@ import androidx.annotation.Nullable; import com.android.internal.util.Preconditions; import com.android.window.flags.Flags; import com.android.wm.shell.ShellTaskOrganizer; +import com.android.wm.shell.common.ComponentUtils; import com.android.wm.shell.common.pip.PipBoundsAlgorithm; import com.android.wm.shell.common.pip.PipBoundsState; import com.android.wm.shell.common.pip.PipDisplayLayoutState; import com.android.wm.shell.common.pip.PipMenuController; import com.android.wm.shell.common.pip.PipUtils; -import com.android.wm.shell.common.split.SplitScreenUtils; import com.android.wm.shell.desktopmode.DesktopRepository; import com.android.wm.shell.desktopmode.DesktopUserRepositories; import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider; @@ -1008,6 +1008,6 @@ public class PipTransition extends PipTransitionController implements public boolean isPackageActiveInPip(@Nullable String packageName) { final TaskInfo inPipTask = mPipTransitionState.getPipTaskInfo(); return packageName != null && inPipTask != null && mPipTransitionState.isInPip() - && packageName.equals(SplitScreenUtils.getPackageName(inPipTask.baseIntent)); + && packageName.equals(ComponentUtils.getPackageName(inPipTask.baseIntent)); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java index c724135aeced..9e88a260ac44 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java @@ -82,6 +82,7 @@ import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.R; import com.android.wm.shell.RootTaskDisplayAreaOrganizer; import com.android.wm.shell.ShellTaskOrganizer; +import com.android.wm.shell.common.ComponentUtils; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.DisplayInsetsController; @@ -682,7 +683,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, final String packageName1 = shortcutInfo.getPackage(); // NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in // recents that hasn't launched and is not being organized - final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer); + final String packageName2 = ComponentUtils.getPackageName(taskId, mTaskOrganizer); final int userId1 = shortcutInfo.getUserId(); final int userId2 = SplitScreenUtils.getUserId(taskId, mTaskOrganizer); if (samePackage(packageName1, packageName2, userId1, userId2)) { @@ -727,10 +728,10 @@ public class SplitScreenController implements SplitDragPolicy.Starter, @SplitPosition int splitPosition, @PersistentSnapPosition int snapPosition, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { Intent fillInIntent = null; - final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent); + final String packageName1 = ComponentUtils.getPackageName(pendingIntent); // NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in // recents that hasn't launched and is not being organized - final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer); + final String packageName2 = ComponentUtils.getPackageName(taskId, mTaskOrganizer); final int userId2 = SplitScreenUtils.getUserId(taskId, mTaskOrganizer); boolean setSecondIntentMultipleTask = false; if (samePackage(packageName1, packageName2, userId1, userId2)) { @@ -766,8 +767,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter, InstanceId instanceId) { Intent fillInIntent1 = null; Intent fillInIntent2 = null; - final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent1); - final String packageName2 = SplitScreenUtils.getPackageName(pendingIntent2); + final String packageName1 = ComponentUtils.getPackageName(pendingIntent1); + final String packageName2 = ComponentUtils.getPackageName(pendingIntent2); final ActivityOptions activityOptions1 = options1 != null ? ActivityOptions.fromBundle(options1) : ActivityOptions.makeBasic(); final ActivityOptions activityOptions2 = options2 != null @@ -835,7 +836,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, if (fillInIntent == null) fillInIntent = new Intent(); fillInIntent.addFlags(FLAG_ACTIVITY_NO_USER_ACTION); - final String packageName1 = SplitScreenUtils.getPackageName(intent); + final String packageName1 = ComponentUtils.getPackageName(intent); final String packageName2 = getPackageName(reverseSplitPosition(position), hideTaskToken); final int userId2 = getUserId(reverseSplitPosition(position), hideTaskToken); final ComponentName component = intent.getIntent().getComponent(); @@ -900,7 +901,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter, } } - return taskInfo != null ? SplitScreenUtils.getPackageName(taskInfo.baseIntent) : null; + return taskInfo != null ? ComponentUtils.getPackageName(taskInfo.baseIntent) : null; } /** diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index b6bd879c75eb..c27ef295db51 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -131,6 +131,7 @@ import com.android.internal.protolog.ProtoLog; import com.android.launcher3.icons.IconProvider; import com.android.wm.shell.R; import com.android.wm.shell.ShellTaskOrganizer; +import com.android.wm.shell.common.ComponentUtils; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.DisplayInsetsController; @@ -140,7 +141,6 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.split.OffscreenTouchZone; import com.android.wm.shell.common.split.SplitDecorManager; import com.android.wm.shell.common.split.SplitLayout; -import com.android.wm.shell.common.split.SplitScreenUtils; import com.android.wm.shell.common.split.SplitState; import com.android.wm.shell.common.split.SplitWindowManager; import com.android.wm.shell.desktopmode.DesktopTasksController; @@ -3536,12 +3536,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, if (mSplitRequest.mActivateTaskId == taskInfo.taskId) { return mSplitRequest.mActivatePosition; } - final String packageName1 = SplitScreenUtils.getPackageName(mSplitRequest.mStartIntent); - final String basePackageName = SplitScreenUtils.getPackageName(taskInfo.baseIntent); + final String packageName1 = ComponentUtils.getPackageName(mSplitRequest.mStartIntent); + final String basePackageName = ComponentUtils.getPackageName(taskInfo.baseIntent); if (packageName1 != null && packageName1.equals(basePackageName)) { return mSplitRequest.mActivatePosition; } - final String packageName2 = SplitScreenUtils.getPackageName(mSplitRequest.mStartIntent2); + final String packageName2 = ComponentUtils.getPackageName(mSplitRequest.mStartIntent2); if (packageName2 != null && packageName2.equals(basePackageName)) { return mSplitRequest.mActivatePosition; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java index 41c0a11827bb..2177986bccd5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java @@ -43,7 +43,7 @@ import com.android.internal.protolog.ProtoLog; import com.android.window.flags.Flags; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.activityembedding.ActivityEmbeddingController; -import com.android.wm.shell.common.split.SplitScreenUtils; +import com.android.wm.shell.common.ComponentUtils; import com.android.wm.shell.desktopmode.DesktopTasksController; import com.android.wm.shell.keyguard.KeyguardTransitionHandler; import com.android.wm.shell.pip.PipTransitionController; @@ -645,7 +645,7 @@ public class DefaultMixedHandler implements MixedTransitionHandler, // task enter split. if (mPipHandler != null) { return mPipHandler - .isPackageActiveInPip(SplitScreenUtils.getPackageName(intent.getIntent())); + .isPackageActiveInPip(ComponentUtils.getPackageName(intent.getIntent())); } return false; } @@ -657,7 +657,7 @@ public class DefaultMixedHandler implements MixedTransitionHandler, // task enter split. if (mPipHandler != null) { return mPipHandler.isPackageActiveInPip( - SplitScreenUtils.getPackageName(taskId, shellTaskOrganizer)); + ComponentUtils.getPackageName(taskId, shellTaskOrganizer)); } return false; } |