diff --git a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java index f1c7455ec25..12f28d21230 100644 --- a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java +++ b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java @@ -20,21 +20,27 @@ import android.content.Context; import android.content.res.Resources; import android.hardware.Sensor; import android.hardware.SensorManager; +import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings; +import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.text.TextUtils; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.core.lifecycle.Lifecycle; public class DoubleTwistPreferenceController extends GesturePreferenceController { private static final String PREF_KEY_VIDEO = "gesture_double_twist_video"; private final String mDoubleTwistPrefKey; + private final UserManager mUserManager; public DoubleTwistPreferenceController(Context context, Lifecycle lifecycle, String key) { super(context, lifecycle); mDoubleTwistPrefKey = key; + mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); } @Override @@ -55,9 +61,14 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - final boolean enabled = (boolean) newValue; + final int enabled = (boolean) newValue ? 1 : 0; Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, enabled ? 1 : 0); + Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, enabled); + final int managedProfileUserId = getManagedProfileUserId(); + if (managedProfileUserId != UserHandle.USER_NULL) { + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, enabled, managedProfileUserId); + } return true; } @@ -68,6 +79,11 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController return doubleTwistEnabled != 0; } + @VisibleForTesting + int getManagedProfileUserId() { + return Utils.getManagedProfileId(mUserManager, UserHandle.myUserId()); + } + private boolean hasSensor(int nameResId, int vendorResId) { final Resources resources = mContext.getResources(); final String name = resources.getString(nameResId); diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java index 8393fc3b9fc..7caf3fc7b4d 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java @@ -19,13 +19,14 @@ package com.android.settings.gestures; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; +import android.os.UserManager; import android.provider.Settings; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.shadow.ShadowSecureSettings; -import com.android.settings.search2.InlineSwitchPayload; -import com.android.settings.search2.ResultPayload; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -41,7 +42,9 @@ import java.util.List; import static android.provider.Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @@ -58,9 +61,15 @@ public class DoubleTwistPreferenceControllerTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mock(UserManager.class)); mController = new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST); } + @After + public void tearDown() { + ShadowSecureSettings.clear(); + } + @Test public void isAvailable_hasSensor_shouldReturnTrue() { // Mock sensors @@ -93,6 +102,27 @@ public class DoubleTwistPreferenceControllerTest { assertThat(mController.isAvailable()).isFalse(); } + @Test + @Config(shadows = {ShadowSecureSettings.class}) + public void onPreferenceChange_hasWorkProfile_shouldUpdateSettingForWorkProfileUser() { + final int managedId = 2; + ShadowSecureSettings.putIntForUser( + null, CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 0, managedId); + DoubleTwistPreferenceController controller = + spy(new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST)); + doReturn(managedId).when(controller).getManagedProfileUserId(); + + // enable the gesture + controller.onPreferenceChange(null, true); + assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(), + CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 0, managedId)).isEqualTo(1); + + // disable the gesture + controller.onPreferenceChange(null, false); + assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(), + CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 1, managedId)).isEqualTo(0); + } + @Test public void testSwitchEnabled_configIsSet_shouldReturnTrue() { // Set the setting to be enabled. diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java index fd4d0d2a2ff..64e188eccfd 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java @@ -68,4 +68,8 @@ public class ShadowSecureSettings { Integer value = (Integer) mValueMap.get(name); return value == null ? defaultValue : value; } + + public static void clear() { + mValueMap.clear(); + } }