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