1b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue/* 2b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * Copyright (C) 2017 The Android Open Source Project 3b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * 4b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * Licensed under the Apache License, Version 2.0 (the "License"); 5b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * you may not use this file except in compliance with the License. 6b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * You may obtain a copy of the License at 7b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * 8b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * http://www.apache.org/licenses/LICENSE-2.0 9b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * 10b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * Unless required by applicable law or agreed to in writing, software 11b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * distributed under the License is distributed on an "AS IS" BASIS, 12b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * See the License for the specific language governing permissions and 14b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * limitations under the License 15b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue */ 16b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 17b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xuepackage com.android.car.settings.common; 18b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 19b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.annotation.DrawableRes; 20b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.content.Context; 21b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.support.v7.widget.RecyclerView; 22b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.view.LayoutInflater; 23b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.view.View; 24b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.view.ViewGroup; 25b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.widget.ImageView; 26b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.widget.Switch; 27b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport android.widget.TextView; 28b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 29b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xueimport com.android.car.settings.R; 30b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 31b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue/** 32b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * Contains logic for a line item represents title text, description text and a toggle widget. 33b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue */ 34b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xuepublic abstract class IconToggleLineItem 35b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue extends TypedPagedListAdapter.LineItem<IconToggleLineItem.ViewHolder> { 36ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue protected final Context mContext; 37b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue private final CharSequence mTitle; 38b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue protected IconUpdateListener mIconUpdateListener; 39b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 40b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public interface IconUpdateListener { 41b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue void onUpdateIcon(@DrawableRes int iconRes); 42b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 43b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 44b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue private final View.OnClickListener mOnClickListener = v -> onClicked(); 45b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 46b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue private final Switch.OnCheckedChangeListener mOnCheckedChangeListener = 47b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue (view, isChecked) -> onToggleClicked(isChecked); 48b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 49b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public IconToggleLineItem(CharSequence title, Context context) { 50b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue mTitle = title; 51b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue mContext = context; 52b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 53b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 54b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public int getType() { 55b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue return ICON_TOGGLE_TYPE; 56b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 57b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 58b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public void bindViewHolder(ViewHolder viewHolder) { 59b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.title.setText(mTitle); 60b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.summary.setText(getDesc()); 61b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.toggle.setChecked(isChecked()); 62b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.onUpdateIcon(getIcon()); 63b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.itemView.setOnClickListener(mOnClickListener); 64b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue viewHolder.toggle.setOnCheckedChangeListener(mOnCheckedChangeListener); 65b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue mIconUpdateListener = viewHolder; 66b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 67b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 68b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue static class ViewHolder extends RecyclerView.ViewHolder implements IconUpdateListener { 69b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public final ImageView icon; 70b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public final TextView title; 71b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public final TextView summary; 72b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public final Switch toggle; 73b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 74b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public ViewHolder(View itemView) { 75b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue super(itemView); 76b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue icon = (ImageView) itemView.findViewById(R.id.icon); 77b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue title = (TextView) itemView.findViewById(R.id.title); 78b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue summary = (TextView) itemView.findViewById(R.id.desc); 79b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue toggle = (Switch) itemView.findViewById(R.id.toggle_switch); 80b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 81b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 82b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue @Override 83b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public void onUpdateIcon(@DrawableRes int iconRes) { 84b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue icon.setImageResource(iconRes); 85b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 86b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 87b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 88b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public static RecyclerView.ViewHolder createViewHolder(ViewGroup parent) { 89b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue View v = LayoutInflater.from(parent.getContext()) 90ddb7544cfc9f5263d719c9d2760451e9316d3bderoger xue .inflate(R.layout.icon_toggle_line_item, parent, false); 91b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue return new ViewHolder(v); 92b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue } 93b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 94b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue /** 95b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * Called when any part of the line is clicked. 96b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * @param isChecked the state of the switch widget at the time of click. 97b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue */ 98b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public abstract void onToggleClicked(boolean isChecked); 99b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 100b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue /** 101b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue * called when anywhere other than the toggle on the line item got clicked. 102b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue */ 103b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public abstract void onClicked(); 104b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 105b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public abstract boolean isChecked(); 106b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue 107b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue public abstract @DrawableRes int getIcon(); 1085e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue 1095e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue @Override 1105e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue public boolean isClickable() { 1115e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue return true; 1125e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue } 113b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue} 114