diff options
4 files changed, 28 insertions, 48 deletions
diff --git a/core/java/android/app/servertransaction/MoveToDisplayItem.java b/core/java/android/app/servertransaction/MoveToDisplayItem.java index 8706edd26406..1aa563aa6363 100644 --- a/core/java/android/app/servertransaction/MoveToDisplayItem.java +++ b/core/java/android/app/servertransaction/MoveToDisplayItem.java @@ -18,6 +18,8 @@ package android.app.servertransaction; import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER; +import static java.util.Objects.requireNonNull; + import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityThread.ActivityClientRecord; @@ -33,13 +35,26 @@ import java.util.Objects; /** * Activity move to a different display message. + * * @hide */ public class MoveToDisplayItem extends ActivityTransactionItem { - private int mTargetDisplayId; - private Configuration mConfiguration; - private ActivityWindowInfo mActivityWindowInfo; + private final int mTargetDisplayId; + + @NonNull + private final Configuration mConfiguration; + + @NonNull + private final ActivityWindowInfo mActivityWindowInfo; + + public MoveToDisplayItem(@NonNull IBinder activityToken, int targetDisplayId, + @NonNull Configuration configuration, @NonNull ActivityWindowInfo activityWindowInfo) { + super(activityToken); + mTargetDisplayId = targetDisplayId; + mConfiguration = new Configuration(configuration); + mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo); + } @Override public void preExecute(@NonNull ClientTransactionHandler client) { @@ -58,38 +73,9 @@ public class MoveToDisplayItem extends ActivityTransactionItem { Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); } - // ObjectPoolItem implementation - - private MoveToDisplayItem() {} - - /** Obtain an instance initialized with provided params. */ - @NonNull - public static MoveToDisplayItem obtain(@NonNull IBinder activityToken, int targetDisplayId, - @NonNull Configuration configuration, @NonNull ActivityWindowInfo activityWindowInfo) { - MoveToDisplayItem instance = ObjectPool.obtain(MoveToDisplayItem.class); - if (instance == null) { - instance = new MoveToDisplayItem(); - } - instance.setActivityToken(activityToken); - instance.mTargetDisplayId = targetDisplayId; - instance.mConfiguration = new Configuration(configuration); - instance.mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo); - - return instance; - } - - @Override - public void recycle() { - super.recycle(); - mTargetDisplayId = 0; - mConfiguration = null; - mActivityWindowInfo = null; - ObjectPool.recycle(this); - } - // Parcelable implementation - /** Write to Parcel. */ + /** Writes to Parcel. */ @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); @@ -98,12 +84,12 @@ public class MoveToDisplayItem extends ActivityTransactionItem { dest.writeTypedObject(mActivityWindowInfo, flags); } - /** Read from Parcel. */ + /** Reads from Parcel. */ private MoveToDisplayItem(@NonNull Parcel in) { super(in); mTargetDisplayId = in.readInt(); - mConfiguration = in.readTypedObject(Configuration.CREATOR); - mActivityWindowInfo = in.readTypedObject(ActivityWindowInfo.CREATOR); + mConfiguration = requireNonNull(in.readTypedObject(Configuration.CREATOR)); + mActivityWindowInfo = requireNonNull(in.readTypedObject(ActivityWindowInfo.CREATOR)); } public static final @NonNull Creator<MoveToDisplayItem> CREATOR = new Creator<>() { diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index 098e92e812b5..d5a7d51097d1 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotSame; import android.annotation.NonNull; import android.os.IBinder; import android.platform.test.annotations.Presubmit; -import android.window.ActivityWindowInfo; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; @@ -68,12 +67,6 @@ public class ObjectPoolTests { } @Test - public void testRecycleMoveToDisplayItem() { - testRecycle(() -> MoveToDisplayItem.obtain(mActivityToken, 4, config(), - new ActivityWindowInfo())); - } - - @Test public void testRecycleNewIntentItem() { testRecycle(() -> NewIntentItem.obtain(mActivityToken, referrerIntentList(), false)); } diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index dd4aa1dde54d..644e9f4dd562 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -108,12 +108,12 @@ public class TransactionParcelTests { final ActivityWindowInfo activityWindowInfo = new ActivityWindowInfo(); activityWindowInfo.set(true /* isEmbedded */, new Rect(0, 0, 500, 1000), new Rect(0, 0, 500, 500)); - MoveToDisplayItem item = MoveToDisplayItem.obtain(mActivityToken, 4 /* targetDisplayId */, - config(), activityWindowInfo); + final MoveToDisplayItem item = new MoveToDisplayItem(mActivityToken, + 4 /* targetDisplayId */, config(), activityWindowInfo); writeAndPrepareForReading(item); // Read from parcel and assert - MoveToDisplayItem result = MoveToDisplayItem.CREATOR.createFromParcel(mParcel); + final MoveToDisplayItem result = MoveToDisplayItem.CREATOR.createFromParcel(mParcel); assertEquals(item.hashCode(), result.hashCode()); assertEquals(item, result); diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index e8aced824420..32a01cb71cbb 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1467,8 +1467,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A + "display, activityRecord=%s, displayId=%d, config=%s", this, displayId, config); - mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), - MoveToDisplayItem.obtain(token, displayId, config, activityWindowInfo)); + final MoveToDisplayItem item = + new MoveToDisplayItem(token, displayId, config, activityWindowInfo); + mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item); } catch (RemoteException e) { // If process died, whatever. } |