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

Commit 3f7f5386 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Update auto-rotate strings/toggles for better accessibility" into tm-dev am: 07950ada

parents 7fe08d02 07950ada
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -98,10 +98,10 @@
    <string name="font_size_make_larger_desc">Make larger</string>
    <!-- Auto rotate switchbar title. [CHAR_LIMIT=NONE] -->
    <string name="auto_rotate_settings_primary_switch_title">Use Auto-rotate</string>
    <string name="auto_rotate_settings_primary_switch_title">Use auto-rotate</string>
    <!-- Disclaimer for camera based rotate [CHAR_LIMIT=NONE] -->
    <string name="smart_rotate_text_headline">Face Detection uses the front-facing camera to improve Auto-rotate accuracy. Images are never stored or sent to Google.</string>
    <string name="smart_rotate_text_headline">Face Detection uses the front-facing camera to improve auto-rotate accuracy. Images are never stored or sent to Google.</string>
    <string name="font_size_preview_text_headline">Sample text</string>
    <string name="font_size_preview_text_title"
            translation_description="Title text in sample text used to illustrate how the currently selected font size will appear to the user. NOTE: Translate manually. No not adopt any copyrighted material for translation.">
@@ -2926,7 +2926,11 @@
    <!-- Sound & display settings screen, face-based rotation check box label [CHAR LIMIT=30] -->
    <string name="auto_rotate_option_face_based">On - Face-based</string>
    <!-- SmartAutoRotatePreferenceFragment settings screen, face-based rotation switch label [CHAR LIMIT=30] -->
    <string name="auto_rotate_switch_face_based">Enable Face Detection</string>
    <string name="auto_rotate_switch_face_based">Face Detection</string>
    <!-- Preference summary to enable auto rotate[CHAR_LIMIT=NONE]-->
    <string name="auto_rotate_screen_summary">Automatically adjust the screen orientation when you move your phone between portrait and landscape</string>
    <!-- Accessibility description for auto rotate learn more link [CHAR LIMIT=NONE] -->
    <string name="auto_rotate_link_a11y">Learn more about auto-rotate</string>
    <!-- Display settings screen, screen resolution settings title [CHAR LIMIT=30] -->
    <string name="screen_resolution_title">Screen resolution</string>
@@ -12453,6 +12457,9 @@
    <!-- Help URI, battery saver page [DO NOT TRANSLATE] -->
    <string name="help_url_battery_saver_settings" translatable="false"></string>
    <!-- Help URI, auto rotate page [DO NOT TRANSLATE] -->
    <string name="help_url_auto_rotate_settings" translatable="false"></string>
    <!-- Help URI, app usage page [DO NOT TRANSLATE] -->
    <string name="help_url_app_usage_settings" translatable="false"></string>
+11 −2
Original line number Diff line number Diff line
@@ -20,6 +20,14 @@
    xmlns:settings="http://schemas.android.com/apk/res-auto"
    android:title="@string/accelerometer_title" >

    <com.android.settingslib.widget.TopIntroPreference
        android:title="@string/auto_rotate_screen_summary"/>

    <com.android.settingslib.widget.MainSwitchPreference
        android:key="auto_rotate_main_switch"
        android:title="@string/auto_rotate_settings_primary_switch_title"
        settings:controller="com.android.settings.display.AutoRotateSwitchBarController"/>

    <SwitchPreference
        android:key="auto_rotate_switch"
        android:title="@string/auto_rotate_settings_primary_switch_title"
@@ -48,7 +56,8 @@
        settings:controller="com.android.settings.display.SmartAutoRotateController" />

    <com.android.settingslib.widget.FooterPreference
        android:icon="@drawable/ic_privacy_shield_24dp"
        android:key="auto_rotate_footer_preference"
        android:title="@string/smart_rotate_text_headline"
        android:selectable="false"
        settings:searchable="false"/>

+37 −45
Original line number Diff line number Diff line
@@ -18,86 +18,78 @@ package com.android.settings.display;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.widget.Switch;

import com.android.internal.view.RotationPolicy;
import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.SettingsMainSwitchPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.OnMainSwitchChangeListener;

/**
 * The switch controller for auto-rotate.
 * The main switch controller for auto-rotate.
 */
