Loading src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java +28 −5 Original line number Diff line number Diff line Loading @@ -19,9 +19,15 @@ package com.android.settings.display; import static android.hardware.SensorPrivacyManager.Sensors.CAMERA; import static android.hardware.SensorPrivacyManager.Sources.DIALOG; import static androidx.lifecycle.Lifecycle.Event.ON_START; import static androidx.lifecycle.Lifecycle.Event.ON_STOP; import android.content.Context; import android.hardware.SensorPrivacyManager; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.PreferenceScreen; import com.android.internal.annotations.VisibleForTesting; Loading @@ -32,17 +38,34 @@ import com.android.settingslib.widget.BannerMessagePreference; * The controller of Screen attention's camera disabled warning preference. * The preference appears when the camera access is disabled for Screen Attention feature. */ public class AdaptiveSleepCameraStatePreferenceController { public class AdaptiveSleepCameraStatePreferenceController implements LifecycleObserver { @VisibleForTesting BannerMessagePreference mPreference; private final SensorPrivacyManager mPrivacyManager; private final Context mContext; public AdaptiveSleepCameraStatePreferenceController(Context context) { private final SensorPrivacyManager.OnSensorPrivacyChangedListener mPrivacyChangedListener = new SensorPrivacyManager.OnSensorPrivacyChangedListener() { @Override public void onSensorPrivacyChanged(int sensor, boolean enabled) { updateVisibility(); } }; public AdaptiveSleepCameraStatePreferenceController(Context context, Lifecycle lifecycle) { mPrivacyManager = SensorPrivacyManager.getInstance(context); mPrivacyManager.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> updateVisibility()); mContext = context; lifecycle.addObserver(this); } @OnLifecycleEvent(ON_START) public void onStart() { mPrivacyManager.addSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } @OnLifecycleEvent(ON_STOP) public void onStop() { mPrivacyManager.removeSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } /** Loading @@ -55,7 +78,7 @@ public class AdaptiveSleepCameraStatePreferenceController { } /** * Need this because all controller tests use RoboElectric. No easy way to mock this service, * Need this because all controller tests use Robolectric. No easy way to mock this service, * so we mock the call we need */ @VisibleForTesting Loading src/com/android/settings/display/ScreenTimeoutSettings.java +5 −3 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements }; private DevicePolicyManager mDevicePolicyManager; private SensorPrivacyManager.OnSensorPrivacyChangedListener mPrivacyChangedListener; @VisibleForTesting Context mContext; Loading Loading @@ -120,7 +121,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mAdaptiveSleepPermissionController = new AdaptiveSleepPermissionPreferenceController( context); mAdaptiveSleepCameraStatePreferenceController = new AdaptiveSleepCameraStatePreferenceController(context); new AdaptiveSleepCameraStatePreferenceController(context, getLifecycle()); mAdaptiveSleepBatterySaverPreferenceController = new AdaptiveSleepBatterySaverPreferenceController(context); mPrivacyPreference = new FooterPreference(context); Loading @@ -129,8 +130,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mPrivacyPreference.setSelectable(false); mPrivacyPreference.setLayoutResource(R.layout.preference_footer); mPrivacyManager = SensorPrivacyManager.getInstance(context); mPrivacyManager.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> mAdaptiveSleepController.updatePreference()); mPrivacyChangedListener = (sensor, enabled) -> mAdaptiveSleepController.updatePreference(); } @Override Loading Loading @@ -159,12 +159,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mAdaptiveSleepController.updatePreference(); mContext.registerReceiver(mReceiver, new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)); mPrivacyManager.addSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } @Override public void onStop() { super.onStop(); mContext.unregisterReceiver(mReceiver); mPrivacyManager.removeSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } @Override Loading tests/robotests/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceControllerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.PackageManager; import androidx.lifecycle.Lifecycle; import androidx.preference.PreferenceScreen; import com.android.settings.testutils.shadow.ShadowSensorPrivacyManager; Loading @@ -50,6 +51,8 @@ public class AdaptiveSleepCameraStatePreferenceControllerTest { private PackageManager mPackageManager; @Mock private PreferenceScreen mScreen; @Mock private Lifecycle mLifecycle; @Before public void setUp() { Loading @@ -61,7 +64,7 @@ public class AdaptiveSleepCameraStatePreferenceControllerTest { when(mPackageManager.checkPermission(any(), any())).thenReturn( PackageManager.PERMISSION_GRANTED); mController = new AdaptiveSleepCameraStatePreferenceController(mContext); mController = new AdaptiveSleepCameraStatePreferenceController(mContext, mLifecycle); when(mController.isCameraLocked()).thenReturn(false); } Loading Loading
src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java +28 −5 Original line number Diff line number Diff line Loading @@ -19,9 +19,15 @@ package com.android.settings.display; import static android.hardware.SensorPrivacyManager.Sensors.CAMERA; import static android.hardware.SensorPrivacyManager.Sources.DIALOG; import static androidx.lifecycle.Lifecycle.Event.ON_START; import static androidx.lifecycle.Lifecycle.Event.ON_STOP; import android.content.Context; import android.hardware.SensorPrivacyManager; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.PreferenceScreen; import com.android.internal.annotations.VisibleForTesting; Loading @@ -32,17 +38,34 @@ import com.android.settingslib.widget.BannerMessagePreference; * The controller of Screen attention's camera disabled warning preference. * The preference appears when the camera access is disabled for Screen Attention feature. */ public class AdaptiveSleepCameraStatePreferenceController { public class AdaptiveSleepCameraStatePreferenceController implements LifecycleObserver { @VisibleForTesting BannerMessagePreference mPreference; private final SensorPrivacyManager mPrivacyManager; private final Context mContext; public AdaptiveSleepCameraStatePreferenceController(Context context) { private final SensorPrivacyManager.OnSensorPrivacyChangedListener mPrivacyChangedListener = new SensorPrivacyManager.OnSensorPrivacyChangedListener() { @Override public void onSensorPrivacyChanged(int sensor, boolean enabled) { updateVisibility(); } }; public AdaptiveSleepCameraStatePreferenceController(Context context, Lifecycle lifecycle) { mPrivacyManager = SensorPrivacyManager.getInstance(context); mPrivacyManager.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> updateVisibility()); mContext = context; lifecycle.addObserver(this); } @OnLifecycleEvent(ON_START) public void onStart() { mPrivacyManager.addSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } @OnLifecycleEvent(ON_STOP) public void onStop() { mPrivacyManager.removeSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } /** Loading @@ -55,7 +78,7 @@ public class AdaptiveSleepCameraStatePreferenceController { } /** * Need this because all controller tests use RoboElectric. No easy way to mock this service, * Need this because all controller tests use Robolectric. No easy way to mock this service, * so we mock the call we need */ @VisibleForTesting Loading
src/com/android/settings/display/ScreenTimeoutSettings.java +5 −3 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements }; private DevicePolicyManager mDevicePolicyManager; private SensorPrivacyManager.OnSensorPrivacyChangedListener mPrivacyChangedListener; @VisibleForTesting Context mContext; Loading Loading @@ -120,7 +121,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mAdaptiveSleepPermissionController = new AdaptiveSleepPermissionPreferenceController( context); mAdaptiveSleepCameraStatePreferenceController = new AdaptiveSleepCameraStatePreferenceController(context); new AdaptiveSleepCameraStatePreferenceController(context, getLifecycle()); mAdaptiveSleepBatterySaverPreferenceController = new AdaptiveSleepBatterySaverPreferenceController(context); mPrivacyPreference = new FooterPreference(context); Loading @@ -129,8 +130,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mPrivacyPreference.setSelectable(false); mPrivacyPreference.setLayoutResource(R.layout.preference_footer); mPrivacyManager = SensorPrivacyManager.getInstance(context); mPrivacyManager.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> mAdaptiveSleepController.updatePreference()); mPrivacyChangedListener = (sensor, enabled) -> mAdaptiveSleepController.updatePreference(); } @Override Loading Loading @@ -159,12 +159,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mAdaptiveSleepController.updatePreference(); mContext.registerReceiver(mReceiver, new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)); mPrivacyManager.addSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } @Override public void onStop() { super.onStop(); mContext.unregisterReceiver(mReceiver); mPrivacyManager.removeSensorPrivacyListener(CAMERA, mPrivacyChangedListener); } @Override Loading
tests/robotests/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceControllerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.PackageManager; import androidx.lifecycle.Lifecycle; import androidx.preference.PreferenceScreen; import com.android.settings.testutils.shadow.ShadowSensorPrivacyManager; Loading @@ -50,6 +51,8 @@ public class AdaptiveSleepCameraStatePreferenceControllerTest { private PackageManager mPackageManager; @Mock private PreferenceScreen mScreen; @Mock private Lifecycle mLifecycle; @Before public void setUp() { Loading @@ -61,7 +64,7 @@ public class AdaptiveSleepCameraStatePreferenceControllerTest { when(mPackageManager.checkPermission(any(), any())).thenReturn( PackageManager.PERMISSION_GRANTED); mController = new AdaptiveSleepCameraStatePreferenceController(mContext); mController = new AdaptiveSleepCameraStatePreferenceController(mContext, mLifecycle); when(mController.isCameraLocked()).thenReturn(false); } Loading