From 69ce43462e24b46ab187f9cabc2863e37cadbf86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Hern=C3=A1ndez?= Date: Fri, 26 Jul 2024 14:45:47 +0200 Subject: [PATCH] Allow turning off currently active modes Even if they don't allow manual invocation. The button will disappear afterwards -- maybe not perfect but good enough. Fixes: 355613076 Test: atest ZenModeButtonPreferenceControllerTest Flag: android.app.modes_ui Change-Id: I36cc96f7da78266be1a03e947304fc8e600899de --- .../modes/ZenModeButtonPreferenceController.java | 10 +++++++--- .../modes/ZenModeButtonPreferenceControllerTest.java | 12 ++++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java index 6b84414e0d9..998b596e321 100644 --- a/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java @@ -16,6 +16,8 @@ package com.android.settings.notification.modes; +import static com.google.common.base.Preconditions.checkNotNull; + import android.annotation.NonNull; import android.content.Context; import android.provider.Settings; @@ -36,8 +38,8 @@ class ZenModeButtonPreferenceController extends AbstractZenModePreferenceControl private static final String TAG = "ZenModeButtonPrefController"; private Button mZenButton; - private Fragment mParent; - private ManualDurationHelper mDurationHelper; + private final Fragment mParent; + private final ManualDurationHelper mDurationHelper; ZenModeButtonPreferenceController(Context context, String key, Fragment parent, ZenModesBackend backend) { @@ -48,7 +50,8 @@ class ZenModeButtonPreferenceController extends AbstractZenModePreferenceControl @Override public boolean isAvailable(ZenMode zenMode) { - return zenMode.getRule().isManualInvocationAllowed() && zenMode.getRule().isEnabled(); + return zenMode.isEnabled() + && (zenMode.isActive() || zenMode.getRule().isManualInvocationAllowed()); } @Override @@ -57,6 +60,7 @@ class ZenModeButtonPreferenceController extends AbstractZenModePreferenceControl mZenButton = ((LayoutPreference) preference).findViewById(R.id.activate_mode); } mZenButton.setOnClickListener(v -> { + checkNotNull(mBackend, "Backend not available!"); if (zenMode.isActive()) { mBackend.deactivateMode(zenMode); } else { diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeButtonPreferenceControllerTest.java index 368b923ef98..47078b08697 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeButtonPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeButtonPreferenceControllerTest.java @@ -89,6 +89,16 @@ public final class ZenModeButtonPreferenceControllerTest { assertThat(mController.isAvailable()).isFalse(); } + @Test + public void isAvailable_ifModeActiveEvenIfAppOptsOut() { + ZenMode zenMode = new TestModeBuilder() + .setManualInvocationAllowed(false) + .setActive(true) + .build(); + mController.setZenMode(zenMode); + assertThat(mController.isAvailable()).isTrue(); + } + @Test public void isAvailable_notIfModeDisabled() { ZenMode zenMode = new TestModeBuilder() @@ -119,7 +129,6 @@ public final class ZenModeButtonPreferenceControllerTest { LayoutPreference pref = mock(LayoutPreference.class); when(pref.findViewById(anyInt())).thenReturn(button); ZenMode zenMode = new TestModeBuilder() - .setManualInvocationAllowed(true) .setActive(true) .build(); @@ -151,7 +160,6 @@ public final class ZenModeButtonPreferenceControllerTest { LayoutPreference pref = mock(LayoutPreference.class); when(pref.findViewById(anyInt())).thenReturn(button); ZenMode zenMode = new TestModeBuilder() - .setManualInvocationAllowed(true) .setActive(true) .build();