1  /*
2   * Copyright (C) 2016 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License
15   */
16  
17  package com.android.tv.settings.connectivity;
18  
19  import android.content.Context;
20  import android.util.AttributeSet;
21  
22  import androidx.preference.PreferenceCategory;
23  
24  public class CollapsibleCategory extends PreferenceCategory {
25  
26      private static final int COLLAPSED_ITEM_COUNT = 3;
27  
28      private boolean mCollapsed = true;
29  
CollapsibleCategory(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)30      public CollapsibleCategory(Context context, AttributeSet attrs, int defStyleAttr,
31              int defStyleRes) {
32          super(context, attrs, defStyleAttr, defStyleRes);
33      }
34  
CollapsibleCategory(Context context, AttributeSet attrs, int defStyleAttr)35      public CollapsibleCategory(Context context, AttributeSet attrs, int defStyleAttr) {
36          super(context, attrs, defStyleAttr);
37      }
38  
CollapsibleCategory(Context context, AttributeSet attrs)39      public CollapsibleCategory(Context context, AttributeSet attrs) {
40          super(context, attrs);
41      }
42  
CollapsibleCategory(Context context)43      public CollapsibleCategory(Context context) {
44          super(context);
45      }
46  
47      @Override
getPreferenceCount()48      public int getPreferenceCount() {
49          if (mCollapsed && shouldShowCollapsePref()) {
50              return COLLAPSED_ITEM_COUNT;
51          } else {
52              return super.getPreferenceCount();
53          }
54      }
55  
getRealPreferenceCount()56      public int getRealPreferenceCount() {
57          return super.getPreferenceCount();
58      }
59  
60      /**
61       * Only show the collapse preference if the list would be longer than the collapsed list
62       * plus the collapse preference itself.
63       *
64       * @return true if collapse pref should be shown
65       */
shouldShowCollapsePref()66      public boolean shouldShowCollapsePref() {
67          return super.getPreferenceCount() >= COLLAPSED_ITEM_COUNT + 1;
68      }
69  
isCollapsed()70      public boolean isCollapsed() {
71          return mCollapsed;
72      }
73  
setCollapsed(boolean collapsed)74      public void setCollapsed(boolean collapsed) {
75          mCollapsed = collapsed;
76          notifyHierarchyChanged();
77      }
78  }
79