Loading core/java/android/window/ActivityWindowInfo.java +13 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package android.window; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.ActivityThread; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; Loading Loading @@ -144,4 +146,15 @@ public final class ActivityWindowInfo implements Parcelable { + ", taskFragmentBounds=" + mTaskFragmentBounds + "}"; } /** Gets the {@link ActivityWindowInfo} of the given activity. */ @Nullable public static ActivityWindowInfo getActivityWindowInfo(@NonNull Activity activity) { if (activity.isFinishing()) { return null; } final ActivityThread.ActivityClientRecord record = ActivityThread.currentActivityThread() .getActivityClient(activity.getActivityToken()); return record != null ? record.getActivityWindowInfo() : null; } } core/java/android/window/ITaskFragmentOrganizerController.aidl +0 −6 Original line number Diff line number Diff line Loading @@ -38,12 +38,6 @@ interface ITaskFragmentOrganizerController { */ void unregisterOrganizer(in ITaskFragmentOrganizer organizer); /** * Checks if an activity organized by a {@link android.window.TaskFragmentOrganizer} and * only occupies a portion of Task bounds. */ boolean isActivityEmbedded(in IBinder activityToken); /** * Notifies the server that the organizer has finished handling the given transaction. The * server should apply the given {@link WindowContainerTransaction} for the necessary changes. Loading core/java/android/window/TaskFragmentOrganizer.java +10 −8 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_FIRST_CUSTOM; import static android.view.WindowManager.TRANSIT_NONE; import static android.view.WindowManager.TRANSIT_OPEN; import static android.window.ActivityWindowInfo.getActivityWindowInfo; import android.annotation.CallSuper; import android.annotation.FlaggedApi; Loading @@ -29,6 +30,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.TestApi; import android.app.Activity; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; Loading @@ -38,6 +40,7 @@ import com.android.window.flags.Flags; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Objects; import java.util.concurrent.Executor; /** Loading Loading @@ -324,16 +327,15 @@ public class TaskFragmentOrganizer extends WindowOrganizer { } /** * Checks if an activity organized by a {@link android.window.TaskFragmentOrganizer} and * Checks if an activity is organized by a {@link android.window.TaskFragmentOrganizer} and * only occupies a portion of Task bounds. * * @see ActivityWindowInfo for additional window info. * @hide */ // TODO(b/287582673): cleanup public boolean isActivityEmbedded(@NonNull IBinder activityToken) { try { return getController().isActivityEmbedded(activityToken); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } public static boolean isActivityEmbedded(@NonNull Activity activity) { Objects.requireNonNull(activity); final ActivityWindowInfo activityWindowInfo = getActivityWindowInfo(activity); return activityWindowInfo != null && activityWindowInfo.isEmbedded(); } } libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +5 −14 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.window.ActivityWindowInfo.getActivityWindowInfo; import static android.window.TaskFragmentOperation.OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT; import static android.window.TaskFragmentOperation.OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT; import static android.window.TaskFragmentOrganizer.KEY_ERROR_CALLBACK_OP_TYPE; Loading Loading @@ -80,6 +81,7 @@ import android.window.ActivityWindowInfo; import android.window.TaskFragmentAnimationParams; import android.window.TaskFragmentInfo; import android.window.TaskFragmentOperation; import android.window.TaskFragmentOrganizer; import android.window.TaskFragmentParentInfo; import android.window.TaskFragmentTransaction; import android.window.WindowContainerTransaction; Loading Loading @@ -2553,9 +2555,9 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen return ActivityThread.currentActivityThread().getActivity(activityToken); } @VisibleForTesting @Nullable ActivityThread.ActivityClientRecord getActivityClientRecord(@NonNull Activity activity) { private ActivityThread.ActivityClientRecord getActivityClientRecord( @NonNull Activity activity) { return ActivityThread.currentActivityThread() .getActivityClient(activity.getActivityToken()); } Loading Loading @@ -3092,10 +3094,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen */ @Override public boolean isActivityEmbedded(@NonNull Activity activity) { Objects.requireNonNull(activity); synchronized (mLock) { final ActivityWindowInfo activityWindowInfo = getActivityWindowInfo(activity); return activityWindowInfo != null && activityWindowInfo.isEmbedded(); return TaskFragmentOrganizer.isActivityEmbedded(activity); } } Loading Loading @@ -3165,15 +3165,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } } @Nullable private ActivityWindowInfo getActivityWindowInfo(@NonNull Activity activity) { if (activity.isFinishing()) { return null; } final ActivityThread.ActivityClientRecord record = getActivityClientRecord(activity); return record != null ? record.getActivityWindowInfo() : null; } @NonNull private static EmbeddedActivityWindowInfo translateActivityWindowInfo( @NonNull Activity activity, @NonNull ActivityWindowInfo activityWindowInfo) { Loading libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -165,6 +165,7 @@ public class SplitControllerTest { private Consumer<List<SplitInfo>> mEmbeddingCallback; private List<SplitInfo> mSplitInfos; private TransactionManager mTransactionManager; private ActivityThread mCurrentActivityThread; @Before public void setUp() { Loading @@ -181,10 +182,12 @@ public class SplitControllerTest { }; mSplitController.setSplitInfoCallback(mEmbeddingCallback); mTransactionManager = mSplitController.mTransactionManager; mCurrentActivityThread = ActivityThread.currentActivityThread(); spyOn(mSplitController); spyOn(mSplitPresenter); spyOn(mEmbeddingCallback); spyOn(mTransactionManager); spyOn(mCurrentActivityThread); doNothing().when(mSplitPresenter).applyTransaction(any(), anyInt(), anyBoolean()); final Configuration activityConfig = new Configuration(); activityConfig.windowConfiguration.setBounds(TASK_BOUNDS); Loading Loading @@ -1668,7 +1671,8 @@ public class SplitControllerTest { final IBinder activityToken = new Binder(); doReturn(activityToken).when(activity).getActivityToken(); doReturn(activity).when(mSplitController).getActivity(activityToken); doReturn(activityClientRecord).when(mSplitController).getActivityClientRecord(activity); doReturn(activityClientRecord).when(mCurrentActivityThread).getActivityClient( activityToken); doReturn(taskId).when(activity).getTaskId(); doReturn(new ActivityInfo()).when(activity).getActivityInfo(); doReturn(DEFAULT_DISPLAY).when(activity).getDisplayId(); Loading Loading
core/java/android/window/ActivityWindowInfo.java +13 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package android.window; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.ActivityThread; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; Loading Loading @@ -144,4 +146,15 @@ public final class ActivityWindowInfo implements Parcelable { + ", taskFragmentBounds=" + mTaskFragmentBounds + "}"; } /** Gets the {@link ActivityWindowInfo} of the given activity. */ @Nullable public static ActivityWindowInfo getActivityWindowInfo(@NonNull Activity activity) { if (activity.isFinishing()) { return null; } final ActivityThread.ActivityClientRecord record = ActivityThread.currentActivityThread() .getActivityClient(activity.getActivityToken()); return record != null ? record.getActivityWindowInfo() : null; } }
core/java/android/window/ITaskFragmentOrganizerController.aidl +0 −6 Original line number Diff line number Diff line Loading @@ -38,12 +38,6 @@ interface ITaskFragmentOrganizerController { */ void unregisterOrganizer(in ITaskFragmentOrganizer organizer); /** * Checks if an activity organized by a {@link android.window.TaskFragmentOrganizer} and * only occupies a portion of Task bounds. */ boolean isActivityEmbedded(in IBinder activityToken); /** * Notifies the server that the organizer has finished handling the given transaction. The * server should apply the given {@link WindowContainerTransaction} for the necessary changes. Loading
core/java/android/window/TaskFragmentOrganizer.java +10 −8 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.view.WindowManager.TRANSIT_CLOSE; import static android.view.WindowManager.TRANSIT_FIRST_CUSTOM; import static android.view.WindowManager.TRANSIT_NONE; import static android.view.WindowManager.TRANSIT_OPEN; import static android.window.ActivityWindowInfo.getActivityWindowInfo; import android.annotation.CallSuper; import android.annotation.FlaggedApi; Loading @@ -29,6 +30,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.TestApi; import android.app.Activity; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; Loading @@ -38,6 +40,7 @@ import com.android.window.flags.Flags; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Objects; import java.util.concurrent.Executor; /** Loading Loading @@ -324,16 +327,15 @@ public class TaskFragmentOrganizer extends WindowOrganizer { } /** * Checks if an activity organized by a {@link android.window.TaskFragmentOrganizer} and * Checks if an activity is organized by a {@link android.window.TaskFragmentOrganizer} and * only occupies a portion of Task bounds. * * @see ActivityWindowInfo for additional window info. * @hide */ // TODO(b/287582673): cleanup public boolean isActivityEmbedded(@NonNull IBinder activityToken) { try { return getController().isActivityEmbedded(activityToken); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } public static boolean isActivityEmbedded(@NonNull Activity activity) { Objects.requireNonNull(activity); final ActivityWindowInfo activityWindowInfo = getActivityWindowInfo(activity); return activityWindowInfo != null && activityWindowInfo.isEmbedded(); } }
libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +5 −14 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.TRANSIT_CLOSE; import static android.window.ActivityWindowInfo.getActivityWindowInfo; import static android.window.TaskFragmentOperation.OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT; import static android.window.TaskFragmentOperation.OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT; import static android.window.TaskFragmentOrganizer.KEY_ERROR_CALLBACK_OP_TYPE; Loading Loading @@ -80,6 +81,7 @@ import android.window.ActivityWindowInfo; import android.window.TaskFragmentAnimationParams; import android.window.TaskFragmentInfo; import android.window.TaskFragmentOperation; import android.window.TaskFragmentOrganizer; import android.window.TaskFragmentParentInfo; import android.window.TaskFragmentTransaction; import android.window.WindowContainerTransaction; Loading Loading @@ -2553,9 +2555,9 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen return ActivityThread.currentActivityThread().getActivity(activityToken); } @VisibleForTesting @Nullable ActivityThread.ActivityClientRecord getActivityClientRecord(@NonNull Activity activity) { private ActivityThread.ActivityClientRecord getActivityClientRecord( @NonNull Activity activity) { return ActivityThread.currentActivityThread() .getActivityClient(activity.getActivityToken()); } Loading Loading @@ -3092,10 +3094,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen */ @Override public boolean isActivityEmbedded(@NonNull Activity activity) { Objects.requireNonNull(activity); synchronized (mLock) { final ActivityWindowInfo activityWindowInfo = getActivityWindowInfo(activity); return activityWindowInfo != null && activityWindowInfo.isEmbedded(); return TaskFragmentOrganizer.isActivityEmbedded(activity); } } Loading Loading @@ -3165,15 +3165,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen } } @Nullable private ActivityWindowInfo getActivityWindowInfo(@NonNull Activity activity) { if (activity.isFinishing()) { return null; } final ActivityThread.ActivityClientRecord record = getActivityClientRecord(activity); return record != null ? record.getActivityWindowInfo() : null; } @NonNull private static EmbeddedActivityWindowInfo translateActivityWindowInfo( @NonNull Activity activity, @NonNull ActivityWindowInfo activityWindowInfo) { Loading
libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -165,6 +165,7 @@ public class SplitControllerTest { private Consumer<List<SplitInfo>> mEmbeddingCallback; private List<SplitInfo> mSplitInfos; private TransactionManager mTransactionManager; private ActivityThread mCurrentActivityThread; @Before public void setUp() { Loading @@ -181,10 +182,12 @@ public class SplitControllerTest { }; mSplitController.setSplitInfoCallback(mEmbeddingCallback); mTransactionManager = mSplitController.mTransactionManager; mCurrentActivityThread = ActivityThread.currentActivityThread(); spyOn(mSplitController); spyOn(mSplitPresenter); spyOn(mEmbeddingCallback); spyOn(mTransactionManager); spyOn(mCurrentActivityThread); doNothing().when(mSplitPresenter).applyTransaction(any(), anyInt(), anyBoolean()); final Configuration activityConfig = new Configuration(); activityConfig.windowConfiguration.setBounds(TASK_BOUNDS); Loading Loading @@ -1668,7 +1671,8 @@ public class SplitControllerTest { final IBinder activityToken = new Binder(); doReturn(activityToken).when(activity).getActivityToken(); doReturn(activity).when(mSplitController).getActivity(activityToken); doReturn(activityClientRecord).when(mSplitController).getActivityClientRecord(activity); doReturn(activityClientRecord).when(mCurrentActivityThread).getActivityClient( activityToken); doReturn(taskId).when(activity).getTaskId(); doReturn(new ActivityInfo()).when(activity).getActivityInfo(); doReturn(DEFAULT_DISPLAY).when(activity).getDisplayId(); Loading