diff options
| author | 2022-08-11 13:51:30 +0800 | |
|---|---|---|
| committer | 2022-08-17 08:46:28 +0800 | |
| commit | 99da16cdc8f0583b2f8b76c2f68f03d378b0e3b7 (patch) | |
| tree | 1e7525a5f29626bfc14f3cb5a5cf945e0cad069a | |
| parent | fe1eba3a8866b8eb1363263577e8d825ff42f021 (diff) | |
Address TaskFragmentOrganizer style comments
1. Rename onActivityReparentToTask to onActivityReparentedToTask
2. Annotate @NonNull and @Nullable for the Extensions methods that are
not yet annotated.
Bug: 240519866
Test: Refactor and add annotation. Pass existing tests.
Change-Id: I85c5927e6e7261cae3bce715b1955523d430e1e2
17 files changed, 112 insertions, 96 deletions
diff --git a/core/java/android/window/TaskFragmentOrganizer.java b/core/java/android/window/TaskFragmentOrganizer.java index 84302dd19097..4eb7c4f04807 100644 --- a/core/java/android/window/TaskFragmentOrganizer.java +++ b/core/java/android/window/TaskFragmentOrganizer.java @@ -16,7 +16,7 @@ package android.window; -import static android.window.TaskFragmentTransaction.TYPE_ACTIVITY_REPARENT_TO_TASK; +import static android.window.TaskFragmentTransaction.TYPE_ACTIVITY_REPARENTED_TO_TASK; import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_APPEARED; import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_ERROR; import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_INFO_CHANGED; @@ -238,7 +238,7 @@ public class TaskFragmentOrganizer extends WindowOrganizer { * {@link WindowContainerTransaction} if needed. * @hide */ - public void onActivityReparentToTask(int taskId, @NonNull Intent activityIntent, + public void onActivityReparentedToTask(int taskId, @NonNull Intent activityIntent, @NonNull IBinder activityToken) {} /** @@ -298,8 +298,8 @@ public class TaskFragmentOrganizer extends WindowOrganizer { errorBundle.getSerializable(KEY_ERROR_CALLBACK_EXCEPTION, java.lang.Throwable.class)); break; - case TYPE_ACTIVITY_REPARENT_TO_TASK: - onActivityReparentToTask( + case TYPE_ACTIVITY_REPARENTED_TO_TASK: + onActivityReparentedToTask( change.getTaskId(), change.getActivityIntent(), change.getActivityToken()); diff --git a/core/java/android/window/TaskFragmentTransaction.java b/core/java/android/window/TaskFragmentTransaction.java index 755864f60f87..07e8e8c473c6 100644 --- a/core/java/android/window/TaskFragmentTransaction.java +++ b/core/java/android/window/TaskFragmentTransaction.java @@ -122,7 +122,7 @@ public final class TaskFragmentTransaction implements Parcelable { * then exits Picture-in-picture, it will be reparented back to its original Task. In this case, * we need to notify the organizer so that it can check if the Activity matches any split rule. */ - public static final int TYPE_ACTIVITY_REPARENT_TO_TASK = 6; + public static final int TYPE_ACTIVITY_REPARENTED_TO_TASK = 6; @IntDef(prefix = { "TYPE_" }, value = { TYPE_TASK_FRAGMENT_APPEARED, @@ -130,7 +130,7 @@ public final class TaskFragmentTransaction implements Parcelable { TYPE_TASK_FRAGMENT_VANISHED, TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED, TYPE_TASK_FRAGMENT_ERROR, - TYPE_ACTIVITY_REPARENT_TO_TASK + TYPE_ACTIVITY_REPARENTED_TO_TASK }) @Retention(RetentionPolicy.SOURCE) @interface ChangeType {} @@ -247,7 +247,7 @@ public final class TaskFragmentTransaction implements Parcelable { /** * Intent of the activity that is reparented to the Task for - * {@link #TYPE_ACTIVITY_REPARENT_TO_TASK}. + * {@link #TYPE_ACTIVITY_REPARENTED_TO_TASK}. */ public Change setActivityIntent(@NonNull Intent intent) { mActivityIntent = requireNonNull(intent); @@ -255,7 +255,7 @@ public final class TaskFragmentTransaction implements Parcelable { } /** - * Token of the reparent activity for {@link #TYPE_ACTIVITY_REPARENT_TO_TASK}. + * Token of the reparent activity for {@link #TYPE_ACTIVITY_REPARENTED_TO_TASK}. * If the activity belongs to the same process as the organizer, this will be the actual * activity token; if the activity belongs to a different process, the server will generate * a temporary token that the organizer can use to reparent the activity through diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java index d42fca244120..a53130d7de27 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java @@ -51,8 +51,11 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { @VisibleForTesting final Map<IBinder, TaskFragmentInfo> mFragmentInfos = new ArrayMap<>(); + @NonNull private final TaskFragmentCallback mCallback; + @VisibleForTesting + @Nullable TaskFragmentAnimationController mAnimationController; /** @@ -63,7 +66,7 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { void onTaskFragmentInfoChanged(@NonNull TaskFragmentInfo taskFragmentInfo); void onTaskFragmentVanished(@NonNull TaskFragmentInfo taskFragmentInfo); void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig); - void onActivityReparentToTask(int taskId, @NonNull Intent activityIntent, + void onActivityReparentedToTask(int taskId, @NonNull Intent activityIntent, @NonNull IBinder activityToken); void onTaskFragmentError(@Nullable TaskFragmentInfo taskFragmentInfo, int opType); } @@ -72,7 +75,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { * @param executor callbacks from WM Core are posted on this executor. It should be tied to the * UI thread that all other calls into methods of this class are also on. */ - JetpackTaskFragmentOrganizer(@NonNull Executor executor, TaskFragmentCallback callback) { + JetpackTaskFragmentOrganizer(@NonNull Executor executor, + @NonNull TaskFragmentCallback callback) { super(executor); mCallback = callback; } @@ -147,7 +151,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { * @param wct WindowContainerTransaction in which the task fragment should be resized. * @param fragmentToken token of an existing TaskFragment. */ - void expandTaskFragment(WindowContainerTransaction wct, IBinder fragmentToken) { + void expandTaskFragment(@NonNull WindowContainerTransaction wct, + @NonNull IBinder fragmentToken) { resizeTaskFragment(wct, fragmentToken, new Rect()); setAdjacentTaskFragments(wct, fragmentToken, null /* secondary */, null /* splitRule */); updateWindowingMode(wct, fragmentToken, WINDOWING_MODE_UNDEFINED); @@ -157,7 +162,7 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { * Expands an existing TaskFragment to fill parent. * @param fragmentToken token of an existing TaskFragment. */ - void expandTaskFragment(IBinder fragmentToken) { + void expandTaskFragment(@NonNull IBinder fragmentToken) { WindowContainerTransaction wct = new WindowContainerTransaction(); expandTaskFragment(wct, fragmentToken); applyTransaction(wct); @@ -168,7 +173,7 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { * @param fragmentToken token to create new TaskFragment with. * @param activity activity to move to the fill-parent TaskFragment. */ - void expandActivity(IBinder fragmentToken, Activity activity) { + void expandActivity(@NonNull IBinder fragmentToken, @NonNull Activity activity) { final WindowContainerTransaction wct = new WindowContainerTransaction(); createTaskFragmentAndReparentActivity( wct, fragmentToken, activity.getActivityToken(), new Rect(), @@ -180,8 +185,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { * @param ownerToken The token of the activity that creates this task fragment. It does not * have to be a child of this task fragment, but must belong to the same task. */ - void createTaskFragment(WindowContainerTransaction wct, IBinder fragmentToken, - IBinder ownerToken, @NonNull Rect bounds, @WindowingMode int windowingMode) { + void createTaskFragment(@NonNull WindowContainerTransaction wct, @NonNull IBinder fragmentToken, + @NonNull IBinder ownerToken, @NonNull Rect bounds, @WindowingMode int windowingMode) { final TaskFragmentCreationParams fragmentOptions = createFragmentOptions(fragmentToken, ownerToken, bounds, windowingMode); wct.createTaskFragment(fragmentOptions); @@ -191,9 +196,9 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { * @param ownerToken The token of the activity that creates this task fragment. It does not * have to be a child of this task fragment, but must belong to the same task. */ - private void createTaskFragmentAndReparentActivity( - WindowContainerTransaction wct, IBinder fragmentToken, IBinder ownerToken, - @NonNull Rect bounds, @WindowingMode int windowingMode, Activity activity) { + private void createTaskFragmentAndReparentActivity(@NonNull WindowContainerTransaction wct, + @NonNull IBinder fragmentToken, @NonNull IBinder ownerToken, @NonNull Rect bounds, + @WindowingMode int windowingMode, @NonNull Activity activity) { createTaskFragment(wct, fragmentToken, ownerToken, bounds, windowingMode); wct.reparentActivityToTaskFragment(fragmentToken, activity.getActivityToken()); } @@ -202,9 +207,9 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { * @param ownerToken The token of the activity that creates this task fragment. It does not * have to be a child of this task fragment, but must belong to the same task. */ - private void createTaskFragmentAndStartActivity( - WindowContainerTransaction wct, IBinder fragmentToken, IBinder ownerToken, - @NonNull Rect bounds, @WindowingMode int windowingMode, Intent activityIntent, + private void createTaskFragmentAndStartActivity(@NonNull WindowContainerTransaction wct, + @NonNull IBinder fragmentToken, @NonNull IBinder ownerToken, @NonNull Rect bounds, + @WindowingMode int windowingMode, @NonNull Intent activityIntent, @Nullable Bundle activityOptions) { createTaskFragment(wct, fragmentToken, ownerToken, bounds, windowingMode); wct.startActivityInTaskFragment(fragmentToken, ownerToken, activityIntent, activityOptions); @@ -225,8 +230,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { wct.setAdjacentTaskFragments(primary, secondary, adjacentParams); } - TaskFragmentCreationParams createFragmentOptions(IBinder fragmentToken, IBinder ownerToken, - Rect bounds, @WindowingMode int windowingMode) { + TaskFragmentCreationParams createFragmentOptions(@NonNull IBinder fragmentToken, + @NonNull IBinder ownerToken, @NonNull Rect bounds, @WindowingMode int windowingMode) { if (mFragmentInfos.containsKey(fragmentToken)) { throw new IllegalArgumentException( "There is an existing TaskFragment with fragmentToken=" + fragmentToken); @@ -241,7 +246,7 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { .build(); } - void resizeTaskFragment(WindowContainerTransaction wct, IBinder fragmentToken, + void resizeTaskFragment(@NonNull WindowContainerTransaction wct, @NonNull IBinder fragmentToken, @Nullable Rect bounds) { if (!mFragmentInfos.containsKey(fragmentToken)) { throw new IllegalArgumentException( @@ -253,8 +258,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { wct.setBounds(mFragmentInfos.get(fragmentToken).getToken(), bounds); } - void updateWindowingMode(WindowContainerTransaction wct, IBinder fragmentToken, - @WindowingMode int windowingMode) { + void updateWindowingMode(@NonNull WindowContainerTransaction wct, + @NonNull IBinder fragmentToken, @WindowingMode int windowingMode) { if (!mFragmentInfos.containsKey(fragmentToken)) { throw new IllegalArgumentException( "Can't find an existing TaskFragment with fragmentToken=" + fragmentToken); @@ -262,7 +267,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { wct.setWindowingMode(mFragmentInfos.get(fragmentToken).getToken(), windowingMode); } - void deleteTaskFragment(WindowContainerTransaction wct, IBinder fragmentToken) { + void deleteTaskFragment(@NonNull WindowContainerTransaction wct, + @NonNull IBinder fragmentToken) { if (!mFragmentInfos.containsKey(fragmentToken)) { throw new IllegalArgumentException( "Can't find an existing TaskFragment with fragmentToken=" + fragmentToken); @@ -274,44 +280,31 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { public void onTaskFragmentAppeared(@NonNull TaskFragmentInfo taskFragmentInfo) { final IBinder fragmentToken = taskFragmentInfo.getFragmentToken(); mFragmentInfos.put(fragmentToken, taskFragmentInfo); - - if (mCallback != null) { - mCallback.onTaskFragmentAppeared(taskFragmentInfo); - } + mCallback.onTaskFragmentAppeared(taskFragmentInfo); } @Override public void onTaskFragmentInfoChanged(@NonNull TaskFragmentInfo taskFragmentInfo) { final IBinder fragmentToken = taskFragmentInfo.getFragmentToken(); mFragmentInfos.put(fragmentToken, taskFragmentInfo); - - if (mCallback != null) { - mCallback.onTaskFragmentInfoChanged(taskFragmentInfo); - } + mCallback.onTaskFragmentInfoChanged(taskFragmentInfo); } @Override public void onTaskFragmentVanished(@NonNull TaskFragmentInfo taskFragmentInfo) { mFragmentInfos.remove(taskFragmentInfo.getFragmentToken()); - - if (mCallback != null) { - mCallback.onTaskFragmentVanished(taskFragmentInfo); - } + mCallback.onTaskFragmentVanished(taskFragmentInfo); } @Override public void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig) { - if (mCallback != null) { - mCallback.onTaskFragmentParentInfoChanged(taskId, parentConfig); - } + mCallback.onTaskFragmentParentInfoChanged(taskId, parentConfig); } @Override - public void onActivityReparentToTask(int taskId, @NonNull Intent activityIntent, + public void onActivityReparentedToTask(int taskId, @NonNull Intent activityIntent, @NonNull IBinder activityToken) { - if (mCallback != null) { - mCallback.onActivityReparentToTask(taskId, activityIntent, activityToken); - } + mCallback.onActivityReparentedToTask(taskId, activityIntent, activityToken); } @Override @@ -322,9 +315,6 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { final IBinder fragmentToken = taskFragmentInfo.getFragmentToken(); mFragmentInfos.put(fragmentToken, taskFragmentInfo); } - - if (mCallback != null) { - mCallback.onTaskFragmentError(taskFragmentInfo, opType); - } + mCallback.onTaskFragmentError(taskFragmentInfo, opType); } } diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java index f09a91018bf0..c8ac0fc73ff9 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java @@ -16,17 +16,21 @@ package androidx.window.extensions.embedding; -import android.annotation.NonNull; import android.app.Activity; import android.util.Pair; import android.util.Size; +import androidx.annotation.NonNull; + /** * Client-side descriptor of a split that holds two containers. */ class SplitContainer { + @NonNull private final TaskFragmentContainer mPrimaryContainer; + @NonNull private final TaskFragmentContainer mSecondaryContainer; + @NonNull private final SplitRule mSplitRule; SplitContainer(@NonNull TaskFragmentContainer primaryContainer, diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java index dad07394e3fb..3fee3f52ab25 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java @@ -264,7 +264,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } @Override - public void onActivityReparentToTask(int taskId, @NonNull Intent activityIntent, + public void onActivityReparentedToTask(int taskId, @NonNull Intent activityIntent, @NonNull IBinder activityToken) { synchronized (mLock) { // If the activity belongs to the current app process, we treat it as a new activity @@ -1523,7 +1523,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen private final class LifecycleCallbacks extends EmptyLifecycleCallbacksAdapter { @Override - public void onActivityPreCreated(Activity activity, Bundle savedInstanceState) { + public void onActivityPreCreated(@NonNull Activity activity, + @Nullable Bundle savedInstanceState) { synchronized (mLock) { final IBinder activityToken = activity.getActivityToken(); final IBinder initialTaskFragmentToken = getInitialTaskFragmentToken(activity); @@ -1552,7 +1553,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } @Override - public void onActivityPostCreated(Activity activity, Bundle savedInstanceState) { + public void onActivityPostCreated(@NonNull Activity activity, + @Nullable Bundle savedInstanceState) { // Calling after Activity#onCreate is complete to allow the app launch something // first. In case of a configured placeholder activity we want to make sure // that we don't launch it if an activity itself already requested something to be @@ -1563,14 +1565,14 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } @Override - public void onActivityConfigurationChanged(Activity activity) { + public void onActivityConfigurationChanged(@NonNull Activity activity) { synchronized (mLock) { SplitController.this.onActivityConfigurationChanged(activity); } } @Override - public void onActivityPostDestroyed(Activity activity) { + public void onActivityPostDestroyed(@NonNull Activity activity) { synchronized (mLock) { SplitController.this.onActivityDestroyed(activity); } @@ -1582,7 +1584,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen private final Handler mHandler = new Handler(Looper.getMainLooper()); @Override - public void execute(Runnable r) { + public void execute(@NonNull Runnable r) { mHandler.post(r); } } @@ -1662,7 +1664,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen * If the two rules have the same presentation, we can reuse the same {@link SplitContainer} if * there is any. */ - private static boolean canReuseContainer(SplitRule rule1, SplitRule rule2) { + private static boolean canReuseContainer(@NonNull SplitRule rule1, @NonNull SplitRule rule2) { if (!isContainerReusableRule(rule1) || !isContainerReusableRule(rule2)) { return false; } @@ -1670,7 +1672,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } /** Whether the two rules have the same presentation. */ - private static boolean haveSamePresentation(SplitPairRule rule1, SplitPairRule rule2) { + private static boolean haveSamePresentation(@NonNull SplitPairRule rule1, + @NonNull SplitPairRule rule2) { // TODO(b/231655482): add util method to do the comparison in SplitPairRule. return rule1.getSplitRatio() == rule2.getSplitRatio() && rule1.getLayoutDirection() == rule2.getLayoutDirection() @@ -1684,7 +1687,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen * Whether it is ok for other rule to reuse the {@link TaskFragmentContainer} of the given * rule. */ - private static boolean isContainerReusableRule(SplitRule rule) { + private static boolean isContainerReusableRule(@NonNull SplitRule rule) { // We don't expect to reuse the placeholder rule. if (!(rule instanceof SplitPairRule)) { return false; diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java index a89847a30d20..bec832bc9ba2 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java @@ -102,7 +102,7 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer { private final SplitController mController; - SplitPresenter(@NonNull Executor executor, SplitController controller) { + SplitPresenter(@NonNull Executor executor, @NonNull SplitController controller) { super(executor, controller); mController = controller; registerOrganizer(); @@ -502,14 +502,14 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer { } @NonNull - static Pair<Size, Size> getActivitiesMinDimensionsPair(Activity primaryActivity, - Activity secondaryActivity) { + static Pair<Size, Size> getActivitiesMinDimensionsPair(@NonNull Activity primaryActivity, + @NonNull Activity secondaryActivity) { return new Pair<>(getMinDimensions(primaryActivity), getMinDimensions(secondaryActivity)); } @NonNull - static Pair<Size, Size> getActivityIntentMinDimensionsPair(Activity primaryActivity, - Intent secondaryIntent) { + static Pair<Size, Size> getActivityIntentMinDimensionsPair(@NonNull Activity primaryActivity, + @NonNull Intent secondaryIntent) { return new Pair<>(getMinDimensions(primaryActivity), getMinDimensions(secondaryIntent)); } diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java index 0ea5603b1f3d..77e26c07f304 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java @@ -21,8 +21,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; -import android.annotation.NonNull; -import android.annotation.Nullable; import android.app.Activity; import android.app.WindowConfiguration; import android.app.WindowConfiguration.WindowingMode; @@ -31,6 +29,9 @@ import android.os.IBinder; import android.util.ArraySet; import android.window.TaskFragmentInfo; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.List; import java.util.Set; diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java index f721341a3647..ee2e139bb0b2 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationController.java @@ -30,6 +30,8 @@ import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationDefinition; import android.window.TaskFragmentOrganizer; +import androidx.annotation.NonNull; + import com.android.internal.annotations.VisibleForTesting; /** Controls the TaskFragment remote animations. */ @@ -45,7 +47,7 @@ class TaskFragmentAnimationController { /** Task Ids that we have registered for remote animation. */ private final ArraySet<Integer> mRegisterTasks = new ArraySet<>(); - TaskFragmentAnimationController(TaskFragmentOrganizer organizer) { + TaskFragmentAnimationController(@NonNull TaskFragmentOrganizer organizer) { mOrganizer = organizer; mDefinition = new RemoteAnimationDefinition(); final RemoteAnimationAdapter animationAdapter = diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java index c4f37091a491..8af2d9c6810b 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationRunner.java @@ -112,6 +112,7 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub { } /** Creates the animator given the transition type and windows. */ + @NonNull private Animator createAnimator(@WindowManager.TransitionOldType int transit, @NonNull RemoteAnimationTarget[] targets, @NonNull IRemoteAnimationFinishedCallback finishedCallback) { @@ -161,6 +162,7 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub { } /** List of {@link TaskFragmentAnimationAdapter} to handle animations on all window targets. */ + @NonNull private List<TaskFragmentAnimationAdapter> createAnimationAdapters( @WindowManager.TransitionOldType int transit, @NonNull RemoteAnimationTarget[] targets) { @@ -180,12 +182,14 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub { } } + @NonNull private List<TaskFragmentAnimationAdapter> createOpenAnimationAdapters( @NonNull RemoteAnimationTarget[] targets) { return createOpenCloseAnimationAdapters(targets, true /* isOpening */, mAnimationSpec::loadOpenAnimation); } + @NonNull private List<TaskFragmentAnimationAdapter> createCloseAnimationAdapters( @NonNull RemoteAnimationTarget[] targets) { return createOpenCloseAnimationAdapters(targets, false /* isOpening */, @@ -196,6 +200,7 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub { * Creates {@link TaskFragmentAnimationAdapter} for OPEN and CLOSE types of transition. * @param isOpening {@code true} for OPEN type, {@code false} for CLOSE type. */ + @NonNull private List<TaskFragmentAnimationAdapter> createOpenCloseAnimationAdapters( @NonNull RemoteAnimationTarget[] targets, boolean isOpening, @NonNull BiFunction<RemoteAnimationTarget, Rect, Animation> animationProvider) { @@ -238,6 +243,7 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub { return adapters; } + @NonNull private TaskFragmentAnimationAdapter createOpenCloseAnimationAdapter( @NonNull RemoteAnimationTarget target, @NonNull BiFunction<RemoteAnimationTarget, Rect, Animation> animationProvider, @@ -259,6 +265,7 @@ class TaskFragmentAnimationRunner extends IRemoteAnimationRunner.Stub { return new TaskFragmentAnimationAdapter(animation, target); } + @NonNull private List<TaskFragmentAnimationAdapter> createChangeAnimationAdapters( @NonNull RemoteAnimationTarget[] targets) { final List<TaskFragmentAnimationAdapter> adapters = new ArrayList<>(); diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java index 5cc496a225c2..45e2cbe07a56 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java @@ -78,6 +78,7 @@ class TaskFragmentAnimationSpec { } /** For target that doesn't need to be animated. */ + @NonNull static Animation createNoopAnimation(@NonNull RemoteAnimationTarget target) { // Noop but just keep the target showing/hiding. final float alpha = target.mode == MODE_CLOSING ? 0f : 1f; @@ -85,6 +86,7 @@ class TaskFragmentAnimationSpec { } /** Animation for target that is opening in a change transition. */ + @NonNull Animation createChangeBoundsOpenAnimation(@NonNull RemoteAnimationTarget target) { final Rect bounds = target.localBounds; // The target will be animated in from left or right depends on its position. @@ -101,6 +103,7 @@ class TaskFragmentAnimationSpec { } /** Animation for target that is closing in a change transition. */ + @NonNull Animation createChangeBoundsCloseAnimation(@NonNull RemoteAnimationTarget target) { final Rect bounds = target.localBounds; // The target will be animated out to left or right depends on its position. @@ -121,6 +124,7 @@ class TaskFragmentAnimationSpec { * @return the return array always has two elements. The first one is for the start leash, and * the second one is for the end leash. */ + @NonNull Animation[] createChangeBoundsChangeAnimations(@NonNull RemoteAnimationTarget target) { // Both start bounds and end bounds are in screen coordinates. We will post translate // to the local coordinates in TaskFragmentAnimationAdapter#onAnimationUpdate @@ -177,6 +181,7 @@ class TaskFragmentAnimationSpec { return new Animation[]{startSet, endSet}; } + @NonNull Animation loadOpenAnimation(@NonNull RemoteAnimationTarget target, @NonNull Rect wholeAnimationBounds) { final boolean isEnter = target.mode != MODE_CLOSING; @@ -198,6 +203,7 @@ class TaskFragmentAnimationSpec { return animation; } + @NonNull Animation loadCloseAnimation(@NonNull RemoteAnimationTarget target, @NonNull Rect wholeAnimationBounds) { final boolean isEnter = target.mode != MODE_CLOSING; diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java index 37f5b6dc399e..ae208f489e85 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java @@ -18,8 +18,6 @@ package androidx.window.extensions.embedding; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; -import android.annotation.NonNull; -import android.annotation.Nullable; import android.app.Activity; import android.app.WindowConfiguration.WindowingMode; import android.content.Intent; @@ -30,6 +28,9 @@ import android.util.Size; import android.window.TaskFragmentInfo; import android.window.WindowContainerTransaction; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; @@ -175,6 +176,7 @@ class TaskFragmentContainer { && mInfo.getActivities().size() == collectNonFinishingActivities().size(); } + @NonNull ActivityStack toActivityStack() { return new ActivityStack(collectNonFinishingActivities(), isEmpty()); } diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java index 4bc503369d0e..711a536a1cc3 100644 --- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java +++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java @@ -322,8 +322,8 @@ public class SplitControllerTest { } @Test - public void testOnActivityReparentToTask_sameProcess() { - mSplitController.onActivityReparentToTask(TASK_ID, new Intent(), + public void testOnActivityReparentedToTask_sameProcess() { + mSplitController.onActivityReparentedToTask(TASK_ID, new Intent(), mActivity.getActivityToken()); // Treated as on activity created, but allow to split as primary. @@ -333,13 +333,13 @@ public class SplitControllerTest { } @Test - public void testOnActivityReparentToTask_diffProcess() { + public void testOnActivityReparentedToTask_diffProcess() { // Create an empty TaskFragment to initialize for the Task. mSplitController.newContainer(new Intent(), mActivity, TASK_ID); final IBinder activityToken = new Binder(); final Intent intent = new Intent(); - mSplitController.onActivityReparentToTask(TASK_ID, intent, activityToken); + mSplitController.onActivityReparentedToTask(TASK_ID, intent, activityToken); // Treated as starting new intent verify(mSplitController, never()).resolveActivityToContainer(any(), anyBoolean()); diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 4b58b82df61c..bbb88474ea66 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1561,7 +1561,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (task == mLastParentBeforePip && task != null) { // Notify the TaskFragmentOrganizer that the activity is reparented back from pip. mAtmService.mWindowOrganizerController.mTaskFragmentOrganizerController - .onActivityReparentToTask(this); + .onActivityReparentedToTask(this); // Activity's reparented back from pip, clear the links once established clearLastParentBeforePip(); } diff --git a/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java b/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java index 6ca564833d41..88059e1a0d04 100644 --- a/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java @@ -18,7 +18,7 @@ package com.android.server.wm; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.window.TaskFragmentOrganizer.putErrorInfoInBundle; -import static android.window.TaskFragmentTransaction.TYPE_ACTIVITY_REPARENT_TO_TASK; +import static android.window.TaskFragmentTransaction.TYPE_ACTIVITY_REPARENTED_TO_TASK; import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_APPEARED; import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_ERROR; import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_INFO_CHANGED; @@ -277,7 +277,7 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr } @Nullable - TaskFragmentTransaction.Change prepareActivityReparentToTask( + TaskFragmentTransaction.Change prepareActivityReparentedToTask( @NonNull ActivityRecord activity) { if (activity.finishing) { Slog.d(TAG, "Reparent activity=" + activity.token + " is finishing"); @@ -315,7 +315,7 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr } ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Activity=%s reparent to taskId=%d", activity.token, task.mTaskId); - return new TaskFragmentTransaction.Change(TYPE_ACTIVITY_REPARENT_TO_TASK) + return new TaskFragmentTransaction.Change(TYPE_ACTIVITY_REPARENTED_TO_TASK) .setTaskId(task.mTaskId) .setActivityIntent(activity.intent) .setActivityToken(activityToken); @@ -521,7 +521,7 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr mAtmService.mWindowManager.mWindowPlacerLocked.requestTraversal(); } - void onActivityReparentToTask(@NonNull ActivityRecord activity) { + void onActivityReparentedToTask(@NonNull ActivityRecord activity) { final ITaskFragmentOrganizer organizer; if (activity.mLastTaskFragmentOrganizerBeforePip != null) { // If the activity is previously embedded in an organized TaskFragment. @@ -547,7 +547,7 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr return; } addPendingEvent(new PendingTaskFragmentEvent.Builder( - PendingTaskFragmentEvent.EVENT_ACTIVITY_REPARENT_TO_TASK, organizer) + PendingTaskFragmentEvent.EVENT_ACTIVITY_REPARENTED_TO_TASK, organizer) .setActivity(activity) .build()); } @@ -601,7 +601,7 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr static final int EVENT_INFO_CHANGED = 2; static final int EVENT_PARENT_INFO_CHANGED = 3; static final int EVENT_ERROR = 4; - static final int EVENT_ACTIVITY_REPARENT_TO_TASK = 5; + static final int EVENT_ACTIVITY_REPARENTED_TO_TASK = 5; @IntDef(prefix = "EVENT_", value = { EVENT_APPEARED, @@ -609,7 +609,7 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr EVENT_INFO_CHANGED, EVENT_PARENT_INFO_CHANGED, EVENT_ERROR, - EVENT_ACTIVITY_REPARENT_TO_TASK + EVENT_ACTIVITY_REPARENTED_TO_TASK }) @Retention(RetentionPolicy.SOURCE) public @interface EventType {} @@ -900,8 +900,8 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr case PendingTaskFragmentEvent.EVENT_ERROR: return state.prepareTaskFragmentError(event.mErrorCallbackToken, taskFragment, event.mOpType, event.mException); - case PendingTaskFragmentEvent.EVENT_ACTIVITY_REPARENT_TO_TASK: - return state.prepareActivityReparentToTask(event.mActivity); + case PendingTaskFragmentEvent.EVENT_ACTIVITY_REPARENTED_TO_TASK: + return state.prepareActivityReparentedToTask(event.mActivity); default: throw new IllegalArgumentException("Unknown TaskFragmentEvent=" + event.mEventType); } diff --git a/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java index 74154609b22e..f61effa284ef 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java @@ -474,7 +474,7 @@ public class AppTransitionTests extends WindowTestsBase { } @Test - public void testActivityRecordReparentToTaskFragment() { + public void testActivityRecordReparentedToTaskFragment() { final ActivityRecord activity = createActivityRecord(mDc); final SurfaceControl activityLeash = mock(SurfaceControl.class); doNothing().when(activity).setDropInputMode(anyInt()); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java index 8b3cff8039d4..9253b5e8af6f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java @@ -302,7 +302,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { } @Test - public void testOnActivityReparentToTask_activityInOrganizerProcess_useActivityToken() { + public void testOnActivityReparentedToTask_activityInOrganizerProcess_useActivityToken() { // Make sure the activity pid/uid is the same as the organizer caller. final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); @@ -314,17 +314,18 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { task.effectiveUid = uid; // No need to notify organizer if it is not embedded. - mController.onActivityReparentToTask(activity); + mController.onActivityReparentedToTask(activity); mController.dispatchPendingEvents(); - verify(mOrganizer, never()).onActivityReparentToTask(anyInt(), any(), any()); + verify(mOrganizer, never()).onActivityReparentedToTask(anyInt(), any(), any()); // Notify organizer if it was embedded before entered Pip. activity.mLastTaskFragmentOrganizerBeforePip = mIOrganizer; - mController.onActivityReparentToTask(activity); + mController.onActivityReparentedToTask(activity); mController.dispatchPendingEvents(); - verify(mOrganizer).onActivityReparentToTask(task.mTaskId, activity.intent, activity.token); + verify(mOrganizer).onActivityReparentedToTask(task.mTaskId, activity.intent, + activity.token); // Notify organizer if there is any embedded in the Task. final TaskFragment taskFragment = new TaskFragmentBuilder(mAtm) @@ -335,15 +336,15 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { DEFAULT_TASK_FRAGMENT_ORGANIZER_PROCESS_NAME); activity.reparent(taskFragment, POSITION_TOP); activity.mLastTaskFragmentOrganizerBeforePip = null; - mController.onActivityReparentToTask(activity); + mController.onActivityReparentedToTask(activity); mController.dispatchPendingEvents(); verify(mOrganizer, times(2)) - .onActivityReparentToTask(task.mTaskId, activity.intent, activity.token); + .onActivityReparentedToTask(task.mTaskId, activity.intent, activity.token); } @Test - public void testOnActivityReparentToTask_activityNotInOrganizerProcess_useTemporaryToken() { + public void testOnActivityReparentedToTask_activityNotInOrganizerProcess_useTemporaryToken() { final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); mTaskFragment.setTaskFragmentOrganizer(mOrganizer.getOrganizerToken(), uid, @@ -364,11 +365,11 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { // Notify organizer if it was embedded before entered Pip. // Create a temporary token since the activity doesn't belong to the same process. activity.mLastTaskFragmentOrganizerBeforePip = mIOrganizer; - mController.onActivityReparentToTask(activity); + mController.onActivityReparentedToTask(activity); mController.dispatchPendingEvents(); // Allow organizer to reparent activity in other process using the temporary token. - verify(mOrganizer).onActivityReparentToTask(eq(task.mTaskId), eq(activity.intent), + verify(mOrganizer).onActivityReparentedToTask(eq(task.mTaskId), eq(activity.intent), token.capture()); final IBinder temporaryToken = token.getValue(); assertNotEquals(activity.token, temporaryToken); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java index 1096351524d7..689932df2e8e 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java @@ -322,7 +322,7 @@ public class TaskFragmentTest extends WindowTestsBase { activity.reparent(task, POSITION_TOP); // Notify the organizer about the reparent. - verify(mAtm.mTaskFragmentOrganizerController).onActivityReparentToTask(activity); + verify(mAtm.mTaskFragmentOrganizerController).onActivityReparentedToTask(activity); assertNull(activity.mLastTaskFragmentOrganizerBeforePip); } |