Loading core/java/android/app/ActivityThread.java +13 −2 Original line number Diff line number Diff line Loading @@ -4164,7 +4164,8 @@ public final class ActivityThread extends ClientTransactionHandler private void scheduleResume(ActivityClientRecord r) { final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(/* isForward */ false)); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(/* isForward */ false, /* shouldSendCompatFakeFocus */ false)); executeTransaction(transaction); } Loading Loading @@ -4791,7 +4792,7 @@ public final class ActivityThread extends ClientTransactionHandler @Override public void handleResumeActivity(ActivityClientRecord r, boolean finalStateRequest, boolean isForward, String reason) { boolean isForward, boolean shouldSendCompatFakeFocus, String reason) { // If we are getting ready to gc after going to the background, well // we are back active so skip it. unscheduleGcIdler(); Loading Loading @@ -4898,6 +4899,16 @@ public final class ActivityThread extends ClientTransactionHandler if (r.activity.mVisibleFromClient) { r.activity.makeVisible(); } if (shouldSendCompatFakeFocus) { // Attaching to a window is asynchronous with the activity being resumed, // so it's possible we will need to send a fake focus event after attaching if (impl != null) { impl.dispatchCompatFakeFocus(); } else { r.window.getDecorView().fakeFocusAfterAttachingToWindow(); } } } r.nextIdle = mNewActivities; Loading core/java/android/app/ClientTransactionHandler.java +2 −1 Original line number Diff line number Diff line Loading @@ -109,7 +109,8 @@ public abstract class ClientTransactionHandler { * @param reason Reason for performing this operation. */ public abstract void handleResumeActivity(@NonNull ActivityClientRecord r, boolean finalStateRequest, boolean isForward, String reason); boolean finalStateRequest, boolean isForward, boolean shouldSendCompatFakeFocus, String reason); /** * Notify the activity about top resumed state change. Loading core/java/android/app/servertransaction/ResumeActivityItem.java +17 −5 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ public class ResumeActivityItem extends ActivityLifecycleItem { 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; @Override public void preExecute(ClientTransactionHandler client, IBinder token) { Loading @@ -52,7 +55,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { PendingTransactionActions pendingActions) { Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityResume"); client.handleResumeActivity(r, true /* finalStateRequest */, mIsForward, "RESUME_ACTIVITY"); mShouldSendCompatFakeFocus, "RESUME_ACTIVITY"); Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); } Loading @@ -74,7 +77,8 @@ public class ResumeActivityItem extends ActivityLifecycleItem { private ResumeActivityItem() {} /** Obtain an instance initialized with provided params. */ public static ResumeActivityItem obtain(int procState, boolean isForward) { public static ResumeActivityItem obtain(int procState, boolean isForward, boolean shouldSendCompatFakeFocus) { ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class); if (instance == null) { instance = new ResumeActivityItem(); Loading @@ -82,12 +86,13 @@ public class ResumeActivityItem extends ActivityLifecycleItem { instance.mProcState = procState; instance.mUpdateProcState = true; instance.mIsForward = isForward; instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus; return instance; } /** Obtain an instance initialized with provided params. */ public static ResumeActivityItem obtain(boolean isForward) { public static ResumeActivityItem obtain(boolean isForward, boolean shouldSendCompatFakeFocus) { ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class); if (instance == null) { instance = new ResumeActivityItem(); Loading @@ -95,6 +100,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { instance.mProcState = ActivityManager.PROCESS_STATE_UNKNOWN; instance.mUpdateProcState = false; instance.mIsForward = isForward; instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus; return instance; } Loading @@ -105,6 +111,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { mProcState = ActivityManager.PROCESS_STATE_UNKNOWN; mUpdateProcState = false; mIsForward = false; mShouldSendCompatFakeFocus = false; ObjectPool.recycle(this); } Loading @@ -117,6 +124,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { dest.writeInt(mProcState); dest.writeBoolean(mUpdateProcState); dest.writeBoolean(mIsForward); dest.writeBoolean(mShouldSendCompatFakeFocus); } /** Read from Parcel. */ Loading @@ -124,6 +132,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { mProcState = in.readInt(); mUpdateProcState = in.readBoolean(); mIsForward = in.readBoolean(); mShouldSendCompatFakeFocus = in.readBoolean(); } public static final @NonNull Creator<ResumeActivityItem> CREATOR = Loading @@ -147,7 +156,8 @@ public class ResumeActivityItem extends ActivityLifecycleItem { } final ResumeActivityItem other = (ResumeActivityItem) o; return mProcState == other.mProcState && mUpdateProcState == other.mUpdateProcState && mIsForward == other.mIsForward; && mIsForward == other.mIsForward && mShouldSendCompatFakeFocus == other.mShouldSendCompatFakeFocus; } @Override Loading @@ -156,12 +166,14 @@ public class ResumeActivityItem extends ActivityLifecycleItem { result = 31 * result + mProcState; result = 31 * result + (mUpdateProcState ? 1 : 0); result = 31 * result + (mIsForward ? 1 : 0); result = 31 * result + (mShouldSendCompatFakeFocus ? 1 : 0); return result; } @Override public String toString() { return "ResumeActivityItem{procState=" + mProcState + ",updateProcState=" + mUpdateProcState + ",isForward=" + mIsForward + "}"; + ",updateProcState=" + mUpdateProcState + ",isForward=" + mIsForward + ",shouldSendCompatFakeFocus=" + mShouldSendCompatFakeFocus + "}"; } } core/java/android/app/servertransaction/TransactionExecutor.java +2 −1 Original line number Diff line number Diff line Loading @@ -226,7 +226,8 @@ public class TransactionExecutor { break; case ON_RESUME: mTransactionHandler.handleResumeActivity(r, false /* finalStateRequest */, r.isForward, "LIFECYCLER_RESUME_ACTIVITY"); r.isForward, false /* shouldSendCompatFakeFocus */, "LIFECYCLER_RESUME_ACTIVITY"); break; case ON_PAUSE: mTransactionHandler.handlePauseActivity(r, false /* finished */, Loading core/java/android/app/servertransaction/TransactionExecutorHelper.java +2 −1 Original line number Diff line number Diff line Loading @@ -195,7 +195,8 @@ public class TransactionExecutorHelper { lifecycleItem = StopActivityItem.obtain(0 /* configChanges */); break; default: lifecycleItem = ResumeActivityItem.obtain(false /* isForward */); lifecycleItem = ResumeActivityItem.obtain(false /* isForward */, false /* shouldSendCompatFakeFocus */); break; } Loading Loading
core/java/android/app/ActivityThread.java +13 −2 Original line number Diff line number Diff line Loading @@ -4164,7 +4164,8 @@ public final class ActivityThread extends ClientTransactionHandler private void scheduleResume(ActivityClientRecord r) { final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(/* isForward */ false)); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(/* isForward */ false, /* shouldSendCompatFakeFocus */ false)); executeTransaction(transaction); } Loading Loading @@ -4791,7 +4792,7 @@ public final class ActivityThread extends ClientTransactionHandler @Override public void handleResumeActivity(ActivityClientRecord r, boolean finalStateRequest, boolean isForward, String reason) { boolean isForward, boolean shouldSendCompatFakeFocus, String reason) { // If we are getting ready to gc after going to the background, well // we are back active so skip it. unscheduleGcIdler(); Loading Loading @@ -4898,6 +4899,16 @@ public final class ActivityThread extends ClientTransactionHandler if (r.activity.mVisibleFromClient) { r.activity.makeVisible(); } if (shouldSendCompatFakeFocus) { // Attaching to a window is asynchronous with the activity being resumed, // so it's possible we will need to send a fake focus event after attaching if (impl != null) { impl.dispatchCompatFakeFocus(); } else { r.window.getDecorView().fakeFocusAfterAttachingToWindow(); } } } r.nextIdle = mNewActivities; Loading
core/java/android/app/ClientTransactionHandler.java +2 −1 Original line number Diff line number Diff line Loading @@ -109,7 +109,8 @@ public abstract class ClientTransactionHandler { * @param reason Reason for performing this operation. */ public abstract void handleResumeActivity(@NonNull ActivityClientRecord r, boolean finalStateRequest, boolean isForward, String reason); boolean finalStateRequest, boolean isForward, boolean shouldSendCompatFakeFocus, String reason); /** * Notify the activity about top resumed state change. Loading
core/java/android/app/servertransaction/ResumeActivityItem.java +17 −5 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ public class ResumeActivityItem extends ActivityLifecycleItem { 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; @Override public void preExecute(ClientTransactionHandler client, IBinder token) { Loading @@ -52,7 +55,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { PendingTransactionActions pendingActions) { Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityResume"); client.handleResumeActivity(r, true /* finalStateRequest */, mIsForward, "RESUME_ACTIVITY"); mShouldSendCompatFakeFocus, "RESUME_ACTIVITY"); Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); } Loading @@ -74,7 +77,8 @@ public class ResumeActivityItem extends ActivityLifecycleItem { private ResumeActivityItem() {} /** Obtain an instance initialized with provided params. */ public static ResumeActivityItem obtain(int procState, boolean isForward) { public static ResumeActivityItem obtain(int procState, boolean isForward, boolean shouldSendCompatFakeFocus) { ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class); if (instance == null) { instance = new ResumeActivityItem(); Loading @@ -82,12 +86,13 @@ public class ResumeActivityItem extends ActivityLifecycleItem { instance.mProcState = procState; instance.mUpdateProcState = true; instance.mIsForward = isForward; instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus; return instance; } /** Obtain an instance initialized with provided params. */ public static ResumeActivityItem obtain(boolean isForward) { public static ResumeActivityItem obtain(boolean isForward, boolean shouldSendCompatFakeFocus) { ResumeActivityItem instance = ObjectPool.obtain(ResumeActivityItem.class); if (instance == null) { instance = new ResumeActivityItem(); Loading @@ -95,6 +100,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { instance.mProcState = ActivityManager.PROCESS_STATE_UNKNOWN; instance.mUpdateProcState = false; instance.mIsForward = isForward; instance.mShouldSendCompatFakeFocus = shouldSendCompatFakeFocus; return instance; } Loading @@ -105,6 +111,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { mProcState = ActivityManager.PROCESS_STATE_UNKNOWN; mUpdateProcState = false; mIsForward = false; mShouldSendCompatFakeFocus = false; ObjectPool.recycle(this); } Loading @@ -117,6 +124,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { dest.writeInt(mProcState); dest.writeBoolean(mUpdateProcState); dest.writeBoolean(mIsForward); dest.writeBoolean(mShouldSendCompatFakeFocus); } /** Read from Parcel. */ Loading @@ -124,6 +132,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { mProcState = in.readInt(); mUpdateProcState = in.readBoolean(); mIsForward = in.readBoolean(); mShouldSendCompatFakeFocus = in.readBoolean(); } public static final @NonNull Creator<ResumeActivityItem> CREATOR = Loading @@ -147,7 +156,8 @@ public class ResumeActivityItem extends ActivityLifecycleItem { } final ResumeActivityItem other = (ResumeActivityItem) o; return mProcState == other.mProcState && mUpdateProcState == other.mUpdateProcState && mIsForward == other.mIsForward; && mIsForward == other.mIsForward && mShouldSendCompatFakeFocus == other.mShouldSendCompatFakeFocus; } @Override Loading @@ -156,12 +166,14 @@ public class ResumeActivityItem extends ActivityLifecycleItem { result = 31 * result + mProcState; result = 31 * result + (mUpdateProcState ? 1 : 0); result = 31 * result + (mIsForward ? 1 : 0); result = 31 * result + (mShouldSendCompatFakeFocus ? 1 : 0); return result; } @Override public String toString() { return "ResumeActivityItem{procState=" + mProcState + ",updateProcState=" + mUpdateProcState + ",isForward=" + mIsForward + "}"; + ",updateProcState=" + mUpdateProcState + ",isForward=" + mIsForward + ",shouldSendCompatFakeFocus=" + mShouldSendCompatFakeFocus + "}"; } }
core/java/android/app/servertransaction/TransactionExecutor.java +2 −1 Original line number Diff line number Diff line Loading @@ -226,7 +226,8 @@ public class TransactionExecutor { break; case ON_RESUME: mTransactionHandler.handleResumeActivity(r, false /* finalStateRequest */, r.isForward, "LIFECYCLER_RESUME_ACTIVITY"); r.isForward, false /* shouldSendCompatFakeFocus */, "LIFECYCLER_RESUME_ACTIVITY"); break; case ON_PAUSE: mTransactionHandler.handlePauseActivity(r, false /* finished */, Loading
core/java/android/app/servertransaction/TransactionExecutorHelper.java +2 −1 Original line number Diff line number Diff line Loading @@ -195,7 +195,8 @@ public class TransactionExecutorHelper { lifecycleItem = StopActivityItem.obtain(0 /* configChanges */); break; default: lifecycleItem = ResumeActivityItem.obtain(false /* isForward */); lifecycleItem = ResumeActivityItem.obtain(false /* isForward */, false /* shouldSendCompatFakeFocus */); break; } Loading