Merge "Callback translation usages for registered translation app." into sc-dev

This commit is contained in:
Joanne Chung
2021-06-29 02:39:21 +00:00
committed by Android (Google) Code Review

View File

@@ -182,15 +182,28 @@ final class TranslationManagerServiceImpl extends
+ "translation state for token=" + token + " taskId=" + taskId); + "translation state for token=" + token + " taskId=" + taskId);
return; return;
} }
int translationActivityUid = -1;
try { try {
IBinder activityToken = taskTopActivityTokens.getActivityToken();
taskTopActivityTokens.getApplicationThread().updateUiTranslationState( taskTopActivityTokens.getApplicationThread().updateUiTranslationState(
taskTopActivityTokens.getActivityToken(), state, sourceSpec, targetSpec, activityToken, state, sourceSpec, targetSpec,
viewIds, uiTranslationSpec); viewIds, uiTranslationSpec);
mLastActivityTokens = new WeakReference<>(taskTopActivityTokens); mLastActivityTokens = new WeakReference<>(taskTopActivityTokens);
ComponentName componentName =
mActivityTaskManagerInternal.getActivityName(activityToken);
try {
if (componentName != null) {
translationActivityUid =
getContext().getPackageManager().getApplicationInfoAsUser(
componentName.getPackageName(), 0, getUserId()).uid;
}
} catch (PackageManager.NameNotFoundException e) {
Slog.d(TAG, "Cannot find package for" + componentName);
}
} catch (RemoteException e) { } catch (RemoteException e) {
Slog.w(TAG, "Update UiTranslationState fail: " + e); Slog.w(TAG, "Update UiTranslationState fail: " + e);
} }
invokeCallbacks(state, sourceSpec, targetSpec); invokeCallbacks(state, sourceSpec, targetSpec, translationActivityUid);
} }
@GuardedBy("mLock") @GuardedBy("mLock")
@@ -216,7 +229,8 @@ final class TranslationManagerServiceImpl extends
} }
private void invokeCallbacks( private void invokeCallbacks(
int state, TranslationSpec sourceSpec, TranslationSpec targetSpec) { int state, TranslationSpec sourceSpec, TranslationSpec targetSpec,
int translationActivityUid) {
Bundle res = new Bundle(); Bundle res = new Bundle();
res.putInt(EXTRA_STATE, state); res.putInt(EXTRA_STATE, state);
// TODO(177500482): Store the locale pair so it can be sent for RESUME events. // TODO(177500482): Store the locale pair so it can be sent for RESUME events.
@@ -229,6 +243,14 @@ final class TranslationManagerServiceImpl extends
LocalServices.getService(InputMethodManagerInternal.class) LocalServices.getService(InputMethodManagerInternal.class)
.getEnabledInputMethodListAsUser(mUserId); .getEnabledInputMethodListAsUser(mUserId);
mCallbacks.broadcast((callback, uid) -> { mCallbacks.broadcast((callback, uid) -> {
// callback to the application that is translated if registered.
if ((int) uid == translationActivityUid) {
try {
callback.sendResult(res);
} catch (RemoteException e) {
Slog.w(TAG, "Failed to invoke UiTranslationStateCallback: " + e);
}
}
// Code here is non-optimal since it's temporary.. // Code here is non-optimal since it's temporary..
boolean isIme = false; boolean isIme = false;
for (InputMethodInfo inputMethod : enabledInputMethods) { for (InputMethodInfo inputMethod : enabledInputMethods) {