2 * Copyright (C) 2016 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package com.android.settings.dashboard;
18 import android.accounts.Account;
19 import android.annotation.DrawableRes;
20 import android.annotation.LayoutRes;
21 import android.annotation.StringRes;
22 import android.app.Activity;
23 import android.content.Intent;
24 import android.support.v7.widget.RecyclerView;
25 import android.util.Log;
26 import android.view.LayoutInflater;
27 import android.view.View;
28 import android.view.ViewGroup;
29 import android.widget.ImageView;
30 import android.widget.TextView;
32 import com.android.settings.R;
33 import com.android.settings.overlay.SupportFeatureProvider;
35 import java.util.ArrayList;
36 import java.util.List;
38 import static com.android.settings.overlay.SupportFeatureProvider.SupportType.CHAT;
39 import static com.android.settings.overlay.SupportFeatureProvider.SupportType.EMAIL;
40 import static com.android.settings.overlay.SupportFeatureProvider.SupportType.PHONE;
43 * Item adapter for support tiles.
45 public final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAdapter.ViewHolder> {
47 private static final String TAG = "SupportItemAdapter";
49 private static final int TYPE_TITLE = R.layout.support_item_title;
50 private static final int TYPE_SUBTITLE = R.layout.support_item_subtitle;
51 private static final int TYPE_ESCALATION_CARD = R.layout.support_escalation_card;
52 private static final int TYPE_SUPPORT_TILE = R.layout.support_tile;
54 private final Activity mActivity;
55 private final SupportFeatureProvider mSupportFeatureProvider;
56 private final View.OnClickListener mItemClickListener;
57 private final List<SupportData> mSupportData;
59 private boolean mHasInternet;
61 public SupportItemAdapter(Activity activity, SupportFeatureProvider supportFeatureProvider,
62 View.OnClickListener itemClickListener) {
64 mSupportFeatureProvider = supportFeatureProvider;
65 mItemClickListener = itemClickListener;
66 mSupportData = new ArrayList<>();
67 // Optimistically assume we have Internet access. It will be updated later to correct value.
69 setHasStableIds(true);
74 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
75 return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(
76 viewType, parent, false));
80 public void onBindViewHolder(ViewHolder holder, int position) {
81 final SupportData data = mSupportData.get(position);
82 if (holder.iconView != null) {
83 holder.iconView.setImageResource(data.icon);
85 if (holder.titleView != null) {
86 holder.titleView.setText(data.title);
88 if (holder.summaryView != null) {
89 holder.summaryView.setText(data.summary);
91 holder.itemView.setOnClickListener(mItemClickListener);
95 public int getItemViewType(int position) {
96 return mSupportData.get(position).type;
100 public int getItemCount() {
101 return mSupportData.size();
105 * Called when a support item is clicked.
107 public void onItemClicked(int position) {
108 if (position >= 0 && position < mSupportData.size()) {
109 final SupportData data = mSupportData.get(position);
110 if (data.intent != null) {
111 mActivity.startActivityForResult(data.intent, 0);
116 public void setHasInternet(boolean hasInternet) {
117 if (mHasInternet != hasInternet) {
118 mHasInternet = hasInternet;
124 * Create data for the adapter. If there is already data in the adapter, they will be
125 * destroyed and recreated.
127 public void refreshData() {
128 mSupportData.clear();
129 final Account[] accounts = mSupportFeatureProvider.getSupportEligibleAccounts(mActivity);
130 if (accounts.length == 0) {
131 Log.d(TAG, "Account unavailable. Skipping");
133 addEscalationCards(accounts[0]);
136 notifyDataSetChanged();
139 private void addEscalationCards(Account account) {
141 mSupportData.add(new SupportData(TYPE_TITLE, 0 /* icon */,
142 R.string.support_escalation_title, R.string.support_escalation_summary,
145 mSupportData.add(new SupportData(TYPE_TITLE, 0 /* icon */,
146 R.string.support_offline_title, R.string.support_offline_summary,
149 if (mSupportFeatureProvider.isSupportTypeEnabled(mActivity, PHONE)) {
150 mSupportData.add(new SupportData(TYPE_ESCALATION_CARD, R.drawable.ic_call_24dp,
151 R.string.support_escalation_by_phone, 0 /* summary */,
152 mSupportFeatureProvider.getSupportIntent(mActivity, account, PHONE)));
154 if (mSupportFeatureProvider.isSupportTypeEnabled(mActivity, EMAIL)) {
155 mSupportData.add(new SupportData(TYPE_ESCALATION_CARD, R.drawable.ic_mail_24dp,
156 R.string.support_escalation_by_email, 0 /* summary */,
157 mSupportFeatureProvider.getSupportIntent(mActivity, account, EMAIL)));
159 if (mSupportFeatureProvider.isSupportTypeEnabled(mActivity, CHAT)) {
160 mSupportData.add(new SupportData(TYPE_ESCALATION_CARD, R.drawable.ic_chat_24dp,
161 R.string.support_escalation_by_chat, 0 /* summary */,
162 mSupportFeatureProvider.getSupportIntent(mActivity, account, CHAT)));
166 private void addMoreHelpItems() {
167 mSupportData.add(new SupportData(TYPE_SUBTITLE, 0 /* icon */,
168 R.string.support_more_help_title, 0 /* summary */, null /* intent */));
169 mSupportData.add(new SupportData(TYPE_SUPPORT_TILE, R.drawable.ic_forum_24dp,
170 R.string.support_forum_title, 0 /* summary */,
171 mSupportFeatureProvider.getForumIntent()));
172 mSupportData.add(new SupportData(TYPE_SUPPORT_TILE, R.drawable.ic_help_24dp,
173 R.string.support_articles_title, 0 /* summary */, null /*intent */));
174 mSupportData.add(new SupportData(TYPE_SUPPORT_TILE, R.drawable.ic_feedback_24dp,
175 R.string.support_feedback_title, 0 /* summary */, null /*intent */));
179 * {@link RecyclerView.ViewHolder} for support items.
181 static final class ViewHolder extends RecyclerView.ViewHolder {
183 final ImageView iconView;
184 final TextView titleView;
185 final TextView summaryView;
187 ViewHolder(View itemView) {
189 iconView = (ImageView) itemView.findViewById(android.R.id.icon);
190 titleView = (TextView) itemView.findViewById(android.R.id.title);
191 summaryView = (TextView) itemView.findViewById(android.R.id.summary);
196 * Data for a single support item.
198 private static final class SupportData {
201 @LayoutRes final int type;
202 @DrawableRes final int icon;
203 @StringRes final int title;
204 @StringRes final int summary;
206 SupportData(@LayoutRes int type, @DrawableRes int icon, @StringRes int title,
207 @StringRes int summary, Intent intent) {
211 this.summary = summary;
212 this.intent = intent;