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:
Christian Göllner
2022-02-28 18:49:14 +01:00
parent 41a3026a47
commit 982f5507c7
2 changed files with 64 additions and 8 deletions

View File

@@ -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);

View File

@@ -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<>();