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

Commit 7aabe039 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 25d75c0d 73c7ee11
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");
    }
}