16904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 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 14ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * limitations under the License. 156904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 166904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.preference; 186904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 196904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerimport android.content.Context; 20226a42d7fbfb54e2173e6e04f997d32848c4da62Louis Pullen-Freilichimport android.util.AttributeSet; 21226a42d7fbfb54e2173e6e04f997d32848c4da62Louis Pullen-Freilich 22ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.content.res.TypedArrayUtils; 239a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaverimport androidx.core.os.BuildCompat; 24ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.view.accessibility.AccessibilityNodeInfoCompat; 25ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat; 266904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 276904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler/** 2847b0720de4ee49c5197630ddfe96740ccd11415bAlan Viverette * Used to group {@link Preference} objects and provide a disabled title above 2947b0720de4ee49c5197630ddfe96740ccd11415bAlan Viverette * the group. 306904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * 316904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <div class="special reference"> 326904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <h3>Developer Guides</h3> 336904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * <p>For information about building a settings UI with Preferences, 346904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * read the <a href="{@docRoot}guide/topics/ui/settings.html">Settings</a> 356904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * guide.</p> 366904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler * </div> 376904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler */ 386904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantlerpublic class PreferenceCategory extends PreferenceGroup { 396904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler private static final String TAG = "PreferenceCategory"; 406904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 416904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public PreferenceCategory( 426904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 436904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler super(context, attrs, defStyleAttr, defStyleRes); 446904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 456904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 466904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public PreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) { 476904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, attrs, defStyleAttr, 0); 486904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 496904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 506904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public PreferenceCategory(Context context, AttributeSet attrs) { 513fadd62b614e4a69aefe920aac640bdb629e502eJason Monk this(context, attrs, TypedArrayUtils.getAttr(context, R.attr.preferenceCategoryStyle, 523fadd62b614e4a69aefe920aac640bdb629e502eJason Monk android.R.attr.preferenceCategoryStyle)); 536904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 546904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 556904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public PreferenceCategory(Context context) { 566904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler this(context, null); 576904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 586904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 596904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 606904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean isEnabled() { 616904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return false; 626904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 636904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler 646904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler @Override 656904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler public boolean shouldDisableDependents() { 666904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler return !super.isEnabled(); 676904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler } 681553af7799b550e0821a5e579db0bccf1f0835b8Steven Dao 691553af7799b550e0821a5e579db0bccf1f0835b8Steven Dao @Override 709a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver public void onBindViewHolder(PreferenceViewHolder holder) { 719a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver super.onBindViewHolder(holder); 729a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver if (BuildCompat.isAtLeastP()) { 739a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver holder.itemView.setAccessibilityHeading(true); 749a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver } 759a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver } 769a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver 779a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver @Override 781553af7799b550e0821a5e579db0bccf1f0835b8Steven Dao public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfoCompat info) { 791553af7799b550e0821a5e579db0bccf1f0835b8Steven Dao super.onInitializeAccessibilityNodeInfo(info); 809a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver if (!BuildCompat.isAtLeastP()) { 819a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver CollectionItemInfoCompat existingItemInfo = info.getCollectionItemInfo(); 829a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver if (existingItemInfo == null) { 839a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver return; 849a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver } 851553af7799b550e0821a5e579db0bccf1f0835b8Steven Dao 869a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver final CollectionItemInfoCompat newItemInfo = CollectionItemInfoCompat.obtain( 879a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver existingItemInfo.getRowIndex(), 889a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver existingItemInfo.getRowSpan(), 899a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver existingItemInfo.getColumnIndex(), 909a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver existingItemInfo.getColumnSpan(), 919a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver true /* heading */, 929a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver existingItemInfo.isSelected()); 939a2a31e702ceea78be56eb24e79b3661ecdf80bfPhil Weaver info.setCollectionItemInfo(newItemInfo); 941553af7799b550e0821a5e579db0bccf1f0835b8Steven Dao } 951553af7799b550e0821a5e579db0bccf1f0835b8Steven Dao } 966904f67c96a28a0e5966b4fb6d37a0ad5f136858Tony Mantler} 97