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