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

am: 77d354efa1

Change-Id: Idca17e14657b6280af320529dc6ce8b23bc11c59
This commit is contained in:
Tarandeep Singh
2019-04-16 00:58:18 -07:00
committed by android-build-merger
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;
}
}
}
}
/**