diff options
7 files changed, 42 insertions, 82 deletions
diff --git a/core/java/android/app/servertransaction/NewIntentItem.java b/core/java/android/app/servertransaction/NewIntentItem.java index acf2ea429e82..b5e9d66ad869 100644 --- a/core/java/android/app/servertransaction/NewIntentItem.java +++ b/core/java/android/app/servertransaction/NewIntentItem.java @@ -38,13 +38,24 @@ import java.util.Objects; /** * New intent message. + * * @hide */ public class NewIntentItem extends ActivityTransactionItem { + // TODO(b/170729553): Mark this with @NonNull and final once @UnsupportedAppUsage removed. + // We cannot do it now to avoid app compatibility regression. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private List<ReferrerIntent> mIntents; - private boolean mResume; + + private final boolean mResume; + + public NewIntentItem(@NonNull IBinder activityToken, + @NonNull List<ReferrerIntent> intents, boolean resume) { + super(activityToken); + mIntents = new ArrayList<>(intents); + mResume = resume; + } @Override public int getPostExecutionState() { @@ -59,36 +70,9 @@ public class NewIntentItem extends ActivityTransactionItem { Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); } - // ObjectPoolItem implementation - - private NewIntentItem() {} - - /** Obtain an instance initialized with provided params. */ - @NonNull - public static NewIntentItem obtain(@NonNull IBinder activityToken, - @NonNull List<ReferrerIntent> intents, boolean resume) { - NewIntentItem instance = ObjectPool.obtain(NewIntentItem.class); - if (instance == null) { - instance = new NewIntentItem(); - } - instance.setActivityToken(activityToken); - instance.mIntents = new ArrayList<>(intents); - instance.mResume = resume; - - return instance; - } - - @Override - public void recycle() { - super.recycle(); - mIntents = null; - mResume = false; - ObjectPool.recycle(this); - } - // Parcelable implementation - /** Write to Parcel. */ + /** Writes to Parcel. */ @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); @@ -96,10 +80,11 @@ public class NewIntentItem extends ActivityTransactionItem { dest.writeTypedList(mIntents, flags); } - /** Read from Parcel. */ + /** Reads from Parcel. */ private NewIntentItem(@NonNull Parcel in) { super(in); mResume = in.readBoolean(); + // TODO(b/170729553): Wrap with requireNonNull once @UnsupportedAppUsage removed. mIntents = in.createTypedArrayList(ReferrerIntent.CREATOR); } diff --git a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java index 23d4505c1c9e..b5f83459cc5e 100644 --- a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java +++ b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package android.app.servertransaction; import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER; @@ -28,11 +29,17 @@ import android.os.Trace; /** * Top resumed activity changed callback. + * * @hide */ public class TopResumedActivityChangeItem extends ActivityTransactionItem { - private boolean mOnTop; + private final boolean mOnTop; + + public TopResumedActivityChangeItem(@NonNull IBinder activityToken, boolean onTop) { + super(activityToken); + mOnTop = onTop; + } @Override public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r, @@ -58,42 +65,16 @@ public class TopResumedActivityChangeItem extends ActivityTransactionItem { ActivityClient.getInstance().activityTopResumedStateLost(); } - // ObjectPoolItem implementation - - private TopResumedActivityChangeItem() {} - - /** Obtain an instance initialized with provided params. */ - @NonNull - public static TopResumedActivityChangeItem obtain(@NonNull IBinder activityToken, - boolean onTop) { - TopResumedActivityChangeItem instance = - ObjectPool.obtain(TopResumedActivityChangeItem.class); - if (instance == null) { - instance = new TopResumedActivityChangeItem(); - } - instance.setActivityToken(activityToken); - instance.mOnTop = onTop; - - return instance; - } - - @Override - public void recycle() { - super.recycle(); - mOnTop = false; - ObjectPool.recycle(this); - } - // Parcelable implementation - /** Write to Parcel. */ + /** Writes to Parcel. */ @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeBoolean(mOnTop); } - /** Read from Parcel. */ + /** Reads from Parcel. */ private TopResumedActivityChangeItem(@NonNull Parcel in) { super(in); mOnTop = in.readBoolean(); @@ -131,7 +112,6 @@ public class TopResumedActivityChangeItem extends ActivityTransactionItem { @Override public String toString() { - return "TopResumedActivityChangeItem{" + super.toString() - + ",onTop=" + mOnTop + "}"; + return "TopResumedActivityChangeItem{" + super.toString() + ",onTop=" + mOnTop + "}"; } } diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java index 8a305f4e9554..c7d5f4182473 100644 --- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java @@ -1030,8 +1030,7 @@ public class ActivityThreadTest { @NonNull private static ClientTransaction newNewIntentTransaction(@NonNull Activity activity, @NonNull List<ReferrerIntent> intents, boolean resume) { - final NewIntentItem item = NewIntentItem.obtain(activity.getActivityToken(), intents, - resume); + final NewIntentItem item = new NewIntentItem(activity.getActivityToken(), intents, resume); final ClientTransaction transaction = newTransaction(activity); transaction.addTransactionItem(item); diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index d5a7d51097d1..c068cdf6c93d 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -17,7 +17,6 @@ package android.app.servertransaction; import static android.app.servertransaction.TestUtils.config; -import static android.app.servertransaction.TestUtils.referrerIntentList; import static org.junit.Assert.assertNotSame; @@ -66,11 +65,6 @@ public class ObjectPoolTests { testRecycle(() -> ConfigurationChangeItem.obtain(config(), 1)); } - @Test - public void testRecycleNewIntentItem() { - testRecycle(() -> NewIntentItem.obtain(mActivityToken, referrerIntentList(), false)); - } - private void testRecycle(@NonNull Supplier<? extends ObjectPoolItem> obtain) { // Reuse the same object after recycle. final ObjectPoolItem item = obtain.get(); diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index 644e9f4dd562..79b4b4f08ead 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -122,11 +122,12 @@ public class TransactionParcelTests { @Test public void testNewIntent() { // Write to parcel - NewIntentItem item = NewIntentItem.obtain(mActivityToken, referrerIntentList(), false); + final NewIntentItem item = + new NewIntentItem(mActivityToken, referrerIntentList(), false /* resume */); writeAndPrepareForReading(item); // Read from parcel and assert - NewIntentItem result = NewIntentItem.CREATOR.createFromParcel(mParcel); + final NewIntentItem result = NewIntentItem.CREATOR.createFromParcel(mParcel); assertEquals(item.hashCode(), result.hashCode()); assertEquals(item, result); @@ -290,8 +291,8 @@ public class TransactionParcelTests { @Test public void testClientTransaction() { // Write to parcel - final NewIntentItem callback1 = NewIntentItem.obtain( - mActivityToken, new ArrayList<>(), true); + final NewIntentItem callback1 = + new NewIntentItem(mActivityToken, new ArrayList<>(), true /* resume */); final ActivityConfigurationChangeItem callback2 = new ActivityConfigurationChangeItem( mActivityToken, config(), new ActivityWindowInfo()); @@ -305,7 +306,7 @@ public class TransactionParcelTests { writeAndPrepareForReading(transaction); // Read from parcel and assert - ClientTransaction result = ClientTransaction.CREATOR.createFromParcel(mParcel); + final ClientTransaction result = ClientTransaction.CREATOR.createFromParcel(mParcel); assertEquals(transaction.hashCode(), result.hashCode()); assertEquals(transaction, result); diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 5764be9efa6d..4da7e5325ed5 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1508,8 +1508,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A ProtoLog.v(WM_DEBUG_STATES, "Sending position change to %s, onTop: %b", this, onTop); - mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), - TopResumedActivityChangeItem.obtain(token, onTop)); + final TopResumedActivityChangeItem item = + new TopResumedActivityChangeItem(token, onTop); + mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item); } catch (RemoteException e) { // If process died, whatever. Slog.w(TAG, "Failed to send top-resumed=" + onTop + " to " + this, e); @@ -5113,8 +5114,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Making sure the client state is RESUMED after transaction completed and doing // so only if activity is currently RESUMED. Otherwise, client may have extra // life-cycle calls to RESUMED (and PAUSED later). - mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), - NewIntentItem.obtain(token, ar, mState == RESUMED)); + final NewIntentItem item = + new NewIntentItem(token, ar, mState == RESUMED /* resume */); + mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item); unsent = false; } catch (RemoteException e) { Slog.w(TAG, "Exception thrown sending new intent to " + this, e); diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 242a342b2984..566e0c03d8c7 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -1617,10 +1617,9 @@ class TaskFragment extends WindowContainer<WindowContainer> { } if (next.newIntents != null) { - final NewIntentItem newIntentItem = NewIntentItem.obtain( - next.token, next.newIntents, true /* resume */); - mAtmService.getLifecycleManager().scheduleTransactionItem( - appThread, newIntentItem); + final NewIntentItem item = + new NewIntentItem(next.token, next.newIntents, true /* resume */); + mAtmService.getLifecycleManager().scheduleTransactionItem(appThread, item); } // Well the app will no longer be stopped. |