Merge "Finish input when the screen state is off" into rvc-dev

This commit is contained in:
Ming-Shin Lu
2020-02-29 14:30:42 +00:00
committed by Android (Google) Code Review
6 changed files with 21 additions and 40 deletions

View File

@@ -196,6 +196,26 @@ public final class ImeFocusController {
mHasImeFocus = false; mHasImeFocus = false;
} }
/**
* 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. * @param windowAttribute {@link WindowManager.LayoutParams} to be checked.
* @return Whether the window is in local focus mode or not. * @return Whether the window is in local focus mode or not.

View File

@@ -1445,6 +1445,7 @@ public final class ViewRootImpl implements ViewParent,
final int newScreenState = toViewScreenState(newDisplayState); final int newScreenState = toViewScreenState(newDisplayState);
if (oldScreenState != newScreenState) { if (oldScreenState != newScreenState) {
mView.dispatchScreenStateChanged(newScreenState); mView.dispatchScreenStateChanged(newScreenState);
mImeFocusController.onScreenStateChanged(newScreenState);
} }
if (oldDisplayState == Display.STATE_OFF) { if (oldDisplayState == Display.STATE_OFF) {
// Draw was suppressed so we need to for it to happen here. // Draw was suppressed so we need to for it to happen here.

View File

@@ -43,12 +43,6 @@ public abstract class InputMethodManagerInternal {
void onInputMethodListUpdated(List<InputMethodInfo> info, @UserIdInt int userId); void onInputMethodListUpdated(List<InputMethodInfo> info, @UserIdInt int userId);
} }
/**
* 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. * Hides the current input method, if visible.
*/ */
@@ -102,10 +96,6 @@ public abstract class InputMethodManagerInternal {
*/ */
private static final InputMethodManagerInternal NOP = private static final InputMethodManagerInternal NOP =
new InputMethodManagerInternal() { new InputMethodManagerInternal() {
@Override
public void setInteractive(boolean interactive) {
}
@Override @Override
public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) { public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) {
} }

View File

@@ -4113,9 +4113,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
+ ((ClientState)msg.obj).uid); + ((ClientState)msg.obj).uid);
} }
return true; return true;
case MSG_SET_INTERACTIVE:
handleSetInteractive(msg.arg1 != 0);
return true;
case MSG_REPORT_FULLSCREEN_MODE: { case MSG_REPORT_FULLSCREEN_MODE: {
final boolean fullscreen = msg.arg1 != 0; final boolean fullscreen = msg.arg1 != 0;
final ClientState clientState = (ClientState)msg.obj; final ClientState clientState = (ClientState)msg.obj;
@@ -4190,20 +4187,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
return false; 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() { private boolean chooseNewDefaultIMELocked() {
final InputMethodInfo imi = InputMethodUtils.getMostApplicableDefaultIME( final InputMethodInfo imi = InputMethodUtils.getMostApplicableDefaultIME(
mSettings.getEnabledInputMethodListLocked()); mSettings.getEnabledInputMethodListLocked());
@@ -4799,13 +4782,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mService = service; mService = service;
} }
@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 @Override
public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) { public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) {
mService.mHandler.removeMessages(MSG_HIDE_CURRENT_INPUT_METHOD); mService.mHandler.removeMessages(MSG_HIDE_CURRENT_INPUT_METHOD);

View File

@@ -169,11 +169,6 @@ public final class MultiClientInputMethodManagerService {
LocalServices.addService(InputMethodManagerInternal.class, LocalServices.addService(InputMethodManagerInternal.class,
new InputMethodManagerInternal() { new InputMethodManagerInternal() {
@Override
public void setInteractive(boolean interactive) {
reportNotSupported();
}
@Override @Override
public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) { public void hideCurrentInputMethod(@SoftInputShowHideReason int reason) {
reportNotSupported(); reportNotSupported();

View File

@@ -413,7 +413,6 @@ public class Notifier {
// Start input as soon as we start waking up or going to sleep. // Start input as soon as we start waking up or going to sleep.
mInputManagerInternal.setInteractive(interactive); mInputManagerInternal.setInteractive(interactive);
mInputMethodManagerInternal.setInteractive(interactive);
// Notify battery stats. // Notify battery stats.
try { try {