diff --git a/res/values/strings.xml b/res/values/strings.xml index c0a160ba34f..252e3d865b4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -12165,6 +12165,8 @@ 3:2 4:3 + + %1$s by %2$s The app will restart when you change aspect ratio. You may lose unsaved changes. Some apps may not be optimized for certain aspect ratios. diff --git a/res/xml/user_aspect_ratio_details.xml b/res/xml/user_aspect_ratio_details.xml index 07c8b6faaa7..ec76caa3909 100644 --- a/res/xml/user_aspect_ratio_details.xml +++ b/res/xml/user_aspect_ratio_details.xml @@ -45,17 +45,14 @@ mInfoHasLauncherEntryList; private final Map mUserAspectRatioMap; + private final Map mUserAspectRatioA11yMap; public UserAspectRatioManager(@NonNull Context context) { mContext = context; mIPm = AppGlobals.getPackageManager(); mInfoHasLauncherEntryList = mContext.getPackageManager().queryIntentActivities( UserAspectRatioManager.LAUNCHER_ENTRY_INTENT, PackageManager.GET_META_DATA); + mUserAspectRatioA11yMap = new ArrayMap<>(); mUserAspectRatioMap = getUserMinAspectRatioMapping(); } @@ -106,6 +109,16 @@ public class UserAspectRatioManager { return mUserAspectRatioMap.get(aspectRatio); } + /** + * @return corresponding accessible string for {@link PackageManager.UserMinAspectRatio} value + */ + @NonNull + public CharSequence getAccessibleEntry(@PackageManager.UserMinAspectRatio int aspectRatio, + String packageName) { + return mUserAspectRatioA11yMap.getOrDefault(aspectRatio, + getUserMinAspectRatioEntry(aspectRatio, packageName)); + } + /** * @return corresponding aspect ratio string for package name and user */ @@ -185,6 +198,7 @@ public class UserAspectRatioManager { final int aspectRatioVal = userMinAspectRatioValues[i]; final String aspectRatioString = getAspectRatioStringOrDefault( userMinAspectRatioStrings[i], aspectRatioVal); + boolean containsColon = aspectRatioString.contains(":"); switch (aspectRatioVal) { // Only map known values of UserMinAspectRatio and ignore unknown entries case PackageManager.USER_MIN_ASPECT_RATIO_FULLSCREEN: @@ -194,6 +208,14 @@ public class UserAspectRatioManager { case PackageManager.USER_MIN_ASPECT_RATIO_4_3: case PackageManager.USER_MIN_ASPECT_RATIO_16_9: case PackageManager.USER_MIN_ASPECT_RATIO_3_2: + if (containsColon) { + String[] aspectRatioDigits = aspectRatioString.split(":"); + String accessibleString = getAccessibleOption(aspectRatioDigits[0], + aspectRatioDigits[1]); + final CharSequence accessibleSequence = Utils.createAccessibleSequence( + aspectRatioString, accessibleString); + mUserAspectRatioA11yMap.put(aspectRatioVal, accessibleSequence); + } userMinAspectRatioMap.put(aspectRatioVal, aspectRatioString); } } @@ -204,6 +226,12 @@ public class UserAspectRatioManager { return userMinAspectRatioMap; } + @NonNull + private String getAccessibleOption(String numerator, String denominator) { + return mContext.getResources().getString(R.string.user_aspect_ratio_option_a11y, + numerator, denominator); + } + @NonNull private String getAspectRatioStringOrDefault(@Nullable String aspectRatioString, @PackageManager.UserMinAspectRatio int aspectRatioVal) {