Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a7c4098 authored by Joanne Chung's avatar Joanne Chung Committed by Automerger Merge Worker
Browse files

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15126531

Change-Id: Iba40c8fc94e4076b14622690a6f006bf91148432
parents 097fdb1b e099738d
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -182,15 +182,28 @@ final class TranslationManagerServiceImpl extends
                    + "translation state for token=" + token + " taskId=" + taskId);
            return;
        }
        int translationActivityUid = -1;
        try {
            IBinder activityToken = taskTopActivityTokens.getActivityToken();
            taskTopActivityTokens.getApplicationThread().updateUiTranslationState(
                    taskTopActivityTokens.getActivityToken(), state, sourceSpec, targetSpec,
                    activityToken, state, sourceSpec, targetSpec,
                    viewIds, uiTranslationSpec);
            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) {
            Slog.w(TAG, "Update UiTranslationState fail: " + e);
        }
        invokeCallbacks(state, sourceSpec, targetSpec);
        invokeCallbacks(state, sourceSpec, targetSpec, translationActivityUid);
    }

    @GuardedBy("mLock")
@@ -216,7 +229,8 @@ final class TranslationManagerServiceImpl extends
    }

    private void invokeCallbacks(
            int state, TranslationSpec sourceSpec, TranslationSpec targetSpec) {
            int state, TranslationSpec sourceSpec, TranslationSpec targetSpec,
            int translationActivityUid) {
        Bundle res = new Bundle();
        res.putInt(EXTRA_STATE, state);
        // 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)
                        .getEnabledInputMethodListAsUser(mUserId);
        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..
            boolean isIme = false;
            for (InputMethodInfo inputMethod : enabledInputMethods) {