diff options
6 files changed, 21 insertions, 40 deletions
diff --git a/core/java/android/view/ImeFocusController.java b/core/java/android/view/ImeFocusController.java index 67e88a5a1831..74fac2b40472 100644 --- a/core/java/android/view/ImeFocusController.java +++ b/core/java/android/view/ImeFocusController.java @@ -197,6 +197,26 @@ public final class ImeFocusController { } /** + * Called by {@link ViewRootImpl} to feedback the state of the screen for this view. + * @param newScreenState The new state of the screen. Can be either + * {@link View#SCREEN_STATE_ON} or {@link View#SCREEN_STATE_OFF} + */ + @UiThread + void onScreenStateChanged(int newScreenState) { + if (!getImmDelegate().isCurrentRootView(mViewRootImpl)) { + return; + } + // Close input connection and IME when the screen is turn off for security concern. + if (newScreenState == View.SCREEN_STATE_OFF && mServedView != null) { + if (DEBUG) { + Log.d(TAG, "onScreenStateChanged, disconnect input when screen turned off"); + } + mNextServedView = null; + mViewRootImpl.dispatchCheckFocus(); + } + } + + /** * @param windowAttribute {@link WindowManager.LayoutParams} to be checked. * @return Whether the window is in local focus mode or not. */ diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 4a093e6038b8..b4b27411521e 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1445,6 +1445,7 @@ public final class ViewRootImpl implements ViewParent, final int newScreenState = toViewScreenState(newDisplayState); if (oldScreenState != newScreenState) { mView.dispatchScreenStateChanged(newScreenState); + mImeFocusController.onScreenStateChanged(newScreenState); } if (oldDisplayState == Display.STATE_OFF) { // Draw was suppressed so we need to for it to happen here. diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java index f24699a6ae64..68e6c1885ec2 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java @@ -44,12 +44,6 @@ public abstract class InputMethodManagerInternal { } /** - * Called by the power manager to tell the input method manager whether it - * should start watching for wake events. - */ - public abstract void setInteractive(boolean interactive); - - /** * Hides the current input method, if visible. */ public abstract void hideCurrentInputMethod(@SoftInputShowHideReason int reason); @@ -103,10 +97,6 @@ public abstract class InputMethodManagerInternal { private static final InputMethodManagerInternal NOP = new InputMethodManagerInternal() { @Override - public void setInteractive(boolean interactive) { - } - - @Override public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) { } diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index e3c545c3cf28..13595b7f8b1c 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -4094,9 +4094,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub + ((ClientState)msg.obj).uid); } return true; - case MSG_SET_INTERACTIVE: - handleSetInteractive(msg.arg1 != 0); - return true; case MSG_REPORT_FULLSCREEN_MODE: { final boolean fullscreen = msg.arg1 != 0; final ClientState clientState = (ClientState)msg.obj; @@ -4171,20 +4168,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub return false; } - private void handleSetInteractive(final boolean interactive) { - synchronized (mMethodMap) { - mIsInteractive = interactive; - updateSystemUiLocked(interactive ? mImeWindowVis : 0, mBackDisposition); - - // Inform the current client of the change in active status - if (mCurClient != null && mCurClient.client != null) { - executeOrSendMessage(mCurClient.client, mCaller.obtainMessageIIO( - MSG_SET_ACTIVE, mIsInteractive ? 1 : 0, mInFullscreenMode ? 1 : 0, - mCurClient)); - } - } - } - private boolean chooseNewDefaultIMELocked() { final InputMethodInfo imi = InputMethodUtils.getMostApplicableDefaultIME( mSettings.getEnabledInputMethodListLocked()); @@ -4781,13 +4764,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } @Override - public void setInteractive(boolean interactive) { - // Do everything in handler so as not to block the caller. - mService.mHandler.obtainMessage(MSG_SET_INTERACTIVE, interactive ? 1 : 0, 0) - .sendToTarget(); - } - - @Override public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) { mService.mHandler.removeMessages(MSG_HIDE_CURRENT_INPUT_METHOD); mService.mHandler.obtainMessage(MSG_HIDE_CURRENT_INPUT_METHOD, reason).sendToTarget(); diff --git a/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java index 1aff23b09c0f..039a151fca19 100644 --- a/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java @@ -170,11 +170,6 @@ public final class MultiClientInputMethodManagerService { LocalServices.addService(InputMethodManagerInternal.class, new InputMethodManagerInternal() { @Override - public void setInteractive(boolean interactive) { - reportNotSupported(); - } - - @Override public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) { reportNotSupported(); } diff --git a/services/core/java/com/android/server/power/Notifier.java b/services/core/java/com/android/server/power/Notifier.java index 0b95be15f157..199cb4981fe6 100644 --- a/services/core/java/com/android/server/power/Notifier.java +++ b/services/core/java/com/android/server/power/Notifier.java @@ -413,7 +413,6 @@ public class Notifier { // Start input as soon as we start waking up or going to sleep. mInputManagerInternal.setInteractive(interactive); - mInputMethodManagerInternal.setInteractive(interactive); // Notify battery stats. try { |