diff --git a/src/com/android/settings/devicelock/DeviceLockPreferenceController.java b/src/com/android/settings/devicelock/DeviceLockPreferenceController.java index 4b6fe88f66c..cf54c87ce48 100644 --- a/src/com/android/settings/devicelock/DeviceLockPreferenceController.java +++ b/src/com/android/settings/devicelock/DeviceLockPreferenceController.java @@ -47,6 +47,11 @@ public final class DeviceLockPreferenceController extends BasePreferenceControll @Override public void updateState(Preference preference) { super.updateState(preference); + if (mDeviceLockManager == null) { + Log.w(TAG, "DeviceLockManager is not available"); + preference.setVisible(false); + return; + } mDeviceLockManager.getKioskApps(mContext.getMainExecutor(), result -> { // if kiosk apps present on the device, the device is provisioned by Device Lock diff --git a/tests/robotests/src/com/android/settings/devicelock/DeviceLockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/devicelock/DeviceLockPreferenceControllerTest.java index 317696902bc..3b81c834e54 100644 --- a/tests/robotests/src/com/android/settings/devicelock/DeviceLockPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/devicelock/DeviceLockPreferenceControllerTest.java @@ -93,4 +93,17 @@ public final class DeviceLockPreferenceControllerTest { outcomeReceiver.onResult(TEST_KIOSK_APPS); assertThat(preference.isVisible()).isTrue(); } + + @Test + public void testUpdateState_preferenceBecomesInvisibleIfDeviceLockManagerIsNotAvailable() { + Context context = spy(mContext); + when(context.getSystemService(DeviceLockManager.class)).thenReturn(null); + mController = new DeviceLockPreferenceController(context, TEST_PREFERENCE_KEY); + + Preference preference = new Preference(mContext, null, 0, 0); + preference.setVisible(true); + + mController.updateState(preference); + assertThat(preference.isVisible()).isFalse(); + } }