summaryrefslogtreecommitdiff
path: root/src/com/android/contacts/util
diff options
context:
space:
mode:
authorMarcus Hagerott <mhagerott@google.com>2016-12-12 17:21:57 -0800
committerMarcus Hagerott <mhagerott@google.com>2016-12-16 16:43:03 -0800
commit75895e73379aa26a3d4135c772af4ecb8a79b4c9 (patch)
tree1187a975c90fb08a739c4cde19a150eef797514e /src/com/android/contacts/util
parentcdb539b3abfcc1447be337ef3741e7501510cf14 (diff)
downloadContacts-75895e73379aa26a3d4135c772af4ecb8a79b4c9.tar.gz
Add AccountInfo class
This holds the AccountWithDataSet, AccountType and AccountDisplayInfo for an account because many usages of accounts need all three of these. Test: manually verify that accounts in nav drawer are correct Bug 33627801 Change-Id: I39962f9945714aa7ce48aca97f220f119a1741cd
Diffstat (limited to 'src/com/android/contacts/util')
-rw-r--r--src/com/android/contacts/util/AccountFilterUtil.java45
-rw-r--r--src/com/android/contacts/util/AccountsListAdapter.java56
-rw-r--r--src/com/android/contacts/util/concurrent/ListenableFutureLoader.java23
3 files changed, 63 insertions, 61 deletions
diff --git a/src/com/android/contacts/util/AccountFilterUtil.java b/src/com/android/contacts/util/AccountFilterUtil.java
index 9eb8e7bcc..218604ceb 100644
--- a/src/com/android/contacts/util/AccountFilterUtil.java
+++ b/src/com/android/contacts/util/AccountFilterUtil.java
@@ -42,6 +42,7 @@ import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.Contact;
import com.android.contacts.model.account.AccountDisplayInfo;
import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountInfo;
import com.android.contacts.model.account.AccountType;
import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.preference.ContactsPreferences;
@@ -113,53 +114,33 @@ public class AccountFilterUtil {
public static class FilterLoader extends ListenableFutureLoader<List<ContactListFilter>> {
private AccountTypeManager mAccountTypeManager;
private DeviceLocalAccountTypeFactory mDeviceLocalFactory;
- private LocalBroadcastManager mLocalBroadcastManager;
- private BroadcastReceiver mReceiver;
public FilterLoader(Context context) {
- super(context);
+ super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
mAccountTypeManager = AccountTypeManager.getInstance(context);
mDeviceLocalFactory = ObjectFactory.getDeviceLocalAccountTypeFactory(context);
- mLocalBroadcastManager = LocalBroadcastManager.getInstance(context);
}
- @Override
- protected void onStartLoading() {
- super.onStartLoading();
- if (mReceiver == null) {
- mReceiver = new ForceLoadReceiver();
- mLocalBroadcastManager.registerReceiver(mReceiver,
- new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
- }
- }
-
- @Override
- protected void onReset() {
- super.onReset();
- if (mReceiver != null) {
- mLocalBroadcastManager.unregisterReceiver(mReceiver);
- }
- }
@Override
protected ListenableFuture<List<ContactListFilter>> loadData() {
- return Futures.transform(mAccountTypeManager.filterAccountsByTypeAsync(
+ return Futures.transform(mAccountTypeManager.filterAccountsAsync(
AccountTypeManager.writableFilter()),
- new Function<List<AccountWithDataSet>, List<ContactListFilter>>() {
+ new Function<List<AccountInfo>, List<ContactListFilter>>() {
@Override
- public List<ContactListFilter> apply(List<AccountWithDataSet> input) {
+ public List<ContactListFilter> apply(List<AccountInfo> input) {
return getFiltersForAccounts(input);
}
}, ContactsExecutors.getDefaultThreadPoolExecutor());
}
- private List<ContactListFilter> getFiltersForAccounts(List<AccountWithDataSet> accounts) {
- final ArrayList<ContactListFilter> accountFilters = Lists.newArrayList();
- AccountTypeManager.sortAccounts(getDefaultAccount(getContext()), accounts);
+ private List<ContactListFilter> getFiltersForAccounts(List<AccountInfo> accounts) {
+ final ArrayList<ContactListFilter> accountFilters = new ArrayList<>();
+ AccountInfo.sortAccounts(getDefaultAccount(getContext()), accounts);
- for (AccountWithDataSet account : accounts) {
- final AccountType accountType =
- mAccountTypeManager.getAccountType(account.type, account.dataSet);
+ for (AccountInfo accountInfo : accounts) {
+ final AccountType accountType = accountInfo.getType();
+ final AccountWithDataSet account = accountInfo.getAccount();
if ((accountType.isExtension() ||
DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
mDeviceLocalFactory, account.type)) &&
@@ -178,9 +159,7 @@ public class AccountFilterUtil {
}
}
- final ArrayList<ContactListFilter> result = Lists.newArrayList();
- result.addAll(accountFilters);
- return result;
+ return accountFilters;
}
}
diff --git a/src/com/android/contacts/util/AccountsListAdapter.java b/src/com/android/contacts/util/AccountsListAdapter.java
index 94a7c29ac..005bb8d78 100644
--- a/src/com/android/contacts/util/AccountsListAdapter.java
+++ b/src/com/android/contacts/util/AccountsListAdapter.java
@@ -25,11 +25,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.android.contacts.R;
-import com.android.contacts.list.ContactListFilter;
import com.android.contacts.model.AccountTypeManager;
-import com.android.contacts.model.account.AccountDisplayInfo;
-import com.android.contacts.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountInfo;
import com.android.contacts.model.account.AccountWithDataSet;
import java.util.ArrayList;
@@ -40,32 +37,41 @@ import java.util.List;
*/
public final class AccountsListAdapter extends BaseAdapter {
private final LayoutInflater mInflater;
- private final List<AccountDisplayInfo> mAccountDisplayInfoList;
- private final List<AccountWithDataSet> mAccounts;
+ private final List<AccountInfo> mAccounts;
private final Context mContext;
private int mCustomLayout = -1;
public enum AccountListFilter {
ALL_ACCOUNTS {
@Override
- public List<AccountWithDataSet> getAccounts(Context context) {
+ public List<AccountWithDataSet> getSourceAccounts(Context context) {
return AccountTypeManager.getInstance(context).getAccounts(false);
}
},
ACCOUNTS_CONTACT_WRITABLE {
@Override
- public List<AccountWithDataSet> getAccounts(Context context) {
+ public List<AccountWithDataSet> getSourceAccounts(Context context) {
return AccountTypeManager.getInstance(context).getAccounts(true);
}
},
ACCOUNTS_GROUP_WRITABLE {
@Override
- public List<AccountWithDataSet> getAccounts(Context context) {
+ public List<AccountWithDataSet> getSourceAccounts(Context context) {
return AccountTypeManager.getInstance(context).getGroupWritableAccounts();
}
};
- public abstract List<AccountWithDataSet> getAccounts(Context context);
+ private List<AccountInfo> getAccounts(Context context) {
+ final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
+ final List<AccountInfo> result = new ArrayList<>();
+ final List<AccountWithDataSet> sourceAccounts = getSourceAccounts(context);
+ for (AccountWithDataSet account : sourceAccounts) {
+ result.add(accountTypeManager.getAccountInfoForAccount(account));
+ }
+ return result;
+ }
+
+ public abstract List<AccountWithDataSet> getSourceAccounts(Context context);
}
public AccountsListAdapter(Context context, AccountListFilter filter) {
@@ -77,7 +83,7 @@ public final class AccountsListAdapter extends BaseAdapter {
this(context, filter.getAccounts(context), currentAccount);
}
- public AccountsListAdapter(Context context, List<AccountWithDataSet> accounts) {
+ public AccountsListAdapter(Context context, List<AccountInfo> accounts) {
this(context, accounts, null);
}
@@ -85,22 +91,18 @@ public final class AccountsListAdapter extends BaseAdapter {
* @param currentAccount the Account currently selected by the user, which should come
* first in the list. Can be null.
*/
- public AccountsListAdapter(Context context, List<AccountWithDataSet> accounts,
+ public AccountsListAdapter(Context context, List<AccountInfo> accounts,
AccountWithDataSet currentAccount) {
mContext = context;
- if (currentAccount != null
+
+ final AccountInfo currentInfo = AccountInfo.getAccount(accounts, currentAccount);
+ if (currentInfo != null
&& !accounts.isEmpty()
- && !accounts.get(0).equals(currentAccount)
- && accounts.remove(currentAccount)) {
- accounts.add(0, currentAccount);
+ && !accounts.get(0).sameAccount(currentAccount)
+ && accounts.remove(currentInfo)) {
+ accounts.add(0, currentInfo);
}
- final AccountDisplayInfoFactory factory = new AccountDisplayInfoFactory(context,
- accounts);
- mAccountDisplayInfoList = new ArrayList<>(accounts.size());
- for (AccountWithDataSet account : accounts) {
- mAccountDisplayInfoList.add(factory.getAccountDisplayInfo(account));
- }
mInflater = LayoutInflater.from(context);
mAccounts = accounts;
@@ -120,22 +122,22 @@ public final class AccountsListAdapter extends BaseAdapter {
final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
final ImageView icon = (ImageView) resultView.findViewById(android.R.id.icon);
- text1.setText(mAccountDisplayInfoList.get(position).getTypeLabel());
- text2.setText(mAccountDisplayInfoList.get(position).getNameLabel());
+ text1.setText(mAccounts.get(position).getTypeLabel());
+ text2.setText(mAccounts.get(position).getNameLabel());
- icon.setImageDrawable(mAccountDisplayInfoList.get(position).getIcon());
+ icon.setImageDrawable(mAccounts.get(position).getIcon());
return resultView;
}
@Override
public int getCount() {
- return mAccountDisplayInfoList.size();
+ return mAccounts.size();
}
@Override
public AccountWithDataSet getItem(int position) {
- return mAccountDisplayInfoList.get(position).getSource();
+ return mAccounts.get(position).getAccount();
}
@Override
diff --git a/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java b/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java
index f7edb6444..8c90d8763 100644
--- a/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java
+++ b/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java
@@ -18,7 +18,9 @@ package com.android.contacts.util.concurrent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.Loader;
+import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import com.google.common.util.concurrent.FutureCallback;
@@ -38,9 +40,14 @@ import java.util.concurrent.Executor;
public abstract class ListenableFutureLoader<D> extends Loader<D> {
private static final String TAG = "FutureLoader";
+ private final IntentFilter mReloadFilter;
+ private final Executor mUiExecutor;
+ private final LocalBroadcastManager mLocalBroadcastManager;
+
private ListenableFuture<D> mFuture;
private D mLoadedData;
- private Executor mUiExecutor;
+
+ private BroadcastReceiver mReceiver;
/**
* Stores away the application context associated with context.
@@ -53,12 +60,23 @@ public abstract class ListenableFutureLoader<D> extends Loader<D> {
* @param context used to retrieve the application context.
*/
public ListenableFutureLoader(Context context) {
+ this(context, null);
+ }
+
+ public ListenableFutureLoader(Context context, IntentFilter reloadBroadcastFilter) {
super(context);
mUiExecutor = ContactsExecutors.newUiThreadExecutor();
+ mReloadFilter = reloadBroadcastFilter;
+ mLocalBroadcastManager = LocalBroadcastManager.getInstance(context);
}
@Override
protected void onStartLoading() {
+ if (mReloadFilter != null && mReceiver == null) {
+ mReceiver = new ForceLoadReceiver();
+ mLocalBroadcastManager.registerReceiver(mReceiver, mReloadFilter);
+ }
+
if (mLoadedData != null) {
deliverResult(mLoadedData);
}
@@ -105,6 +123,9 @@ public abstract class ListenableFutureLoader<D> extends Loader<D> {
protected void onReset() {
mFuture = null;
mLoadedData = null;
+ if (mReceiver != null) {
+ mLocalBroadcastManager.unregisterReceiver(mReceiver);
+ }
}
protected abstract ListenableFuture<D> loadData();