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

Commit 996a6385 authored by Alan Viverette's avatar Alan Viverette
Browse files

Fix accessibility events emitted from TwoStatePreference

Removes redundant and conflicting events emitted from check and switch
preferences. Sends VIEW_CLICKED accessibility events from AdapterView
rows after calling their on click listeners, which ensures data is
consistent.

BUG: 16961152
Change-Id: I4b57bceec6830d775c2da57226b8ee482242caf7
parent 02aa75a0
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -66,7 +66,6 @@ public class CheckBoxPreference extends TwoStatePreference {
        View checkboxView = view.findViewById(com.android.internal.R.id.checkbox);
        if (checkboxView != null && checkboxView instanceof Checkable) {
            ((Checkable) checkboxView).setChecked(mChecked);
            sendAccessibilityEvent(checkboxView);
        }

        syncSummaryView(view);
+0 −2
Original line number Diff line number Diff line
@@ -130,8 +130,6 @@ public class SwitchPreference extends TwoStatePreference {

            ((Checkable) checkableView).setChecked(mChecked);

            sendAccessibilityEvent(checkableView);

            if (checkableView instanceof Switch) {
                final Switch switchView = (Switch) checkableView;
                switchView.setTextOn(mSwitchOn);
+3 −26
Original line number Diff line number Diff line
@@ -24,8 +24,6 @@ import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.widget.TextView;

/**
@@ -39,7 +37,6 @@ public abstract class TwoStatePreference extends Preference {
    private CharSequence mSummaryOff;
    boolean mChecked;
    private boolean mCheckedSet;
    private boolean mSendClickAccessibilityEvent;
    private boolean mDisableDependentsState;

    public TwoStatePreference(
@@ -63,16 +60,11 @@ public abstract class TwoStatePreference extends Preference {
    protected void onClick() {
        super.onClick();

        boolean newValue = !isChecked();

        mSendClickAccessibilityEvent = true;

        if (!callChangeListener(newValue)) {
            return;
        }

        final boolean newValue = !isChecked();
        if (callChangeListener(newValue)) {
            setChecked(newValue);
        }
    }

    /**
     * Sets the checked state and saves it to the {@link SharedPreferences}.
@@ -196,21 +188,6 @@ public abstract class TwoStatePreference extends Preference {
                : (Boolean) defaultValue);
    }

    void sendAccessibilityEvent(View view) {
        // Since the view is still not attached we create, populate,
        // and send the event directly since we do not know when it
        // will be attached and posting commands is not as clean.
        AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(getContext());
        if (mSendClickAccessibilityEvent && accessibilityManager.isEnabled()) {
            AccessibilityEvent event = AccessibilityEvent.obtain();
            event.setEventType(AccessibilityEvent.TYPE_VIEW_CLICKED);
            view.onInitializeAccessibilityEvent(event);
            view.dispatchPopulateAccessibilityEvent(event);
            accessibilityManager.sendAccessibilityEvent(event);
        }
        mSendClickAccessibilityEvent = false;
    }

    /**
     * Sync a summary view contained within view's subhierarchy with the correct summary text.
     * @param view View where a summary should be located
+1 −1
Original line number Diff line number Diff line
@@ -297,10 +297,10 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
    public boolean performItemClick(View view, int position, long id) {
        if (mOnItemClickListener != null) {
            playSoundEffect(SoundEffectConstants.CLICK);
            mOnItemClickListener.onItemClick(this, view, position, id);
            if (view != null) {
                view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
            }
            mOnItemClickListener.onItemClick(this, view, position, id);
            return true;
        }