16904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/*
26904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* Copyright (C) 2015 The Android Open Source Project
36904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler*
46904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* Licensed under the Apache License, Version 2.0 (the "License");
56904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* you may not use this file except in compliance with the License.
66904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* You may obtain a copy of the License at
76904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler*
86904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler*      http://www.apache.org/licenses/LICENSE-2.0
96904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler*
106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* Unless required by applicable law or agreed to in writing, software
116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* distributed under the License is distributed on an "AS IS" BASIS,
126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* See the License for the specific language governing permissions and
146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler* limitations under the License
156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler*/
166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpackage android.support.v14.preference;
186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
198e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikasimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
208e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas
216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.Context;
226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.res.TypedArray;
23c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo;
2484765eaea7da18d0576db557959129e9d0db8e8cTony Mantlerimport android.support.v4.content.res.TypedArrayUtils;
253fadd62b614e4a69aefe920aac640bdb629e502eJason Monkimport android.support.v7.preference.AndroidResources;
266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.support.v7.preference.PreferenceViewHolder;
276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.support.v7.preference.TwoStatePreference;
286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.util.AttributeSet;
296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.view.View;
30c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslavimport android.view.accessibility.AccessibilityManager;
316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.Checkable;
326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.CompoundButton;
336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.Switch;
346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/**
366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * A {@link android.support.v7.preference.Preference} that provides a two-state toggleable option.
376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p>
386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This preference will store a boolean into the SharedPreferences.
396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler *
40929f27aab7ac7231f3734c988d5ee7201627d535Alan Viverette * @attr name android:summaryOff
41929f27aab7ac7231f3734c988d5ee7201627d535Alan Viverette * @attr name android:summaryOn
42929f27aab7ac7231f3734c988d5ee7201627d535Alan Viverette * @attr name android:switchTextOff
43929f27aab7ac7231f3734c988d5ee7201627d535Alan Viverette * @attr name android:switchTextOn
44929f27aab7ac7231f3734c988d5ee7201627d535Alan Viverette * @attr name android:disableDependentsState
456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */
466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpublic class SwitchPreference extends TwoStatePreference {
476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    private final Listener mListener = new Listener();
486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    // Switch text for on and off states
506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    private CharSequence mSwitchOn;
516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    private CharSequence mSwitchOff;
526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    private class Listener implements CompoundButton.OnCheckedChangeListener {
546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        @Override
556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler            if (!callChangeListener(isChecked)) {
576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler                // Listener didn't like it, change it back.
586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler                // CompoundButton will make sure we don't recurse.
596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler                buttonView.setChecked(!isChecked);
606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler                return;
616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler            }
626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler            SwitchPreference.this.setChecked(isChecked);
646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        }
656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Construct a new SwitchPreference with the given style options.
696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param context The Context that will style this preference
716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param attrs Style attributes that differ from the default
726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param defStyleAttr An attribute in the current theme that contains a
736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *        reference to a style resource that supplies default values for
746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *        the view. Can be 0 to not look for defaults.
756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param defStyleRes A resource identifier of a style resource that
766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *        supplies default values for the view, used only if
776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *        to not look for defaults.
796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler            int defStyleRes) {
826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        super(context, attrs, defStyleAttr, defStyleRes);
836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        TypedArray a = context.obtainStyledAttributes(attrs,
856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler                R.styleable.SwitchPreference, defStyleAttr, defStyleRes);
8684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler
8784765eaea7da18d0576db557959129e9d0db8e8cTony Mantler        setSummaryOn(TypedArrayUtils.getString(a, R.styleable.SwitchPreference_summaryOn,
8884765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_android_summaryOn));
8984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler
9084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler        setSummaryOff(TypedArrayUtils.getString(a, R.styleable.SwitchPreference_summaryOff,
9184765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_android_summaryOff));
9284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler
9384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler        setSwitchTextOn(TypedArrayUtils.getString(a,
9484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_switchTextOn,
9584765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_android_switchTextOn));
9684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler
9784765eaea7da18d0576db557959129e9d0db8e8cTony Mantler        setSwitchTextOff(TypedArrayUtils.getString(a,
9884765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_switchTextOff,
9984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_android_switchTextOff));
10084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler
10184765eaea7da18d0576db557959129e9d0db8e8cTony Mantler        setDisableDependentsState(TypedArrayUtils.getBoolean(a,
10284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_disableDependentsState,
10384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler                R.styleable.SwitchPreference_android_disableDependentsState, false));
10484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler
1056904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        a.recycle();
1066904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1076904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1086904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1096904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Construct a new SwitchPreference with the given style options.
1106904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
1116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param context The Context that will style this preference
1126904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param attrs Style attributes that differ from the default
1136904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param defStyleAttr An attribute in the current theme that contains a
1146904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *        reference to a style resource that supplies default values for
1156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *        the view. Can be 0 to not look for defaults.
1166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1176904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
1186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        this(context, attrs, defStyleAttr, 0);
1196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1216904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Construct a new SwitchPreference with the given style options.
1236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
1246904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param context The Context that will style this preference
1256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param attrs Style attributes that differ from the default
1266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public SwitchPreference(Context context, AttributeSet attrs) {
1286759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski        this(context, attrs, TypedArrayUtils.getAttr(context,
1296759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski                android.support.v7.preference.R.attr.switchPreferenceStyle,
1303fadd62b614e4a69aefe920aac640bdb629e502eJason Monk                android.R.attr.switchPreferenceStyle));
1316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Construct a new SwitchPreference with default style options.
1356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
1366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param context The Context that will style this preference
1376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public SwitchPreference(Context context) {
1396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        this(context, null);
1406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    @Override
143671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler    public void onBindViewHolder(PreferenceViewHolder holder) {
1446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        super.onBindViewHolder(holder);
1453fadd62b614e4a69aefe920aac640bdb629e502eJason Monk        View switchView = holder.findViewById(AndroidResources.ANDROID_R_SWITCH_WIDGET);
146c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        syncSwitchView(switchView);
1476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        syncSummaryView(holder);
1486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1516904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Set the text displayed on the switch widget in the on state.
1526904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * This should be a very short string; one word if possible.
1536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
1546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param onText Text to display in the on state
1556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public void setSwitchTextOn(CharSequence onText) {
1576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        mSwitchOn = onText;
1586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        notifyChanged();
1596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Set the text displayed on the switch widget in the off state.
1636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * This should be a very short string; one word if possible.
1646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
1656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param offText Text to display in the off state
1666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public void setSwitchTextOff(CharSequence offText) {
1686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        mSwitchOff = offText;
1696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        notifyChanged();
1706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1726904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Set the text displayed on the switch widget in the on state.
1746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * This should be a very short string; one word if possible.
1756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
1766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param resId The text as a string resource ID
1776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public void setSwitchTextOn(int resId) {
1796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        setSwitchTextOn(getContext().getString(resId));
1806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1826904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1836904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * Set the text displayed on the switch widget in the off state.
1846904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * This should be a very short string; one word if possible.
1856904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     *
1866904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @param resId The text as a string resource ID
1876904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1886904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public void setSwitchTextOff(int resId) {
1896904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        setSwitchTextOff(getContext().getString(resId));
1906904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1916904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1926904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
1936904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @return The text that will be displayed on the switch widget in the on state
1946904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
1956904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public CharSequence getSwitchTextOn() {
1966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        return mSwitchOn;
1976904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
1986904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler
1996904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    /**
2006904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     * @return The text that will be displayed on the switch widget in the off state
2016904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler     */
2026904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    public CharSequence getSwitchTextOff() {
2036904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler        return mSwitchOff;
2046904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler    }
205c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav
206c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    /**
207c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav     * @hide
208c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav     */
2098e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas    @RestrictTo(LIBRARY_GROUP)
210c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    @Override
211c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    protected void performClick(View view) {
212c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        super.performClick(view);
213c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        syncViewIfAccessibilityEnabled(view);
214c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    }
215c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav
216c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav
217c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    private void syncViewIfAccessibilityEnabled(View view) {
218c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        AccessibilityManager accessibilityManager = (AccessibilityManager)
219c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav                getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
220c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        if (!accessibilityManager.isEnabled()) {
221c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            return;
222c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        }
223c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav
22490d56ef3b34db86c9b775e910db38b6b81a170cdTony Mantler        View switchView = view.findViewById(AndroidResources.ANDROID_R_SWITCH_WIDGET);
225c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        syncSwitchView(switchView);
226c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav
227c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        View summaryView = view.findViewById(android.R.id.summary);
228c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        syncSummaryView(summaryView);
229c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    }
230c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav
231c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    private void syncSwitchView(View view) {
232c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        if (view instanceof Switch) {
233c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            final Switch switchView = (Switch) view;
234c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            switchView.setOnCheckedChangeListener(null);
235c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        }
236c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        if (view instanceof Checkable) {
237c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            ((Checkable) view).setChecked(mChecked);
238c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        }
239c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        if (view instanceof Switch) {
240c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            final Switch switchView = (Switch) view;
241c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            switchView.setTextOn(mSwitchOn);
242c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            switchView.setTextOff(mSwitchOff);
243c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav            switchView.setOnCheckedChangeListener(mListener);
244c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav        }
245c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav    }
2466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler}
247