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