1ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng/*
2ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * Copyright (C) 2012 The Android Open Source Project
3ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng *
4ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License");
5ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * you may not use this file except in compliance with the License.
6ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * You may obtain a copy of the License at
7ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng *
8ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng *      http://www.apache.org/licenses/LICENSE-2.0
9ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng *
10ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * Unless required by applicable law or agreed to in writing, software
11ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS,
12ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * See the License for the specific language governing permissions and
14ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * limitations under the License.
15ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng */
16ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
17ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengpackage com.android.contacts.common.util;
18ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
19ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport android.app.Activity;
20ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport android.app.Fragment;
21ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport android.content.Context;
22ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport android.content.Intent;
23ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport android.util.Log;
24ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport android.view.View;
25ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport android.widget.TextView;
26ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
27ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport com.android.contacts.common.R;
28ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport com.android.contacts.common.list.AccountFilterActivity;
29ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport com.android.contacts.common.list.ContactListFilter;
30ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengimport com.android.contacts.common.list.ContactListFilterController;
31ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
32ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng/**
33ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng * Utility class for account filter manipulation.
34ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng */
35ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Chengpublic class AccountFilterUtil {
36ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    private static final String TAG = AccountFilterUtil.class.getSimpleName();
37ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
38ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    /**
39ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * Find TextView with the id "account_filter_header" and set correct text for the account
40ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * filter header.
41ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     *
42ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * @param filterContainer View containing TextView with id "account_filter_header"
43ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * @return true when header text is set in the call. You may use this for conditionally
44ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * showing or hiding this entire view.
45ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     */
46ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    public static boolean updateAccountFilterTitleForPeople(View filterContainer,
47ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            ContactListFilter filter, boolean showTitleForAllAccounts) {
48ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        return updateAccountFilterTitle(filterContainer, filter, showTitleForAllAccounts, false);
49ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    }
50ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
51ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    /**
52ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * Similar to {@link #updateAccountFilterTitleForPeople(View, ContactListFilter, boolean,
53ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * boolean)}, but for Phone UI.
54ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     */
55ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    public static boolean updateAccountFilterTitleForPhone(View filterContainer,
56ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            ContactListFilter filter, boolean showTitleForAllAccounts) {
57ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        return updateAccountFilterTitle(
58ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                filterContainer, filter, showTitleForAllAccounts, true);
59ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    }
60ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
61ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    private static boolean updateAccountFilterTitle(View filterContainer,
62ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            ContactListFilter filter, boolean showTitleForAllAccounts,
63ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            boolean forPhone) {
64ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        final Context context = filterContainer.getContext();
65ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        final TextView headerTextView = (TextView)
66ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                filterContainer.findViewById(R.id.account_filter_header);
67ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
68ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        boolean textWasSet = false;
69ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        if (filter != null) {
70ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            if (forPhone) {
71ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
72ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    if (showTitleForAllAccounts) {
73ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                        headerTextView.setText(R.string.list_filter_phones);
74ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                        textWasSet = true;
75ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    }
76ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
77ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    headerTextView.setText(context.getString(
78ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                            R.string.listAllContactsInAccount, filter.accountName));
79ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    textWasSet = true;
80ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
81ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    headerTextView.setText(R.string.listCustomView);
82ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    textWasSet = true;
83ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                } else {
84ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
85ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                }
86ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            } else {
87ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
88ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    if (showTitleForAllAccounts) {
89ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                        headerTextView.setText(R.string.list_filter_all_accounts);
90ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                        textWasSet = true;
91ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    }
92ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
93ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    headerTextView.setText(context.getString(
94ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                            R.string.listAllContactsInAccount, filter.accountName));
95ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    textWasSet = true;
96ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
97ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    headerTextView.setText(R.string.listCustomView);
98ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    textWasSet = true;
99ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                } else if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
100ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    headerTextView.setText(R.string.listSingleContact);
101ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    textWasSet = true;
102ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                } else {
103ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
104ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                }
105ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            }
106ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        } else {
107ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            Log.w(TAG, "Filter is null.");
108ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        }
109ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        return textWasSet;
110ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    }
111ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
112ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    /**
113ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * Launches account filter setting Activity using
114ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * {@link Activity#startActivityForResult(Intent, int)}.
115ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     *
116ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * @param activity
117ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * @param requestCode requestCode for {@link Activity#startActivityForResult(Intent, int)}
118ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * @param currentFilter currently-selected filter, so that it can be displayed as activated.
119ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     */
120ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    public static void startAccountFilterActivityForResult(
121ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            Activity activity, int requestCode, ContactListFilter currentFilter) {
122ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        final Intent intent = new Intent(activity, AccountFilterActivity.class);
123ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        intent.putExtra(AccountFilterActivity.KEY_EXTRA_CURRENT_FILTER, currentFilter);
124ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        activity.startActivityForResult(intent, requestCode);
125ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    }
126ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
127ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    /**
128ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * Very similar to
129ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * {@link #startAccountFilterActivityForResult(Activity, int, ContactListFilter)}
130ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * but uses Fragment instead.
131ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     */
132ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    public static void startAccountFilterActivityForResult(
133ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            Fragment fragment, int requestCode, ContactListFilter currentFilter) {
134ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        final Activity activity = fragment.getActivity();
135ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        if (activity != null) {
136ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            final Intent intent = new Intent(activity, AccountFilterActivity.class);
137ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            intent.putExtra(AccountFilterActivity.KEY_EXTRA_CURRENT_FILTER, currentFilter);
138ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            fragment.startActivityForResult(intent, requestCode);
139ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        } else {
140ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            Log.w(TAG, "getActivity() returned null. Ignored");
141ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        }
142ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    }
143ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng
144ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    /**
145ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * Useful method to handle onActivityResult() for
146ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * {@link #startAccountFilterActivityForResult(Activity, int)} or
147ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * {@link #startAccountFilterActivityForResult(Fragment, int)}.
148ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     *
149ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     * This will update filter via a given ContactListFilterController.
150ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng     */
151ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    public static void handleAccountFilterResult(
152ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            ContactListFilterController filterController, int resultCode, Intent data) {
153ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        if (resultCode == Activity.RESULT_OK) {
154ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            final ContactListFilter filter = (ContactListFilter)
155ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                    data.getParcelableExtra(AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER);
156ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            if (filter == null) {
157ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                return;
158ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            }
159ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
160ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                filterController.selectCustomFilter();
161ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            } else {
162ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng                filterController.setContactListFilter(filter, true);
163ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng            }
164ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng        }
165ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng    }
166ba2c125b07086a88a3517fcf381a3a400c42afd3Chiao Cheng}
167