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

Commit 44593a89 authored by Abel Tesfaye's avatar Abel Tesfaye
Browse files

Fix issue where smart auto rotate toggle is not disabled

Bug: 187755019

Test: locally on flame, make RunSettingsRoboTests -j96 ROBOTEST_FILTER=SmartAutoRotateControllerTest
Change-Id: I44bbd644515d153c834533fe47b3b2c34cfeaac6
parent 989570a9
Loading
Loading
Loading
Loading
+30 −8
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ package com.android.settings.display;
import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
import static android.provider.Settings.Secure.CAMERA_AUTOROTATE;

import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;

import android.Manifest;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
@@ -32,7 +35,9 @@ import android.provider.Settings;
import android.service.rotationresolver.RotationResolverService;
import android.text.TextUtils;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

@@ -41,14 +46,12 @@ import com.android.internal.view.RotationPolicy;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;

/**
 * SmartAutoRotateController controls whether auto rotation is enabled
 */
public class SmartAutoRotateController extends TogglePreferenceController implements
        Preference.OnPreferenceChangeListener, LifecycleObserver, OnStart, OnStop {
        Preference.OnPreferenceChangeListener, LifecycleObserver {

    private final MetricsFeatureProvider mMetricsFeatureProvider;
    private final SensorPrivacyManager mPrivacyManager;
@@ -60,6 +63,7 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
        }
    };
    private Preference mPreference;
    private RotationPolicy.RotationPolicyListener mRotationPolicyListener;

    public SmartAutoRotateController(Context context, String preferenceKey) {
        super(context, preferenceKey);
@@ -70,6 +74,10 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
        mPowerManager = context.getSystemService(PowerManager.class);
    }

    public void init(Lifecycle lifecycle) {
        lifecycle.addObserver(this);
    }

    @Override
    public int getAvailabilityStatus() {
        if (!isRotationResolverServiceAvailable(mContext)) {
@@ -101,21 +109,35 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
        return mPowerManager.isPowerSaveMode();
    }

    @Override
    @OnLifecycleEvent(ON_START)
    public void onStart() {
        mContext.registerReceiver(mReceiver,
                new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
        if (mRotationPolicyListener == null) {
            mRotationPolicyListener = new RotationPolicy.RotationPolicyListener() {
                @Override
                public void onChange() {
                    updateState(mPreference);
                }
            };
        }
        RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener);
    }

    @Override
    @OnLifecycleEvent(ON_STOP)
    public void onStop() {
        mContext.unregisterReceiver(mReceiver);
        if (mRotationPolicyListener != null) {
            RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
            mRotationPolicyListener = null;
        }
    }

    @Override
    public boolean isChecked() {
        return hasSufficientPermission(mContext) && !isCameraLocked() && !isPowerSaveMode()
                && Settings.Secure.getInt(mContext.getContentResolver(),
        return !RotationPolicy.isRotationLocked(mContext) && hasSufficientPermission(mContext)
                && !isCameraLocked() && !isPowerSaveMode() && Settings.Secure.getInt(
                mContext.getContentResolver(),
                CAMERA_AUTOROTATE, 0) == 1;
    }

+7 −16
Original line number Diff line number Diff line
@@ -15,13 +15,11 @@
 */
package com.android.settings.display;

import static com.android.settings.display.SmartAutoRotateController.hasSufficientPermission;
import static com.android.settings.display.SmartAutoRotateController.isRotationResolverServiceAvailable;

import android.app.settings.SettingsEnums;
import android.hardware.SensorPrivacyManager;
import android.content.Context;
import android.os.Bundle;
import android.os.PowerManager;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
@@ -49,16 +47,19 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
    private static final String TAG = "SmartAutoRotatePreferenceFragment";

    private RotationPolicy.RotationPolicyListener mRotationPolicyListener;
    private SensorPrivacyManager mPrivacyManager;
    private AutoRotateSwitchBarController mSwitchBarController;
    private PowerManager mPowerManager;
    private static final String FACE_SWITCH_PREFERENCE_ID = "face_based_rotate";

    @Override
    protected int getPreferenceScreenResId() {
        return R.xml.auto_rotate_settings;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        use(SmartAutoRotateController.class).init(getLifecycle());
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
@@ -70,8 +71,6 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
        switchBar.show();
        mSwitchBarController = new AutoRotateSwitchBarController(activity, switchBar,
                getSettingsLifecycle());
        mPrivacyManager = SensorPrivacyManager.getInstance(activity);
        mPowerManager = getSystemService(PowerManager.class);
        final Preference footerPreference = findPreference(FooterPreference.KEY_FOOTER);
        if (footerPreference != null) {
            footerPreference.setTitle(Html.fromHtml(getString(R.string.smart_rotate_text_headline),
@@ -89,14 +88,6 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
                @Override
                public void onChange() {
                    mSwitchBarController.onChange();
                    final boolean isLocked = RotationPolicy.isRotationLocked(getContext());
                    final boolean isCameraLocked = mPrivacyManager.isSensorPrivacyEnabled(
                            SensorPrivacyManager.Sensors.CAMERA);
                    final boolean isBatterySaver = mPowerManager.isPowerSaveMode();
                    final Preference preference = findPreference(FACE_SWITCH_PREFERENCE_ID);
                    if (preference != null && hasSufficientPermission(getContext())) {
                        preference.setEnabled(!isLocked && !isCameraLocked && !isBatterySaver);
                    }
                }
            };
        }