Lock down RemoteInputConnectionImpl#getInputConnection()

This is a mechanical refactoring CL that locks down

  RemoteInputConnectionImpl#getInputConnection()

as a private method.

This is supposed to be helpful to to avoid future misuse of raw
InputConnection instance outside RemoteInputConnectionImpl.

Note that InputMethodManager#isAcceptingText() remains to have the
same observable behavior in this CL.  The key fact is that the
following two fields are updated in an atomic way.

  * RemoteInputConnectionImpl#mInputConnection
  * RemoteInputConnectionImpl#mFinished

Bug: 192412909
Test: presubmit
Change-Id: Ic5fbc6213ad62df95fc0b7eef18bab1fd9fbdbf1
This commit is contained in:
Yohei Yukawa
2021-08-04 11:57:42 -07:00
parent b37f32cfec
commit d1ff9740c1
2 changed files with 7 additions and 4 deletions

View File

@@ -1381,8 +1381,7 @@ public final class InputMethodManager {
public boolean isAcceptingText() {
checkFocus();
synchronized (mH) {
return mServedInputConnection != null
&& mServedInputConnection.getInputConnection() != null;
return mServedInputConnection != null && !mServedInputConnection.isFinished();
}
}

View File

@@ -86,13 +86,17 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub {
* @return {@link InputConnection} to which incoming IPCs will be dispatched.
*/
@Nullable
public InputConnection getInputConnection() {
private InputConnection getInputConnection() {
synchronized (mLock) {
return mInputConnection;
}
}
private boolean isFinished() {
/**
* @return {@code true} until the target {@link InputConnection} receives
* {@link InputConnection#closeConnection()} as a result of {@link #deactivate()}.
*/
public boolean isFinished() {
synchronized (mLock) {
return mFinished;
}