1bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler/*
2bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * Copyright (C) 2015 The Android Open Source Project
3bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler *
4bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
5bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * you may not use this file except in compliance with the License.
6bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * You may obtain a copy of the License at
7bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler *
8bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
9bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler *
10bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * Unless required by applicable law or agreed to in writing, software
11bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
12bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * See the License for the specific language governing permissions and
14bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler * limitations under the License
15bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler */
16bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
17bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerpackage android.support.v17.preference;
18bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
19bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.os.Bundle;
20bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.support.annotation.NonNull;
21bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.support.annotation.Nullable;
22bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.support.v14.preference.MultiSelectListPreference;
23bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.support.v17.leanback.widget.VerticalGridView;
24bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.support.v7.preference.DialogPreference;
25bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.support.v7.preference.ListPreference;
26bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.support.v7.widget.RecyclerView;
27bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.text.TextUtils;
28bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.view.LayoutInflater;
29bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.view.View;
30bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.view.ViewGroup;
31bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.widget.Checkable;
32bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport android.widget.TextView;
33bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
34bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport java.util.HashSet;
35bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerimport java.util.Set;
36bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
37bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantlerpublic class LeanbackListPreferenceDialogFragment extends LeanbackPreferenceDialogFragment {
38bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
39bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public static LeanbackListPreferenceDialogFragment newInstanceSingle(String key) {
40bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final Bundle args = new Bundle(5);
41bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        args.putString(ARG_KEY, key);
42bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
43bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final LeanbackListPreferenceDialogFragment
44bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                fragment = new LeanbackListPreferenceDialogFragment();
45bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        fragment.setArguments(args);
46bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
47bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        return fragment;
48bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
49bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
50bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public static LeanbackListPreferenceDialogFragment newInstanceMulti(String key) {
51bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final Bundle args = new Bundle(5);
52bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        args.putString(ARG_KEY, key);
53bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
54bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final LeanbackListPreferenceDialogFragment
55bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                fragment = new LeanbackListPreferenceDialogFragment();
56bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        fragment.setArguments(args);
57bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
58bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        return fragment;
59bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
60bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
61bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    @Override
62bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public void onCreate(Bundle savedInstanceState) {
63bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        super.onCreate(savedInstanceState);
64bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
65bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final DialogPreference preference = getPreference();
66bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        if (!(preference instanceof ListPreference) &&
67bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                !(preference instanceof MultiSelectListPreference)) {
68bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            throw new IllegalArgumentException("Preference must be a ListPreference or " +
69bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                    "MultiSelectListPreference");
70bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
71bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
72bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
73bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    @Override
74bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public @Nullable View onCreateView(LayoutInflater inflater, ViewGroup container,
75bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            Bundle savedInstanceState) {
76bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final View view = inflater.inflate(R.layout.leanback_list_preference_fragment, container,
77bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                false);
78bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final VerticalGridView verticalGridView =
79bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                (VerticalGridView) view.findViewById(android.R.id.list);
80bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
81bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        verticalGridView.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_BOTH_EDGE);
82bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        verticalGridView.setFocusScrollStrategy(VerticalGridView.FOCUS_SCROLL_ALIGNED);
83bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        verticalGridView.setAdapter(onCreateAdapter());
8442dc570def1b218404c5199b161a3ea90250af88Tony Mantler        verticalGridView.requestFocus();
85bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
86bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final DialogPreference preference = getPreference();
87bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final CharSequence title = preference.getDialogTitle();
88bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        if (!TextUtils.isEmpty(title)) {
89bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final TextView titleView = (TextView) view.findViewById(R.id.decor_title);
90bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            titleView.setText(title);
91bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
92bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
93bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final CharSequence message = preference.getDialogMessage();
94bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        if (!TextUtils.isEmpty(message)) {
95bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final TextView messageView = (TextView) view.findViewById(android.R.id.message);
96bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            messageView.setVisibility(View.VISIBLE);
97bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            messageView.setText(message);
98bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
99bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
100bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        return view;
101bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
102bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
103bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public RecyclerView.Adapter onCreateAdapter() {
104bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        final DialogPreference preference = getPreference();
105bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        if (preference instanceof MultiSelectListPreference) {
106bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final MultiSelectListPreference pref = (MultiSelectListPreference) preference;
107bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final CharSequence[] entries = pref.getEntries();
108bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final CharSequence[] entryValues = pref.getEntryValues();
109bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final Set<String> initialSelections = pref.getValues();
110bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return new AdapterMulti(entries, entryValues, initialSelections);
111bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        } else if (preference instanceof ListPreference) {
112bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final ListPreference pref = (ListPreference) preference;
113bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final CharSequence[] entries = pref.getEntries();
114bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final CharSequence[] entryValues = pref.getEntryValues();
115bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final String initialSelection = pref.getValue();
116bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return new AdapterSingle(entries, entryValues, initialSelection);
117bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        } else {
118bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            throw new IllegalStateException("Unknown preference type");
119bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
120bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
121bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
122bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public class AdapterSingle extends RecyclerView.Adapter<ViewHolder>
123bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            implements ViewHolder.OnItemClickListener {
124bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
125bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final CharSequence[] mEntries;
126bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final CharSequence[] mEntryValues;
127bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private CharSequence mSelectedValue;
128bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
129bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public AdapterSingle(CharSequence[] entries, CharSequence[] entryValues,
130bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                CharSequence selectedValue) {
131bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mEntries = entries;
132bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mEntryValues = entryValues;
133bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mSelectedValue = selectedValue;
134bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
135bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
136bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
137bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
138bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
139bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final View view = inflater.inflate(R.layout.leanback_list_preference_item_single,
140bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                    parent, false);
141bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return new ViewHolder(view, this);
142bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
143bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
144bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
145bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public void onBindViewHolder(ViewHolder holder, int position) {
146bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            holder.getWidgetView().setChecked(mEntryValues[position].equals(mSelectedValue));
147bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            holder.getTitleView().setText(mEntries[position]);
148bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
149bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
150bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
151bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public int getItemCount() {
152bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return mEntries.length;
153bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
154bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
155bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
156bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public void onItemClick(ViewHolder viewHolder) {
157bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final int index = viewHolder.getAdapterPosition();
158bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final CharSequence entry = mEntryValues[index];
159bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mSelectedValue = entry;
160bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            ((ListPreference) getPreference()).setValue(entry.toString());
161bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            getFragmentManager().popBackStack();
162bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            notifyDataSetChanged();
163bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
164bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
165bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
166bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public class AdapterMulti extends RecyclerView.Adapter<ViewHolder>
167bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            implements ViewHolder.OnItemClickListener {
168bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
169bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final CharSequence[] mEntries;
170bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final CharSequence[] mEntryValues;
171bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final Set<String> mSelections;
172bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
173bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public AdapterMulti(CharSequence[] entries, CharSequence[] entryValues,
174bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                Set<String> initialSelections) {
175bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mEntries = entries;
176bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mEntryValues = entryValues;
177bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mSelections = new HashSet<>(initialSelections);
178bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
179bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
180bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
181bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
182bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
183bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final View view = inflater.inflate(R.layout.leanback_list_preference_item_multi, parent,
184bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                    false);
185bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return new ViewHolder(view, this);
186bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
187bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
188bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
189bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public void onBindViewHolder(ViewHolder holder, int position) {
190bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            holder.getWidgetView().setChecked(
191bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                    mSelections.contains(mEntryValues[position].toString()));
192bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            holder.getTitleView().setText(mEntries[position]);
193bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
194bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
195bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
196bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public int getItemCount() {
197bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return mEntries.length;
198bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
199bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
200bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
201bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public void onItemClick(ViewHolder viewHolder) {
202bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final int index = viewHolder.getAdapterPosition();
203bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            final String entry = mEntryValues[index].toString();
204bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            if (mSelections.contains(entry)) {
205bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                mSelections.remove(entry);
206bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            } else {
207bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler                mSelections.add(entry);
208bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            }
209bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            ((MultiSelectListPreference) getPreference()).setValues(mSelections);
210bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            notifyDataSetChanged();
211bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
212bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
213bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
214bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
215bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
216bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public interface OnItemClickListener {
217bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            void onItemClick(ViewHolder viewHolder);
218bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
219bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
220bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final Checkable mWidgetView;
221bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final TextView mTitleView;
222bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final ViewGroup mContainer;
223bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        private final OnItemClickListener mListener;
224bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
225bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public ViewHolder(@NonNull View view, @NonNull OnItemClickListener listener) {
226bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            super(view);
227bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mWidgetView = (Checkable) view.findViewById(R.id.button);
228bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mContainer = (ViewGroup) view.findViewById(R.id.container);
229bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mTitleView = (TextView) view.findViewById(android.R.id.title);
230bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mContainer.setOnClickListener(this);
231bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mListener = listener;
232bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
233bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
234bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public Checkable getWidgetView() {
235bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return mWidgetView;
236bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
237bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
238bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public TextView getTitleView() {
239bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return mTitleView;
240bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
241bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
242bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public ViewGroup getContainer() {
243bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            return mContainer;
244bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
245bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler
246bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        @Override
247bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        public void onClick(View v) {
248bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler            mListener.onItemClick(this);
249bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler        }
250bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler    }
251bd4cbab53c68c95f62407cf872b7155a520748a0Tony Mantler}
252