Merge "Set toggle state for profile group" into sc-dev am: 405fac1ca0 am: 4f253570f8
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15362614
Change-Id: I6f832b9d5e67acd4351a6bf045f57b8b370637e1
diff --git a/src/com/android/settings/privacy/SensorToggleController.java b/src/com/android/settings/privacy/SensorToggleController.java
index 80bd9ed..50b023b 100644
--- a/src/com/android/settings/privacy/SensorToggleController.java
+++ b/src/com/android/settings/privacy/SensorToggleController.java
@@ -59,7 +59,8 @@
@Override
public boolean setChecked(boolean isChecked) {
- mSensorPrivacyManagerHelper.setSensorBlocked(SETTINGS, getSensor(), !isChecked);
+ mSensorPrivacyManagerHelper.setSensorBlockedForProfileGroup(SETTINGS, getSensor(),
+ !isChecked);
return true;
}
diff --git a/src/com/android/settings/utils/SensorPrivacyManagerHelper.java b/src/com/android/settings/utils/SensorPrivacyManagerHelper.java
index 8872f69..b030042 100644
--- a/src/com/android/settings/utils/SensorPrivacyManagerHelper.java
+++ b/src/com/android/settings/utils/SensorPrivacyManagerHelper.java
@@ -173,6 +173,27 @@
}
/**
+ * Sets the sensor privacy for the current profile group.
+ * @param source The source with which sensor privacy is toggled.
+ * @param sensor The sensor to set for
+ * @param blocked The state to set to
+ */
+ public void setSensorBlockedForProfileGroup(int source, int sensor, boolean blocked) {
+ mSensorPrivacyManager.setSensorPrivacyForProfileGroup(source, sensor, blocked);
+ }
+
+ /**
+ * Sets the sensor privacy for the given user's profile group.
+ * @param source The source with which sensor privacy is toggled.
+ * @param sensor The sensor to set for
+ * @param blocked The state to set to
+ */
+ public void setSensorBlockedForProfileGroup(int source, int sensor, boolean blocked,
+ int userId) {
+ mSensorPrivacyManager.setSensorPrivacyForProfileGroup(source, sensor, blocked, userId);
+ }
+
+ /**
* Adds a listener for the state of the current user. If the current user changes and the state
* of the new user is different, a callback will be received.
* @param sensor The sensor to watch
diff --git a/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java b/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java
index a6a16fc..2c04e3b 100644
--- a/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java
+++ b/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java
@@ -33,6 +33,8 @@
import android.hardware.SensorPrivacyManager;
import android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener;
import android.util.ArraySet;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
import com.android.settings.utils.SensorPrivacyManagerHelper;
@@ -54,10 +56,10 @@
private Context mContext;
@Mock
private SensorPrivacyManager mSensorPrivacyManager;
- private boolean mMicState;
- private boolean mCamState;
- private Set<OnSensorPrivacyChangedListener> mMicListeners;
- private Set<OnSensorPrivacyChangedListener> mCamListeners;
+ private SparseBooleanArray mMicState;
+ private SparseBooleanArray mCamState;
+ private SparseArray<Set<OnSensorPrivacyChangedListener>> mMicListeners;
+ private SparseArray<Set<OnSensorPrivacyChangedListener>> mCamListeners;
@Before
public void setUp() {
@@ -73,39 +75,85 @@
} catch (Exception e) {
throw new RuntimeException(e);
}
- mMicState = false;
- mCamState = false;
- mMicListeners = new ArraySet<>();
- mCamListeners = new ArraySet<>();
+ mMicState = new SparseBooleanArray();
+ mCamState = new SparseBooleanArray();
+ mMicState.put(0, false);
+ mCamState.put(0, false);
+ mMicState.put(10, false);
+ mCamState.put(10, false);
+ mMicListeners = new SparseArray<>();
+ mCamListeners = new SparseArray<>();
+ mMicListeners.put(0, new ArraySet<>());
+ mMicListeners.put(10, new ArraySet<>());
+ mCamListeners.put(0, new ArraySet<>());
+ mCamListeners.put(10, new ArraySet<>());
doReturn(0).when(mContext).getUserId();
doReturn(mSensorPrivacyManager).when(mContext)
.getSystemService(SensorPrivacyManager.class);
- doAnswer(invocation -> mMicState)
+ doAnswer(invocation -> mMicState.get(0))
.when(mSensorPrivacyManager).isSensorPrivacyEnabled(eq(MICROPHONE));
- doAnswer(invocation -> mCamState)
+ doAnswer(invocation -> mCamState.get(0))
.when(mSensorPrivacyManager).isSensorPrivacyEnabled(eq(CAMERA));
+ doAnswer(invocation -> mMicState.get(invocation.getArgument(1)))
+ .when(mSensorPrivacyManager).isSensorPrivacyEnabled(eq(MICROPHONE), anyInt());
+ doAnswer(invocation -> mCamState.get(invocation.getArgument(1)))
+ .when(mSensorPrivacyManager).isSensorPrivacyEnabled(eq(CAMERA), anyInt());
doAnswer(invocation -> {
- mMicState = invocation.getArgument(1);
- for (OnSensorPrivacyChangedListener listener : mMicListeners) {
- listener.onSensorPrivacyChanged(MICROPHONE, mMicState);
+ mMicState.put(0, invocation.getArgument(2));
+ mMicState.put(10, invocation.getArgument(2));
+ for (OnSensorPrivacyChangedListener listener : mMicListeners.get(0)) {
+ listener.onSensorPrivacyChanged(MICROPHONE, mMicState.get(0));
}
return null;
}).when(mSensorPrivacyManager).setSensorPrivacy(anyInt(), eq(MICROPHONE), anyBoolean());
doAnswer(invocation -> {
- mCamState = invocation.getArgument(1);
- for (OnSensorPrivacyChangedListener listener : mMicListeners) {
- listener.onSensorPrivacyChanged(CAMERA, mMicState);
+ mCamState.put(0, invocation.getArgument(2));
+ mCamState.put(10, invocation.getArgument(2));
+ for (OnSensorPrivacyChangedListener listener : mMicListeners.get(0)) {
+ listener.onSensorPrivacyChanged(CAMERA, mMicState.get(0));
}
return null;
}).when(mSensorPrivacyManager).setSensorPrivacy(anyInt(), eq(CAMERA), anyBoolean());
- doAnswer(invocation -> mMicListeners.add(invocation.getArgument(1)))
+ doAnswer(invocation -> {
+ mMicState.put(0, invocation.getArgument(2));
+ mMicState.put(10, invocation.getArgument(2));
+ for (OnSensorPrivacyChangedListener listener : mMicListeners.get(0)) {
+ listener.onSensorPrivacyChanged(MICROPHONE, mMicState.get(0));
+ }
+ for (OnSensorPrivacyChangedListener listener : mMicListeners.get(10)) {
+ listener.onSensorPrivacyChanged(MICROPHONE, mMicState.get(10));
+ }
+ return null;
+ }).when(mSensorPrivacyManager)
+ .setSensorPrivacyForProfileGroup(anyInt(), eq(MICROPHONE), anyBoolean());
+ doAnswer(invocation -> {
+ mCamState.put(0, invocation.getArgument(2));
+ mCamState.put(10, invocation.getArgument(2));
+ for (OnSensorPrivacyChangedListener listener : mCamListeners.get(0)) {
+ listener.onSensorPrivacyChanged(CAMERA, mCamState.get(0));
+ }
+ for (OnSensorPrivacyChangedListener listener : mCamListeners.get(10)) {
+ listener.onSensorPrivacyChanged(CAMERA, mCamState.get(10));
+ }
+ return null;
+ }).when(mSensorPrivacyManager)
+ .setSensorPrivacyForProfileGroup(anyInt(), eq(CAMERA), anyBoolean());
+
+ doAnswer(invocation -> mMicListeners.get(0).add(invocation.getArgument(1)))
.when(mSensorPrivacyManager).addSensorPrivacyListener(eq(MICROPHONE), any());
- doAnswer(invocation -> mCamListeners.add(invocation.getArgument(1)))
+ doAnswer(invocation -> mCamListeners.get(0).add(invocation.getArgument(1)))
.when(mSensorPrivacyManager).addSensorPrivacyListener(eq(CAMERA), any());
+
+ doAnswer(invocation -> mMicListeners.get(invocation.getArgument(2))
+ .add(invocation.getArgument(1))).when(mSensorPrivacyManager)
+ .addSensorPrivacyListener(eq(MICROPHONE), anyInt(), any());
+ doAnswer(invocation -> mCamListeners.get(invocation.getArgument(2))
+ .add(invocation.getArgument(1))).when(mSensorPrivacyManager)
+ .addSensorPrivacyListener(eq(CAMERA), anyInt(), any());
}
@Test
@@ -143,7 +191,7 @@
mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, false);
MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
micToggleController.setChecked(false);
- assertTrue(mMicState);
+ assertTrue(mMicState.get(0));
}
@Test
@@ -151,7 +199,23 @@
mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, true);
MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
micToggleController.setChecked(true);
- assertFalse(mMicState);
+ assertFalse(mMicState.get(0));
+ }
+
+ @Test
+ public void isMicrophoneSensorPrivacyEnabledForProfileUser_uncheckMicToggle_returnTrue() {
+ mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, false);
+ MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
+ micToggleController.setChecked(false);
+ assertTrue(mMicState.get(10));
+ }
+
+ @Test
+ public void isMicrophoneSensorPrivacyEnabledProfileUser_checkMicToggle_returnFalse() {
+ mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, true);
+ MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
+ micToggleController.setChecked(true);
+ assertFalse(mMicState.get(10));
}
@Test
@@ -189,20 +253,38 @@
}
@Test
- public void isCameraSensorPrivacyEnabled_uncheckMicToggle_returnTrue() {
+ public void isCameraSensorPrivacyEnabled_uncheckCanToggle_returnTrue() {
mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, false);
CameraToggleController camToggleController =
new CameraToggleController(mContext, "cam_toggle");
camToggleController.setChecked(false);
- assertTrue(mCamState);
+ assertTrue(mCamState.get(0));
}
@Test
- public void isCameraSensorPrivacyEnabled_checkMicToggle_returnFalse() {
+ public void isCameraSensorPrivacyEnabled_checkCamToggle_returnFalse() {
mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, true);
CameraToggleController camToggleController =
new CameraToggleController(mContext, "cam_toggle");
camToggleController.setChecked(true);
- assertFalse(mCamState);
+ assertFalse(mCamState.get(0));
+ }
+
+ @Test
+ public void isCameraSensorPrivacyEnabledForProfileUser_uncheckCamToggle_returnTrue() {
+ mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, false);
+ CameraToggleController camToggleController =
+ new CameraToggleController(mContext, "cam_toggle");
+ camToggleController.setChecked(false);
+ assertTrue(mCamState.get(10));
+ }
+
+ @Test
+ public void isCameraSensorPrivacyEnabledProfileUser_checkCamToggle_returnFalse() {
+ mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, true);
+ CameraToggleController camToggleController =
+ new CameraToggleController(mContext, "cam_toggle");
+ camToggleController.setChecked(true);
+ assertFalse(mCamState.get(10));
}
}