Device state auto-rotation settings: log device state specific state changes
Bug: 221254073 Test: manually + unit tests Change-Id: Ie8c0d1489d63fd2d19ad604816150b51ede4bb3b
This commit is contained in:
@@ -22,6 +22,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
|
|||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.lifecycle.Lifecycle;
|
import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.lifecycle.LifecycleObserver;
|
import androidx.lifecycle.LifecycleObserver;
|
||||||
import androidx.lifecycle.OnLifecycleEvent;
|
import androidx.lifecycle.OnLifecycleEvent;
|
||||||
@@ -51,16 +52,24 @@ public class DeviceStateAutoRotateSettingController extends TogglePreferenceCont
|
|||||||
private final String mDeviceStateDescription;
|
private final String mDeviceStateDescription;
|
||||||
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
|
|
||||||
public DeviceStateAutoRotateSettingController(Context context, int deviceState,
|
@VisibleForTesting
|
||||||
String deviceStateDescription, int order) {
|
DeviceStateAutoRotateSettingController(Context context, int deviceState,
|
||||||
|
String deviceStateDescription, int order,
|
||||||
|
MetricsFeatureProvider metricsFeatureProvider) {
|
||||||
super(context, getPreferenceKeyForDeviceState(deviceState));
|
super(context, getPreferenceKeyForDeviceState(deviceState));
|
||||||
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
|
mMetricsFeatureProvider = metricsFeatureProvider;
|
||||||
mDeviceState = deviceState;
|
mDeviceState = deviceState;
|
||||||
mDeviceStateDescription = deviceStateDescription;
|
mDeviceStateDescription = deviceStateDescription;
|
||||||
mAutoRotateSettingsManager = DeviceStateRotationLockSettingsManager.getInstance(context);
|
mAutoRotateSettingsManager = DeviceStateRotationLockSettingsManager.getInstance(context);
|
||||||
mOrder = order;
|
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) {
|
void init(Lifecycle lifecycle) {
|
||||||
lifecycle.addObserver(this);
|
lifecycle.addObserver(this);
|
||||||
}
|
}
|
||||||
@@ -108,12 +117,22 @@ public class DeviceStateAutoRotateSettingController extends TogglePreferenceCont
|
|||||||
@Override
|
@Override
|
||||||
public boolean setChecked(boolean isChecked) {
|
public boolean setChecked(boolean isChecked) {
|
||||||
boolean isRotationLocked = !isChecked;
|
boolean isRotationLocked = !isChecked;
|
||||||
mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATION_LOCK,
|
logSettingChanged(isChecked);
|
||||||
isRotationLocked);
|
|
||||||
mAutoRotateSettingsManager.updateSetting(mDeviceState, isRotationLocked);
|
mAutoRotateSettingsManager.updateSetting(mDeviceState, isRotationLocked);
|
||||||
return true;
|
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
|
@Override
|
||||||
public void updateRawDataToIndex(List<SearchIndexableRaw> rawData) {
|
public void updateRawDataToIndex(List<SearchIndexableRaw> rawData) {
|
||||||
SearchIndexableRaw indexable = new SearchIndexableRaw(mContext);
|
SearchIndexableRaw indexable = new SearchIndexableRaw(mContext);
|
||||||
|
@@ -21,6 +21,9 @@ import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -30,11 +33,15 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
||||||
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
||||||
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
import com.android.settingslib.search.SearchIndexableRaw;
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
@@ -54,12 +61,26 @@ public class DeviceStateAutoRotateSettingControllerTest {
|
|||||||
private static final int DEFAULT_ORDER = -10;
|
private static final int DEFAULT_ORDER = -10;
|
||||||
|
|
||||||
private final Context mContext = RuntimeEnvironment.application;
|
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 =
|
private final DeviceStateRotationLockSettingsManager mAutoRotateSettingsManager =
|
||||||
DeviceStateRotationLockSettingsManager.getInstance(mContext);
|
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
|
@Test
|
||||||
public void displayPreference_addsPreferenceToPreferenceScreen() {
|
public void displayPreference_addsPreferenceToPreferenceScreen() {
|
||||||
PreferenceScreen screen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
|
PreferenceScreen screen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
|
||||||
@@ -143,6 +164,22 @@ public class DeviceStateAutoRotateSettingControllerTest {
|
|||||||
assertThat(rotationLocked).isTrue();
|
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
|
@Test
|
||||||
public void updateRawDataToIndex_addsItemToList() {
|
public void updateRawDataToIndex_addsItemToList() {
|
||||||
List<SearchIndexableRaw> rawData = new ArrayList<>();
|
List<SearchIndexableRaw> rawData = new ArrayList<>();
|
||||||
|
Reference in New Issue
Block a user