diff --git a/res/raw/bubbles.mp4 b/res/raw/bubbles.mp4 deleted file mode 100644 index c68ea570749..00000000000 Binary files a/res/raw/bubbles.mp4 and /dev/null differ diff --git a/res/values/strings.xml b/res/values/strings.xml index 469d1b96251..4a82504df37 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7891,8 +7891,8 @@ Bubbles - - Quickly access app content from anywhere using floating shortcuts + + Some notifications can appear as bubbles on the screen Some notifications and other content can appear as bubbles on the screen. To open a bubble, tap it. To dismiss it, drag it down the screen. diff --git a/res/xml/bubble_notification_settings.xml b/res/xml/bubble_notification_settings.xml deleted file mode 100644 index 7fba1258d2b..00000000000 --- a/res/xml/bubble_notification_settings.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - diff --git a/res/xml/configure_notification_settings.xml b/res/xml/configure_notification_settings.xml index af27869b9ab..687fe832cbe 100644 --- a/res/xml/configure_notification_settings.xml +++ b/res/xml/configure_notification_settings.xml @@ -74,13 +74,6 @@ android:title="@string/notification_badging_title" settings:controller="com.android.settings.notification.BadgingNotificationPreferenceController"/> - - - + + + getXmlResourcesToIndex( - Context context, boolean enabled) { - final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.bubble_notification_settings; - return Arrays.asList(sir); - } - }; -} diff --git a/src/com/android/settings/notification/BubblePreferenceController.java b/src/com/android/settings/notification/BubblePreferenceController.java index f373752ed94..200c4b2dfec 100644 --- a/src/com/android/settings/notification/BubblePreferenceController.java +++ b/src/com/android/settings/notification/BubblePreferenceController.java @@ -25,6 +25,7 @@ import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.RestrictedSwitchPreference; +import androidx.annotation.VisibleForTesting; import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; @@ -33,8 +34,10 @@ public class BubblePreferenceController extends NotificationPreferenceController private static final String TAG = "BubblePrefContr"; private static final String KEY = "bubble_pref"; - private static final int SYSTEM_WIDE_ON = 1; - private static final int SYSTEM_WIDE_OFF = 0; + @VisibleForTesting + static final int SYSTEM_WIDE_ON = 1; + @VisibleForTesting + static final int SYSTEM_WIDE_OFF = 0; private FragmentManager mFragmentManager; @@ -58,18 +61,14 @@ public class BubblePreferenceController extends NotificationPreferenceController if (!super.isAvailable()) { return false; } - if (mAppRow == null && mChannel == null) { + if (!isGloballyEnabled()) { return false; } if (mChannel != null) { - if (Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON) == SYSTEM_WIDE_OFF) { - return false; - } if (isDefaultChannel()) { return true; } else { - return mAppRow == null ? false : mAppRow.allowBubbles; + return mAppRow != null && mAppRow.allowBubbles; } } return true; @@ -80,12 +79,10 @@ public class BubblePreferenceController extends NotificationPreferenceController RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference; pref.setDisabledByAdmin(mAdmin); if (mChannel != null) { - pref.setChecked(mChannel.canBubble()); + pref.setChecked(mChannel.canBubble() && isGloballyEnabled()); pref.setEnabled(!pref.isDisabledByAdmin()); } else { - pref.setChecked(mAppRow.allowBubbles - && Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON) == SYSTEM_WIDE_ON); + pref.setChecked(mAppRow.allowBubbles && isGloballyEnabled()); pref.setSummary(mContext.getString( R.string.bubbles_app_toggle_summary, mAppRow.label)); } @@ -94,7 +91,7 @@ public class BubblePreferenceController extends NotificationPreferenceController @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - final boolean value = (Boolean) newValue; + final boolean value = (Boolean) newValue && isGloballyEnabled(); if (mChannel != null) { mChannel.setAllowBubbles(value); saveChannel(); @@ -103,9 +100,7 @@ public class BubblePreferenceController extends NotificationPreferenceController RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference; // if the global setting is off, toggling app level permission requires extra // confirmation - if (Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON) == SYSTEM_WIDE_OFF - && !pref.isChecked()) { + if (!isGloballyEnabled() && !pref.isChecked()) { new BubbleWarningDialogFragment() .setPkgInfo(mAppRow.pkg, mAppRow.uid) .show(mFragmentManager, "dialog"); @@ -118,6 +113,11 @@ public class BubblePreferenceController extends NotificationPreferenceController return true; } + private boolean isGloballyEnabled() { + return Settings.Secure.getInt(mContext.getContentResolver(), + NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF) == SYSTEM_WIDE_ON; + } + // Used in app level prompt that confirms the user is ok with turning on bubbles // globally. If they aren't, undo what public static void revertBubblesApproval(Context mContext, String pkg, int uid) { diff --git a/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java b/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java deleted file mode 100644 index e26d9a80331..00000000000 --- a/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.notification; - -import static android.provider.Settings.Secure.NOTIFICATION_BUBBLES; - -import android.content.Context; -import android.provider.Settings; - -import com.android.settings.R; -import com.android.settings.core.BasePreferenceController; - -import androidx.annotation.VisibleForTesting; - -public class BubbleSummaryNotificationPreferenceController extends BasePreferenceController { - - @VisibleForTesting - static final int ON = 1; - - public BubbleSummaryNotificationPreferenceController(Context context, String preferenceKey) { - super(context, preferenceKey); - } - - @Override - public CharSequence getSummary() { - return mContext.getString( - areBubblesEnabled() ? R.string.switch_on_text : R.string.switch_off_text); - } - - @Override - public int getAvailabilityStatus() { - return AVAILABLE; - } - - private boolean areBubblesEnabled() { - return Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, ON) == ON; - } -} diff --git a/src/com/android/settings/notification/BubbleSummaryPreferenceController.java b/src/com/android/settings/notification/BubbleSummaryPreferenceController.java index 5f58f6757bf..b1632c4d1e1 100644 --- a/src/com/android/settings/notification/BubbleSummaryPreferenceController.java +++ b/src/com/android/settings/notification/BubbleSummaryPreferenceController.java @@ -27,13 +27,16 @@ import com.android.settings.R; import com.android.settings.applications.AppInfoBase; import com.android.settings.core.SubSettingLauncher; +import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; public class BubbleSummaryPreferenceController extends NotificationPreferenceController { private static final String KEY = "bubble_link_pref"; - private static final int SYSTEM_WIDE_ON = 1; - private static final int SYSTEM_WIDE_OFF = 0; + @VisibleForTesting + static final int SYSTEM_WIDE_ON = 1; + @VisibleForTesting + static final int SYSTEM_WIDE_OFF = 0; public BubbleSummaryPreferenceController(Context context, NotificationBackend backend) { super(context, backend); @@ -53,17 +56,16 @@ public class BubbleSummaryPreferenceController extends NotificationPreferenceCon return false; } if (mChannel != null) { - if (Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON) == SYSTEM_WIDE_OFF) { + if (!isGloballyEnabled()) { return false; } if (isDefaultChannel()) { return true; } else { - return mAppRow == null ? false : mAppRow.allowBubbles; + return mAppRow != null && mAppRow.allowBubbles; } } - return true; + return isGloballyEnabled(); } @Override @@ -89,13 +91,16 @@ public class BubbleSummaryPreferenceController extends NotificationPreferenceCon boolean canBubble = false; if (mAppRow != null) { if (mChannel != null) { - canBubble |= mChannel.canBubble(); + canBubble |= mChannel.canBubble() && isGloballyEnabled(); } else { - canBubble |= mAppRow.allowBubbles - && (Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON) == SYSTEM_WIDE_ON); + canBubble |= mAppRow.allowBubbles && isGloballyEnabled(); } } return mContext.getString(canBubble ? R.string.switch_on_text : R.string.switch_off_text); } + + private boolean isGloballyEnabled() { + return Settings.Secure.getInt(mContext.getContentResolver(), + NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF) == SYSTEM_WIDE_ON; + } } diff --git a/tests/robotests/src/com/android/settings/development/BubbleGlobalPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BubbleGlobalPreferenceControllerTest.java new file mode 100644 index 00000000000..11ca63f58c1 --- /dev/null +++ b/tests/robotests/src/com/android/settings/development/BubbleGlobalPreferenceControllerTest.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.development; + +import static android.provider.Settings.Secure.NOTIFICATION_BUBBLES; + +import static com.android.settings.development.BubbleGlobalPreferenceController.OFF; +import static com.android.settings.development.BubbleGlobalPreferenceController.ON; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.provider.Settings; + +import androidx.preference.PreferenceScreen; +import androidx.preference.SwitchPreference; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class BubbleGlobalPreferenceControllerTest { + private Context mContext; + + @Mock + private SwitchPreference mPreference; + @Mock + private PreferenceScreen mPreferenceScreen; + + private BubbleGlobalPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; + mController = new BubbleGlobalPreferenceController(mContext); + when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) + .thenReturn(mPreference); + mController.displayPreference(mPreferenceScreen); + } + + @Test + public void onPreferenceChange_settingEnabled_allowBubbles_shouldBeOn() { + mController.onPreferenceChange(mPreference, true /* new value */); + + assertThat(isSettingEnabled()).isTrue(); + } + + @Test + public void onPreferenceChange_settingDisabled_allowBubbles_shouldBeOff() { + mController.onPreferenceChange(mPreference, false /* new value */); + + assertThat(isSettingEnabled()).isFalse(); + } + + @Test + public void updateState_settingEnabled_preferenceShouldBeChecked() { + Settings.Secure.putInt(mContext.getContentResolver(), + NOTIFICATION_BUBBLES, 1 /* enabled */); + mController.updateState(mPreference); + + verify(mPreference).setChecked(true); + } + + @Test + public void updateState_settingReset_defaultDisabled_preferenceShouldNotBeChecked() { + Settings.Secure.putInt(mContext.getContentResolver(), + NOTIFICATION_BUBBLES, 0 /* enabled */); + mController.updateState(mPreference); + + verify(mPreference).setChecked(false); + } + + @Test + public void onDeveloperOptionsSwitchDisabled_shouldDisable() { + mController.onDeveloperOptionsSwitchDisabled(); + + verify(mPreference).setChecked(false); + verify(mPreference).setEnabled(false); + + assertThat(isSettingEnabled()).isFalse(); + } + + private boolean isSettingEnabled() { + return Settings.Secure.getInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, + OFF /* default off */) == ON; + } + +} diff --git a/tests/robotests/src/com/android/settings/notification/BubbleNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BubbleNotificationPreferenceControllerTest.java deleted file mode 100644 index f3f51c52814..00000000000 --- a/tests/robotests/src/com/android/settings/notification/BubbleNotificationPreferenceControllerTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.notification; - -import static android.provider.Settings.Secure.NOTIFICATION_BUBBLES; - -import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF; -import static com.android.settings.notification.BadgingNotificationPreferenceController.ON; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.provider.Settings; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Answers; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; - -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; -import androidx.preference.TwoStatePreference; - -@RunWith(RobolectricTestRunner.class) -public class BubbleNotificationPreferenceControllerTest { - - private Context mContext; - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private PreferenceScreen mScreen; - - private BubbleNotificationPreferenceController mController; - private Preference mPreference; - - private static final String KEY_NOTIFICATION_BUBBLES = "notification_bubbles"; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - mController = new BubbleNotificationPreferenceController(mContext, - KEY_NOTIFICATION_BUBBLES); - mPreference = new Preference(RuntimeEnvironment.application); - mPreference.setKey(mController.getPreferenceKey()); - when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference); - } - - @Test - public void display_shouldDisplay() { - assertThat(mPreference.isVisible()).isTrue(); - } - - @Test - public void updateState_preferenceSetCheckedWhenSettingIsOn() { - final TwoStatePreference preference = mock(TwoStatePreference.class); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, ON); - - mController.updateState(preference); - - verify(preference).setChecked(true); - } - - @Test - public void updateState_preferenceSetUncheckedWhenSettingIsOff() { - final TwoStatePreference preference = mock(TwoStatePreference.class); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, OFF); - assertThat(Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, ON)).isEqualTo(OFF); - - mController.updateState(preference); - - verify(preference).setChecked(false); - } - - @Test - public void isChecked_settingIsOff_shouldReturnFalse() { - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, OFF); - - assertThat(mController.isChecked()).isFalse(); - } - - @Test - public void isChecked_settingIsOn_shouldReturnTrue() { - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, ON); - - assertThat(mController.isChecked()).isTrue(); - } - - @Test - public void setChecked_setFalse_disablesSetting() { - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, ON); - - mController.setChecked(false); - int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, -1); - - assertThat(updatedValue).isEqualTo(OFF); - } - - @Test - public void setChecked_setTrue_enablesSetting() { - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, OFF); - - mController.setChecked(true); - int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(), - NOTIFICATION_BUBBLES, -1); - - assertThat(updatedValue).isEqualTo(ON); - } - - @Test - public void isSliceable_returnsFalse() { - assertThat(mController.isSliceable()).isFalse(); - } -} diff --git a/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java index ea66964b6f5..67324e95845 100644 --- a/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/BubblePreferenceControllerTest.java @@ -22,6 +22,9 @@ import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.provider.Settings.Secure.NOTIFICATION_BUBBLES; +import static com.android.settings.notification.BubblePreferenceController.SYSTEM_WIDE_OFF; +import static com.android.settings.notification.BubblePreferenceController.SYSTEM_WIDE_ON; + import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -96,6 +99,7 @@ public class BubblePreferenceControllerTest { @Test public void testIsAvailable_notIfAppBlocked() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.banned = true; mController.onResume(appRow, mock(NotificationChannel.class), null, null); @@ -104,6 +108,7 @@ public class BubblePreferenceControllerTest { @Test public void testIsAvailable_notIfChannelBlocked() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); NotificationChannel channel = mock(NotificationChannel.class); when(channel.getImportance()).thenReturn(IMPORTANCE_NONE); @@ -113,6 +118,7 @@ public class BubblePreferenceControllerTest { @Test public void testIsAvailable_channel_notIfAppOff() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.allowBubbles = false; NotificationChannel channel = mock(NotificationChannel.class); @@ -123,12 +129,13 @@ public class BubblePreferenceControllerTest { } @Test - public void testIsAvailable_ifOffGlobally_app() { + public void testIsNotAvailable_ifOffGlobally_app() { NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); mController.onResume(appRow, null, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0); + Settings.Secure.putInt(mContext.getContentResolver(), + NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF); - assertTrue(mController.isAvailable()); + assertFalse(mController.isAvailable()); } @Test @@ -137,7 +144,8 @@ public class BubblePreferenceControllerTest { NotificationChannel channel = mock(NotificationChannel.class); when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH); mController.onResume(appRow, channel, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0); + Settings.Secure.putInt(mContext.getContentResolver(), + NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF); assertFalse(mController.isAvailable()); } @@ -146,7 +154,7 @@ public class BubblePreferenceControllerTest { public void testIsAvailable_app() { NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); mController.onResume(appRow, null, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); assertTrue(mController.isAvailable()); } @@ -159,7 +167,7 @@ public class BubblePreferenceControllerTest { when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH); when(channel.getId()).thenReturn(DEFAULT_CHANNEL_ID); mController.onResume(appRow, channel, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); assertTrue(mController.isAvailable()); } @@ -171,7 +179,7 @@ public class BubblePreferenceControllerTest { NotificationChannel channel = mock(NotificationChannel.class); when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH); mController.onResume(appRow, channel, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); assertTrue(mController.isAvailable()); } @@ -183,7 +191,7 @@ public class BubblePreferenceControllerTest { NotificationChannel channel = mock(NotificationChannel.class); when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH); mController.onResume(appRow, channel, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); assertFalse(mController.isAvailable()); } @@ -203,6 +211,7 @@ public class BubblePreferenceControllerTest { @Test public void testUpdateState_channelNotBlockable() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); NotificationChannel channel = mock(NotificationChannel.class); when(channel.isImportanceLockedByCriticalDeviceFunction()).thenReturn(true); @@ -216,6 +225,7 @@ public class BubblePreferenceControllerTest { @Test public void testUpdateState_channel() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); NotificationChannel channel = mock(NotificationChannel.class); when(channel.canBubble()).thenReturn(true); @@ -235,6 +245,7 @@ public class BubblePreferenceControllerTest { @Test public void testUpdateState_app() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.label = "App!"; appRow.allowBubbles = true; @@ -256,7 +267,8 @@ public class BubblePreferenceControllerTest { @Test public void testUpdateState_app_offGlobally() { - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0); + Settings.Secure.putInt(mContext.getContentResolver(), + NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.label = "App!"; appRow.allowBubbles = true; @@ -269,6 +281,7 @@ public class BubblePreferenceControllerTest { @Test public void testOnPreferenceChange_on_channel() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.allowBubbles = true; NotificationChannel channel = @@ -288,6 +301,7 @@ public class BubblePreferenceControllerTest { @Test public void testOnPreferenceChange_off_channel() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.allowBubbles = true; NotificationChannel channel = @@ -307,6 +321,7 @@ public class BubblePreferenceControllerTest { @Test public void testOnPreferenceChange_on_app() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.allowBubbles = false; mController.onResume(appRow, null, null, null); @@ -324,6 +339,7 @@ public class BubblePreferenceControllerTest { @Test public void testOnPreferenceChange_off_app() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.allowBubbles = true; mController.onResume(appRow, null, null, null); @@ -341,7 +357,8 @@ public class BubblePreferenceControllerTest { @Test public void testOnPreferenceChange_on_app_offGlobally() { - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, + SYSTEM_WIDE_OFF); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.allowBubbles = false; mController.onResume(appRow, null, null, null); diff --git a/tests/robotests/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceControllerTest.java deleted file mode 100644 index 4bdb2cca72a..00000000000 --- a/tests/robotests/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceControllerTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.notification; - -import static android.provider.Settings.Secure.NOTIFICATION_BUBBLES; - -import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF; -import static com.android.settings.notification.BadgingNotificationPreferenceController.ON; - -import static com.google.common.truth.Truth.assertThat; - -import android.content.Context; -import android.provider.Settings; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; - -import androidx.preference.Preference; - -@RunWith(RobolectricTestRunner.class) -public class BubbleSummaryNotificationPreferenceControllerTest { - - private Context mContext; - - private BubbleSummaryNotificationPreferenceController mController; - private Preference mPreference; - - private static final String KEY_NOTIFICATION_BUBBLES = "notification_bubbles"; - - @Before - public void setUp() { - mContext = RuntimeEnvironment.application; - mController = new BubbleSummaryNotificationPreferenceController(mContext, - KEY_NOTIFICATION_BUBBLES); - mPreference = new Preference(RuntimeEnvironment.application); - } - - @Test - public void display_shouldDisplay() { - assertThat(mPreference.isVisible()).isTrue(); - } - - @Test - public void getSummary() { - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, OFF); - - assertThat(mController.getSummary()).isEqualTo("Off"); - - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, ON); - - assertThat(mController.getSummary()).isEqualTo("On"); - } -} diff --git a/tests/robotests/src/com/android/settings/notification/BubbleSummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BubbleSummaryPreferenceControllerTest.java index 0a0addcbab4..04c8e4e985b 100644 --- a/tests/robotests/src/com/android/settings/notification/BubbleSummaryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/BubbleSummaryPreferenceControllerTest.java @@ -22,6 +22,9 @@ import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.provider.Settings.Secure.NOTIFICATION_BUBBLES; +import static com.android.settings.notification.BubbleSummaryPreferenceController.SYSTEM_WIDE_OFF; +import static com.android.settings.notification.BubbleSummaryPreferenceController.SYSTEM_WIDE_ON; + import static junit.framework.TestCase.assertEquals; import static org.junit.Assert.assertFalse; @@ -95,7 +98,8 @@ public class BubbleSummaryPreferenceControllerTest { NotificationChannel channel = mock(NotificationChannel.class); when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH); mController.onResume(appRow, channel, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, + SYSTEM_WIDE_OFF); assertFalse(mController.isAvailable()); } @@ -104,18 +108,19 @@ public class BubbleSummaryPreferenceControllerTest { public void testIsAvailable_app() { NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); mController.onResume(appRow, null, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); assertTrue(mController.isAvailable()); } @Test - public void testIsAvailable_app_globalOff() { + public void testIsNotAvailable_app_globalOff() { NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); mController.onResume(appRow, null, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, + SYSTEM_WIDE_OFF); - assertTrue(mController.isAvailable()); + assertFalse(mController.isAvailable()); } @Test @@ -126,7 +131,7 @@ public class BubbleSummaryPreferenceControllerTest { when(channel.getImportance()).thenReturn(IMPORTANCE_HIGH); when(channel.getId()).thenReturn(DEFAULT_CHANNEL_ID); mController.onResume(appRow, channel, null, null); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); assertTrue(mController.isAvailable()); } @@ -144,16 +149,18 @@ public class BubbleSummaryPreferenceControllerTest { @Test public void testGetSummary() { + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); appRow.allowBubbles = true; mController.onResume(appRow, null, null, null); assertEquals("On", mController.getSummary()); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 0); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, + SYSTEM_WIDE_OFF); assertEquals("Off", mController.getSummary()); - Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, 1); + Settings.Secure.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON); appRow.allowBubbles = false; mController.onResume(appRow, null, null, null);