From fed8ea8bce5f8de6a8a9b005e82538fd44807fe5 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 5 Jun 2017 14:48:44 -0700 Subject: [PATCH] Also update flip camera settings for managed profile. When user update the setting for flip camera, check if there is managed profile for the user, and update the setting for the managed user id as well, so that the work profile camera app can read the correct setting value. Change-Id: I757041289329870311bc8473b19fd49ecdd0fadb Fix: 62078588 Test: make RunSettingsRoboTests --- .../gestures/DoubleTwistPreferenceController.java | 20 +++++++++++-- .../DoubleTwistPreferenceControllerTest.java | 34 ++++++++++++++++++++-- .../testutils/shadow/ShadowSecureSettings.java | 4 +++ 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java index f1c7455ec2..12f28d2123 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 8393fc3b9f..7caf3fc7b4 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 @@ -94,6 +103,27 @@ public class DoubleTwistPreferenceControllerTest { } @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. final Context context = ShadowApplication.getInstance().getApplicationContext(); 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 fd4d0d2a2f..64e188eccf 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(); + } } -- 2.11.0