summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ActivityThread.java2
-rw-r--r--core/java/android/app/servertransaction/ResumeActivityItem.java86
-rw-r--r--core/java/android/app/servertransaction/TransactionExecutorHelper.java3
-rw-r--r--core/tests/coretests/src/android/app/activity/ActivityThreadTest.java4
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java39
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java5
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java4
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java2
-rw-r--r--services/core/java/com/android/server/wm/ActivityRefresher.java2
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskSupervisor.java2
-rw-r--r--services/core/java/com/android/server/wm/TaskFragment.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java2
14 files changed, 78 insertions, 79 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 4952af353670..8696e0f9a601 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4623,7 +4623,7 @@ public final class ActivityThread extends ClientTransactionHandler
private void scheduleResume(ActivityClientRecord r) {
final ClientTransaction transaction = new ClientTransaction(mAppThread);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(r.token,
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(r.token,
/* isForward */ false, /* shouldSendCompatFakeFocus */ false);
transaction.addTransactionItem(resumeActivityItem);
executeTransaction(transaction);
diff --git a/core/java/android/app/servertransaction/ResumeActivityItem.java b/core/java/android/app/servertransaction/ResumeActivityItem.java
index 4a0ea98ccb89..a28791f6684e 100644
--- a/core/java/android/app/servertransaction/ResumeActivityItem.java
+++ b/core/java/android/app/servertransaction/ResumeActivityItem.java
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityClient;
import android.app.ActivityManager;
+import android.app.ActivityManager.ProcessState;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
import android.os.IBinder;
@@ -30,22 +31,37 @@ import android.os.Trace;
/**
* Request to move an activity to resumed state.
+ *
* @hide
*/
public class ResumeActivityItem extends ActivityLifecycleItem {
- private static final String TAG = "ResumeActivityItem";
+ @ProcessState
+ private final int mProcState;
+
+ private final boolean mIsForward;
- private int mProcState;
- private boolean mUpdateProcState;
- private boolean mIsForward;
// Whether we should send compat fake focus when the activity is resumed. This is needed
// because some game engines wait to get focus before drawing the content of the app.
- private boolean mShouldSendCompatFakeFocus;
+ private final boolean mShouldSendCompatFakeFocus;
+
+ public ResumeActivityItem(@NonNull IBinder activityToken, boolean isForward,
+ boolean shouldSendCompatFakeFocus) {
+ this(activityToken, ActivityManager.PROCESS_STATE_UNKNOWN, isForward,
+ shouldSendCompatFakeFocus);
+ }
+
+ public ResumeActivityItem(@NonNull IBinder activityToken, @ProcessState int procState,
+ boolean isForward, boolean shouldSendCompatFakeFocus) {
+ super(activityToken);
+ mProcState = procState;
+ mIsForward = isForward;
+ mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus;
+ }
@Override
public void preExecute(@NonNull ClientTransactionHandler client) {
- if (mUpdateProcState) {
+ if (mProcState != ActivityManager.PROCESS_STATE_UNKNOWN) {
client.updateProcessState(mProcState, false);
}
}
@@ -72,71 +88,21 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
return ON_RESUME;
}
- // ObjectPoolItem implementation
-
- private ResumeActivityItem() {}
-
- /** Obtain an instance initialized with provided params. */
- @NonNull
- public static ResumeActivityItem obtain(@NonNull IBinder activityToken, int procState,
- boolean isForward, boolean shouldSendCompatFakeFocus) {
- ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class);
- if (instance == null) {
- instance = new ResumeActivityItem();
- }
- instance.setActivityToken(activityToken);
- instance.mProcState = procState;
- instance.mUpdateProcState = true;
- instance.mIsForward = isForward;
- instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus;
-
- return instance;
- }
-
- /** Obtain an instance initialized with provided params. */
- @NonNull
- public static ResumeActivityItem obtain(@NonNull IBinder activityToken, boolean isForward,
- boolean shouldSendCompatFakeFocus) {
- ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class);
- if (instance == null) {
- instance = new ResumeActivityItem();
- }
- instance.setActivityToken(activityToken);
- instance.mProcState = ActivityManager.PROCESS_STATE_UNKNOWN;
- instance.mUpdateProcState = false;
- instance.mIsForward = isForward;
- instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus;
-
- return instance;
- }
-
- @Override
- public void recycle() {
- super.recycle();
- mProcState = ActivityManager.PROCESS_STATE_UNKNOWN;
- mUpdateProcState = false;
- mIsForward = false;
- mShouldSendCompatFakeFocus = 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.writeInt(mProcState);
- dest.writeBoolean(mUpdateProcState);
dest.writeBoolean(mIsForward);
dest.writeBoolean(mShouldSendCompatFakeFocus);
}
- /** Read from Parcel. */
+ /** Reads from Parcel. */
private ResumeActivityItem(@NonNull Parcel in) {
super(in);
mProcState = in.readInt();
- mUpdateProcState = in.readBoolean();
mIsForward = in.readBoolean();
mShouldSendCompatFakeFocus = in.readBoolean();
}
@@ -160,7 +126,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
return false;
}
final ResumeActivityItem other = (ResumeActivityItem) o;
- return mProcState == other.mProcState && mUpdateProcState == other.mUpdateProcState
+ return mProcState == other.mProcState
&& mIsForward == other.mIsForward
&& mShouldSendCompatFakeFocus == other.mShouldSendCompatFakeFocus;
}
@@ -170,7 +136,6 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
int result = 17;
result = 31 * result + super.hashCode();
result = 31 * result + mProcState;
- result = 31 * result + (mUpdateProcState ? 1 : 0);
result = 31 * result + (mIsForward ? 1 : 0);
result = 31 * result + (mShouldSendCompatFakeFocus ? 1 : 0);
return result;
@@ -180,7 +145,6 @@ public class ResumeActivityItem extends ActivityLifecycleItem {
public String toString() {
return "ResumeActivityItem{" + super.toString()
+ ",procState=" + mProcState
- + ",updateProcState=" + mUpdateProcState
+ ",isForward=" + mIsForward
+ ",shouldSendCompatFakeFocus=" + mShouldSendCompatFakeFocus + "}";
}
diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
index 9f622e9e7dda..8ba90763fb16 100644
--- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java
+++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
@@ -42,6 +42,7 @@ import java.util.List;
/**
* Helper class for {@link TransactionExecutor} that contains utils for lifecycle path resolution.
+ *
* @hide
*/
public class TransactionExecutorHelper {
@@ -203,7 +204,7 @@ public class TransactionExecutorHelper {
lifecycleItem = StopActivityItem.obtain(r.token);
break;
default:
- lifecycleItem = ResumeActivityItem.obtain(r.token, false /* isForward */,
+ lifecycleItem = new ResumeActivityItem(r.token, false /* isForward */,
false /* shouldSendCompatFakeFocus */);
break;
}
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index f5affd39b940..4f5107ac8d74 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -983,7 +983,7 @@ public class ActivityThreadTest {
new MergedConfiguration(currentConfig, currentConfig),
false /* preserveWindow */, activityWindowInfo);
final ResumeActivityItem resumeStateRequest =
- ResumeActivityItem.obtain(activity.getActivityToken(), true /* isForward */,
+ new ResumeActivityItem(activity.getActivityToken(), true /* isForward */,
false /* shouldSendCompatFakeFocus*/);
final ClientTransaction transaction = newTransaction(activity);
@@ -996,7 +996,7 @@ public class ActivityThreadTest {
@NonNull
private static ClientTransaction newResumeTransaction(@NonNull Activity activity) {
final ResumeActivityItem resumeStateRequest =
- ResumeActivityItem.obtain(activity.getActivityToken(), true /* isForward */,
+ new ResumeActivityItem(activity.getActivityToken(), true /* isForward */,
false /* shouldSendCompatFakeFocus */);
final ClientTransaction transaction = newTransaction(activity);
diff --git a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java
index ff30f190bb05..911b7596c714 100644
--- a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java
+++ b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java
@@ -21,13 +21,17 @@ import static android.view.Display.DEFAULT_DISPLAY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import android.app.Activity;
+import android.app.ActivityManager;
import android.app.ActivityThread;
import android.app.ClientTransactionHandler;
import android.content.res.Configuration;
@@ -134,6 +138,41 @@ public class ClientTransactionItemTest {
}
@Test
+ public void testResumeActivityItem_preExecute_withProcState_updatesProcessState() {
+ final ResumeActivityItem item = new ResumeActivityItem(mActivityToken,
+ ActivityManager.PROCESS_STATE_TOP /* procState */,
+ true /* isForward */,
+ false /* shouldSendCompatFakeFocus*/);
+
+ item.preExecute(mHandler);
+
+ verify(mHandler).updateProcessState(ActivityManager.PROCESS_STATE_TOP, false);
+ }
+
+ @Test
+ public void testResumeActivityItem_preExecute_withUnknownProcState_skipsProcessStateUpdate() {
+ final ResumeActivityItem item = new ResumeActivityItem(mActivityToken,
+ ActivityManager.PROCESS_STATE_UNKNOWN /* procState */,
+ true /* isForward */,
+ false /* shouldSendCompatFakeFocus*/);
+
+ item.preExecute(mHandler);
+
+ verify(mHandler, never()).updateProcessState(anyInt(), anyBoolean());
+ }
+
+ @Test
+ public void testResumeActivityItem_preExecute_withoutProcState_skipsProcessStateUpdate() {
+ final ResumeActivityItem item = new ResumeActivityItem(mActivityToken,
+ true /* isForward */,
+ false /* shouldSendCompatFakeFocus*/);
+
+ item.preExecute(mHandler);
+
+ verify(mHandler, never()).updateProcessState(anyInt(), anyBoolean());
+ }
+
+ @Test
public void testWindowContextInfoChangeItem_execute() {
final WindowContextInfoChangeItem item = WindowContextInfoChangeItem
.obtain(mWindowClientToken, mConfiguration, DEFAULT_DISPLAY);
diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
index 40f6aa0b8f79..1817b875b201 100644
--- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java
@@ -161,11 +161,6 @@ public class ObjectPoolTests {
}
@Test
- public void testRecycleResumeActivityItem() {
- testRecycle(() -> ResumeActivityItem.obtain(mActivityToken, 3, true, false));
- }
-
- @Test
public void testRecycleStartActivityItem() {
testRecycle(() -> StartActivityItem.obtain(mActivityToken,
new ActivityOptions.SceneTransitionInfo()));
diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
index dafcf288382a..dde6ab15e9e8 100644
--- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
+++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java
@@ -249,12 +249,12 @@ public class TransactionParcelTests {
@Test
public void testResume() {
// Write to parcel
- ResumeActivityItem item = ResumeActivityItem.obtain(mActivityToken, 27 /* procState */,
+ final ResumeActivityItem item = new ResumeActivityItem(mActivityToken, 27 /* procState */,
true /* isForward */, false /* shouldSendCompatFakeFocus */);
writeAndPrepareForReading(item);
// Read from parcel and assert
- ResumeActivityItem result = ResumeActivityItem.CREATOR.createFromParcel(mParcel);
+ final ResumeActivityItem result = ResumeActivityItem.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 ee4deae21d4f..f31280e71c2e 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -9997,7 +9997,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
preserveWindow, getActivityWindowInfo());
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
- lifecycleItem = ResumeActivityItem.obtain(token, isTransitionForward(),
+ lifecycleItem = new ResumeActivityItem(token, isTransitionForward(),
shouldSendCompatFakeFocus());
} else {
lifecycleItem = PauseActivityItem.obtain(token);
diff --git a/services/core/java/com/android/server/wm/ActivityRefresher.java b/services/core/java/com/android/server/wm/ActivityRefresher.java
index bc822718d45a..c02501f47af2 100644
--- a/services/core/java/com/android/server/wm/ActivityRefresher.java
+++ b/services/core/java/com/android/server/wm/ActivityRefresher.java
@@ -86,7 +86,7 @@ class ActivityRefresher {
+ "activityRecord=%s", activity);
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(
activity.token, cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(
activity.token, /* isForward */ false, /* shouldSendCompatFakeFocus */ false);
try {
activity.mAtmService.getLifecycleManager().scheduleTransactionAndLifecycleItems(
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index e81b440f6d6d..021caafe061e 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -942,7 +942,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
// Set desired final state.
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
- lifecycleItem = ResumeActivityItem.obtain(r.token, isTransitionForward,
+ lifecycleItem = new ResumeActivityItem(r.token, isTransitionForward,
r.shouldSendCompatFakeFocus());
} else if (r.isVisibleRequested()) {
lifecycleItem = PauseActivityItem.obtain(r.token);
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 9b2c022df963..5bdab2be7abd 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -1636,7 +1636,7 @@ class TaskFragment extends WindowContainer<WindowContainer> {
final int topProcessState = mAtmService.mTopProcessState;
next.app.setPendingUiCleanAndForceProcessStateUpTo(topProcessState);
next.abortAndClearOptionsAnimation();
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(
next.token, topProcessState, dc.isNextTransitionForward(),
next.shouldSendCompatFakeFocus());
mAtmService.getLifecycleManager().scheduleTransactionItem(
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java
index 6ad1044d2012..68ccb31805ff 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRefresherTests.java
@@ -193,7 +193,7 @@ public class ActivityRefresherTests extends WindowTestsBase {
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(mActivity.token,
cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(mActivity.token,
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(mActivity.token,
/* isForward */ false, /* shouldSendCompatFakeFocus */ false);
verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0))
diff --git a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
index eaa164127551..c43f414c4a62 100644
--- a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
@@ -309,7 +309,7 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase {
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(mActivity.token,
cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(mActivity.token,
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(mActivity.token,
/* isForward */ false, /* shouldSendCompatFakeFocus */ false);
verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0))
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java
index e9fcc4048fbc..12bc3eda312d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java
@@ -615,7 +615,7 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
final RefreshCallbackItem refreshCallbackItem = RefreshCallbackItem.obtain(mActivity.token,
cycleThroughStop ? ON_STOP : ON_PAUSE);
- final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(mActivity.token,
+ final ResumeActivityItem resumeActivityItem = new ResumeActivityItem(mActivity.token,
/* isForward */ false, /* shouldSendCompatFakeFocus */ false);
verify(mActivity.mAtmService.getLifecycleManager(), times(refreshRequested ? 1 : 0))