diff options
| author | 2023-01-11 19:28:19 +0000 | |
|---|---|---|
| committer | 2023-01-11 19:28:19 +0000 | |
| commit | ead22d8ec6dbb7ec4e0be17e42989de5b7af9aa5 (patch) | |
| tree | 7cabc494db54a11c3c4dc8e63640c752de235b2a | |
| parent | 88e55f753b7b91e07ce34735c22b814afe967c0b (diff) | |
| parent | 8b97d7ec75f2e718ad32614b7d4bb258470360ff (diff) | |
Merge "Added locales field to AccessibilityWindowInfo. Locales will reflect the LocaleList obtainable by ViewRootImpl."
10 files changed, 87 insertions, 11 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 76bab1bcd99c..46989a44a899 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -53787,6 +53787,7 @@ package android.view.accessibility { method public int getDisplayId(); method public int getId(); method public int getLayer(); + method @NonNull public android.os.LocaleList getLocales(); method public android.view.accessibility.AccessibilityWindowInfo getParent(); method public void getRegionInScreen(@NonNull android.graphics.Region); method public android.view.accessibility.AccessibilityNodeInfo getRoot(); diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index da9594baf6b8..2114ce7d7ffa 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1426,7 +1426,7 @@ public final class ViewRootImpl implements ViewParent, != AccessibilityWindowInfo.UNDEFINED_WINDOW_ID; if (registered) { final AccessibilityWindowAttributes attributes = new AccessibilityWindowAttributes( - mWindowAttributes); + mWindowAttributes, mContext.getResources().getConfiguration().getLocales()); if (!attributes.equals(mAccessibilityWindowAttributes)) { mAccessibilityWindowAttributes = attributes; mAccessibilityManager.setAccessibilityWindowAttributes(getDisplayId(), diff --git a/core/java/android/view/WindowInfo.java b/core/java/android/view/WindowInfo.java index 11d63c84d142..27dca0af81be 100644 --- a/core/java/android/view/WindowInfo.java +++ b/core/java/android/view/WindowInfo.java @@ -20,6 +20,7 @@ import android.app.ActivityTaskManager; import android.graphics.Matrix; import android.graphics.Region; import android.os.IBinder; +import android.os.LocaleList; import android.os.Parcel; import android.os.Parcelable; import android.util.Pools; @@ -60,6 +61,8 @@ public class WindowInfo implements Parcelable { public MagnificationSpec mMagnificationSpec = new MagnificationSpec(); + public LocaleList locales = LocaleList.getEmptyLocaleList(); + private WindowInfo() { /* do nothing - hide constructor */ } @@ -99,6 +102,7 @@ public class WindowInfo implements Parcelable { } } window.mMagnificationSpec.setTo(other.mMagnificationSpec); + window.locales = other.locales; return window; } @@ -136,6 +140,7 @@ public class WindowInfo implements Parcelable { parcel.writeInt(0); } mMagnificationSpec.writeToParcel(parcel, flags); + parcel.writeParcelable(locales, flags); } @Override @@ -160,6 +165,7 @@ public class WindowInfo implements Parcelable { matrix.setValues(mTransformMatrix); builder.append(", mTransformMatrix=").append(matrix); builder.append(", mMagnificationSpec=").append(mMagnificationSpec); + builder.append(", locales=").append(locales); builder.append(']'); return builder.toString(); } @@ -187,6 +193,7 @@ public class WindowInfo implements Parcelable { parcel.readBinderList(childTokens); } mMagnificationSpec = MagnificationSpec.CREATOR.createFromParcel(parcel); + locales = parcel.readParcelable(null, LocaleList.class); } private void clear() { @@ -210,6 +217,7 @@ public class WindowInfo implements Parcelable { mMagnificationSpec.clear(); title = null; accessibilityIdOfAnchor = AccessibilityNodeInfo.UNDEFINED_NODE_ID; + locales = LocaleList.getEmptyLocaleList(); } public static final @android.annotation.NonNull Parcelable.Creator<WindowInfo> CREATOR = diff --git a/core/java/android/view/accessibility/AccessibilityWindowAttributes.java b/core/java/android/view/accessibility/AccessibilityWindowAttributes.java index 562300c62f6d..92ed73b22e78 100644 --- a/core/java/android/view/accessibility/AccessibilityWindowAttributes.java +++ b/core/java/android/view/accessibility/AccessibilityWindowAttributes.java @@ -17,11 +17,14 @@ package android.view.accessibility; import android.annotation.NonNull; +import android.os.LocaleList; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.view.WindowManager; +import java.util.Objects; + /** * This class represents the attributes of a window needed for {@link AccessibilityWindowInfo}. * @@ -30,13 +33,22 @@ import android.view.WindowManager; public final class AccessibilityWindowAttributes implements Parcelable { private final CharSequence mWindowTitle; + private final LocaleList mLocales; - public AccessibilityWindowAttributes(@NonNull WindowManager.LayoutParams layoutParams) { + public AccessibilityWindowAttributes(@NonNull WindowManager.LayoutParams layoutParams, + @NonNull LocaleList locales) { mWindowTitle = populateWindowTitle(layoutParams); + mLocales = locales; } private AccessibilityWindowAttributes(Parcel in) { mWindowTitle = in.readCharSequence(); + LocaleList inLocales = in.readParcelable(null, LocaleList.class); + if (inLocales != null) { + mLocales = inLocales; + } else { + mLocales = LocaleList.getEmptyLocaleList(); + } } public CharSequence getWindowTitle() { @@ -63,6 +75,10 @@ public final class AccessibilityWindowAttributes implements Parcelable { return windowTitle; } + public @NonNull LocaleList getLocales() { + return mLocales; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -70,12 +86,13 @@ public final class AccessibilityWindowAttributes implements Parcelable { AccessibilityWindowAttributes that = (AccessibilityWindowAttributes) o; - return TextUtils.equals(mWindowTitle, that.mWindowTitle); + return TextUtils.equals(mWindowTitle, that.mWindowTitle) && Objects.equals( + mLocales, that.mLocales); } @Override public int hashCode() { - return mWindowTitle.hashCode(); + return Objects.hash(mWindowTitle, mLocales); } public static final Creator<AccessibilityWindowAttributes> CREATOR = @@ -99,12 +116,14 @@ public final class AccessibilityWindowAttributes implements Parcelable { @Override public void writeToParcel(@NonNull Parcel parcel, int flags) { parcel.writeCharSequence(mWindowTitle); + parcel.writeParcelable(mLocales, flags); } @Override public String toString() { return "AccessibilityWindowAttributes{" + "mAccessibilityWindowTitle=" + mWindowTitle + + "mLocales=" + mLocales + '}'; } } diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java index 9be999053fa6..d84e0fb421cf 100644 --- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java +++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java @@ -23,6 +23,7 @@ import android.annotation.UptimeMillisLong; import android.app.ActivityTaskManager; import android.graphics.Rect; import android.graphics.Region; +import android.os.LocaleList; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; @@ -132,6 +133,8 @@ public final class AccessibilityWindowInfo implements Parcelable { private int mConnectionId = UNDEFINED_CONNECTION_ID; + private LocaleList mLocales = LocaleList.getEmptyLocaleList(); + /** * Creates a new {@link AccessibilityWindowInfo}. */ @@ -555,6 +558,26 @@ public final class AccessibilityWindowInfo implements Parcelable { } /** + * Sets the locales of the window. Locales are populated by the view root by default. + * + * @param locales The {@link android.os.LocaleList}. + * + * @hide + */ + public void setLocales(@NonNull LocaleList locales) { + mLocales = locales; + } + + /** + * Return the {@link android.os.LocaleList} of the window. + * + * @return the locales of the window. + */ + public @NonNull LocaleList getLocales() { + return mLocales; + } + + /** * Returns a cached instance if such is available or a new one is * created. * @@ -676,6 +699,7 @@ public final class AccessibilityWindowInfo implements Parcelable { } parcel.writeInt(mConnectionId); + parcel.writeParcelable(mLocales, flags); } /** @@ -706,6 +730,7 @@ public final class AccessibilityWindowInfo implements Parcelable { } mConnectionId = other.mConnectionId; + mLocales = other.mLocales; } private void initFromParcel(Parcel parcel) { @@ -733,6 +758,7 @@ public final class AccessibilityWindowInfo implements Parcelable { } mConnectionId = parcel.readInt(); + mLocales = parcel.readParcelable(null, LocaleList.class); } @Override diff --git a/core/tests/coretests/src/android/view/WindowInfoTest.java b/core/tests/coretests/src/android/view/WindowInfoTest.java index f9e3f43b562c..d927f0632273 100644 --- a/core/tests/coretests/src/android/view/WindowInfoTest.java +++ b/core/tests/coretests/src/android/view/WindowInfoTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.mock; import android.app.ActivityTaskManager; import android.graphics.Matrix; import android.os.IBinder; +import android.os.LocaleList; import android.os.Parcel; import android.platform.test.annotations.Presubmit; import android.text.TextUtils; @@ -41,6 +42,7 @@ import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.Arrays; +import java.util.Locale; /** * Class for testing {@link WindowInfo}. @@ -48,6 +50,7 @@ import java.util.Arrays; @Presubmit @RunWith(AndroidJUnit4.class) public class WindowInfoTest { + private static final LocaleList TEST_LOCALES = new LocaleList(Locale.ROOT); @SmallTest @Test @@ -129,6 +132,7 @@ public class WindowInfoTest { assertTrue(windowinfo.regionInScreen.isEmpty()); assertEquals(windowinfo.mTransformMatrix.length, 9); assertTrue(windowinfo.mMagnificationSpec.isNop()); + assertEquals(windowinfo.locales, LocaleList.getEmptyLocaleList()); } private boolean areWindowsEqual(WindowInfo w1, WindowInfo w2) { @@ -141,6 +145,7 @@ public class WindowInfoTest { equality &= w1.mMagnificationSpec.equals(w2.mMagnificationSpec); equality &= Arrays.equals(w1.mTransformMatrix, w2.mTransformMatrix); equality &= TextUtils.equals(w1.title, w2.title); + equality &= w1.locales.equals(w2.locales); return equality; } @@ -164,5 +169,6 @@ public class WindowInfoTest { windowInfo.mMagnificationSpec.offsetX = 100f; windowInfo.mMagnificationSpec.offsetY = 200f; Matrix.IDENTITY_MATRIX.getValues(windowInfo.mTransformMatrix); + windowInfo.locales = TEST_LOCALES; } } diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityWindowAttributesTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityWindowAttributesTest.java index a6abee5f7550..8d1c2e30a9ae 100644 --- a/core/tests/coretests/src/android/view/accessibility/AccessibilityWindowAttributesTest.java +++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityWindowAttributesTest.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotSame; +import android.os.LocaleList; import android.os.Parcel; import android.platform.test.annotations.Presubmit; import android.view.WindowManager; @@ -30,6 +31,8 @@ import androidx.test.filters.SmallTest; import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Locale; + /** * Class for testing {@link AccessibilityWindowAttributes}. */ @@ -37,11 +40,13 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class AccessibilityWindowAttributesTest { private static final String TEST_WINDOW_TITLE = "test window title"; + private static final LocaleList TEST_LOCALES = new LocaleList(Locale.ROOT); @SmallTest @Test public void testParceling() { - final AccessibilityWindowAttributes windowAttributes = createInstance(TEST_WINDOW_TITLE); + final AccessibilityWindowAttributes windowAttributes = createInstance( + TEST_WINDOW_TITLE, TEST_LOCALES); Parcel parcel = Parcel.obtain(); windowAttributes.writeToParcel(parcel, 0); parcel.setDataPosition(0); @@ -56,14 +61,21 @@ public class AccessibilityWindowAttributesTest { @SmallTest @Test public void testNonequality() { - final AccessibilityWindowAttributes windowAttributes = createInstance(null); - final AccessibilityWindowAttributes windowAttributes2 = createInstance(TEST_WINDOW_TITLE); + final AccessibilityWindowAttributes windowAttributes = createInstance( + null, TEST_LOCALES); + final AccessibilityWindowAttributes windowAttributes1 = createInstance( + TEST_WINDOW_TITLE, TEST_LOCALES); + final AccessibilityWindowAttributes windowAttributes2 = createInstance( + TEST_WINDOW_TITLE, null); + assertNotEquals(windowAttributes, windowAttributes1); assertNotEquals(windowAttributes, windowAttributes2); + assertNotEquals(windowAttributes1, windowAttributes2); } - private static AccessibilityWindowAttributes createInstance(String windowTitle) { + private static AccessibilityWindowAttributes createInstance( + String windowTitle, LocaleList locales) { final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); layoutParams.accessibilityTitle = windowTitle; - return new AccessibilityWindowAttributes(layoutParams); + return new AccessibilityWindowAttributes(layoutParams, locales); } } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java index c61e86489f04..f0c6c4f6cf2c 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java @@ -454,6 +454,7 @@ public class AccessibilityWindowManager { return; } windowInfo.title = attributes.getWindowTitle(); + windowInfo.locales = attributes.getLocales(); } private boolean shouldUpdateWindowsLocked(boolean forceSend, @@ -780,6 +781,7 @@ public class AccessibilityWindowManager { reportedWindow.setPictureInPicture(window.inPictureInPicture); reportedWindow.setDisplayId(window.displayId); reportedWindow.setTaskId(window.taskId); + reportedWindow.setLocales(window.locales); final int parentId = findWindowIdLocked(userId, window.parentToken); if (parentId >= 0) { diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java index faa7ee022b54..448ffe538d00 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerServiceTest.java @@ -55,6 +55,7 @@ import android.graphics.drawable.Icon; import android.hardware.display.DisplayManagerGlobal; import android.os.Bundle; import android.os.IBinder; +import android.os.LocaleList; import android.os.UserHandle; import android.provider.Settings; import android.testing.TestableContext; @@ -488,7 +489,7 @@ public class AccessibilityManagerServiceTest { final int userid = 10; final int windowId = 100; final AccessibilityWindowAttributes attributes = new AccessibilityWindowAttributes( - new WindowManager.LayoutParams()); + new WindowManager.LayoutParams(), LocaleList.getEmptyLocaleList()); mA11yms.setAccessibilityWindowAttributes(displayId, windowId, userid, attributes); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java index 7b7e1e0c9aff..2dfabd0fbefb 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java @@ -43,6 +43,7 @@ import static org.mockito.Mockito.when; import android.graphics.Region; import android.os.IBinder; +import android.os.LocaleList; import android.os.RemoteException; import android.os.UserHandle; import android.text.TextUtils; @@ -909,7 +910,7 @@ public class AccessibilityWindowManagerTest { final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); layoutParams.accessibilityTitle = "accessibility window title"; final AccessibilityWindowAttributes attributes = new AccessibilityWindowAttributes( - layoutParams); + layoutParams, new LocaleList()); mA11yWindowManager.setAccessibilityWindowAttributes(Display.DEFAULT_DISPLAY, windowId, USER_SYSTEM_ID, attributes); |