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
This commit is contained in:
Doris Ling
2017-06-05 14:48:44 -07:00
parent 685041559a
commit fed8ea8bce
3 changed files with 54 additions and 4 deletions

View File

@@ -20,21 +20,27 @@ import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.hardware.Sensor; import android.hardware.Sensor;
import android.hardware.SensorManager; import android.hardware.SensorManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.text.TextUtils; import android.text.TextUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.lifecycle.Lifecycle; import com.android.settings.core.lifecycle.Lifecycle;
public class DoubleTwistPreferenceController extends GesturePreferenceController { public class DoubleTwistPreferenceController extends GesturePreferenceController {
private static final String PREF_KEY_VIDEO = "gesture_double_twist_video"; private static final String PREF_KEY_VIDEO = "gesture_double_twist_video";
private final String mDoubleTwistPrefKey; private final String mDoubleTwistPrefKey;
private final UserManager mUserManager;
public DoubleTwistPreferenceController(Context context, Lifecycle lifecycle, String key) { public DoubleTwistPreferenceController(Context context, Lifecycle lifecycle, String key) {
super(context, lifecycle); super(context, lifecycle);
mDoubleTwistPrefKey = key; mDoubleTwistPrefKey = key;
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
} }
@Override @Override
@@ -55,9 +61,14 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { 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.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; return true;
} }
@@ -68,6 +79,11 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController
return doubleTwistEnabled != 0; return doubleTwistEnabled != 0;
} }
@VisibleForTesting
int getManagedProfileUserId() {
return Utils.getManagedProfileId(mUserManager, UserHandle.myUserId());
}
private boolean hasSensor(int nameResId, int vendorResId) { private boolean hasSensor(int nameResId, int vendorResId) {
final Resources resources = mContext.getResources(); final Resources resources = mContext.getResources();
final String name = resources.getString(nameResId); final String name = resources.getString(nameResId);

View File

@@ -19,13 +19,14 @@ package com.android.settings.gestures;
import android.content.Context; import android.content.Context;
import android.hardware.Sensor; import android.hardware.Sensor;
import android.hardware.SensorManager; import android.hardware.SensorManager;
import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import com.android.settings.search2.InlineSwitchPayload; import org.junit.After;
import com.android.settings.search2.ResultPayload;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; 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 android.provider.Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@@ -58,9 +61,15 @@ public class DoubleTwistPreferenceControllerTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mock(UserManager.class));
mController = new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST); mController = new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST);
} }
@After
public void tearDown() {
ShadowSecureSettings.clear();
}
@Test @Test
public void isAvailable_hasSensor_shouldReturnTrue() { public void isAvailable_hasSensor_shouldReturnTrue() {
// Mock sensors // Mock sensors
@@ -93,6 +102,27 @@ public class DoubleTwistPreferenceControllerTest {
assertThat(mController.isAvailable()).isFalse(); 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 @Test
public void testSwitchEnabled_configIsSet_shouldReturnTrue() { public void testSwitchEnabled_configIsSet_shouldReturnTrue() {
// Set the setting to be enabled. // Set the setting to be enabled.

View File

@@ -68,4 +68,8 @@ public class ShadowSecureSettings {
Integer value = (Integer) mValueMap.get(name); Integer value = (Integer) mValueMap.get(name);
return value == null ? defaultValue : value; return value == null ? defaultValue : value;
} }
public static void clear() {
mValueMap.clear();
}
} }