12c107daa97766e63948f8a257a8f77172349db4ekevinjm/*
22c107daa97766e63948f8a257a8f77172349db4ekevinjm * Copyright (C) 2017 The Android Open Source Project
32c107daa97766e63948f8a257a8f77172349db4ekevinjm *
42c107daa97766e63948f8a257a8f77172349db4ekevinjm * Licensed under the Apache License, Version 2.0 (the "License");
52c107daa97766e63948f8a257a8f77172349db4ekevinjm * you may not use this file except in compliance with the License.
62c107daa97766e63948f8a257a8f77172349db4ekevinjm * You may obtain a copy of the License at
72c107daa97766e63948f8a257a8f77172349db4ekevinjm *
82c107daa97766e63948f8a257a8f77172349db4ekevinjm *      http://www.apache.org/licenses/LICENSE-2.0
92c107daa97766e63948f8a257a8f77172349db4ekevinjm *
102c107daa97766e63948f8a257a8f77172349db4ekevinjm * Unless required by applicable law or agreed to in writing, software
112c107daa97766e63948f8a257a8f77172349db4ekevinjm * distributed under the License is distributed on an "AS IS" BASIS,
122c107daa97766e63948f8a257a8f77172349db4ekevinjm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132c107daa97766e63948f8a257a8f77172349db4ekevinjm * See the License for the specific language governing permissions and
142c107daa97766e63948f8a257a8f77172349db4ekevinjm * limitations under the License
152c107daa97766e63948f8a257a8f77172349db4ekevinjm */
162c107daa97766e63948f8a257a8f77172349db4ekevinjm
172c107daa97766e63948f8a257a8f77172349db4ekevinjmpackage com.android.car.list;
182c107daa97766e63948f8a257a8f77172349db4ekevinjm
192c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.content.Context;
202c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.support.v7.widget.RecyclerView;
212c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.view.LayoutInflater;
222c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.view.View;
232c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.view.ViewGroup;
242c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.widget.AdapterView;
252c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.widget.ArrayAdapter;
262c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.widget.Spinner;
272c107daa97766e63948f8a257a8f77172349db4ekevinjmimport android.widget.TextView;
282c107daa97766e63948f8a257a8f77172349db4ekevinjm
292c107daa97766e63948f8a257a8f77172349db4ekevinjmimport com.android.car.list.R;
302c107daa97766e63948f8a257a8f77172349db4ekevinjm
312c107daa97766e63948f8a257a8f77172349db4ekevinjmimport java.util.List;
322c107daa97766e63948f8a257a8f77172349db4ekevinjm
332c107daa97766e63948f8a257a8f77172349db4ekevinjm/**
342c107daa97766e63948f8a257a8f77172349db4ekevinjm * Contains logic for a line item represents a spinner.
352c107daa97766e63948f8a257a8f77172349db4ekevinjm */
362c107daa97766e63948f8a257a8f77172349db4ekevinjmpublic class SpinnerLineItem<T> extends TypedPagedListAdapter.LineItem<SpinnerLineItem.ViewHolder> {
372c107daa97766e63948f8a257a8f77172349db4ekevinjm    private final ArrayAdapter<T> mArrayAdapter;
382c107daa97766e63948f8a257a8f77172349db4ekevinjm    private final AdapterView.OnItemSelectedListener mOnItemSelectedListener;
392c107daa97766e63948f8a257a8f77172349db4ekevinjm    private final CharSequence mTitle;
402c107daa97766e63948f8a257a8f77172349db4ekevinjm    private final int mSelectedPosition;
412c107daa97766e63948f8a257a8f77172349db4ekevinjm
422c107daa97766e63948f8a257a8f77172349db4ekevinjm    /**
432c107daa97766e63948f8a257a8f77172349db4ekevinjm     * Constructs a new SpinnerLineItem
442c107daa97766e63948f8a257a8f77172349db4ekevinjm     *
452c107daa97766e63948f8a257a8f77172349db4ekevinjm     * @param context Android context
462c107daa97766e63948f8a257a8f77172349db4ekevinjm     * @param listener Listener for when an item in spinner is selected
472c107daa97766e63948f8a257a8f77172349db4ekevinjm     * @param items The List of items in the spinner
482c107daa97766e63948f8a257a8f77172349db4ekevinjm     * @param title The title next to the spinner
492c107daa97766e63948f8a257a8f77172349db4ekevinjm     * @param selectedPosition The starting position of the spinner
502c107daa97766e63948f8a257a8f77172349db4ekevinjm     */
512c107daa97766e63948f8a257a8f77172349db4ekevinjm    public SpinnerLineItem(
522c107daa97766e63948f8a257a8f77172349db4ekevinjm            Context context,
532c107daa97766e63948f8a257a8f77172349db4ekevinjm            AdapterView.OnItemSelectedListener listener,
542c107daa97766e63948f8a257a8f77172349db4ekevinjm            List<?> items,
552c107daa97766e63948f8a257a8f77172349db4ekevinjm            CharSequence title,
562c107daa97766e63948f8a257a8f77172349db4ekevinjm            int selectedPosition) {
572c107daa97766e63948f8a257a8f77172349db4ekevinjm        mArrayAdapter = new ArrayAdapter(context, R.layout.spinner, items);
582c107daa97766e63948f8a257a8f77172349db4ekevinjm        mArrayAdapter.setDropDownViewResource(R.layout.spinner_drop_down);
592c107daa97766e63948f8a257a8f77172349db4ekevinjm        mOnItemSelectedListener = listener;
602c107daa97766e63948f8a257a8f77172349db4ekevinjm        mTitle = title;
612c107daa97766e63948f8a257a8f77172349db4ekevinjm        mSelectedPosition = selectedPosition;
622c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
632c107daa97766e63948f8a257a8f77172349db4ekevinjm
642c107daa97766e63948f8a257a8f77172349db4ekevinjm    @Override
652c107daa97766e63948f8a257a8f77172349db4ekevinjm    public int getType() {
662c107daa97766e63948f8a257a8f77172349db4ekevinjm        return SPINNER_TYPE;
672c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
682c107daa97766e63948f8a257a8f77172349db4ekevinjm
692c107daa97766e63948f8a257a8f77172349db4ekevinjm    @Override
702c107daa97766e63948f8a257a8f77172349db4ekevinjm    public void bindViewHolder(ViewHolder viewHolder) {
712c107daa97766e63948f8a257a8f77172349db4ekevinjm        super.bindViewHolder(viewHolder);
722c107daa97766e63948f8a257a8f77172349db4ekevinjm        viewHolder.spinner.setAdapter(mArrayAdapter);
732c107daa97766e63948f8a257a8f77172349db4ekevinjm        viewHolder.spinner.setSelection(mSelectedPosition);
742c107daa97766e63948f8a257a8f77172349db4ekevinjm        viewHolder.spinner.setOnItemSelectedListener(mOnItemSelectedListener);
752c107daa97766e63948f8a257a8f77172349db4ekevinjm        viewHolder.titleView.setText(mTitle);
762c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
772c107daa97766e63948f8a257a8f77172349db4ekevinjm
782c107daa97766e63948f8a257a8f77172349db4ekevinjm    /**
792c107daa97766e63948f8a257a8f77172349db4ekevinjm     * ViewHolder that contains the elements of a SpinnerLineItem,
802c107daa97766e63948f8a257a8f77172349db4ekevinjm     * including the spinner and title.
812c107daa97766e63948f8a257a8f77172349db4ekevinjm     */
822c107daa97766e63948f8a257a8f77172349db4ekevinjm    public static class ViewHolder extends RecyclerView.ViewHolder {
832c107daa97766e63948f8a257a8f77172349db4ekevinjm        public final Spinner spinner;
842c107daa97766e63948f8a257a8f77172349db4ekevinjm        public final TextView titleView;
852c107daa97766e63948f8a257a8f77172349db4ekevinjm
862c107daa97766e63948f8a257a8f77172349db4ekevinjm        public ViewHolder(View view) {
872c107daa97766e63948f8a257a8f77172349db4ekevinjm            super(view);
882c107daa97766e63948f8a257a8f77172349db4ekevinjm            spinner = view.findViewById(R.id.spinner);
892c107daa97766e63948f8a257a8f77172349db4ekevinjm            titleView = view.findViewById(R.id.title);
902c107daa97766e63948f8a257a8f77172349db4ekevinjm        }
912c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
922c107daa97766e63948f8a257a8f77172349db4ekevinjm
932c107daa97766e63948f8a257a8f77172349db4ekevinjm    /**
942c107daa97766e63948f8a257a8f77172349db4ekevinjm     * Creates a ViewHolder that contains all the elements of a SpinnerLineItem
952c107daa97766e63948f8a257a8f77172349db4ekevinjm     */
962c107daa97766e63948f8a257a8f77172349db4ekevinjm    public static RecyclerView.ViewHolder createViewHolder(ViewGroup parent) {
972c107daa97766e63948f8a257a8f77172349db4ekevinjm        return new ViewHolder(LayoutInflater.from(parent.getContext())
982c107daa97766e63948f8a257a8f77172349db4ekevinjm                .inflate(R.layout.spinner_line_item, parent, false));
992c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
1002c107daa97766e63948f8a257a8f77172349db4ekevinjm
1012c107daa97766e63948f8a257a8f77172349db4ekevinjm    /**
1022c107daa97766e63948f8a257a8f77172349db4ekevinjm     * Returns the item in the given position
1032c107daa97766e63948f8a257a8f77172349db4ekevinjm     */
1042c107daa97766e63948f8a257a8f77172349db4ekevinjm    public T getItem(int position) {
1052c107daa97766e63948f8a257a8f77172349db4ekevinjm        return mArrayAdapter.getItem(position);
1062c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
1072c107daa97766e63948f8a257a8f77172349db4ekevinjm
1082c107daa97766e63948f8a257a8f77172349db4ekevinjm    @Override
1092c107daa97766e63948f8a257a8f77172349db4ekevinjm    public CharSequence getDesc() {
1102c107daa97766e63948f8a257a8f77172349db4ekevinjm        return null;
1112c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
1122c107daa97766e63948f8a257a8f77172349db4ekevinjm
1132c107daa97766e63948f8a257a8f77172349db4ekevinjm    @Override
1142c107daa97766e63948f8a257a8f77172349db4ekevinjm    public boolean isExpandable() {
1152c107daa97766e63948f8a257a8f77172349db4ekevinjm        return false;
1162c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
1172c107daa97766e63948f8a257a8f77172349db4ekevinjm
1182c107daa97766e63948f8a257a8f77172349db4ekevinjm    @Override
1192c107daa97766e63948f8a257a8f77172349db4ekevinjm    public boolean isClickable() {
1202c107daa97766e63948f8a257a8f77172349db4ekevinjm        return true;
1212c107daa97766e63948f8a257a8f77172349db4ekevinjm    }
1222c107daa97766e63948f8a257a8f77172349db4ekevinjm}
123