diff --git a/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java b/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
index 20080ce..4963e2f 100644
--- a/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.display;
 
 import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
+import static android.hardware.SensorPrivacyManager.Sources.DIALOG;
 
 import android.content.Context;
 import android.hardware.SensorPrivacyManager;
@@ -77,7 +78,7 @@
             mPreference.setSummary(R.string.adaptive_sleep_camera_lock_summary);
             mPreference.setPositiveButtonText(R.string.allow);
             mPreference.setPositiveButtonOnClickListener(
-                    p -> mPrivacyManager.setSensorPrivacy(CAMERA, false));
+                    p -> mPrivacyManager.setSensorPrivacy(DIALOG, CAMERA, false));
         }
     }
 }
diff --git a/src/com/android/settings/display/SmartAutoRotateCameraStateController.java b/src/com/android/settings/display/SmartAutoRotateCameraStateController.java
index a17a903..dcb225d 100644
--- a/src/com/android/settings/display/SmartAutoRotateCameraStateController.java
+++ b/src/com/android/settings/display/SmartAutoRotateCameraStateController.java
@@ -17,6 +17,7 @@
 package com.android.settings.display;
 
 import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
+import static android.hardware.SensorPrivacyManager.Sources.DIALOG;
 
 import static com.android.settings.display.SmartAutoRotateController.isRotationResolverServiceAvailable;
 
@@ -63,7 +64,7 @@
         ((BannerMessagePreference) mPreference)
                 .setPositiveButtonText(R.string.allow)
                 .setPositiveButtonOnClickListener(v -> {
-                    mPrivacyManager.setSensorPrivacy(CAMERA, false);
+                    mPrivacyManager.setSensorPrivacy(DIALOG, CAMERA, false);
                 });
     }
 
diff --git a/src/com/android/settings/privacy/SensorToggleController.java b/src/com/android/settings/privacy/SensorToggleController.java
index 9e8aca2..60f19d1 100644
--- a/src/com/android/settings/privacy/SensorToggleController.java
+++ b/src/com/android/settings/privacy/SensorToggleController.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.privacy;
 
+import static android.hardware.SensorPrivacyManager.Sources.SETTINGS;
+
 import android.content.Context;
 
 import androidx.preference.PreferenceScreen;
@@ -51,7 +53,7 @@
 
     @Override
     public boolean setChecked(boolean isChecked) {
-        mSensorPrivacyManagerHelper.setSensorBlocked(getSensor(), !isChecked);
+        mSensorPrivacyManagerHelper.setSensorBlocked(SETTINGS, getSensor(), !isChecked);
         return true;
     }
 
diff --git a/src/com/android/settings/utils/SensorPrivacyManagerHelper.java b/src/com/android/settings/utils/SensorPrivacyManagerHelper.java
index 13a987d..8872f69 100644
--- a/src/com/android/settings/utils/SensorPrivacyManagerHelper.java
+++ b/src/com/android/settings/utils/SensorPrivacyManagerHelper.java
@@ -153,21 +153,23 @@
 
     /**
      * Sets the sensor privacy for the current user.
+     * @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 setSensorBlocked(int sensor, boolean blocked) {
-        mSensorPrivacyManager.setSensorPrivacy(sensor, blocked);
+    public void setSensorBlocked(int source, int sensor, boolean blocked) {
+        mSensorPrivacyManager.setSensorPrivacy(source, sensor, blocked);
     }
 
     /**
      * Sets the sensor privacy for the given user.
+     * @param source The source with which sensor privacy is toggled.
      * @param sensor The sensor to set for
      * @param blocked The state to set to
      * @param userId The user to set for
      */
