1a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang/*
2a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * Copyright (C) 2016 The Android Open Source Project
3a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang *
4a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * you may not use this file except in compliance with the License.
6a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * You may obtain a copy of the License at
7a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang *
8a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang *
10a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * Unless required by applicable law or agreed to in writing, software
11a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * See the License for the specific language governing permissions and
14a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * limitations under the License.
15a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang */
16a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangpackage com.android.settings.dashboard;
17a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
18a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.accounts.Account;
19a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.annotation.DrawableRes;
20a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.annotation.LayoutRes;
21a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.annotation.StringRes;
22a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.app.Activity;
23409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyuleiimport android.app.ActivityManager;
24a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhangimport android.app.DialogFragment;
250bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhangimport android.content.Context;
26a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.content.Intent;
270d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Lingimport android.content.pm.PackageManager;
28b0060dde637f583a048848b64157653a79ba097fFan Zhangimport android.os.Bundle;
29a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.support.v7.widget.RecyclerView;
300bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhangimport android.text.TextUtils;
31a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.view.LayoutInflater;
32a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.view.View;
33a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.view.ViewGroup;
34a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhangimport android.widget.AdapterView;
35a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhangimport android.widget.ArrayAdapter;
36a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.widget.ImageView;
37a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhangimport android.widget.Spinner;
38a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport android.widget.TextView;
39a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
40ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhangimport com.android.internal.logging.MetricsLogger;
41ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhangimport com.android.internal.logging.MetricsProto;
42a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport com.android.settings.R;
43a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport com.android.settings.overlay.SupportFeatureProvider;
44a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhangimport com.android.settings.support.SupportDisclaimerDialogFragment;
45a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhangimport com.android.settings.support.SupportPhone;
463737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhangimport com.android.settings.support.SupportPhoneDialogFragment;
47a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
48a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport java.util.ArrayList;
49a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport java.util.List;
509502163f9290896c3d40eef56deee4e3dde3f492Fan Zhangimport java.util.Objects;
51a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
52a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport static com.android.settings.overlay.SupportFeatureProvider.SupportType.CHAT;
53a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangimport static com.android.settings.overlay.SupportFeatureProvider.SupportType.PHONE;
54a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
55a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang/**
56a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang * Item adapter for support tiles.
57a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang */
58a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhangpublic final class SupportItemAdapter extends RecyclerView.Adapter<SupportItemAdapter.ViewHolder> {
59a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
60b0060dde637f583a048848b64157653a79ba097fFan Zhang    private static final String STATE_SELECTED_COUNTRY = "STATE_SELECTED_COUNTRY";
61cd0915122414fc3e690480290f6527898b0459ceFan Zhang    private static final int TYPE_ESCALATION_OPTIONS = R.layout.support_escalation_options;
62a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    private static final int TYPE_ESCALATION_OPTIONS_OFFLINE =
63a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            R.layout.support_offline_escalation_options;
64a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    private static final int TYPE_SUPPORT_TILE = R.layout.support_tile;
6548aab452cb72a038948f664b329fae37201a1512Fan Zhang    private static final int TYPE_SUPPORT_TILE_SPACER = R.layout.support_tile_spacer;
66a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    private static final int TYPE_SIGN_IN_BUTTON = R.layout.support_sign_in_button;
67a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
68a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    private final Activity mActivity;
69cd0915122414fc3e690480290f6527898b0459ceFan Zhang    private final EscalationClickListener mEscalationClickListener;
70a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    private final SpinnerItemSelectListener mSpinnerItemSelectListener;
71a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    private final SupportFeatureProvider mSupportFeatureProvider;
72a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    private final View.OnClickListener mItemClickListener;
73a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    private final List<SupportData> mSupportData;
74a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
75a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    private String mSelectedCountry;
762ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang    private boolean mHasInternet;
779502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang    private Account mAccount;
782ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang
79b0060dde637f583a048848b64157653a79ba097fFan Zhang    public SupportItemAdapter(Activity activity, Bundle savedInstanceState,
80b0060dde637f583a048848b64157653a79ba097fFan Zhang            SupportFeatureProvider supportFeatureProvider, View.OnClickListener itemClickListener) {
81a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        mActivity = activity;
82a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        mSupportFeatureProvider = supportFeatureProvider;
83a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        mItemClickListener = itemClickListener;
84cd0915122414fc3e690480290f6527898b0459ceFan Zhang        mEscalationClickListener = new EscalationClickListener();
85a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        mSpinnerItemSelectListener = new SpinnerItemSelectListener();
86a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        mSupportData = new ArrayList<>();
872ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang        // Optimistically assume we have Internet access. It will be updated later to correct value.
882ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang        mHasInternet = true;
89b0060dde637f583a048848b64157653a79ba097fFan Zhang        if (savedInstanceState != null) {
90b0060dde637f583a048848b64157653a79ba097fFan Zhang            mSelectedCountry = savedInstanceState.getString(STATE_SELECTED_COUNTRY);
91242a7ef1e80db2e2c04973883cc675f0e8a61741Fan Zhang        } else {
92242a7ef1e80db2e2c04973883cc675f0e8a61741Fan Zhang            mSelectedCountry = mSupportFeatureProvider.getCurrentCountryCodeIfHasConfig(PHONE);
93b0060dde637f583a048848b64157653a79ba097fFan Zhang        }
94eadc7dc815522f69658982905239c734266fbcc2Fan Zhang        mAccount = mSupportFeatureProvider.getSupportEligibleAccount(mActivity);
95a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        refreshData();
96a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
97a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
98a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    @Override
99a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
100a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(
101a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang                viewType, parent, false));
102a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
103a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
104a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    @Override
105a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    public void onBindViewHolder(ViewHolder holder, int position) {
106a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        final SupportData data = mSupportData.get(position);
107a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        switch (holder.getItemViewType()) {
108a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang            case TYPE_SIGN_IN_BUTTON:
109016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                bindSignInPromoTile(holder, (EscalationData) data);
110a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang                break;
111cd0915122414fc3e690480290f6527898b0459ceFan Zhang            case TYPE_ESCALATION_OPTIONS:
112016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                bindEscalationOptions(holder, (EscalationData) data);
113cd0915122414fc3e690480290f6527898b0459ceFan Zhang                break;
114a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            case TYPE_ESCALATION_OPTIONS_OFFLINE:
115016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                bindOfflineEscalationOptions(holder, (OfflineEscalationData) data);
116a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                break;
11748aab452cb72a038948f664b329fae37201a1512Fan Zhang            case TYPE_SUPPORT_TILE_SPACER:
11848aab452cb72a038948f664b329fae37201a1512Fan Zhang                break;
119a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang            default:
120a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang                bindSupportTile(holder, data);
121a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang                break;
122a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        }
123a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
124a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
125a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    @Override
126a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    public int getItemViewType(int position) {
127a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        return mSupportData.get(position).type;
128a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
129a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
130a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    @Override
131a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    public int getItemCount() {
132a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        return mSupportData.size();
133a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
134a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
135a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    /**
136a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     * Called when a support item is clicked.
137a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     */
138a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    public void onItemClicked(int position) {
139a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        if (position >= 0 && position < mSupportData.size()) {
140a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang            final SupportData data = mSupportData.get(position);
1410d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling            if (data.intent != null &&
1420d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    mActivity.getPackageManager().resolveActivity(data.intent, 0) != null) {
143ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                if (data.metricsEvent >= 0) {
144ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                    MetricsLogger.action(mActivity, data.metricsEvent);
145ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                }
146a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang                mActivity.startActivityForResult(data.intent, 0);
147a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang            }
148a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        }
149a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
150a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
1512ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang    public void setHasInternet(boolean hasInternet) {
1522ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang        if (mHasInternet != hasInternet) {
1532ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang            mHasInternet = hasInternet;
1545df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang            refreshEscalationCards();
1552ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang        }
1562ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang    }
1572ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang
1589502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang    public void setAccount(Account account) {
1599502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        if (!Objects.equals(mAccount, account)) {
1609502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang            mAccount = account;
161eadc7dc815522f69658982905239c734266fbcc2Fan Zhang            mSupportFeatureProvider.refreshOperationRules();
1625df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang            refreshEscalationCards();
1639502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        }
1649502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang    }
1659502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang
166b0060dde637f583a048848b64157653a79ba097fFan Zhang    public void onSaveInstanceState(Bundle outState) {
167b0060dde637f583a048848b64157653a79ba097fFan Zhang        outState.putString(STATE_SELECTED_COUNTRY, mSelectedCountry);
168b0060dde637f583a048848b64157653a79ba097fFan Zhang    }
169b0060dde637f583a048848b64157653a79ba097fFan Zhang
170a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    /**
171a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     * Create data for the adapter. If there is already data in the adapter, they will be
172a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     * destroyed and recreated.
173a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     */
1749502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang    private void refreshData() {
175a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        mSupportData.clear();
1765df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        addEscalationCards();
1775df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        addMoreHelpItems();
1785df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        notifyDataSetChanged();
1795df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang    }
1805df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang
1815df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang    /**
1825df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang     * Adds 1 escalation card. Based on current phone state, the escalation card can display
1835df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang     * different content.
1845df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang     */
1855df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang    private void addEscalationCards() {
1869502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        if (mAccount == null) {
187a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang            addSignInPromo();
188a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        } else if (mHasInternet) {
1895df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang            addOnlineEscalationCards();
190a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        } else {
191a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            addOfflineEscalationCards();
192a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        }
193a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
194a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
1955df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang    /**
1965df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang     * Finds and refreshes escalation card data.
1975df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang     */
1985df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang    private void refreshEscalationCards() {
1995df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        if (getItemCount() > 0) {
2005df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang            final int itemType = getItemViewType(0 /* position */);
2015df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang            if (itemType == TYPE_SIGN_IN_BUTTON
2025df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang                    || itemType == TYPE_ESCALATION_OPTIONS
2035df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang                    || itemType == TYPE_ESCALATION_OPTIONS_OFFLINE) {
2045df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang                mSupportData.remove(0 /* position */);
2055df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang                addEscalationCards();
2065df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang                notifyItemChanged(0 /* position */);
2075df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang            }
2085df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        }
2095df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang    }
2105df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang
2115df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang    private void addOnlineEscalationCards() {
2122c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang        final boolean hasPhoneOperation =
2132c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang                mSupportFeatureProvider.isSupportTypeEnabled(mActivity, PHONE);
2142c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang        final boolean hasChatOperation =
2152c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang                mSupportFeatureProvider.isSupportTypeEnabled(mActivity, CHAT);
216016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final EscalationData.Builder builder = new EscalationData.Builder(mActivity);
2172c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang        if (!hasPhoneOperation && !hasChatOperation) {
2182c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang            // No support at all.
219016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            builder.setTileTitle(R.string.support_escalation_title)
220016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setTileSummary(R.string.support_escalation_unavailable_summary);
2212c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang        } else if (mSupportFeatureProvider.isAlwaysOperating(PHONE, null /* countryCode */)
2222736ace057c043c3f24ef095c4d45095772d109aFan Zhang                || mSupportFeatureProvider.isAlwaysOperating(CHAT, null /* countryCode */)) {
2232c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang            // Support is available.
224016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            builder.setTileTitle(R.string.support_escalation_24_7_title)
2250bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang                    .setTileTitleDescription(R.string.support_escalation_24_7_content_description)
226016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setTileSummary(mActivity.getString(R.string.support_escalation_24_7_summary));
227a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        } else if (mSupportFeatureProvider.isOperatingNow(PHONE)
228a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                || mSupportFeatureProvider.isOperatingNow(CHAT)) {
2292c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang            // Support is available now.
230016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            builder.setTileTitle(R.string.support_escalation_title)
231016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setTileSummary(R.string.support_escalation_summary);
2322ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang        } else {
2334178710f3d52162e7d7aa1114c521e627f21dc92Fan Zhang            // Support is now temporarily unavailable.
234016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            builder.setTileTitle(R.string.support_escalation_title)
235016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setTileSummary(
2364178710f3d52162e7d7aa1114c521e627f21dc92Fan Zhang                            mSupportFeatureProvider.getOperationHours(mActivity, PHONE, null,
2374178710f3d52162e7d7aa1114c521e627f21dc92Fan Zhang                                    true /* hasInternet */));
2382ddde4a9282ea74f570e970a1a26252067032c58Fan Zhang        }
2392c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang        if (hasPhoneOperation) {
240016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            builder.setText1(R.string.support_escalation_by_phone)
241016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setSummary1(mSupportFeatureProvider.getEstimatedWaitTime(mActivity, PHONE))
242016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setEnabled1(mSupportFeatureProvider.isOperatingNow(PHONE));
243be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        }
2442c9f35e98d249d8d49a8020caebd422359462cfdFan Zhang        if (hasChatOperation) {
245016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            builder.setText2(R.string.support_escalation_by_chat)
246016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setSummary2(mSupportFeatureProvider.getEstimatedWaitTime(mActivity, CHAT))
247016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                    .setEnabled2(mSupportFeatureProvider.isOperatingNow(CHAT));
248be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        }
2495df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        mSupportData.add(0 /* index */, builder.build());
250a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
251a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
252a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    private void addOfflineEscalationCards() {
2532736ace057c043c3f24ef095c4d45095772d109aFan Zhang        final CharSequence operatingHours;
25448aab452cb72a038948f664b329fae37201a1512Fan Zhang        final boolean isPhoneSupportAlwaysOperating =
25548aab452cb72a038948f664b329fae37201a1512Fan Zhang                mSupportFeatureProvider.isAlwaysOperating(PHONE, mSelectedCountry);
25648aab452cb72a038948f664b329fae37201a1512Fan Zhang        if (isPhoneSupportAlwaysOperating) {
2572736ace057c043c3f24ef095c4d45095772d109aFan Zhang            operatingHours = mActivity.getString(R.string.support_escalation_24_7_summary);
2582736ace057c043c3f24ef095c4d45095772d109aFan Zhang        } else {
2592736ace057c043c3f24ef095c4d45095772d109aFan Zhang            operatingHours = mSupportFeatureProvider.getOperationHours(mActivity,
2604178710f3d52162e7d7aa1114c521e627f21dc92Fan Zhang                    PHONE, mSelectedCountry, false /* hasInternet */);
2612736ace057c043c3f24ef095c4d45095772d109aFan Zhang        }
2625df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        mSupportData.add(0 /* index */, new OfflineEscalationData.Builder(mActivity)
263016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                .setCountries(mSupportFeatureProvider.getPhoneSupportCountries())
264a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                .setTollFreePhone(mSupportFeatureProvider.getSupportPhones(
265a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                        mSelectedCountry, true /* isTollFree */))
266a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                .setTolledPhone(mSupportFeatureProvider.getSupportPhones(
267016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                        mSelectedCountry, false /* isTollFree */))
26848aab452cb72a038948f664b329fae37201a1512Fan Zhang                .setTileTitle(isPhoneSupportAlwaysOperating
26948aab452cb72a038948f664b329fae37201a1512Fan Zhang                        ? R.string.support_escalation_24_7_title
27048aab452cb72a038948f664b329fae37201a1512Fan Zhang                        : R.string.support_escalation_title)
2710bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang                .setTileTitleDescription(isPhoneSupportAlwaysOperating
2720bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang                        ? R.string.support_escalation_24_7_content_description
2730bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang                        : R.string.support_escalation_title)
274016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                .setTileSummary(operatingHours)
275016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                .build());
276a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    }
277a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
278a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    private void addSignInPromo() {
2795df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang        mSupportData.add(0 /* index */, new EscalationData.Builder(mActivity, TYPE_SIGN_IN_BUTTON)
280be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                .setText1(R.string.support_sign_in_button_text)
281be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                .setText2(R.string.support_sign_in_required_help)
282016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                .setTileTitle(R.string.support_sign_in_required_title)
283016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                .setTileSummary(R.string.support_sign_in_required_summary)
284be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                .build());
285a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    }
286a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang
287a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    private void addMoreHelpItems() {
28848aab452cb72a038948f664b329fae37201a1512Fan Zhang        mSupportData.add(new SupportData.Builder(mActivity, TYPE_SUPPORT_TILE_SPACER).build());
2890d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling        PackageManager packageManager = mActivity.getPackageManager();
2900d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling        Intent intent = mSupportFeatureProvider.getHelpIntent(mActivity);
2910d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling        if (packageManager.resolveActivity(intent, 0) != null) {
2920d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling            mSupportData.add(new SupportData.Builder(mActivity, TYPE_SUPPORT_TILE)
2930d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setIcon(R.drawable.ic_help_24dp)
2940d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setTileTitle(R.string.support_help_feedback_title)
2950d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setIntent(intent)
2960d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setMetricsEvent(MetricsProto.MetricsEvent.ACTION_SUPPORT_HELP_AND_FEEDBACK)
2970d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .build());
2980d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling        }
2990d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling        intent = mSupportFeatureProvider.getTipsAndTricksIntent(mActivity);
3000d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling        if (packageManager.resolveActivity(intent, 0) != null) {
3010d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling            mSupportData.add(new SupportData.Builder(mActivity, TYPE_SUPPORT_TILE)
3020d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setIcon(R.drawable.ic_lightbulb_outline_24)
3030d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setTileTitle(R.string.support_tips_and_tricks_title)
3040d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setIntent(intent)
3050d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .setMetricsEvent(MetricsProto.MetricsEvent.ACTION_SUPPORT_TIPS_AND_TRICKS)
3060d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling                    .build());
3070d4b8a3b1984bce718a94f4fe7b9e3bdc2322d21Doris Ling        }
308a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
309a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
310016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang    private void bindEscalationOptions(ViewHolder holder, EscalationData data) {
311016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        holder.tileTitleView.setText(data.tileTitle);
3120bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang        holder.tileTitleView.setContentDescription(data.tileTitleDescription);
313016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        holder.tileSummaryView.setText(data.tileSummary);
314cd0915122414fc3e690480290f6527898b0459ceFan Zhang        if (data.text1 == 0) {
315cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text1View.setVisibility(View.GONE);
316cd0915122414fc3e690480290f6527898b0459ceFan Zhang        } else {
317cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text1View.setText(data.text1);
318cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text1View.setOnClickListener(mEscalationClickListener);
319841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang            holder.text1View.setEnabled(data.enabled1 && mHasInternet);
320cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text1View.setVisibility(View.VISIBLE);
321cd0915122414fc3e690480290f6527898b0459ceFan Zhang        }
3220bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang        if (TextUtils.isEmpty(data.text2)) {
323cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text2View.setVisibility(View.GONE);
324cd0915122414fc3e690480290f6527898b0459ceFan Zhang        } else {
325cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text2View.setText(data.text2);
326cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text2View.setOnClickListener(mEscalationClickListener);
327841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang            holder.text2View.setEnabled(data.enabled2 && mHasInternet);
328cd0915122414fc3e690480290f6527898b0459ceFan Zhang            holder.text2View.setVisibility(View.VISIBLE);
329cd0915122414fc3e690480290f6527898b0459ceFan Zhang        }
330be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        if (holder.summary1View != null) {
331be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            holder.summary1View.setText(data.summary1);
33255c6ea25f4a1bdf456e3addd74ec8c596c57be00Fan Zhang            holder.summary1View.setVisibility(mHasInternet && !TextUtils.isEmpty(data.summary1)
33355c6ea25f4a1bdf456e3addd74ec8c596c57be00Fan Zhang                    ? View.VISIBLE : View.GONE);
334be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        }
335be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        if (holder.summary2View != null) {
336be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            holder.summary2View.setText(data.summary2);
33755c6ea25f4a1bdf456e3addd74ec8c596c57be00Fan Zhang            holder.summary2View.setVisibility(mHasInternet && !TextUtils.isEmpty(data.summary2)
33855c6ea25f4a1bdf456e3addd74ec8c596c57be00Fan Zhang                    ? View.VISIBLE : View.GONE);
339be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        }
340cd0915122414fc3e690480290f6527898b0459ceFan Zhang    }
341cd0915122414fc3e690480290f6527898b0459ceFan Zhang
342016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang    private void bindOfflineEscalationOptions(ViewHolder holder, OfflineEscalationData data) {
343016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        // Bind Title
344016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        holder.tileTitleView.setText(data.tileTitle);
3450bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang        holder.tileTitleView.setContentDescription(data.tileTitleDescription);
346016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        holder.tileSummaryView.setText(data.tileSummary);
347a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        // Bind spinner
348a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        final Spinner spinner = (Spinner) holder.itemView.findViewById(R.id.spinner);
349a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        final ArrayAdapter<String> adapter = new ArrayAdapter(
350a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                mActivity, android.R.layout.simple_spinner_dropdown_item, data.countries);
351a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        spinner.setAdapter(adapter);
352a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        final List<String> countryCodes = mSupportFeatureProvider.getPhoneSupportCountryCodes();
353a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        for (int i = 0; i < countryCodes.size(); i++) {
354a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            if (TextUtils.equals(countryCodes.get(i), mSelectedCountry)) {
355a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                spinner.setSelection(i);
356a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                break;
357a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            }
358a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        }
359a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        spinner.setOnItemSelectedListener(mSpinnerItemSelectListener);
360a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        // Bind buttons
361a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        if (data.tollFreePhone != null) {
362a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text1View.setText(data.tollFreePhone.number);
363a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text1View.setVisibility(View.VISIBLE);
364a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text1View.setOnClickListener(mEscalationClickListener);
365a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        } else {
366a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text1View.setVisibility(View.GONE);
367a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        }
368a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        if (data.tolledPhone != null) {
369a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text2View.setText(
370a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                    mActivity.getString(R.string.support_international_phone_title));
371a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text2View.setVisibility(View.VISIBLE);
372a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text2View.setOnClickListener(mEscalationClickListener);
373a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        } else {
374a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            holder.text2View.setVisibility(View.GONE);
375a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        }
376409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyulei
377409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyulei        if (ActivityManager.isUserAMonkey()) {
378409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyulei            holder.text1View.setVisibility(View.GONE);
379409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyulei            holder.text2View.setVisibility(View.GONE);
380409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyulei            spinner.setVisibility(View.GONE);
381409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyulei            holder.itemView.findViewById(R.id.support_text).setVisibility(View.GONE);
382409c4708c162bf3ae95f9fe695516ecd33cd91bajackqdyulei        }
383a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    }
384a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
385016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang    private void bindSignInPromoTile(ViewHolder holder, EscalationData data) {
386016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        holder.tileTitleView.setText(data.tileTitle);
3870bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang        holder.tileTitleView.setContentDescription(data.tileTitleDescription);
388016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        holder.tileSummaryView.setText(data.tileSummary);
389a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        holder.text1View.setText(data.text1);
390a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        holder.text2View.setText(data.text2);
391cd0915122414fc3e690480290f6527898b0459ceFan Zhang        holder.text1View.setOnClickListener(mEscalationClickListener);
392cd0915122414fc3e690480290f6527898b0459ceFan Zhang        holder.text2View.setOnClickListener(mEscalationClickListener);
393a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    }
394a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang
395a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    private void bindSupportTile(ViewHolder holder, SupportData data) {
396a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        if (holder.iconView != null) {
397a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang            holder.iconView.setImageResource(data.icon);
398a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        }
399016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        if (holder.tileTitleView != null) {
400016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            holder.tileTitleView.setText(data.tileTitle);
4010bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang            holder.tileTitleView.setContentDescription(data.tileTitleDescription);
402a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        }
403016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        if (holder.tileSummaryView != null) {
404016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            holder.tileSummaryView.setText(data.tileSummary);
405a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        }
406a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        holder.itemView.setOnClickListener(mItemClickListener);
407a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    }
408a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang
409a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    /**
410a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang     * Show a disclaimer dialog and start support action after disclaimer has been acknowledged.
411a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang     */
412a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang    private void tryStartDisclaimerAndSupport(final @SupportFeatureProvider.SupportType int type) {
413a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang        if (mSupportFeatureProvider.shouldShowDisclaimerDialog(mActivity)) {
414a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            DialogFragment fragment = SupportDisclaimerDialogFragment.newInstance(mAccount, type);
415a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            fragment.show(mActivity.getFragmentManager(), SupportDisclaimerDialogFragment.TAG);
416a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            return;
417a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang        }
418a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang        mSupportFeatureProvider.startSupport(mActivity, mAccount, type);
419a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang    }
420a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang
421a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang    /**
422cd0915122414fc3e690480290f6527898b0459ceFan Zhang     * Click handler for starting escalation options.
423a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang     */
424cd0915122414fc3e690480290f6527898b0459ceFan Zhang    private final class EscalationClickListener implements View.OnClickListener {
425a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        @Override
426a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang        public void onClick(final View v) {
427a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            if (mAccount == null) {
428a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                switch (v.getId()) {
429a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                    case android.R.id.text1:
430ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                        MetricsLogger.action(mActivity,
431ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                                MetricsProto.MetricsEvent.ACTION_SUPPORT_SIGN_IN);
432a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        mActivity.startActivityForResult(
433a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                                mSupportFeatureProvider.getAccountLoginIntent(),
434a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                                0 /* requestCode */);
435a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        break;
436a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                    case android.R.id.text2:
437a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        mActivity.startActivityForResult(
438a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                                mSupportFeatureProvider.getSignInHelpIntent(mActivity),
439a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                                0 /* requestCode */);
440a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        break;
441cd0915122414fc3e690480290f6527898b0459ceFan Zhang                }
442a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            } else if (mHasInternet) {
443a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                switch (v.getId()) {
444a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                    case android.R.id.text1:
445ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                        MetricsLogger.action(mActivity,
446ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                                MetricsProto.MetricsEvent.ACTION_SUPPORT_PHONE);
447a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        tryStartDisclaimerAndSupport(PHONE);
448a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        break;
449a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                    case android.R.id.text2:
450ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                        MetricsLogger.action(mActivity,
451ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang                                MetricsProto.MetricsEvent.ACTION_SUPPORT_CHAT);
452a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        tryStartDisclaimerAndSupport(CHAT);
453a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang                        break;
454cd0915122414fc3e690480290f6527898b0459ceFan Zhang                }
455a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            } else {
456a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                switch (v.getId()) {
4573737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                    case android.R.id.text1: {
458a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                        final SupportPhone phone = mSupportFeatureProvider
459a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                                .getSupportPhones(mSelectedCountry, true /* isTollFree */);
460a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                        if (phone != null) {
4616098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                            final Intent intent = phone.getDialIntent();
4626098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                            final boolean canDial = !mActivity.getPackageManager()
4636098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                                    .queryIntentActivities(intent, 0)
4646098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                                    .isEmpty();
4656098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                            if (canDial) {
4666098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                                MetricsLogger.action(mActivity,
4676098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                                        MetricsProto.MetricsEvent.ACTION_SUPPORT_DAIL_TOLLFREE);
4686098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                                mActivity.startActivity(intent);
4696098913d4b17ecee3f44bc35adfda5f24d459e87Fan Zhang                            }
470a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                        }
471a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                        break;
4723737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                    }
4733737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                    case android.R.id.text2: {
4743737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                        final SupportPhone phone = mSupportFeatureProvider
4753737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                                .getSupportPhones(mSelectedCountry, false /* isTollFree */);
4763737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                        final SupportPhoneDialogFragment fragment =
4773737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                                SupportPhoneDialogFragment.newInstance(phone);
478a9f7016acd3cb6c480a13b00ea1144ef43cd0181Fan Zhang                        MetricsLogger.action(mActivity,
479a9f7016acd3cb6c480a13b00ea1144ef43cd0181Fan Zhang                                MetricsProto.MetricsEvent.ACTION_SUPPORT_VIEW_TRAVEL_ABROAD_DIALOG);
4803737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                        fragment.show(mActivity.getFragmentManager(),
4813737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                                SupportPhoneDialogFragment.TAG);
482a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                        break;
4833737fabda48c5fefc0eb9758e73202dd9f4ebc57Fan Zhang                    }
484a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                }
485a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang            }
486a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        }
487a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang    }
488a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang
489a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    private final class SpinnerItemSelectListener implements AdapterView.OnItemSelectedListener {
490a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
491a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        @Override
492a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
493a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            final List<String> countryCodes = mSupportFeatureProvider.getPhoneSupportCountryCodes();
494a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            final String selectedCountry = countryCodes.get(position);
495a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            if (!TextUtils.equals(selectedCountry, mSelectedCountry)) {
496a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                mSelectedCountry = selectedCountry;
4975df6364d89107d923bb937e8fc7be763cf4f6d8aFan Zhang                refreshEscalationCards();
498a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            }
499a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        }
500a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
501a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        @Override
502a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        public void onNothingSelected(AdapterView<?> parent) {
503a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            // Do nothing.
504a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        }
505a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    }
506a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
507a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    /**
508a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     * {@link RecyclerView.ViewHolder} for support items.
509a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     */
510a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    static final class ViewHolder extends RecyclerView.ViewHolder {
511a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
512a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        final ImageView iconView;
513016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final TextView tileTitleView;
514016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final TextView tileSummaryView;
515a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        final TextView text1View;
516a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang        final TextView text2View;
517be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        final TextView summary1View;
518be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        final TextView summary2View;
519a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
520a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        ViewHolder(View itemView) {
521a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang            super(itemView);
522a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang            iconView = (ImageView) itemView.findViewById(android.R.id.icon);
523016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            tileTitleView = (TextView) itemView.findViewById(R.id.tile_title);
524016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            tileSummaryView = (TextView) itemView.findViewById(R.id.tile_summary);
525a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang            text1View = (TextView) itemView.findViewById(android.R.id.text1);
526a6c862caf6b62a3af06795ff743473d38e56d85dFan Zhang            text2View = (TextView) itemView.findViewById(android.R.id.text2);
527be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            summary1View = (TextView) itemView.findViewById(R.id.summary1);
528be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            summary2View = (TextView) itemView.findViewById(R.id.summary2);
529a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        }
530a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
531a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
532a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    /**
533a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     * Data for a single support item.
534a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang     */
535a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    private static class SupportData {
536a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
537a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        final Intent intent;
538ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang        final int metricsEvent;
5399502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        @LayoutRes
5409502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        final int type;
5419502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        @DrawableRes
5429502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        final int icon;
5439502163f9290896c3d40eef56deee4e3dde3f492Fan Zhang        @StringRes
544016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final int tileTitle;
5450bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang        final CharSequence tileTitleDescription;
546016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final CharSequence tileSummary;
547016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
548be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang
549be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        private SupportData(Builder builder) {
550be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            this.type = builder.mType;
551be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            this.icon = builder.mIcon;
552016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.tileTitle = builder.mTileTitle;
5530bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang            this.tileTitleDescription = builder.mTileTitleDescription;
554016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.tileSummary = builder.mTileSummary;
555be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            this.intent = builder.mIntent;
556ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang            this.metricsEvent = builder.mMetricsEvent;
557be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang        }
558be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang
559a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        static class Builder {
5600bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang
561016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            protected final Context mContext;
562a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            @LayoutRes
563a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            private final int mType;
564a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            @DrawableRes
565a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            private int mIcon;
566a2bd32b397a751f7e1d7257d1051b88f7a443f12Fan Zhang            @StringRes
567016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private int mTileTitle;
5680bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang            private CharSequence mTileTitleDescription;
569016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private CharSequence mTileSummary;
570be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            private Intent mIntent;
571ab2e0390a09bd258b49eafeaf718ab3dd1b25a9fFan Zhang            private int mMetricsEvent = -1;
572be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang
5730bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang            Builder(Context context, @LayoutRes int type) {
5740bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang                mContext = context;
575be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                mType = type;
576be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            }
577be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang
578be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            Builder setIcon(@DrawableRes int icon) {
579be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                mIcon = icon;
580be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                return this;
581be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            }
582a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang
583016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            Builder setTileTitle(@StringRes int title) {
584016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                mTileTitle = title;
585016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return this;
586016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
587016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
5880bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang            Builder setTileTitleDescription(@StringRes int titleDescription) {
5890bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang                mTileTitleDescription = mContext.getString(titleDescription);
5900bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang                return this;
5910bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang            }
5920bd87d71b8f787ed352fc5ce29e3049043b2b515Fan Zhang
593016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            Builder setTileSummary(@StringRes int summary) {
594016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                mTileSummary = mContext.getString(summary);
595016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return this;
596016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
597016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
598016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            Builder setTileSummary(CharSequence summary) {
599016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                mTileSummary = summary;
600016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return this;
601016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
602016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
603016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            Builder setMetricsEvent(int metricsEvent) {
604016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                mMetricsEvent = metricsEvent;
605016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return this;
606016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
607016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
608016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            Builder setIntent(Intent intent) {
609016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                mIntent = intent;
610016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return this;
611016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
612016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
613016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            SupportData build() {
614016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return new SupportData(this);
615016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
616016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        }
617016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang    }
618016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
619016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang    /**
620016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang     * Data model for escalation cards.
621016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang     */
622016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang    private static class EscalationData extends SupportData {
623016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
624016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        @StringRes
625016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final int text1;
626016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final CharSequence text2;
627016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final boolean enabled1;
628016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final boolean enabled2;
629016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final CharSequence summary1;
630016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        final CharSequence summary2;
631016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
632016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        private EscalationData(Builder builder) {
633016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            super(builder);
634016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.text1 = builder.mText1;
635016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.text2 = builder.mText2;
636016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.summary1 = builder.mSummary1;
637016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.summary2 = builder.mSummary2;
638016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.enabled1 = builder.mEnabled1;
639016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            this.enabled2 = builder.mEnabled2;
640016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        }
641016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
642016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        static class Builder extends SupportData.Builder {
643016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
644016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            @StringRes
645016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private int mText1;
646016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private CharSequence mText2;
647016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private CharSequence mSummary1;
648016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private CharSequence mSummary2;
649016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private boolean mEnabled1;
650016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            private boolean mEnabled2;
651016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
652016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            protected Builder(Context context, @LayoutRes int type) {
653016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                super(context, type);
654016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
655016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
656016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            Builder(Context context) {
657016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                this(context, TYPE_ESCALATION_OPTIONS);
658016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            }
659016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang
660841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang            Builder setEnabled1(boolean enabled) {
661841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang                mEnabled1 = enabled;
662841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang                return this;
663841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang            }
664841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang
665be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            Builder setText1(@StringRes int text1) {
666be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                mText1 = text1;
667be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                return this;
668be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            }
669be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang
6700bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang            Builder setText2(@StringRes int text2) {
6710bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang                mText2 = mContext.getString(text2);
6720bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang                return this;
6730bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang            }
6740bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang
6750bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang            Builder setText2(CharSequence text2) {
6760bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang                mText2 = text2;
6770bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang                return this;
6780bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang            }
6790bc42ab6183e5cf3c15b7bde67e12870aa58966dFan Zhang
680be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            Builder setSummary1(String summary1) {
681be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                mSummary1 = summary1;
682be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                return this;
683be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            }
684be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang
685841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang            Builder setEnabled2(boolean enabled) {
686841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang                mEnabled2 = enabled;
687841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang                return this;
688841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang            }
689841b13ac98d6608ae842846d4b27f62f0587c50bFan Zhang
690be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            Builder setSummary2(String summary2) {
691be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                mSummary2 = summary2;
692be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang                return this;
693be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            }
694be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang
695016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            EscalationData build() {
696016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return new EscalationData(this);
697be61a14fcd01f5d8ccc2cb1584cea48b52697ce6Fan Zhang            }
698a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang        }
699a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang    }
700a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
701a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    /**
702a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang     * Support data for offline mode.
703a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang     */
704016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang    private static final class OfflineEscalationData extends EscalationData {
705a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
706a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        final List<String> countries;
707a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        final SupportPhone tollFreePhone;
708a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        final SupportPhone tolledPhone;
709a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
710016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        private OfflineEscalationData(Builder builder) {
711a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            super(builder);
712a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            countries = builder.mCountries;
713a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            tollFreePhone = builder.mTollFreePhone;
714a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            tolledPhone = builder.mTolledPhone;
715a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        }
716a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
717016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang        static final class Builder extends EscalationData.Builder {
718a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
719a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            private List<String> mCountries;
720a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            private SupportPhone mTollFreePhone;
721a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            private SupportPhone mTolledPhone;
722a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
723a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            Builder(Context context) {
724a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                super(context, TYPE_ESCALATION_OPTIONS_OFFLINE);
725a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            }
726a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
727a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            Builder setCountries(List<String> countries) {
728a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                mCountries = countries;
729a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                return this;
730a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            }
731a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
732a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            Builder setTollFreePhone(SupportPhone phone) {
733a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                mTollFreePhone = phone;
734a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                return this;
735a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            }
736a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
737a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            Builder setTolledPhone(SupportPhone phone) {
738a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                mTolledPhone = phone;
739a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang                return this;
740a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            }
741a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang
742016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang            OfflineEscalationData build() {
743016bd604917a1826de18fa82e3d36d54665452d5Fan Zhang                return new OfflineEscalationData(this);
744a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang            }
745a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang        }
746a44b1efbdce7dc50d6e3576150a47bbc72bfed96Fan Zhang    }
747a9fa0059b268f7090f375b481990b89fc84bbb5eFan Zhang}
748