Merge "Consolidate clearing mImeInsetsFrozenUntilStartInput" into sc-qpr1-dev am: 9ae4d14f5d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16375908 Change-Id: Ia3dce21e5a4198086df914d50299f9513eff108c
This commit is contained in:
@@ -2837,7 +2837,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
return;
|
||||
}
|
||||
final IBinder targetWindow = mImeTargetWindowMap.get(startInputToken);
|
||||
if (targetWindow != null && mLastImeTargetWindow != targetWindow) {
|
||||
if (targetWindow != null) {
|
||||
mWindowManagerInternal.updateInputMethodTargetWindow(token, targetWindow);
|
||||
}
|
||||
mLastImeTargetWindow = targetWindow;
|
||||
|
||||
@@ -1038,6 +1038,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
pw.print(" forceNewConfig="); pw.println(forceNewConfig);
|
||||
pw.print(prefix); pw.print("mActivityType=");
|
||||
pw.println(activityTypeToString(getActivityType()));
|
||||
pw.print(prefix); pw.print("mImeInsetsFrozenUntilStartInput=");
|
||||
pw.println(mImeInsetsFrozenUntilStartInput);
|
||||
if (requestedVrComponent != null) {
|
||||
pw.print(prefix);
|
||||
pw.print("requestedVrComponent=");
|
||||
|
||||
@@ -3969,11 +3969,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
* which controls the visibility and animation of the input method window.
|
||||
*/
|
||||
void updateImeInputAndControlTarget(WindowState target) {
|
||||
if (target != null && target.mActivityRecord != null) {
|
||||
target.mActivityRecord.mImeInsetsFrozenUntilStartInput = false;
|
||||
}
|
||||
if (mImeInputTarget != target) {
|
||||
ProtoLog.i(WM_DEBUG_IME, "setInputMethodInputTarget %s", target);
|
||||
if (target != null && target.mActivityRecord != null) {
|
||||
target.mActivityRecord.mImeInsetsFrozenUntilStartInput = false;
|
||||
}
|
||||
setImeInputTarget(target);
|
||||
updateImeControlTarget();
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
||||
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
||||
import static android.os.Process.NOBODY_UID;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.InsetsState.ITYPE_IME;
|
||||
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
|
||||
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
||||
@@ -127,6 +128,8 @@ import android.view.IRemoteAnimationFinishedCallback;
|
||||
import android.view.IRemoteAnimationRunner.Stub;
|
||||
import android.view.IWindowManager;
|
||||
import android.view.IWindowSession;
|
||||
import android.view.InsetsSource;
|
||||
import android.view.InsetsState;
|
||||
import android.view.RemoteAnimationAdapter;
|
||||
import android.view.RemoteAnimationTarget;
|
||||
import android.view.Surface;
|
||||
@@ -2884,6 +2887,41 @@ public class ActivityRecordTests extends WindowTestsBase {
|
||||
assertFalse(app.mActivityRecord.mImeInsetsFrozenUntilStartInput);
|
||||
}
|
||||
|
||||
@UseTestDisplay(addWindows = W_INPUT_METHOD)
|
||||
@Test
|
||||
public void testImeInsetsFrozenFlag_resetWhenReportedToBeImeInputTarget() {
|
||||
final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
|
||||
|
||||
InsetsSource imeSource = new InsetsSource(ITYPE_IME);
|
||||
app.getInsetsState().addSource(imeSource);
|
||||
mDisplayContent.setImeLayeringTarget(app);
|
||||
mDisplayContent.updateImeInputAndControlTarget(app);
|
||||
|
||||
InsetsState state = mDisplayContent.getInsetsPolicy().getInsetsForWindow(app);
|
||||
assertFalse(state.getSource(ITYPE_IME).isVisible());
|
||||
assertTrue(state.getSource(ITYPE_IME).getFrame().isEmpty());
|
||||
|
||||
// Simulate app is closing and expect IME insets is frozen.
|
||||
mDisplayContent.mOpeningApps.clear();
|
||||
app.mActivityRecord.commitVisibility(false, false);
|
||||
app.mActivityRecord.onWindowsGone();
|
||||
assertTrue(app.mActivityRecord.mImeInsetsFrozenUntilStartInput);
|
||||
|
||||
// Simulate app re-start input or turning screen off/on then unlocked by un-secure
|
||||
// keyguard to back to the app, expect IME insets is not frozen
|
||||
imeSource.setFrame(new Rect(100, 400, 500, 500));
|
||||
app.getInsetsState().addSource(imeSource);
|
||||
app.getInsetsState().setSourceVisible(ITYPE_IME, true);
|
||||
mDisplayContent.updateImeInputAndControlTarget(app);
|
||||
assertFalse(app.mActivityRecord.mImeInsetsFrozenUntilStartInput);
|
||||
|
||||
// Verify when IME is visible and the app can receive the right IME insets from policy.
|
||||
makeWindowVisibleAndDrawn(app, mImeWindow);
|
||||
state = mDisplayContent.getInsetsPolicy().getInsetsForWindow(app);
|
||||
assertTrue(state.getSource(ITYPE_IME).isVisible());
|
||||
assertEquals(state.getSource(ITYPE_IME).getFrame(), imeSource.getFrame());
|
||||
}
|
||||
|
||||
private void assertHasStartingWindow(ActivityRecord atoken) {
|
||||
assertNotNull(atoken.mStartingSurface);
|
||||
assertNotNull(atoken.mStartingData);
|
||||
|
||||
Reference in New Issue
Block a user