summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/RemoteAnimationTarget.java18
-rw-r--r--core/java/android/window/TransitionInfo.java6
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java9
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java1
-rw-r--r--services/core/java/com/android/server/wm/RecentsAnimationController.java6
-rw-r--r--services/core/java/com/android/server/wm/Transition.java8
6 files changed, 45 insertions, 3 deletions
diff --git a/core/java/android/view/RemoteAnimationTarget.java b/core/java/android/view/RemoteAnimationTarget.java
index a468951c5020..44f419a8097d 100644
--- a/core/java/android/view/RemoteAnimationTarget.java
+++ b/core/java/android/view/RemoteAnimationTarget.java
@@ -45,6 +45,7 @@ import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.proto.ProtoOutputStream;
+import android.window.TaskSnapshot;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
@@ -234,6 +235,12 @@ public class RemoteAnimationTarget implements Parcelable {
*/
public @ColorInt int backgroundColor;
+ /**
+ * Whether the activity is going to show IME on the target window after the app transition.
+ * @see TaskSnapshot#hasImeSurface() that used the task snapshot during animating task.
+ */
+ public boolean willShowImeOnTarget;
+
public RemoteAnimationTarget(int taskId, int mode, SurfaceControl leash, boolean isTranslucent,
Rect clipRect, Rect contentInsets, int prefixOrderIndex, Point position,
Rect localBounds, Rect screenSpaceBounds,
@@ -294,12 +301,21 @@ public class RemoteAnimationTarget implements Parcelable {
hasAnimatingParent = in.readBoolean();
backgroundColor = in.readInt();
showBackdrop = in.readBoolean();
+ willShowImeOnTarget = in.readBoolean();
}
public void setShowBackdrop(boolean shouldShowBackdrop) {
showBackdrop = shouldShowBackdrop;
}
+ public void setWillShowImeOnTarget(boolean showImeOnTarget) {
+ willShowImeOnTarget = showImeOnTarget;
+ }
+
+ public boolean willShowImeOnTarget() {
+ return willShowImeOnTarget;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -328,6 +344,7 @@ public class RemoteAnimationTarget implements Parcelable {
dest.writeBoolean(hasAnimatingParent);
dest.writeInt(backgroundColor);
dest.writeBoolean(showBackdrop);
+ dest.writeBoolean(willShowImeOnTarget);
}
public void dump(PrintWriter pw, String prefix) {
@@ -350,6 +367,7 @@ public class RemoteAnimationTarget implements Parcelable {
pw.print(prefix); pw.print("hasAnimatingParent="); pw.print(hasAnimatingParent);
pw.print(prefix); pw.print("backgroundColor="); pw.print(backgroundColor);
pw.print(prefix); pw.print("showBackdrop="); pw.print(showBackdrop);
+ pw.print(prefix); pw.print("willShowImeOnTarget="); pw.print(willShowImeOnTarget);
}
public void dumpDebug(ProtoOutputStream proto, long fieldId) {
diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java
index 1f3841ad8b58..b263b08d6abc 100644
--- a/core/java/android/window/TransitionInfo.java
+++ b/core/java/android/window/TransitionInfo.java
@@ -116,6 +116,9 @@ public final class TransitionInfo implements Parcelable {
/** The first unused bit. This can be used by remotes to attach custom flags to this change. */
public static final int FLAG_FIRST_CUSTOM = 1 << 10;
+ /** The container is going to show IME on its task after the transition. */
+ public static final int FLAG_WILL_IME_SHOWN = 1 << 11;
+
/** @hide */
@IntDef(prefix = { "FLAG_" }, value = {
FLAG_NONE,
@@ -129,7 +132,8 @@ public final class TransitionInfo implements Parcelable {
FLAG_DISPLAY_HAS_ALERT_WINDOWS,
FLAG_IS_INPUT_METHOD,
FLAG_IS_EMBEDDED,
- FLAG_FIRST_CUSTOM
+ FLAG_FIRST_CUSTOM,
+ FLAG_WILL_IME_SHOWN
})
public @interface ChangeFlags {}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java
index afa255a09441..ef9e0951abf0 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java
@@ -79,6 +79,8 @@ public class RemoteAnimationTargetCompat {
// Fields used only to unrap into RemoteAnimationTarget
private final Rect startBounds;
+ public final boolean willShowImeOnTarget;
+
public RemoteAnimationTargetCompat(RemoteAnimationTarget app) {
taskId = app.taskId;
mode = app.mode;
@@ -102,6 +104,7 @@ public class RemoteAnimationTargetCompat {
windowType = app.windowType;
windowConfiguration = app.windowConfiguration;
startBounds = app.startBounds;
+ willShowImeOnTarget = app.willShowImeOnTarget;
}
private static int newModeToLegacyMode(int newMode) {
@@ -118,14 +121,15 @@ public class RemoteAnimationTargetCompat {
}
public RemoteAnimationTarget unwrap() {
- return new RemoteAnimationTarget(
+ final RemoteAnimationTarget target = new RemoteAnimationTarget(
taskId, mode, leash, isTranslucent, clipRect, contentInsets,
prefixOrderIndex, position, localBounds, screenSpaceBounds, windowConfiguration,
isNotInRecents, mStartLeash, startBounds, taskInfo, allowEnterPip, windowType
);
+ target.setWillShowImeOnTarget(willShowImeOnTarget);
+ return target;
}
-
/**
* Almost a copy of Transitions#setupStartState.
* TODO: remove when there is proper cross-process transaction sync.
@@ -234,6 +238,7 @@ public class RemoteAnimationTargetCompat {
? change.getTaskInfo().configuration.windowConfiguration
: new WindowConfiguration();
startBounds = change.getStartAbsBounds();
+ willShowImeOnTarget = (change.getFlags() & TransitionInfo.FLAG_WILL_IME_SHOWN) != 0;
}
public static RemoteAnimationTargetCompat[] wrap(RemoteAnimationTarget[] apps) {
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 19543510cca5..7a7041d5baa0 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -9755,6 +9755,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
record.mThumbnailAdapter != null ? record.mThumbnailAdapter.mCapturedLeash : null,
record.mStartBounds, task.getTaskInfo(), checkEnterPictureInPictureAppOpsState());
target.setShowBackdrop(record.mShowBackdrop);
+ target.setWillShowImeOnTarget(mStartingData != null && mStartingData.hasImeSurface());
target.hasAnimatingParent = record.hasAnimatingParent();
return target;
}
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index 1cff69334679..5b702eac7059 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -1183,6 +1183,12 @@ public class RecentsAnimationController implements DeathRecipient {
mLocalBounds, mBounds, mTask.getWindowConfiguration(),
mIsRecentTaskInvisible, null, null, mTask.getTaskInfo(),
topApp.checkEnterPictureInPictureAppOpsState());
+
+ final ActivityRecord topActivity = mTask.getTopNonFinishingActivity();
+ if (topActivity != null && topActivity.mStartingData != null
+ && topActivity.mStartingData.hasImeSurface()) {
+ mTarget.setWillShowImeOnTarget(true);
+ }
return mTarget;
}
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 31d8eb8eea17..bbc95a1dd70f 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -54,6 +54,7 @@ import static android.window.TransitionInfo.FLAG_OCCLUDES_KEYGUARD;
import static android.window.TransitionInfo.FLAG_SHOW_WALLPAPER;
import static android.window.TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT;
import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
+import static android.window.TransitionInfo.FLAG_WILL_IME_SHOWN;
import static com.android.server.wm.ActivityRecord.State.RESUMED;
import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_RECENTS_ANIM;
@@ -1728,6 +1729,13 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
if (task != null && task.voiceSession != null) {
flags |= FLAG_IS_VOICE_INTERACTION;
}
+ if (task != null) {
+ final ActivityRecord topActivity = task.getTopNonFinishingActivity();
+ if (topActivity != null && topActivity.mStartingData != null
+ && topActivity.mStartingData.hasImeSurface()) {
+ flags |= FLAG_WILL_IME_SHOWN;
+ }
+ }
final ActivityRecord record = wc.asActivityRecord();
if (record != null) {
if (record.mUseTransferredAnimation) {