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

Commit 5ff63a56 authored by Christian Göllner's avatar Christian Göllner Committed by Android (Google) Code Review
Browse files

Merge "Device state auto-rotation settings: log device state specific state changes" into tm-dev

parents cd09f9cb 982f5507
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
import android.app.settings.SettingsEnums;
import android.content.Context;

import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
@@ -51,16 +52,24 @@ public class DeviceStateAutoRotateSettingController extends TogglePreferenceCont
    private final String mDeviceStateDescription;
    private final MetricsFeatureProvider mMetricsFeatureProvider;

    public DeviceStateAutoRotateSettingController(Context context, int deviceState,
            String deviceStateDescription, int order) {
    @VisibleForTesting
    DeviceStateAutoRotateSettingController(Context context, int deviceState,
            String deviceStateDescription, int order,
            MetricsFeatureProvider metricsFeatureProvider) {
        super(context, getPreferenceKeyForDeviceState(deviceState));
        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
        mMetricsFeatureProvider = metricsFeatureProvider;
        mDeviceState = deviceState;
        mDeviceStateDescription = deviceStateDescription;
        mAutoRotateSettingsManager = DeviceStateRotationLockSettingsManager.getInstance(context);
        mOrder = order;
    }

    public DeviceStateAutoRotateSettingController(Context context, int deviceState,
            String deviceStateDescription, int order) {
        this(context, deviceState, deviceStateDescription, order,
                FeatureFactory.getFactory(context).getMetricsFeatureProvider());
    }

    void init(Lifecycle lifecycle) {
        lifecycle.addObserver(this);
    }
@@ -108,12 +117,22 @@ public class DeviceStateAutoRotateSettingController extends TogglePreferenceCont
    @Override
    public boolean setChecked(boolean isChecked) {
        boolean isRotationLocked = !isChecked;
        mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATION_LOCK,
                isRotationLocked);
        logSettingChanged(isChecked);
        mAutoRotateSettingsManager.updateSetting(mDeviceState, isRotationLocked);
        return true;
    }

    private void logSettingChanged(boolean isChecked) {
        boolean isRotationLocked = !isChecked;
        mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATION_LOCK,
                isRotationLocked);

        int actionCategory = isChecked
                ? SettingsEnums.ACTION_ENABLE_AUTO_ROTATION_DEVICE_STATE
                : SettingsEnums.ACTION_DISABLE_AUTO_ROTATION_DEVICE_STATE;
        mMetricsFeatureProvider.action(mContext, actionCategory, /* value= */ mDeviceState);
    }

    @Override
    public void updateRawDataToIndex(List<SearchIndexableRaw> rawData) {
        SearchIndexableRaw indexable = new SearchIndexableRaw(mContext);
+40 −3
Original line number Diff line number Diff line
@@ -21,6 +21,9 @@ import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_

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

import static org.mockito.Mockito.verify;

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

import androidx.preference.Preference;
@@ -30,11 +33,15 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
import com.android.settingslib.search.SearchIndexableRaw;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -54,12 +61,26 @@ public class DeviceStateAutoRotateSettingControllerTest {
    private static final int DEFAULT_ORDER = -10;

    private final Context mContext = RuntimeEnvironment.application;
    private final DeviceStateAutoRotateSettingController mController =
            new DeviceStateAutoRotateSettingController(mContext, DEFAULT_DEVICE_STATE,
                    DEFAULT_DEVICE_STATE_DESCRIPTION, DEFAULT_ORDER);
    private final DeviceStateRotationLockSettingsManager mAutoRotateSettingsManager =
            DeviceStateRotationLockSettingsManager.getInstance(mContext);

    @Mock private MetricsFeatureProvider mMetricsFeatureProvider;

    private DeviceStateAutoRotateSettingController mController;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mController = new DeviceStateAutoRotateSettingController(
                mContext,
                DEFAULT_DEVICE_STATE,
                DEFAULT_DEVICE_STATE_DESCRIPTION,
                DEFAULT_ORDER,
                mMetricsFeatureProvider
        );
    }

    @Test
    public void displayPreference_addsPreferenceToPreferenceScreen() {
        PreferenceScreen screen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
@@ -143,6 +164,22 @@ public class DeviceStateAutoRotateSettingControllerTest {
        assertThat(rotationLocked).isTrue();
    }

    @Test
    public void setChecked_true_logsDeviceStateBasedSettingOn() {
        mController.setChecked(true);

        verify(mMetricsFeatureProvider).action(mContext,
                SettingsEnums.ACTION_ENABLE_AUTO_ROTATION_DEVICE_STATE, DEFAULT_DEVICE_STATE);
    }

    @Test
    public void setChecked_false_logsDeviceStateBasedSettingOff() {
        mController.setChecked(false);

        verify(mMetricsFeatureProvider).action(mContext,
                SettingsEnums.ACTION_DISABLE_AUTO_ROTATION_DEVICE_STATE, DEFAULT_DEVICE_STATE);
    }

    @Test
    public void updateRawDataToIndex_addsItemToList() {
        List<SearchIndexableRaw> rawData = new ArrayList<>();