summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/ImeFocusController.java20
-rw-r--r--core/java/android/view/ViewRootImpl.java1
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerInternal.java10
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java24
-rw-r--r--services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java5
-rw-r--r--services/core/java/com/android/server/power/Notifier.java1
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 {