public class AutoRotateSwitchBarController implements OnMainSwitchChangeListener,
public class AutoRotateSwitchBarController extends SettingsMainSwitchPreferenceController implements
        LifecycleObserver, OnStart, OnStop {

    private final SettingsMainSwitchBar mSwitchBar;
    private final Context mContext;
    private boolean mValidListener;
    private final MetricsFeatureProvider mMetricsFeatureProvider;
    private RotationPolicy.RotationPolicyListener mRotationPolicyListener;

    public AutoRotateSwitchBarController(Context context, SettingsMainSwitchBar switchBar,
            Lifecycle lifecycle) {
        mSwitchBar = switchBar;
        mContext = context;
    public AutoRotateSwitchBarController(Context context, String key) {
        super(context, key);
        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
        if (lifecycle != null) {
            lifecycle.addObserver(this);
    }

    @Override
    public int getAvailabilityStatus() {
        return RotationPolicy.isRotationLockToggleVisible(mContext)
                && !DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(mContext)
                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
    }

    @Override
    public void onStart() {
        if (!mValidListener) {
            mSwitchBar.addOnSwitchChangeListener(this);
            mValidListener = true;
        if (mRotationPolicyListener == null) {
            mRotationPolicyListener = new RotationPolicy.RotationPolicyListener() {
                @Override
                public void onChange() {
                    if (mSwitchPreference != null) {
                        updateState(mSwitchPreference);
                    }
                }
            };
        }
        onChange();
        RotationPolicy.registerRotationPolicyListener(mContext,
                mRotationPolicyListener);
    }

    @Override
    public void onStop() {
        if (mValidListener) {
            mSwitchBar.removeOnSwitchChangeListener(this);
            mValidListener = false;
        if (mRotationPolicyListener != null) {
            RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
        }
    }

    /**
     * Listens to the state change of the rotation primary switch.
     */
    @Override
    public void onSwitchChanged(Switch switchView, boolean isChecked) {
        setRotationLock(isChecked);
    public boolean isChecked() {
        return !RotationPolicy.isRotationLocked(mContext);
    }


    protected void onChange() {
        final boolean isEnabled = !RotationPolicy.isRotationLocked(mContext);
        if (isEnabled != mSwitchBar.isChecked()) {
            // set listener to null so that that code below doesn't trigger onCheckedChanged()
            if (mValidListener) {
                mSwitchBar.removeOnSwitchChangeListener(this);
            }
            mSwitchBar.setChecked(isEnabled);
            if (mValidListener) {
                mSwitchBar.addOnSwitchChangeListener(this);
            }
        }
    }

    private boolean setRotationLock(boolean isChecked) {
    @Override
    public boolean setChecked(boolean isChecked) {
        final boolean isLocked = !isChecked;
        mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATE_ROTATE_MASTER_TOGGLE,
                isChecked);
                isLocked);
        RotationPolicy.setRotationLock(mContext, isLocked);
        return true;
    }

    @Override
    public int getSliceHighlightMenuRes() {
        return R.string.menu_key_display;
    }

}
+39 −41
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import static com.android.settings.display.SmartAutoRotateController.isRotationR
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -28,12 +28,11 @@ import android.view.ViewGroup;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;

import com.android.internal.view.RotationPolicy;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.Indexable;
import com.android.settingslib.search.SearchIndexable;
@@ -51,9 +50,11 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {

    private static final String TAG = "SmartAutoRotatePreferenceFragment";

    private RotationPolicy.RotationPolicyListener mRotationPolicyListener;
    private AutoRotateSwitchBarController mSwitchBarController;
    @VisibleForTesting static final String AUTO_ROTATE_SWITCH_PREFERENCE_ID = "auto_rotate_switch";
    @VisibleForTesting
    static final String AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY = "auto_rotate_main_switch";
    @VisibleForTesting
    static final String AUTO_ROTATE_SWITCH_PREFERENCE_KEY = "auto_rotate_switch";
    private static final String KEY_FOOTER_PREFERENCE = "auto_rotate_footer_preference";

    @Override
    protected int getPreferenceScreenResId() {
@@ -81,11 +82,10 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
        final View view = super.onCreateView(inflater, container, savedInstanceState);
        final SettingsActivity activity = (SettingsActivity) getActivity();
        createHeader(activity);
        final Preference footerPreference = findPreference(FooterPreference.KEY_FOOTER);
        final Preference footerPreference = findPreference(KEY_FOOTER_PREFERENCE);
        if (footerPreference != null) {
            footerPreference.setTitle(Html.fromHtml(getString(R.string.smart_rotate_text_headline),
                    Html.FROM_HTML_MODE_COMPACT));
            footerPreference.setVisible(isRotationResolverServiceAvailable(activity));
            setupFooter();
        }
        return view;
    }
@@ -95,50 +95,48 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
        boolean deviceStateRotationEnabled =
                DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(activity);
        if (isRotationResolverServiceAvailable(activity) && !deviceStateRotationEnabled) {
            final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
            switchBar.setTitle(
                    getContext().getString(R.string.auto_rotate_settings_primary_switch_title));
            switchBar.show();
            mSwitchBarController = new AutoRotateSwitchBarController(activity, switchBar,
                    getSettingsLifecycle());
            findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_ID).setVisible(false);
            findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_KEY).setVisible(false);
        } else {
            findPreference(AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY).setVisible(false);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mRotationPolicyListener == null) {
            mRotationPolicyListener = new RotationPolicy.RotationPolicyListener() {
                @Override
                public void onChange() {
                    if (mSwitchBarController != null) {
                        mSwitchBarController.onChange();
                    }
                }
            };
        }
        RotationPolicy.registerRotationPolicyListener(getPrefContext(),
                mRotationPolicyListener);
    public int getMetricsCategory() {
        return SettingsEnums.DISPLAY_AUTO_ROTATE_SETTINGS;
    }

    @Override
    public void onPause() {
        super.onPause();
        if (mRotationPolicyListener != null) {
            RotationPolicy.unregisterRotationPolicyListener(getPrefContext(),
                    mRotationPolicyListener);
        }
    protected String getLogTag() {
        return TAG;
    }

    @Override
    public int getMetricsCategory() {
        return SettingsEnums.DISPLAY_AUTO_ROTATE_SETTINGS;
    public int getHelpResource() {
        return R.string.help_url_auto_rotate_settings;
    }

    @Override
    protected String getLogTag() {
        return TAG;
    // Updates the footer for this page.
    @VisibleForTesting
    void setupFooter() {
        final String mHelpUri = getString(getHelpResource());
        if (!TextUtils.isEmpty(mHelpUri)) {
            addHelpLink();
        }
    }

    // Changes the text to include a learn more link if the link is defined.
    @VisibleForTesting
    void addHelpLink() {
        final FooterPreference pref = findPreference(KEY_FOOTER_PREFERENCE);
        if (pref != null) {
            pref.setLearnMoreAction(v -> {
                startActivityForResult(HelpUtils.getHelpIntent(getContext(),
                        getString(getHelpResource()),
                        /*backupContext=*/ ""), /*requestCode=*/ 0);
            });
            pref.setLearnMoreContentDescription(getString(R.string.auto_rotate_link_a11y));
        }
    }

    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+26 −12
Original line number Diff line number Diff line
@@ -16,7 +16,8 @@

package com.android.settings.display;

import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_SWITCH_PREFERENCE_ID;
import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY;
import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_SWITCH_PREFERENCE_KEY;

import static com.google.common.truth.Truth.assertThat;

@@ -45,7 +46,6 @@ import com.android.settings.SettingsActivity;
import com.android.settings.testutils.ResolveInfoBuilder;
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;

@@ -71,8 +71,6 @@ public class SmartAutoRotatePreferenceFragmentTest {

    private SmartAutoRotatePreferenceFragment mFragment;

    private SettingsMainSwitchBar mSwitchBar;

    @Mock
    private PackageManager mPackageManager;

@@ -87,6 +85,9 @@ public class SmartAutoRotatePreferenceFragmentTest {
    private Resources mResources;
    private Context mContext;

    @Mock
    private Preference mRotateMainSwitchPreference;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
@@ -112,21 +113,21 @@ public class SmartAutoRotatePreferenceFragmentTest {
        when(mFragment.getContext()).thenReturn(mContext);
        doReturn(mView).when(mFragment).getView();

        when(mFragment.findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_ID)).thenReturn(
        when(mFragment.findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_KEY)).thenReturn(
                mRotateSwitchPreference);

        mSwitchBar = spy(new SettingsMainSwitchBar(mContext));
        when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
        doReturn(mSwitchBar).when(mView).findViewById(R.id.switch_bar);
        ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);

        when(mFragment.findPreference(AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY)).thenReturn(
                mRotateMainSwitchPreference);
    }


    @Test
    public void createHeader_faceDetectionSupported_switchBarIsEnabled() {
        ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);
        mFragment.createHeader(mActivity);

        verify(mSwitchBar, times(1)).show();
        verify(mRotateMainSwitchPreference, never()).setVisible(false);
        verify(mRotateSwitchPreference, times(1)).setVisible(false);
    }

@@ -137,7 +138,7 @@ public class SmartAutoRotatePreferenceFragmentTest {

        mFragment.createHeader(mActivity);

        verify(mSwitchBar, never()).show();
        verify(mRotateMainSwitchPreference, times(1)).setVisible(false);
        verify(mRotateSwitchPreference, never()).setVisible(false);
    }

@@ -147,7 +148,7 @@ public class SmartAutoRotatePreferenceFragmentTest {

        mFragment.createHeader(mActivity);

        verify(mSwitchBar, never()).show();
        verify(mRotateMainSwitchPreference, times(1)).setVisible(false);
        verify(mRotateSwitchPreference, never()).setVisible(false);
    }

@@ -176,6 +177,19 @@ public class SmartAutoRotatePreferenceFragmentTest {
                DeviceStateAutoRotateSettingController.class);
    }

    @Test
    public void setupFooter_linkAddedWhenAppropriate() {
        doReturn("").when(mFragment).getText(anyInt());
        doReturn("").when(mFragment).getString(anyInt());
        mFragment.setupFooter();
        verify(mFragment, never()).addHelpLink();

        doReturn("testString").when(mFragment).getText(anyInt());
        doReturn("testString").when(mFragment).getString(anyInt());
        mFragment.setupFooter();
        verify(mFragment, times(1)).addHelpLink();
    }

    private void enableDeviceStateSettableRotationStates(String[] settableStates,
            String[] settableStatesDescriptions) {
        when(mResources.getStringArray(