From ad3e422916d2769b6be5469d9f26740ca5daa9bb Mon Sep 17 00:00:00 2001 From: Beverly Date: Thu, 29 Mar 2018 18:49:07 -0400 Subject: [PATCH] Dnd 'blink light' option only if phone has LED Change-Id: Ifbc75128a9434f83839cd6b60405a03f88f4b3d3 Fixes: 77271775 Test: make ROBOTEST_FILTER=ZenModeVisEffectPreferenceControllerTest RunSettingsRoboTests -j40 --- .../ZenModeVisEffectPreferenceController.java | 5 ++++ ...ModeVisEffectPreferenceControllerTest.java | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/com/android/settings/notification/ZenModeVisEffectPreferenceController.java b/src/com/android/settings/notification/ZenModeVisEffectPreferenceController.java index 89b953d6a5b..23723c5c779 100644 --- a/src/com/android/settings/notification/ZenModeVisEffectPreferenceController.java +++ b/src/com/android/settings/notification/ZenModeVisEffectPreferenceController.java @@ -16,6 +16,7 @@ package com.android.settings.notification; +import android.app.NotificationManager; import android.content.Context; import android.support.v7.preference.CheckBoxPreference; import android.support.v7.preference.Preference; @@ -51,6 +52,10 @@ public class ZenModeVisEffectPreferenceController @Override public boolean isAvailable() { + if (mEffect == NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS) { + return mContext.getResources() + .getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed); + } return true; } diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeVisEffectPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeVisEffectPreferenceControllerTest.java index a424491ab06..6ca04ba7c6f 100644 --- a/tests/robotests/src/com/android/settings/notification/ZenModeVisEffectPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/ZenModeVisEffectPreferenceControllerTest.java @@ -17,9 +17,14 @@ package com.android.settings.notification; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE; +import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.mock; @@ -30,6 +35,7 @@ import static org.mockito.Mockito.when; import android.app.NotificationManager; import android.content.Context; +import android.content.res.Resources; import android.support.v7.preference.CheckBoxPreference; import android.support.v7.preference.PreferenceScreen; @@ -81,6 +87,27 @@ public class ZenModeVisEffectPreferenceControllerTest { mController.displayPreference(mScreen); } + @Test + public void isAvailable() { + // SUPPRESSED_EFFECT_PEEK is always available: + assertTrue(mController.isAvailable()); + + // SUPPRESSED_EFFECT_LIGHTS is only available if the device has an LED: + Context mockContext = mock(Context.class); + mController = new ZenModeVisEffectPreferenceController(mockContext, mock(Lifecycle.class), + PREF_KEY, SUPPRESSED_EFFECT_LIGHTS, PREF_METRICS, null); + Resources mockResources = mock(Resources.class); + when(mockContext.getResources()).thenReturn(mockResources); + + when(mockResources.getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed)) + .thenReturn(false); // no light + assertFalse(mController.isAvailable()); + + when(mockResources.getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed)) + .thenReturn(true); // has light + assertTrue(mController.isAvailable()); + } + @Test public void updateState_notChecked() { when(mBackend.isVisualEffectSuppressed(SUPPRESSED_EFFECT_PEEK)).thenReturn(false);