CheckBoxPreference.java revision c67647d83261aad33d42309c52aa75e05ea9daf7
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.v7.preference; 186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.Context; 206904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.res.TypedArray; 2184765eaea7da18d0576db557959129e9d0db8e8cTony Mantlerimport android.support.v4.content.res.TypedArrayUtils; 226904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.util.AttributeSet; 236904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.view.View; 24c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslavimport android.view.accessibility.AccessibilityManager; 256904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.widget.Checkable; 266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/** 286904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * A {@link Preference} that provides checkbox widget 296904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * functionality. 306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p> 316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * This preference will store a boolean into the SharedPreferences. 326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#CheckBoxPreference_summaryOff 346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#CheckBoxPreference_summaryOn 356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * @attr ref android.R.styleable#CheckBoxPreference_disableDependentsState 366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpublic class CheckBoxPreference extends TwoStatePreference { 386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) { 406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, defStyleAttr, 0); 416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CheckBoxPreference( 446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(context, attrs, defStyleAttr, defStyleRes); 466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler final TypedArray a = context.obtainStyledAttributes(attrs, 486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler R.styleable.CheckBoxPreference, defStyleAttr, defStyleRes); 4984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 5084765eaea7da18d0576db557959129e9d0db8e8cTony Mantler setSummaryOn(TypedArrayUtils.getString(a, R.styleable.CheckBoxPreference_summaryOn, 5184765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.CheckBoxPreference_android_summaryOn)); 5284765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 5384765eaea7da18d0576db557959129e9d0db8e8cTony Mantler setSummaryOff(TypedArrayUtils.getString(a, R.styleable.CheckBoxPreference_summaryOff, 5484765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.CheckBoxPreference_android_summaryOff)); 5584765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 5684765eaea7da18d0576db557959129e9d0db8e8cTony Mantler setDisableDependentsState(TypedArrayUtils.getBoolean(a, 5784765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.CheckBoxPreference_disableDependentsState, 5884765eaea7da18d0576db557959129e9d0db8e8cTony Mantler R.styleable.CheckBoxPreference_android_disableDependentsState, false)); 5984765eaea7da18d0576db557959129e9d0db8e8cTony Mantler 606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler a.recycle(); 616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CheckBoxPreference(Context context, AttributeSet attrs) { 646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, R.attr.checkBoxPreferenceStyle); 656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public CheckBoxPreference(Context context) { 686904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, null); 696904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 706904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 716904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 72671d9d6db5c64e6c8392e56fb84a181ca0550469Tony Mantler public void onBindViewHolder(PreferenceViewHolder holder) { 736904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super.onBindViewHolder(holder); 746904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 756904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler View checkboxView = holder.findViewById(R.id.checkbox); 766904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler if (checkboxView != null && checkboxView instanceof Checkable) { 776904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler ((Checkable) checkboxView).setChecked(mChecked); 786904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 796904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 806904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler syncSummaryView(holder); 816904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 82c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav 83c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav /** 84c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav * @hide 85c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav */ 86c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav @Override 87c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav protected void performClick(View view) { 88c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav super.performClick(view); 89c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav syncViewIfAccessibilityEnabled(view); 90c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 91c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav 92c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav private void syncViewIfAccessibilityEnabled(View view) { 93c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav AccessibilityManager accessibilityManager = (AccessibilityManager) 94c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); 95c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (!accessibilityManager.isEnabled()) { 96c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav return; 97c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 98c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav 99c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav View checkboxView = view.findViewById(R.id.checkbox); 100c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav syncCheckboxView(checkboxView); 101c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav 102c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav View summaryView = view.findViewById(android.R.id.summary); 103c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav syncSummaryView(summaryView); 104c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 105c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav 106c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav private void syncCheckboxView(View view) { 107c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav if (view instanceof Checkable) { 108c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav ((Checkable) view).setChecked(mChecked); 109c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 110c67647d83261aad33d42309c52aa75e05ea9daf7Svetoslav } 1116904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler} 112