Merge "Allow MSIME to set inactive when window loses focus." into qt-dev

This commit is contained in:
Tarandeep Singh
2019-04-16 07:37:06 +00:00
committed by Android (Google) Code Review
5 changed files with 51 additions and 0 deletions

View File

@@ -374,4 +374,15 @@ public final class MultiClientInputMethodServiceDelegate {
public boolean isUidAllowedOnDisplay(int displayId, int uid) {
return mImpl.isUidAllowedOnDisplay(displayId, uid);
}
/**
* Can be called by MSIME to activate/deactivate a client when it is gaining/losing focus
* respectively.
*
* @param clientId client ID to activate/deactivate.
* @param active {@code true} to activate a client.
*/
public void setActive(int clientId, boolean active) {
mImpl.setActive(clientId, active);
}
}

View File

@@ -190,4 +190,8 @@ final class MultiClientInputMethodServiceDelegateImpl {
boolean isUidAllowedOnDisplay(int displayId, int uid) {
return mPrivOps.isUidAllowedOnDisplay(displayId, uid);
}
void setActive(int clientId, boolean active) {
mPrivOps.setActive(clientId, active);
}
}

View File

@@ -31,4 +31,5 @@ interface IMultiClientInputMethodPrivilegedOperations {
in IMultiClientInputMethodSession multiClientSession, in InputChannel writeChannel);
void reportImeWindowTarget(int clientId, int targetWindowHandle, in IBinder imeWindowToken);
boolean isUidAllowedOnDisplay(int displayId, int uid);
void setActive(int clientId, boolean active);
}

View File

@@ -212,4 +212,21 @@ public class MultiClientInputMethodPrivilegedOperations {
}
}
/**
* Calls {@link IMultiClientInputMethodPrivilegedOperations#setActive(int, boolean)}.
* @param clientId client ID to be set active/inactive
* @param active {@code true} set set active.
*/
@AnyThread
public void setActive(int clientId, boolean active) {
final IMultiClientInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull();
if (ops == null) {
return;
}
try {
ops.setActive(clientId, active);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}

View File

@@ -1228,6 +1228,24 @@ public final class MultiClientInputMethodManagerService {
public boolean isUidAllowedOnDisplay(int displayId, int uid) {
return mIWindowManagerInternal.isUidAllowedOnDisplay(displayId, uid);
}
@BinderThread
@Override
public void setActive(int clientId, boolean active) {
synchronized (mPerUserData.mLock) {
final InputMethodClientInfo clientInfo =
mPerUserData.getClientFromIdLocked(clientId);
if (clientInfo == null) {
Slog.e(TAG, "Unknown clientId=" + clientId);
return;
}
try {
clientInfo.mClient.setActive(active, false /* fullscreen */);
} catch (RemoteException e) {
return;
}
}
}
}
/**