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

Commit 3a907ab1 authored by Joanne Chung's avatar Joanne Chung
Browse files

Add shell commands and dump information for Translation

1. Add shell command to allow a temporary override of the
TranslationService that helps e2e CTS tests.
2. Add permission to allow the shell call the UiTranslationManager
APIs for the tests.
3. Dump translation systemservice and activity translation related
information to help debugging

We don't want to leak translation feature now, so we submit the
change about Shell in internal branch.

Bug: 179047265
Test: manual.
1. Switch to temp TranslationService by "adb shell cmd transformer set
<myTranslationService> 12000" and make sure only the same app can
access the APIs when switching to the temp service.
2. adb shell dumpsys transformer
3. adb shell dumpsys activity <myactivity> --translation
(We set "transformer" now to prevent feature leak, the final value is
translation)

Change-Id: I2573b7ea226bd805a951f8346d5370d9c9776364
parent b8737dac
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -7100,6 +7100,9 @@ public class Activity extends ContextThemeWrapper
                case "--contentcapture":
                    dumpContentCaptureManager(prefix, writer);
                    return;
                case "--translation":
                    dumpUiTranslation(prefix, writer);
                    return;
            }
        }
        writer.print(prefix); writer.print("Local Activity ");
@@ -7140,6 +7143,7 @@ public class Activity extends ContextThemeWrapper

        dumpAutofillManager(prefix, writer);
        dumpContentCaptureManager(prefix, writer);
        dumpUiTranslation(prefix, writer);

        ResourcesManager.getInstance().dump(prefix, writer);
    }
@@ -7164,6 +7168,14 @@ public class Activity extends ContextThemeWrapper
        }
    }

    void dumpUiTranslation(String prefix, PrintWriter writer) {
        if (mUiTranslationController != null) {
            mUiTranslationController.dump(prefix, writer);
        } else {
            writer.print(prefix); writer.println("No UiTranslationController");
        }
    }

    /**
     * Bit indicating that this activity is "immersive" and should not be
     * interrupted by notifications if possible.
+15 −3
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import com.android.internal.util.DataClass;
 * <p>This spec help specify information such as the language/locale for the translation, as well
 * as the data format for the translation (text, audio, etc.)</p>
 */
@DataClass(genEqualsHashCode = true, genHiddenConstDefs = true)
@DataClass(genEqualsHashCode = true, genHiddenConstDefs = true, genToString = true)
public final class TranslationSpec implements Parcelable {

    /** Data format for translation is text. */
@@ -97,6 +97,18 @@ public final class TranslationSpec implements Parcelable {
        return mDataFormat;
    }

    @Override
    @DataClass.Generated.Member
    public String toString() {
        // You can override field toString logic by defining methods like:
        // String fieldNameToString() { ... }

        return "TranslationSpec { " +
                "language = " + mLanguage + ", " +
                "dataFormat = " + mDataFormat +
        " }";
    }

    @Override
    @DataClass.Generated.Member
    public boolean equals(@android.annotation.Nullable Object o) {
@@ -175,10 +187,10 @@ public final class TranslationSpec implements Parcelable {
    };

    @DataClass.Generated(
            time = 1609964630624L,
            time = 1614326090637L,
            codegenVersion = "1.0.22",
            sourceFile = "frameworks/base/core/java/android/view/translation/TranslationSpec.java",
            inputSignatures = "public static final  int DATA_FORMAT_TEXT\nprivate final @android.annotation.NonNull java.lang.String mLanguage\nprivate final @android.view.translation.TranslationSpec.DataFormat int mDataFormat\nclass TranslationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genHiddenConstDefs=true)")
            inputSignatures = "public static final  int DATA_FORMAT_TEXT\nprivate final @android.annotation.NonNull java.lang.String mLanguage\nprivate final @android.view.translation.TranslationSpec.DataFormat int mDataFormat\nclass TranslationSpec extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genHiddenConstDefs=true, genToString=true)")
    @Deprecated
    private void __metadata() {}

+7 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.IResultReceiver;
import com.android.internal.util.SyncResultReceiver;

import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -221,6 +222,12 @@ public class Translator {
        return mId;
    }

    /** @hide */
    public void dump(@NonNull String prefix, @NonNull PrintWriter pw) {
        pw.print(prefix); pw.print("sourceSpec: "); pw.println(mSourceSpec);
        pw.print(prefix); pw.print("destSpec: "); pw.println(mDestSpec);
    }

    /**
     * Requests a translation for the provided {@link TranslationRequest} using the Translator's
     * source spec and destination spec.
+18 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.view.translation.UiTranslationManager.UiTranslationState;

import com.android.internal.util.function.pooled.PooledLambda;

import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -129,6 +130,23 @@ public class UiTranslationController {
        }
    }

    /**
     * Called to dump the translation information for Activity.
     */
    public void dump(String outerPrefix, PrintWriter pw) {
        pw.print(outerPrefix); pw.println("UiTranslationController:");
        final String pfx = outerPrefix + "  ";
        pw.print(pfx); pw.print("activity: "); pw.println(mActivity);
        final int translatorSize = mTranslators.size();
        pw.print(outerPrefix); pw.print("number translator: "); pw.println(translatorSize);
        for (int i = 0; i < translatorSize; i++) {
            pw.print(outerPrefix); pw.print("#"); pw.println(i);
            final Translator translator = mTranslators.valueAt(i);
            translator.dump(outerPrefix, pw);
            pw.println();
        }
    }

    /**
     * The method is used by {@link Translator}, it will be called when the translation is done. The
     * translation result can be get from here.
+2 −0
Original line number Diff line number Diff line
@@ -480,6 +480,8 @@ applications that come with the platform
        <permission name="android.permission.SIGNAL_REBOOT_READINESS" />
        <!-- Permission required for CTS test - PeopleManagerTest -->
        <permission name="android.permission.READ_PEOPLE_DATA" />
        <!-- Permission required for CTS test - UiTranslationManagerTest -->
        <permission name="android.permission.MANAGE_UI_TRANSLATION" />
    </privapp-permissions>

    <privapp-permissions package="com.android.statementservice">
Loading