-    public void setSensorBlocked(int sensor, boolean blocked, int userId) {
-        mSensorPrivacyManager.setSensorPrivacy(sensor, blocked, userId);
+    public void setSensorBlocked(int source, int sensor, boolean blocked, int userId) {
+        mSensorPrivacyManager.setSensorPrivacy(source, sensor, blocked, userId);
     }
 
     /**
diff --git a/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java b/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java
index b38dbe8..a6a16fc 100644
--- a/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java
+++ b/tests/robotests/src/com/android/settings/privacy/SensorToggleControllerTest.java
@@ -18,11 +18,13 @@
 
 import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
 import static android.hardware.SensorPrivacyManager.Sensors.MICROPHONE;
+import static android.hardware.SensorPrivacyManager.Sources.OTHER;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
@@ -91,14 +93,14 @@
                 listener.onSensorPrivacyChanged(MICROPHONE, mMicState);
             }
             return null;
-        }).when(mSensorPrivacyManager).setSensorPrivacy(eq(MICROPHONE), anyBoolean());
+        }).when(mSensorPrivacyManager).setSensorPrivacy(anyInt(), eq(MICROPHONE), anyBoolean());
         doAnswer(invocation -> {
             mCamState = invocation.getArgument(1);
             for (OnSensorPrivacyChangedListener listener : mMicListeners) {
                 listener.onSensorPrivacyChanged(CAMERA, mMicState);
             }
             return null;
-        }).when(mSensorPrivacyManager).setSensorPrivacy(eq(CAMERA), anyBoolean());
+        }).when(mSensorPrivacyManager).setSensorPrivacy(anyInt(), eq(CAMERA), anyBoolean());
 
         doAnswer(invocation -> mMicListeners.add(invocation.getArgument(1)))
                 .when(mSensorPrivacyManager).addSensorPrivacyListener(eq(MICROPHONE), any());
@@ -108,37 +110,37 @@
 
     @Test
     public void isChecked_disableMicrophoneSensorPrivacy_returnTrue() {
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, false);
         MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
         assertTrue(micToggleController.isChecked());
     }
 
     @Test
     public void isChecked_enableMicrophoneSensorPrivacy_returnFalse() {
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, true);
         MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
         assertFalse(micToggleController.isChecked());
     }
 
     @Test
     public void isChecked_disableMicrophoneSensorPrivacyThenChanged_returnFalse() {
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, false);
         MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, true);
         assertFalse(micToggleController.isChecked());
     }
 
     @Test
     public void isChecked_enableMicrophoneSensorPrivacyThenChanged_returnTrue() {
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, true);
         MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, false);
         assertTrue(micToggleController.isChecked());
     }
 
     @Test
     public void isMicrophoneSensorPrivacyEnabled_uncheckMicToggle_returnTrue() {
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, false);
         MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
         micToggleController.setChecked(false);
         assertTrue(mMicState);
@@ -146,7 +148,7 @@
 
     @Test
     public void isMicrophoneSensorPrivacyEnabled_checkMicToggle_returnFalse() {
-        mSensorPrivacyManager.setSensorPrivacy(MICROPHONE, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, MICROPHONE, true);
         MicToggleController micToggleController = new MicToggleController(mContext, "mic_toggle");
         micToggleController.setChecked(true);
         assertFalse(mMicState);
@@ -154,7 +156,7 @@
 
     @Test
     public void isChecked_disableCameraSensorPrivacy_returnTrue() {
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, false);
         CameraToggleController camToggleController =
                 new CameraToggleController(mContext, "cam_toggle");
         assertTrue(camToggleController.isChecked());
@@ -162,7 +164,7 @@
 
     @Test
     public void isChecked_enableCameraSensorPrivacy_returnFalse() {
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, true);
         CameraToggleController camToggleController =
                 new CameraToggleController(mContext, "cam_toggle");
         assertFalse(camToggleController.isChecked());
@@ -170,25 +172,25 @@
 
     @Test
     public void isChecked_disableCameraSensorPrivacyThenChanged_returnFalse() {
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, false);
         CameraToggleController camToggleController =
                 new CameraToggleController(mContext, "cam_toggle");
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, true);
         assertFalse(camToggleController.isChecked());
     }
 
     @Test
     public void isChecked_enableCameraSensorPrivacyThenChanged_returnTrue() {
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, true);
         CameraToggleController camToggleController =
                 new CameraToggleController(mContext, "cam_toggle");
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, false);
         assertTrue(camToggleController.isChecked());
     }
 
     @Test
     public void isCameraSensorPrivacyEnabled_uncheckMicToggle_returnTrue() {
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, false);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, false);
         CameraToggleController camToggleController =
                 new CameraToggleController(mContext, "cam_toggle");
         camToggleController.setChecked(false);
@@ -197,7 +199,7 @@
 
     @Test
     public void isCameraSensorPrivacyEnabled_checkMicToggle_returnFalse() {
-        mSensorPrivacyManager.setSensorPrivacy(CAMERA, true);
+        mSensorPrivacyManager.setSensorPrivacy(OTHER, CAMERA, true);
         CameraToggleController camToggleController =
                 new CameraToggleController(mContext, "cam_toggle");
         camToggleController.setChecked(true);
