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

Commit 392a8112 authored by Graciela Wissen Putri's avatar Graciela Wissen Putri
Browse files

Add accessible sequence for aspect ratio options

Fix: 297293566
Test: Manual
Change-Id: I12b61ccd0330b80e027af7a9eb1693b8d94cc262
parent dd34fa54
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -12165,6 +12165,8 @@
    <string name="user_aspect_ratio_3_2">3:2</string>
    <!-- [CHAR LIMIT=NONE] 4:3 aspect ratio entry -->
    <string name="user_aspect_ratio_4_3">4:3</string>
    <!-- [CHAR LIMIT=NONE] Aspect ratio a11y message announced to replace colon in aspect ratio entry e.g. 3 by 2 -->
    <string name="user_aspect_ratio_option_a11y"><xliff:g id="numerator">%1$s</xliff:g> by <xliff:g id="denominator">%2$s</xliff:g></string>
    <!-- [CHAR LIMIT=NONE] Warning description for app info aspect ratio page -->
    <string name="app_aspect_ratio_footer">The app will restart when you change aspect ratio. You may lose unsaved changes. Some apps may not be optimized for certain aspect ratios.</string>
+0 −3
Original line number Diff line number Diff line
@@ -45,17 +45,14 @@

    <com.android.settings.applications.appcompat.RadioWithImagePreference
        android:key="16_9_pref"
        android:title="@string/user_aspect_ratio_16_9"
        android:icon="@drawable/ic_app_aspect_ratio_16_9"/>

    <com.android.settings.applications.appcompat.RadioWithImagePreference
        android:key="4_3_pref"
        android:title="@string/user_aspect_ratio_4_3"
        android:icon="@drawable/ic_app_aspect_ratio_4_3"/>

    <com.android.settings.applications.appcompat.RadioWithImagePreference
        android:key="3_2_pref"
        android:title="@string/user_aspect_ratio_3_2"
        android:icon="@drawable/ic_app_aspect_ratio_3_2"/>

    <com.android.settingslib.widget.FooterPreference
+1 −2
Original line number Diff line number Diff line
@@ -227,8 +227,7 @@ public class UserAspectRatioDetails extends AppInfoBase implements
            pref.setVisible(false);
            return;
        }
        pref.setTitle(mUserAspectRatioManager.getUserMinAspectRatioEntry(aspectRatio,
                mPackageName));
        pref.setTitle(mUserAspectRatioManager.getAccessibleEntry(aspectRatio, mPackageName));
        pref.setOnClickListener(this);
        mAspectRatioPreferences.add(pref);
    }
+28 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.settings.R;
import com.android.settings.Utils;

import com.google.common.annotations.VisibleForTesting;

@@ -64,12 +65,14 @@ public class UserAspectRatioManager {
    /** Apps that have launcher entry defined in manifest */
    private final List<ResolveInfo> mInfoHasLauncherEntryList;
    private final Map<Integer, String> mUserAspectRatioMap;
    private final Map<Integer, CharSequence> 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) {