Loading core/java/android/view/IDisplayWindowInsetsController.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -60,5 +60,5 @@ oneway interface IDisplayWindowInsetsController { * Reports the requested IME visibility of the IME input target to * the IDisplayWindowInsetsController */ void setImeInputTargetRequestedVisibility(boolean visible); void setImeInputTargetRequestedVisibility(boolean visible, in ImeTracker.Token statsToken); } core/java/android/view/IWindowManager.aidl +3 −1 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ import android.view.MotionEvent; import android.view.InputChannel; import android.view.InputDevice; import android.view.IInputFilter; import android.view.inputmethod.ImeTracker; import android.view.AppTransitionAnimationSpec; import android.view.WindowContentFrameStats; import android.view.WindowManager; Loading Loading @@ -765,7 +766,8 @@ interface IWindowManager * container. */ @EnforcePermission("MANAGE_APP_TOKENS") void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes); void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes, in @nullable ImeTracker.Token statsToken); /** * Called to get the expected window insets. Loading core/java/android/view/inputmethod/ImeTracker.java +8 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,8 @@ public interface ImeTracker { PHASE_CLIENT_ALREADY_HIDDEN, PHASE_CLIENT_VIEW_HANDLER_AVAILABLE, PHASE_SERVER_UPDATE_CLIENT_VISIBILITY, PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE, PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES, }) @Retention(RetentionPolicy.SOURCE) @interface Phase {} Loading Loading @@ -436,6 +438,12 @@ public interface ImeTracker { * app or the RemoteInsetsControlTarget). */ int PHASE_SERVER_UPDATE_CLIENT_VISIBILITY = ImeProtoEnums.PHASE_SERVER_UPDATE_CLIENT_VISIBILITY; /** DisplayImeController received the requested visibility for the IME and stored it. */ int PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE = ImeProtoEnums.PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE; /** The control target reported its requestedVisibleTypes back to WindowManagerService. */ int PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES = ImeProtoEnums.PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES; /** * Called when an IME request is started. Loading core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java +14 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,8 @@ import java.lang.annotation.Retention; SoftInputShowHideReason.SHOW_SOFT_INPUT_IME_TOGGLE_SOFT_INPUT, SoftInputShowHideReason.SHOW_SOFT_INPUT_IMM_DEPRECATION, SoftInputShowHideReason.CONTROL_WINDOW_INSETS_ANIMATION, SoftInputShowHideReason.SHOW_INPUT_TARGET_CHANGED, SoftInputShowHideReason.HIDE_INPUT_TARGET_CHANGED, }) public @interface SoftInputShowHideReason { /** Default, undefined reason. */ Loading Loading @@ -336,6 +338,18 @@ public @interface SoftInputShowHideReason { */ int HIDE_WINDOW_LEGACY_DIRECT = ImeProtoEnums.REASON_HIDE_WINDOW_LEGACY_DIRECT; /** * Show soft input because the input target changed * {@link com.android.server.wm.ImeInsetsSourceProvider#onInputTargetChanged}. */ int SHOW_INPUT_TARGET_CHANGED = ImeProtoEnums.REASON_SHOW_INPUT_TARGET_CHANGED; /** * Hide soft input because the input target changed by * {@link com.android.server.wm.ImeInsetsSourceProvider#onInputTargetChanged}. */ int HIDE_INPUT_TARGET_CHANGED = ImeProtoEnums.REASON_HIDE_INPUT_TARGET_CHANGED; /** * Show / Hide soft input by * {@link android.inputmethodservice.InputMethodService#resetStateForNewConfiguration}. Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java +10 −7 Original line number Diff line number Diff line Loading @@ -403,8 +403,11 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged @Override // TODO(b/335404678): pass control target public void setImeInputTargetRequestedVisibility(boolean visible) { public void setImeInputTargetRequestedVisibility(boolean visible, @NonNull ImeTracker.Token statsToken) { if (android.view.inputmethod.Flags.refactorInsetsController()) { ImeTracker.forLogging().onProgress(statsToken, ImeTracker.PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE); mImeRequestedVisible = visible; dispatchImeRequested(mDisplayId, mImeRequestedVisible); Loading @@ -414,21 +417,21 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // therefore have to start the show animation from here startAnimation(mImeRequestedVisible /* show */, false /* forceRestart */); setVisibleDirectly(mImeRequestedVisible || mAnimation != null); setVisibleDirectly(mImeRequestedVisible || mAnimation != null, statsToken); } } /** * Sends the local visibility state back to window manager. Needed for legacy adjustForIme. */ private void setVisibleDirectly(boolean visible) { private void setVisibleDirectly(boolean visible, @Nullable ImeTracker.Token statsToken) { mInsetsState.setSourceVisible(InsetsSource.ID_IME, visible); mRequestedVisibleTypes = visible ? mRequestedVisibleTypes | WindowInsets.Type.ime() : mRequestedVisibleTypes & ~WindowInsets.Type.ime(); try { mWmService.updateDisplayWindowRequestedVisibleTypes(mDisplayId, mRequestedVisibleTypes); mRequestedVisibleTypes, statsToken); } catch (RemoteException e) { } } Loading Loading @@ -640,7 +643,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged t.hide(animatingLeash); removeImeSurface(mDisplayId); if (android.view.inputmethod.Flags.refactorInsetsController()) { setVisibleDirectly(false /* visible */); setVisibleDirectly(false /* visible */, statsToken); } ImeTracker.forLogging().onHidden(mStatsToken); } else if (mAnimationDirection == DIRECTION_SHOW && !mCancelled) { Loading Loading @@ -669,13 +672,13 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged if (!android.view.inputmethod.Flags.refactorInsetsController() && !show) { // When going away, queue up insets change first, otherwise any bounds changes // can have a "flicker" of ime-provided insets. setVisibleDirectly(false /* visible */); setVisibleDirectly(false /* visible */, null /* statsToken */); } mAnimation.start(); if (!android.view.inputmethod.Flags.refactorInsetsController() && show) { // When showing away, queue up insets change last, otherwise any bounds changes // can have a "flicker" of ime-provided insets. setVisibleDirectly(true /* visible */); setVisibleDirectly(true /* visible */, null /* statsToken */); } } Loading Loading
core/java/android/view/IDisplayWindowInsetsController.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -60,5 +60,5 @@ oneway interface IDisplayWindowInsetsController { * Reports the requested IME visibility of the IME input target to * the IDisplayWindowInsetsController */ void setImeInputTargetRequestedVisibility(boolean visible); void setImeInputTargetRequestedVisibility(boolean visible, in ImeTracker.Token statsToken); }
core/java/android/view/IWindowManager.aidl +3 −1 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ import android.view.MotionEvent; import android.view.InputChannel; import android.view.InputDevice; import android.view.IInputFilter; import android.view.inputmethod.ImeTracker; import android.view.AppTransitionAnimationSpec; import android.view.WindowContentFrameStats; import android.view.WindowManager; Loading Loading @@ -765,7 +766,8 @@ interface IWindowManager * container. */ @EnforcePermission("MANAGE_APP_TOKENS") void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes); void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes, in @nullable ImeTracker.Token statsToken); /** * Called to get the expected window insets. Loading
core/java/android/view/inputmethod/ImeTracker.java +8 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,8 @@ public interface ImeTracker { PHASE_CLIENT_ALREADY_HIDDEN, PHASE_CLIENT_VIEW_HANDLER_AVAILABLE, PHASE_SERVER_UPDATE_CLIENT_VISIBILITY, PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE, PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES, }) @Retention(RetentionPolicy.SOURCE) @interface Phase {} Loading Loading @@ -436,6 +438,12 @@ public interface ImeTracker { * app or the RemoteInsetsControlTarget). */ int PHASE_SERVER_UPDATE_CLIENT_VISIBILITY = ImeProtoEnums.PHASE_SERVER_UPDATE_CLIENT_VISIBILITY; /** DisplayImeController received the requested visibility for the IME and stored it. */ int PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE = ImeProtoEnums.PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE; /** The control target reported its requestedVisibleTypes back to WindowManagerService. */ int PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES = ImeProtoEnums.PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES; /** * Called when an IME request is started. Loading
core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java +14 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,8 @@ import java.lang.annotation.Retention; SoftInputShowHideReason.SHOW_SOFT_INPUT_IME_TOGGLE_SOFT_INPUT, SoftInputShowHideReason.SHOW_SOFT_INPUT_IMM_DEPRECATION, SoftInputShowHideReason.CONTROL_WINDOW_INSETS_ANIMATION, SoftInputShowHideReason.SHOW_INPUT_TARGET_CHANGED, SoftInputShowHideReason.HIDE_INPUT_TARGET_CHANGED, }) public @interface SoftInputShowHideReason { /** Default, undefined reason. */ Loading Loading @@ -336,6 +338,18 @@ public @interface SoftInputShowHideReason { */ int HIDE_WINDOW_LEGACY_DIRECT = ImeProtoEnums.REASON_HIDE_WINDOW_LEGACY_DIRECT; /** * Show soft input because the input target changed * {@link com.android.server.wm.ImeInsetsSourceProvider#onInputTargetChanged}. */ int SHOW_INPUT_TARGET_CHANGED = ImeProtoEnums.REASON_SHOW_INPUT_TARGET_CHANGED; /** * Hide soft input because the input target changed by * {@link com.android.server.wm.ImeInsetsSourceProvider#onInputTargetChanged}. */ int HIDE_INPUT_TARGET_CHANGED = ImeProtoEnums.REASON_HIDE_INPUT_TARGET_CHANGED; /** * Show / Hide soft input by * {@link android.inputmethodservice.InputMethodService#resetStateForNewConfiguration}. Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java +10 −7 Original line number Diff line number Diff line Loading @@ -403,8 +403,11 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged @Override // TODO(b/335404678): pass control target public void setImeInputTargetRequestedVisibility(boolean visible) { public void setImeInputTargetRequestedVisibility(boolean visible, @NonNull ImeTracker.Token statsToken) { if (android.view.inputmethod.Flags.refactorInsetsController()) { ImeTracker.forLogging().onProgress(statsToken, ImeTracker.PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE); mImeRequestedVisible = visible; dispatchImeRequested(mDisplayId, mImeRequestedVisible); Loading @@ -414,21 +417,21 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // therefore have to start the show animation from here startAnimation(mImeRequestedVisible /* show */, false /* forceRestart */); setVisibleDirectly(mImeRequestedVisible || mAnimation != null); setVisibleDirectly(mImeRequestedVisible || mAnimation != null, statsToken); } } /** * Sends the local visibility state back to window manager. Needed for legacy adjustForIme. */ private void setVisibleDirectly(boolean visible) { private void setVisibleDirectly(boolean visible, @Nullable ImeTracker.Token statsToken) { mInsetsState.setSourceVisible(InsetsSource.ID_IME, visible); mRequestedVisibleTypes = visible ? mRequestedVisibleTypes | WindowInsets.Type.ime() : mRequestedVisibleTypes & ~WindowInsets.Type.ime(); try { mWmService.updateDisplayWindowRequestedVisibleTypes(mDisplayId, mRequestedVisibleTypes); mRequestedVisibleTypes, statsToken); } catch (RemoteException e) { } } Loading Loading @@ -640,7 +643,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged t.hide(animatingLeash); removeImeSurface(mDisplayId); if (android.view.inputmethod.Flags.refactorInsetsController()) { setVisibleDirectly(false /* visible */); setVisibleDirectly(false /* visible */, statsToken); } ImeTracker.forLogging().onHidden(mStatsToken); } else if (mAnimationDirection == DIRECTION_SHOW && !mCancelled) { Loading Loading @@ -669,13 +672,13 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged if (!android.view.inputmethod.Flags.refactorInsetsController() && !show) { // When going away, queue up insets change first, otherwise any bounds changes // can have a "flicker" of ime-provided insets. setVisibleDirectly(false /* visible */); setVisibleDirectly(false /* visible */, null /* statsToken */); } mAnimation.start(); if (!android.view.inputmethod.Flags.refactorInsetsController() && show) { // When showing away, queue up insets change last, otherwise any bounds changes // can have a "flicker" of ime-provided insets. setVisibleDirectly(true /* visible */); setVisibleDirectly(true /* visible */, null /* statsToken */); } } Loading