Loading core/java/android/app/Activity.java +5 −2 Original line number Diff line number Diff line Loading @@ -136,6 +136,7 @@ import android.view.contentcapture.ContentCaptureManager; import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationController; import android.view.translation.UiTranslationSpec; import android.widget.AdapterView; import android.widget.Toast; import android.widget.Toolbar; Loading Loading @@ -8815,11 +8816,13 @@ public class Activity extends ContextThemeWrapper * @hide */ public void updateUiTranslationState(int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { if (mUiTranslationController == null) { mUiTranslationController = new UiTranslationController(this, getApplicationContext()); } mUiTranslationController.updateUiTranslationState(state, sourceSpec, targetSpec, viewIds); mUiTranslationController.updateUiTranslationState( state, sourceSpec, targetSpec, viewIds, uiTranslationSpec); } class HostCallbacks extends FragmentHostCallback<Activity> { Loading core/java/android/app/ActivityThread.java +9 −4 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ import android.view.autofill.AutofillId; import android.view.contentcapture.IContentCaptureManager; import android.view.contentcapture.IContentCaptureOptionsCallback; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationSpec; import android.webkit.WebView; import android.window.SizeConfigurationBuckets; import android.window.SplashScreen; Loading Loading @@ -1843,13 +1844,15 @@ public final class ActivityThread extends ClientTransactionHandler @Override public void updateUiTranslationState(IBinder activityToken, int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { SomeArgs args = SomeArgs.obtain(); args.arg1 = activityToken; args.arg2 = state; args.arg3 = sourceSpec; args.arg4 = targetSpec; args.arg5 = viewIds; args.arg6 = uiTranslationSpec; sendMessage(H.UPDATE_UI_TRANSLATION_STATE, args); } } Loading Loading @@ -2212,7 +2215,7 @@ public final class ActivityThread extends ClientTransactionHandler final SomeArgs args = (SomeArgs) msg.obj; updateUiTranslationState((IBinder) args.arg1, (int) args.arg2, (TranslationSpec) args.arg3, (TranslationSpec) args.arg4, (List<AutofillId>) args.arg5); (List<AutofillId>) args.arg5, (UiTranslationSpec) args.arg6); break; case SET_CONTENT_CAPTURE_OPTIONS_CALLBACK: handleSetContentCaptureOptionsCallback((String) msg.obj); Loading Loading @@ -4194,13 +4197,15 @@ public final class ActivityThread extends ClientTransactionHandler } private void updateUiTranslationState(IBinder activityToken, int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { final ActivityClientRecord r = mActivities.get(activityToken); if (r == null) { Log.w(TAG, "updateUiTranslationState(): no activity for " + activityToken); return; } r.activity.updateUiTranslationState(state, sourceSpec, targetSpec, viewIds); r.activity.updateUiTranslationState( state, sourceSpec, targetSpec, viewIds, uiTranslationSpec); } private static final ThreadLocal<Intent> sCurrentBroadcastIntent = new ThreadLocal<Intent>(); Loading core/java/android/app/IApplicationThread.aidl +3 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.os.RemoteCallback; import android.os.SharedMemory; import android.view.autofill.AutofillId; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationSpec; import com.android.internal.app.IVoiceInteractor; import com.android.internal.content.ReferrerIntent; Loading Loading @@ -160,5 +161,6 @@ oneway interface IApplicationThread { IUiAutomationConnection instrumentationUiConnection, in ApplicationInfo targetInfo); void updateUiTranslationState(IBinder activityToken, int state, in TranslationSpec sourceSpec, in TranslationSpec targetSpec, in List<AutofillId> viewIds); in TranslationSpec targetSpec, in List<AutofillId> viewIds, in UiTranslationSpec uiTranslationSpec); } core/java/android/view/translation/UiTranslationController.java +21 −4 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Process; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; import android.util.Log; import android.util.LongSparseArray; Loading Loading @@ -77,6 +78,11 @@ public class UiTranslationController { private final ArrayMap<Pair<TranslationSpec, TranslationSpec>, Translator> mTranslators; @NonNull private final ArrayMap<AutofillId, WeakReference<View>> mViews; /** * Views for which {@link UiTranslationSpec#shouldPadContentForCompat()} is true. */ @NonNull private final ArraySet<AutofillId> mViewsToPadContent; @NonNull private final HandlerThread mWorkerThread; @NonNull Loading @@ -88,6 +94,7 @@ public class UiTranslationController { mContext = context; mViews = new ArrayMap<>(); mTranslators = new ArrayMap<>(); mViewsToPadContent = new ArraySet<>(); mWorkerThread = new HandlerThread("UiTranslationController_" + mActivity.getComponentName(), Loading @@ -100,19 +107,27 @@ public class UiTranslationController { * Update the Ui translation state. */ public void updateUiTranslationState(@UiTranslationState int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> views) { TranslationSpec targetSpec, List<AutofillId> views, UiTranslationSpec uiTranslationSpec) { if (!mActivity.isResumed() && (state == STATE_UI_TRANSLATION_STARTED || state == STATE_UI_TRANSLATION_RESUMED)) { return; } Log.i(TAG, "updateUiTranslationState state: " + stateToString(state) + (DEBUG ? ", views: " + views : "")); + (DEBUG ? (", views: " + views + ", spec: " + uiTranslationSpec) : "")); synchronized (mLock) { mCurrentState = state; } switch (state) { case STATE_UI_TRANSLATION_STARTED: if (uiTranslationSpec != null && uiTranslationSpec.shouldPadContentForCompat()) { synchronized (mLock) { mViewsToPadContent.addAll(views); // TODO: Cleanup disappeared views from mViews and mViewsToPadContent at // some appropriate place. } } final Pair<TranslationSpec, TranslationSpec> specs = new Pair<>(sourceSpec, targetSpec); if (!mTranslators.containsKey(specs)) { Loading Loading @@ -177,6 +192,7 @@ public class UiTranslationController { pw.print(pfx); pw.print("autofillId: "); pw.println(autofillId); pw.print(pfx); pw.print("view:"); pw.println(view); } pw.print(outerPrefix); pw.print("padded views: "); pw.println(mViewsToPadContent); } // TODO(b/182433547): we will remove debug rom condition before S release then we change // change this back to "DEBUG" Loading Loading @@ -374,8 +390,9 @@ public class UiTranslationController { return; } // TODO: Do this for specific views on request only. if (mViewsToPadContent.contains(autofillId)) { callback.enableContentPadding(); } view.onViewTranslationResponse(response); callback.onShowTranslation(view); }); Loading core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +3 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import android.view.DisplayCutout; import android.view.Surface; import android.view.autofill.AutofillId; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationSpec; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; Loading Loading @@ -693,8 +694,8 @@ public class TransactionParcelTests { @Override public void updateUiTranslationState(IBinder activityToken, int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { } } } Loading
core/java/android/app/Activity.java +5 −2 Original line number Diff line number Diff line Loading @@ -136,6 +136,7 @@ import android.view.contentcapture.ContentCaptureManager; import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationController; import android.view.translation.UiTranslationSpec; import android.widget.AdapterView; import android.widget.Toast; import android.widget.Toolbar; Loading Loading @@ -8815,11 +8816,13 @@ public class Activity extends ContextThemeWrapper * @hide */ public void updateUiTranslationState(int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { if (mUiTranslationController == null) { mUiTranslationController = new UiTranslationController(this, getApplicationContext()); } mUiTranslationController.updateUiTranslationState(state, sourceSpec, targetSpec, viewIds); mUiTranslationController.updateUiTranslationState( state, sourceSpec, targetSpec, viewIds, uiTranslationSpec); } class HostCallbacks extends FragmentHostCallback<Activity> { Loading
core/java/android/app/ActivityThread.java +9 −4 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ import android.view.autofill.AutofillId; import android.view.contentcapture.IContentCaptureManager; import android.view.contentcapture.IContentCaptureOptionsCallback; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationSpec; import android.webkit.WebView; import android.window.SizeConfigurationBuckets; import android.window.SplashScreen; Loading Loading @@ -1843,13 +1844,15 @@ public final class ActivityThread extends ClientTransactionHandler @Override public void updateUiTranslationState(IBinder activityToken, int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { SomeArgs args = SomeArgs.obtain(); args.arg1 = activityToken; args.arg2 = state; args.arg3 = sourceSpec; args.arg4 = targetSpec; args.arg5 = viewIds; args.arg6 = uiTranslationSpec; sendMessage(H.UPDATE_UI_TRANSLATION_STATE, args); } } Loading Loading @@ -2212,7 +2215,7 @@ public final class ActivityThread extends ClientTransactionHandler final SomeArgs args = (SomeArgs) msg.obj; updateUiTranslationState((IBinder) args.arg1, (int) args.arg2, (TranslationSpec) args.arg3, (TranslationSpec) args.arg4, (List<AutofillId>) args.arg5); (List<AutofillId>) args.arg5, (UiTranslationSpec) args.arg6); break; case SET_CONTENT_CAPTURE_OPTIONS_CALLBACK: handleSetContentCaptureOptionsCallback((String) msg.obj); Loading Loading @@ -4194,13 +4197,15 @@ public final class ActivityThread extends ClientTransactionHandler } private void updateUiTranslationState(IBinder activityToken, int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { final ActivityClientRecord r = mActivities.get(activityToken); if (r == null) { Log.w(TAG, "updateUiTranslationState(): no activity for " + activityToken); return; } r.activity.updateUiTranslationState(state, sourceSpec, targetSpec, viewIds); r.activity.updateUiTranslationState( state, sourceSpec, targetSpec, viewIds, uiTranslationSpec); } private static final ThreadLocal<Intent> sCurrentBroadcastIntent = new ThreadLocal<Intent>(); Loading
core/java/android/app/IApplicationThread.aidl +3 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.os.RemoteCallback; import android.os.SharedMemory; import android.view.autofill.AutofillId; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationSpec; import com.android.internal.app.IVoiceInteractor; import com.android.internal.content.ReferrerIntent; Loading Loading @@ -160,5 +161,6 @@ oneway interface IApplicationThread { IUiAutomationConnection instrumentationUiConnection, in ApplicationInfo targetInfo); void updateUiTranslationState(IBinder activityToken, int state, in TranslationSpec sourceSpec, in TranslationSpec targetSpec, in List<AutofillId> viewIds); in TranslationSpec targetSpec, in List<AutofillId> viewIds, in UiTranslationSpec uiTranslationSpec); }
core/java/android/view/translation/UiTranslationController.java +21 −4 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Process; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; import android.util.Log; import android.util.LongSparseArray; Loading Loading @@ -77,6 +78,11 @@ public class UiTranslationController { private final ArrayMap<Pair<TranslationSpec, TranslationSpec>, Translator> mTranslators; @NonNull private final ArrayMap<AutofillId, WeakReference<View>> mViews; /** * Views for which {@link UiTranslationSpec#shouldPadContentForCompat()} is true. */ @NonNull private final ArraySet<AutofillId> mViewsToPadContent; @NonNull private final HandlerThread mWorkerThread; @NonNull Loading @@ -88,6 +94,7 @@ public class UiTranslationController { mContext = context; mViews = new ArrayMap<>(); mTranslators = new ArrayMap<>(); mViewsToPadContent = new ArraySet<>(); mWorkerThread = new HandlerThread("UiTranslationController_" + mActivity.getComponentName(), Loading @@ -100,19 +107,27 @@ public class UiTranslationController { * Update the Ui translation state. */ public void updateUiTranslationState(@UiTranslationState int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> views) { TranslationSpec targetSpec, List<AutofillId> views, UiTranslationSpec uiTranslationSpec) { if (!mActivity.isResumed() && (state == STATE_UI_TRANSLATION_STARTED || state == STATE_UI_TRANSLATION_RESUMED)) { return; } Log.i(TAG, "updateUiTranslationState state: " + stateToString(state) + (DEBUG ? ", views: " + views : "")); + (DEBUG ? (", views: " + views + ", spec: " + uiTranslationSpec) : "")); synchronized (mLock) { mCurrentState = state; } switch (state) { case STATE_UI_TRANSLATION_STARTED: if (uiTranslationSpec != null && uiTranslationSpec.shouldPadContentForCompat()) { synchronized (mLock) { mViewsToPadContent.addAll(views); // TODO: Cleanup disappeared views from mViews and mViewsToPadContent at // some appropriate place. } } final Pair<TranslationSpec, TranslationSpec> specs = new Pair<>(sourceSpec, targetSpec); if (!mTranslators.containsKey(specs)) { Loading Loading @@ -177,6 +192,7 @@ public class UiTranslationController { pw.print(pfx); pw.print("autofillId: "); pw.println(autofillId); pw.print(pfx); pw.print("view:"); pw.println(view); } pw.print(outerPrefix); pw.print("padded views: "); pw.println(mViewsToPadContent); } // TODO(b/182433547): we will remove debug rom condition before S release then we change // change this back to "DEBUG" Loading Loading @@ -374,8 +390,9 @@ public class UiTranslationController { return; } // TODO: Do this for specific views on request only. if (mViewsToPadContent.contains(autofillId)) { callback.enableContentPadding(); } view.onViewTranslationResponse(response); callback.onShowTranslation(view); }); Loading
core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +3 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import android.view.DisplayCutout; import android.view.Surface; import android.view.autofill.AutofillId; import android.view.translation.TranslationSpec; import android.view.translation.UiTranslationSpec; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; Loading Loading @@ -693,8 +694,8 @@ public class TransactionParcelTests { @Override public void updateUiTranslationState(IBinder activityToken, int state, TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds) { TranslationSpec sourceSpec, TranslationSpec targetSpec, List<AutofillId> viewIds, UiTranslationSpec uiTranslationSpec) { } } }