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

Commit 258fd7c0 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Explicitly request focus after button pressed

Don't use focusableInTouchMode, it was causing focus/clickability issues
when the device wasn't in touch mode.

Test: manually tap button (tap works first try)
Test: turn on talkback and toggle buttons, also try toggling QS tile
while on the Settings page - doesn't reannounce state
Fixes: 158717450
Change-Id: I785d0200dd61235aa3308a8588f9ee998e7cb6e5
parent ae1ed250
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@
    <Button
        android:id="@+id/night_display_turn_on_button"
        style="@style/ActionPrimaryButton"
        android:focusableInTouchMode="true"
        android:layout_marginStart="@dimen/screen_margin_sides"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
@@ -33,7 +32,6 @@
    <Button
        android:id="@+id/night_display_turn_off_button"
        style="@style/ActionSecondaryButton"
        android:focusableInTouchMode="true"
        android:layout_marginStart="@dimen/screen_margin_sides"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
+0 −2
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@
        android:layout_marginTop="@dimen/zen_mode_settings_button_margin_vertical"
        android:layout_marginBottom="@dimen/zen_mode_settings_button_margin_vertical"
        android:text="@string/zen_mode_button_turn_on"
        android:focusableInTouchMode="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

@@ -50,7 +49,6 @@
        android:layout_marginTop="@dimen/zen_mode_settings_button_margin_vertical"
        android:layout_marginBottom="@dimen/zen_mode_settings_button_margin_vertical"
        android:text="@string/zen_mode_button_turn_off"
        android:focusableInTouchMode="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

+9 −13
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.display;

import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;

import android.content.Context;
import android.hardware.display.ColorDisplayManager;
import android.text.TextUtils;
@@ -39,20 +41,16 @@ public class NightDisplayActivationPreferenceController extends TogglePreference
    private NightDisplayTimeFormatter mTimeFormatter;
    private LayoutPreference mPreference;

    // Night light can also be toggled from QS. If night light wasn't toggled by this preference,
    // don't requestFocus
    private boolean mButtonTriggered = false;
    private Button mTurnOffButton;
    private Button mTurnOnButton;

    private final OnClickListener mListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            mButtonTriggered = true;
            mMetricsFeatureProvider.logClickedPreference(mPreference, getMetricsCategory());
            mColorDisplayManager.setNightDisplayActivated(
                    !mColorDisplayManager.isNightDisplayActivated());
            updateStateInternal();
            updateStateInternal(true);
        }
    };

@@ -93,7 +91,7 @@ public class NightDisplayActivationPreferenceController extends TogglePreference

    @Override
    public final void updateState(Preference preference) {
        updateStateInternal();
        updateStateInternal(false);
    }

    /** FOR SLICES */
@@ -113,7 +111,7 @@ public class NightDisplayActivationPreferenceController extends TogglePreference
        return mTimeFormatter.getAutoModeSummary(mContext, mColorDisplayManager);
    }

    private void updateStateInternal() {
    private void updateStateInternal(boolean selfChanged) {
        if (mTurnOnButton == null || mTurnOffButton == null) {
            return;
        }
@@ -143,17 +141,15 @@ public class NightDisplayActivationPreferenceController extends TogglePreference
            mTurnOnButton.setVisibility(View.GONE);
            mTurnOffButton.setVisibility(View.VISIBLE);
            mTurnOffButton.setText(buttonText);
            if (mButtonTriggered) {
                mButtonTriggered = false;
                mTurnOffButton.requestFocus();
            if (selfChanged) {
                mTurnOffButton.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
            }
        } else {
            mTurnOnButton.setVisibility(View.VISIBLE);
            mTurnOffButton.setVisibility(View.GONE);
            mTurnOnButton.setText(buttonText);
            if (mButtonTriggered) {
                mButtonTriggered = false;
                mTurnOnButton.requestFocus();
            if (selfChanged) {
                mTurnOnButton.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
            }
        }
    }
+13 −10
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.notification.zen;

import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
@@ -40,8 +42,9 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
    private static final String TAG = "EnableZenModeButton";
    private final FragmentManager mFragment;

    // DND can also be toggled from QS. If DND wasn't toggled by this preference, don't requestFocus
    private boolean mButtonTriggered = false;
    // DND can also be toggled from QS. If DND wasn't toggled by this preference, don't
    // reroute focus.
    private boolean mRefocusButton = false;
    private Button mZenButtonOn;
    private Button mZenButtonOff;

@@ -75,7 +78,7 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
            mZenButtonOff = ((LayoutPreference) preference)
                    .findViewById(R.id.zen_mode_settings_turn_off_button);
            mZenButtonOff.setOnClickListener(v -> {
                mButtonTriggered = true;
                mRefocusButton = true;
                writeMetrics(preference, false);
                mBackend.setZenMode(Settings.Global.ZEN_MODE_OFF);
            });
@@ -91,9 +94,9 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
            case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
                mZenButtonOff.setVisibility(View.VISIBLE);
                mZenButtonOn.setVisibility(View.GONE);
                if (mButtonTriggered) {
                    mButtonTriggered = false;
                    mZenButtonOff.requestFocus();
                if (mRefocusButton) {
                    mRefocusButton = false;
                    mZenButtonOff.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
                }
                break;
            case Settings.Global.ZEN_MODE_OFF:
@@ -101,16 +104,16 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
                mZenButtonOff.setVisibility(View.GONE);
                updateZenButtonOnClickListener(preference);
                mZenButtonOn.setVisibility(View.VISIBLE);
                if (mButtonTriggered) {
                    mButtonTriggered = false;
                    mZenButtonOn.requestFocus();
                if (mRefocusButton) {
                    mRefocusButton = false;
                    mZenButtonOn.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
                }
        }
    }

    private void updateZenButtonOnClickListener(Preference preference) {
        mZenButtonOn.setOnClickListener(v -> {
            mButtonTriggered = true;
            mRefocusButton = true;
            writeMetrics(preference, true);
            int zenDuration = getZenDuration();
            switch (zenDuration) {