Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73c7ee11 authored by Matías Hernández's avatar Matías Hernández
Browse files

Don't disable "Done" button when it cannot be pressed

Show an error on tap instead. According to a11y guidelines this is preferrable.

Fixes: 369942776
Test: atest ZenModeEditDonePreferenceControllerTest
Flag: android.app.modes_ui
Change-Id: Ib5e47a4151c1515e5085a776d538a27c2ef41574
parent aad13d88
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@
package com.android.settings.notification.modes;

import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -32,6 +34,7 @@ class ZenModeEditDonePreferenceController extends AbstractZenModePreferenceContr

    private final Runnable mConfirmSave;
    @Nullable private Button mButton;
    private boolean mHasValidName;

    ZenModeEditDonePreferenceController(@NonNull Context context, @NonNull String key,
            Runnable confirmSave) {
@@ -46,15 +49,22 @@ class ZenModeEditDonePreferenceController extends AbstractZenModePreferenceContr
        if (pref != null) {
            mButton = pref.findViewById(R.id.done);
            if (mButton != null) {
                mButton.setOnClickListener(v -> mConfirmSave.run());
                mButton.setOnClickListener(this::onButtonClick);
            }
        }
    }

    private void onButtonClick(View view) {
        if (mHasValidName) {
            mConfirmSave.run();
        } else {
            Toast.makeText(mContext, R.string.zen_mode_edit_name_empty_error, Toast.LENGTH_SHORT)
                    .show();
        }
    }

    @Override
    void updateState(Preference preference, @NonNull ZenMode zenMode) {
        if (mButton != null) {
            mButton.setEnabled(!zenMode.getName().isBlank());
        }
        mHasValidName = !zenMode.getName().isBlank();
    }
}
+7 −12
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowToast;

@RunWith(RobolectricTestRunner.class)
@EnableFlags(Flags.FLAG_MODES_UI)
@@ -74,29 +75,23 @@ public class ZenModeEditDonePreferenceControllerTest {
    }

    @Test
    public void updateState_nameNonEmpty_buttonEnabled() {
    public void buttonClick_nameNonEmpty_buttonSaves() {
        ZenMode mode = new TestModeBuilder().setName("Such a nice name").build();

        mController.updateState(mPreference, mode);
        mButton.performClick();

        assertThat(mButton.isEnabled()).isTrue();
        verifyNoMoreInteractions(mConfirmSave);
        verify(mConfirmSave).run();
    }

    @Test
    public void updateState_nameEmpty_buttonDisabled() {
    public void buttonClick_nameEmpty_buttonErrors() {
        ZenMode aModeHasNoName = new TestModeBuilder().setName("").build();

        mController.updateState(mPreference, aModeHasNoName);

        assertThat(mButton.isEnabled()).isFalse();
        verifyNoMoreInteractions(mConfirmSave);
    }

    @Test
    public void onButtonClick_callsConfirmSave() {
        mButton.performClick();

        verify(mConfirmSave).run();
        verifyNoMoreInteractions(mConfirmSave);
        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo("Mode name cannot be empty");
    }
}