1f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov/*
2f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
3f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov *
4f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * you may not use this file except in compliance with the License.
6f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * You may obtain a copy of the License at
7f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov *
8f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov *
10f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * See the License for the specific language governing permissions and
14f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * limitations under the License.
15f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov */
16f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
17f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikovpackage com.android.contacts.list;
18f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
19fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikovimport android.content.SharedPreferences;
20f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikovimport android.graphics.drawable.Drawable;
21264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikovimport android.os.Parcel;
22264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikovimport android.os.Parcelable;
23f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikovimport android.text.TextUtils;
24f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
25f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov/**
26f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov * Contact list filter parameters.
27f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov */
28264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikovpublic final class ContactListFilter implements Comparable<ContactListFilter>, Parcelable {
29f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
30009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    public static final int FILTER_TYPE_DEFAULT = -1;
31009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    public static final int FILTER_TYPE_ALL_ACCOUNTS = -2;
32009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    public static final int FILTER_TYPE_CUSTOM = -3;
33009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    public static final int FILTER_TYPE_STARRED = -4;
34009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    public static final int FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY = -5;
356e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    public static final int FILTER_TYPE_SINGLE_CONTACT = -6;
36009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov
37f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    public static final int FILTER_TYPE_ACCOUNT = 0;
380647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa
390647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa    /**
400647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa     * Obsolete filter which had been used in Honeycomb. This may be stored in
410647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa     * {@link SharedPreferences}, but should be replaced with ALL filter when it is found.
420647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa     *
430647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa     * TODO: "group" filter and relevant variables are all obsolete. Remove them.
440647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa     */
450647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa    private static final int FILTER_TYPE_GROUP = 1;
46f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
47fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov    private static final String KEY_FILTER_TYPE = "filter.type";
48fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov    private static final String KEY_ACCOUNT_NAME = "filter.accountName";
49fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov    private static final String KEY_ACCOUNT_TYPE = "filter.accountType";
502b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    private static final String KEY_DATA_SET = "filter.dataSet";
51fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov
52be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public final int filterType;
53be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public final String accountType;
54be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public final String accountName;
552b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public final String dataSet;
56be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public final Drawable icon;
576e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    private String mId;
58f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
592b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    public ContactListFilter(int filterType, String accountType, String accountName, String dataSet,
600647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa            Drawable icon) {
61f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        this.filterType = filterType;
62f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        this.accountType = accountType;
63f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        this.accountName = accountName;
642b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        this.dataSet = dataSet;
65f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        this.icon = icon;
66f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    }
67f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
68be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public static ContactListFilter createFilterWithType(int filterType) {
690647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa        return new ContactListFilter(filterType, null, null, null, null);
70be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    }
71be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
72be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    public static ContactListFilter createAccountFilter(String accountType, String accountName,
730647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa            String dataSet, Drawable icon) {
74be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        return new ContactListFilter(ContactListFilter.FILTER_TYPE_ACCOUNT, accountType,
750647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa                accountName, dataSet, icon);
76be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    }
77be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
78009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    /**
79009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov     * Returns true if this filter is based on data and may become invalid over time.
80009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov     */
81009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    public boolean isValidationRequired() {
820647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa        return filterType == FILTER_TYPE_ACCOUNT;
83009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov    }
84009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov
85f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    @Override
86f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    public String toString() {
87f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        switch (filterType) {
88264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            case FILTER_TYPE_DEFAULT:
89264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov                return "default";
90264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            case FILTER_TYPE_ALL_ACCOUNTS:
91264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov                return "all_accounts";
92264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            case FILTER_TYPE_CUSTOM:
93264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov                return "custom";
94264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            case FILTER_TYPE_STARRED:
95264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov                return "starred";
96264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
97264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov                return "with_phones";
98264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            case FILTER_TYPE_SINGLE_CONTACT:
99264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov                return "single";
100264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            case FILTER_TYPE_ACCOUNT:
1012b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                return "account: " + accountType + (dataSet != null ? "/" + dataSet : "")
1022b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                        + " " + accountName;
103f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        }
104f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        return super.toString();
105f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    }
106f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
107f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    @Override
108f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    public int compareTo(ContactListFilter another) {
109b5cd5959f0f0c5aa8ce50d3e872c0dcec12af9d4Dmitri Plotnikov        int res = accountName.compareTo(another.accountName);
110f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        if (res != 0) {
111f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov            return res;
112f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        }
113f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
114b5cd5959f0f0c5aa8ce50d3e872c0dcec12af9d4Dmitri Plotnikov        res = accountType.compareTo(another.accountType);
115f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        if (res != 0) {
116f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov            return res;
117f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        }
118f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
1190647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa        return filterType - another.filterType;
120f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    }
121f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
122f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    @Override
123f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    public int hashCode() {
124f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        int code = filterType;
125f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        if (accountType != null) {
126f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov            code = code * 31 + accountType.hashCode();
127f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov            code = code * 31 + accountName.hashCode();
128f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        }
1292b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        if (dataSet != null) {
1302b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            code = code * 31 + dataSet.hashCode();
1312b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        }
132f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        return code;
133f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    }
134f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
135f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    @Override
136f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    public boolean equals(Object other) {
137f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        if (this == other) {
138f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov            return true;
139f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        }
140f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
141f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        if (!(other instanceof ContactListFilter)) {
142f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov            return false;
143f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        }
144f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov
145f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov        ContactListFilter otherFilter = (ContactListFilter) other;
1466e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        if (filterType != otherFilter.filterType
1476e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                || !TextUtils.equals(accountName, otherFilter.accountName)
1482b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                || !TextUtils.equals(accountType, otherFilter.accountType)
1492b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                || !TextUtils.equals(dataSet, otherFilter.dataSet)) {
1506e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            return false;
1516e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        }
1526e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov
1530647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa        return true;
154f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov    }
155fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov
156be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan    /**
157be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan     * Store the given {@link ContactListFilter} to preferences. If the requested filter is
158be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan     * of type {@link #FILTER_TYPE_SINGLE_CONTACT} then do not save it to preferences because
159be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan     * it is a temporary state.
160be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan     */
161fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov    public static void storeToPreferences(SharedPreferences prefs, ContactListFilter filter) {
162be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan        if (filter != null && filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
163be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan            return;
164be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan        }
165fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov        prefs.edit()
166fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov            .putInt(KEY_FILTER_TYPE, filter == null ? FILTER_TYPE_DEFAULT : filter.filterType)
167fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov            .putString(KEY_ACCOUNT_NAME, filter == null ? null : filter.accountName)
168fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov            .putString(KEY_ACCOUNT_TYPE, filter == null ? null : filter.accountType)
1692b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            .putString(KEY_DATA_SET, filter == null ? null : filter.dataSet)
170fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov            .apply();
171fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov    }
172fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov
173d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa    /**
174d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa     * Try to obtain ContactListFilter object saved in SharedPreference.
175edb695b21967d464c7593f99368adf28a63247f7Daisuke Miyakawa     * If there's no info there, return ALL filter instead.
176d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa     */
177d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa    public static ContactListFilter restoreDefaultPreferences(SharedPreferences prefs) {
178d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa        ContactListFilter filter = restoreFromPreferences(prefs);
179d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa        if (filter == null) {
1800647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa            filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
1810647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa        }
182be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan        // "Group" filter is obsolete and thus is not exposed anymore. The "single contact mode"
183be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan        // should also not be stored in preferences anymore since it is a temporary state.
184be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan        if (filter.filterType == FILTER_TYPE_GROUP ||
185be79b8f05f45c4cddeea9106399521529ec27caeKatherine Kuan                filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
1860647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa            filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
187d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa        }
188d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa        return filter;
189d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa    }
190d4ed72eb6610b1318545741140569a973c4ab452Daisuke Miyakawa
1910647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa    private static ContactListFilter restoreFromPreferences(SharedPreferences prefs) {
192fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov        int filterType = prefs.getInt(KEY_FILTER_TYPE, FILTER_TYPE_DEFAULT);
193fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov        if (filterType == FILTER_TYPE_DEFAULT) {
194fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov            return null;
195fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov        }
196fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov
197be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        String accountName = prefs.getString(KEY_ACCOUNT_NAME, null);
198be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        String accountType = prefs.getString(KEY_ACCOUNT_TYPE, null);
1992b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        String dataSet = prefs.getString(KEY_DATA_SET, null);
2000647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa        return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
201fc7197e7f1bb7c8745c70a6a33dc0bec0e0fafeeDmitri Plotnikov    }
2026e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov
203264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov
204264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    @Override
205264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    public void writeToParcel(Parcel dest, int flags) {
206264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        dest.writeInt(filterType);
207264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        dest.writeString(accountName);
208264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        dest.writeString(accountType);
2092b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        dest.writeString(dataSet);
210264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    }
211264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov
212264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    public static final Parcelable.Creator<ContactListFilter> CREATOR =
213be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            new Parcelable.Creator<ContactListFilter>() {
214264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        @Override
215264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        public ContactListFilter createFromParcel(Parcel source) {
216264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            int filterType = source.readInt();
217be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            String accountName = source.readString();
218be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            String accountType = source.readString();
2192b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            String dataSet = source.readString();
2200647bdb63b41a968f6c07d1a1e600f5a0208d043Daisuke Miyakawa            return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
221264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        }
222264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov
223264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        @Override
224264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        public ContactListFilter[] newArray(int size) {
225264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov            return new ContactListFilter[size];
226264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        }
227264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    };
228264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov
229264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    @Override
230264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    public int describeContents() {
231264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov        return 0;
232264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov    }
233264023c04b75043fa77267fd1b940d0afb13421dDmitri Plotnikov
2346e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    /**
2356e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov     * Returns a string that can be used as a stable persistent identifier for this filter.
2366e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov     */
2376e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    public String getId() {
2386e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        if (mId == null) {
2396e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            StringBuilder sb = new StringBuilder();
2406e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            sb.append(filterType);
2416e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            if (accountType != null) {
2426e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                sb.append('-').append(accountType);
2436e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            }
2442b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            if (dataSet != null) {
2452b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                sb.append('/').append(dataSet);
2462b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro            }
2476e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            if (accountName != null) {
2486e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                sb.append('-').append(accountName.replace('-', '_'));
2496e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            }
2506e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            mId = sb.toString();
2516e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        }
2526e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        return mId;
2536e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    }
254a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa
255a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa    public String toDebugString() {
256a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        final StringBuilder builder = new StringBuilder();
257a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        builder.append("[filter type: " + filterType + " (" + filterTypeToString(filterType) + ")");
258a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        if (filterType == FILTER_TYPE_ACCOUNT) {
259a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            builder.append(", accountType: " + accountType)
260a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                    .append(", accountName: " + accountName)
261a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                    .append(", dataSet: " + dataSet);
262a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        }
263a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        builder.append(", icon: " + icon + "]");
264a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        return builder.toString();
265a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa    }
266a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa
267a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa    public static final String filterTypeToString(int filterType) {
268a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        switch (filterType) {
269a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            case FILTER_TYPE_DEFAULT:
270a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "FILTER_TYPE_DEFAULT";
271a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            case FILTER_TYPE_ALL_ACCOUNTS:
272a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "FILTER_TYPE_ALL_ACCOUNTS";
273a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            case FILTER_TYPE_CUSTOM:
274a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "FILTER_TYPE_CUSTOM";
275a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            case FILTER_TYPE_STARRED:
276a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "FILTER_TYPE_STARRED";
277a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
278a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY";
279a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            case FILTER_TYPE_SINGLE_CONTACT:
280a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "FILTER_TYPE_SINGLE_CONTACT";
281a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            case FILTER_TYPE_ACCOUNT:
282a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "FILTER_TYPE_ACCOUNT";
283a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa            default:
284a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa                return "(unknown)";
285a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa        }
286a012aec6f22dd6a37c518c895db45b173e186ef4Daisuke Miyakawa    }
287f7d450d12508ea67d3170068dcdf1a226358b06fDmitri Plotnikov}
288