Merge "Finish input when the screen state is off" into rvc-dev
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user