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