summaryrefslogtreecommitdiff
path: root/java/com/android/contacts/common/util/AccountFilterUtil.java
blob: 18743c65ea97f5ec3ace9fa7dc65295fbf53b99e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.contacts.common.util;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.android.contacts.common.R;
import com.android.contacts.common.list.ContactListFilter;
import com.android.contacts.common.list.ContactListFilterController;

/** Utility class for account filter manipulation. */
public class AccountFilterUtil {

  public static final String EXTRA_CONTACT_LIST_FILTER = "contactListFilter";
  private static final String TAG = AccountFilterUtil.class.getSimpleName();

  /**
   * Find TextView with the id "account_filter_header" and set correct text for the account filter
   * header.
   *
   * @param filterContainer View containing TextView with id "account_filter_header"
   * @return true when header text is set in the call. You may use this for conditionally showing or
   *     hiding this entire view.
   */
  public static boolean updateAccountFilterTitleForPeople(
      View filterContainer, ContactListFilter filter, boolean showTitleForAllAccounts) {
    return updateAccountFilterTitle(filterContainer, filter, showTitleForAllAccounts, false);
  }

  /**
   * Similar to {@link #updateAccountFilterTitleForPeople(View, ContactListFilter, boolean,
   * boolean)}, but for Phone UI.
   */
  public static boolean updateAccountFilterTitleForPhone(
      View filterContainer, ContactListFilter filter, boolean showTitleForAllAccounts) {
    return updateAccountFilterTitle(filterContainer, filter, showTitleForAllAccounts, true);
  }

  private static boolean updateAccountFilterTitle(
      View filterContainer,
      ContactListFilter filter,
      boolean showTitleForAllAccounts,
      boolean forPhone) {
    final Context context = filterContainer.getContext();
    final TextView headerTextView =
        (TextView) filterContainer.findViewById(R.id.account_filter_header);

    boolean textWasSet = false;
    if (filter != null) {
      if (forPhone) {
        if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
          if (showTitleForAllAccounts) {
            headerTextView.setText(R.string.list_filter_phones);
            textWasSet = true;
          }
        } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
          headerTextView.setText(
              context.getString(R.string.listAllContactsInAccount, filter.accountName));
          textWasSet = true;
        } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
          headerTextView.setText(R.string.listCustomView);
          textWasSet = true;
        } else {
          Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
        }
      } else {
        if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
          if (showTitleForAllAccounts) {
            headerTextView.setText(R.string.list_filter_all_accounts);
            textWasSet = true;
          }
        } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
          headerTextView.setText(
              context.getString(R.string.listAllContactsInAccount, filter.accountName));
          textWasSet = true;
        } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
          headerTextView.setText(R.string.listCustomView);
          textWasSet = true;
        } else if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
          headerTextView.setText(R.string.listSingleContact);
          textWasSet = true;
        } else {
          Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
        }
      }
    } else {
      Log.w(TAG, "Filter is null.");
    }
    return textWasSet;
  }

  /** This will update filter via a given ContactListFilterController. */
  public static void handleAccountFilterResult(
      ContactListFilterController filterController, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
      final ContactListFilter filter = data.getParcelableExtra(EXTRA_CONTACT_LIST_FILTER);
      if (filter == null) {
        return;
      }
      if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
        filterController.selectCustomFilter();
      } else {
        filterController.setContactListFilter(filter, true);
      }
    }
  }
}