/** * Try to obtain ContactListFilter object saved in SharedPreference. * If there's no info there, return ALL filter instead. */ public static ContactListFilter restoreDefaultPreferences(SharedPreferences prefs) { ContactListFilter filter = restoreFromPreferences(prefs); if (filter == null) { filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS); } // "Group" filter is obsolete and thus is not exposed anymore. The "single contact mode" // should also not be stored in preferences anymore since it is a temporary state. if (filter.filterType == FILTER_TYPE_GROUP || filter.filterType == FILTER_TYPE_SINGLE_CONTACT) { filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS); } return filter; }
public static ContactListFilter createAccountFilter(String accountType, String accountName, String dataSet, Drawable icon) { return new ContactListFilter(ContactListFilter.FILTER_TYPE_ACCOUNT, accountType, accountName, dataSet, icon); }
private void setContactListFilter(ContactListFilter filter, boolean persistent, boolean notifyListeners) { if (!filter.equals(mFilter)) { mFilter = filter; if (persistent) { ContactListFilter.storeToPreferences(getSharedPreferences(), mFilter); } if (notifyListeners && !mListeners.isEmpty()) { notifyContactListFilterChanged(); } } }
@Override public void selectCustomFilter() { setContactListFilter(ContactListFilter.createFilterWithType( ContactListFilter.FILTER_TYPE_CUSTOM), true); }
private static List<ContactListFilter> loadAccountFilters(Context context) { final ArrayList<ContactListFilter> result = Lists.newArrayList(); final ArrayList<ContactListFilter> accountFilters = Lists.newArrayList(); final AccountTypeManager accountTypes = AccountTypeManager.getInstance(context); List<AccountWithDataSet> accounts = accountTypes.getAccounts(false); for (AccountWithDataSet account : accounts) { AccountType accountType = accountTypes.getAccountType(account.type, account.dataSet); if (accountType.isExtension() && !account.hasData(context)) { // Hide extensions with no raw_contacts. continue; } Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null; accountFilters.add(ContactListFilter.createAccountFilter( account.type, account.name, account.dataSet, icon)); } // Always show "All", even when there's no accounts. (We may have local contacts) result.add(ContactListFilter.createFilterWithType( ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS)); final int count = accountFilters.size(); if (count >= 1) { // If we only have one account, don't show it as "account", instead show it as "all" if (count > 1) { result.addAll(accountFilters); } result.add(ContactListFilter.createFilterWithType( ContactListFilter.FILTER_TYPE_CUSTOM)); } return result; }
@Override public void checkFilterValidity(boolean notifyListeners) { if (mFilter == null) { return; } switch (mFilter.filterType) { case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: setContactListFilter( ContactListFilter.restoreDefaultPreferences(getSharedPreferences()), false, notifyListeners); break; case ContactListFilter.FILTER_TYPE_ACCOUNT: if (!filterAccountExists()) { // The current account filter points to invalid account. Use "all" filter // instead. setContactListFilter(ContactListFilter.createFilterWithType( ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), true, notifyListeners); } } }
public void setFilter(ContactListFilter filter) { if ((mFilter == null && filter == null) || (mFilter != null && mFilter.equals(filter))) { return; } mFilter = filter; if (mLoaderStarted) { reloadData(); } updateFilterHeaderView(); }
filter.addAccountQueryParameterToUrl(uriBuilder); break;
public String toDebugString() { final StringBuilder builder = new StringBuilder(); builder.append("[filter type: " + filterType + " (" + filterTypeToString(filterType) + ")"); if (filterType == FILTER_TYPE_ACCOUNT) { builder.append(", accountType: " + accountType) .append(", accountName: " + accountName) .append(", dataSet: " + dataSet); } builder.append(", icon: " + icon + "]"); return builder.toString(); }
public ContactListFilterControllerImpl(Context context) { mContext = context; mFilter = ContactListFilter.restoreDefaultPreferences(getSharedPreferences()); checkFilterValidity(true /* notify listeners */); }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_CANCELED && mCustomFilterView != null && !mIsCustomFilterViewSelected) { mCustomFilterView.setActivated(false); return; } if (resultCode != Activity.RESULT_OK) { return; } switch (requestCode) { case SUBACTIVITY_CUSTOMIZE_FILTER: { final Intent intent = new Intent(); ContactListFilter filter = ContactListFilter.createFilterWithType( ContactListFilter.FILTER_TYPE_CUSTOM); intent.putExtra(KEY_EXTRA_CONTACT_LIST_FILTER, filter); setResult(Activity.RESULT_OK, intent); finish(); break; } } }
public View getView(int position, View convertView, ViewGroup parent) { final ContactListFilterView view; if (convertView != null) { view = (ContactListFilterView) convertView; } else { view = (ContactListFilterView) mLayoutInflater.inflate( R.layout.contact_list_filter_item, parent, false); } view.setSingleAccount(mFilters.size() == 1); final ContactListFilter filter = mFilters.get(position); view.setContactListFilter(filter); view.bindView(mAccountTypes); view.setTag(filter); view.setActivated(filter.equals(mCurrentFilter)); return view; } }
protected void configureUri(CursorLoader loader, long directoryId, ContactListFilter filter) { Uri uri = Contacts.CONTENT_URI; if (filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) { String lookupKey = getSelectedContactLookupKey(); if (lookupKey != null) { uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey); } else { uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, getSelectedContactId()); } } if (directoryId == Directory.DEFAULT && isSectionHeaderDisplayEnabled()) { uri = ContactListAdapter.buildSectionIndexerUri(uri); } // The "All accounts" filter is the same as the entire contents of Directory.DEFAULT if (filter != null && filter.filterType != ContactListFilter.FILTER_TYPE_CUSTOM && filter.filterType != ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) { final Uri.Builder builder = uri.buildUpon(); builder.appendQueryParameter( ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)); if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) { filter.addAccountQueryParameterToUrl(builder); } uri = builder.build(); } loader.setUri(uri); }
@Override protected ContactEntryListAdapter createListAdapter() { final DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity()) { @Override protected void bindView(View itemView, int partition, Cursor cursor, int position) { super.bindView(itemView, partition, cursor, position); itemView.setTag(this.getContactUri(partition, cursor)); } }; adapter.setDisplayPhotos(true); adapter.setFilter(ContactListFilter.createFilterWithType( ContactListFilter.FILTER_TYPE_DEFAULT)); adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled()); return adapter; }
public static ContactListFilter createFilterWithType(int filterType) { return new ContactListFilter(filterType, null, null, null, null); }
private static ContactListFilter restoreFromPreferences(SharedPreferences prefs) { int filterType = prefs.getInt(KEY_FILTER_TYPE, FILTER_TYPE_DEFAULT); if (filterType == FILTER_TYPE_DEFAULT) { return null; } String accountName = prefs.getString(KEY_ACCOUNT_NAME, null); String accountType = prefs.getString(KEY_ACCOUNT_TYPE, null); String dataSet = prefs.getString(KEY_DATA_SET, null); return new ContactListFilter(filterType, accountType, accountName, dataSet, null); }