Loading src/com/android/contacts/ContactsUtils.java +7 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.contacts; import com.android.contacts.model.AccountType; import com.android.contacts.model.AccountTypeManager; import com.android.contacts.model.AccountWithDataSet; import com.android.contacts.test.NeededForTesting; Loading Loading @@ -172,11 +173,15 @@ public class ContactsUtils { return detector.detectCountry().getCountryIso(); } public static boolean areAccountsAvailable(Context context) { public static boolean areContactWritableAccountsAvailable(Context context) { final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(context).getAccounts(true /* writeable */); return !accounts.isEmpty(); } public static boolean areGroupWritableAccountsAvailable(Context context) { final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(context).getGroupWritableAccounts(); return !accounts.isEmpty(); } } src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java +3 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.contacts.activities; import android.accounts.Account; import android.app.Activity; import android.content.Intent; import android.os.Bundle; Loading @@ -34,6 +33,7 @@ import com.android.contacts.editor.ContactEditorUtils; import com.android.contacts.model.AccountTypeManager; import com.android.contacts.model.AccountWithDataSet; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import java.util.List; Loading Loading @@ -97,7 +97,8 @@ public class ContactEditorAccountsChangedActivity extends Activity { button.setOnClickListener(mAddAccountClickListener); final ListView accountListView = (ListView) findViewById(R.id.account_list); mAccountListAdapter = new AccountsListAdapter(this, true); mAccountListAdapter = new AccountsListAdapter(this, AccountListFilter.ACCOUNTS_CONTACT_WRITABLE); accountListView.setAdapter(mAccountListAdapter); accountListView.setOnItemClickListener(mAccountListItemClickListener); } else if (numAccounts == 1) { Loading src/com/android/contacts/activities/PeopleActivity.java +16 −10 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.android.contacts.preference.DisplayOptionsPreferenceFragment; import com.android.contacts.util.AccountPromptUtils; import com.android.contacts.util.AccountSelectionUtil; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import com.android.contacts.util.Constants; import com.android.contacts.util.DialogManager; import com.android.contacts.util.PhoneCapabilityTester; Loading Loading @@ -200,10 +201,13 @@ public class PeopleActivity extends ContactsActivity return mProviderStatus == ProviderStatus.STATUS_NORMAL; } private boolean areAccountsAvailable() { return ContactsUtils.areAccountsAvailable(this); private boolean areContactWritableAccountsAvailable() { return ContactsUtils.areContactWritableAccountsAvailable(this); } private boolean areGroupWritableAccountsAvailable() { return ContactsUtils.areGroupWritableAccountsAvailable(this); } /** * Initialize fragments that are (or may not be) in the layout. Loading Loading @@ -604,7 +608,7 @@ public class PeopleActivity extends ContactsActivity invalidateOptionsMenu(); showEmptyStateForTab(tab); if (tab == TabState.GROUPS) { mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); } return; } Loading @@ -625,7 +629,7 @@ public class PeopleActivity extends ContactsActivity mFavoritesView.setVisibility(View.GONE); mBrowserView.setVisibility(View.VISIBLE); mDetailsView.setVisibility(View.VISIBLE); mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); break; case ALL: mFavoritesView.setVisibility(View.GONE); Loading Loading @@ -686,7 +690,7 @@ public class PeopleActivity extends ContactsActivity break; case GROUPS: mContactsUnavailableFragment.setMessageText(R.string.noGroups, areAccountsAvailable() ? -1 : R.string.noAccounts); areGroupWritableAccountsAvailable() ? -1 : R.string.noAccounts); break; case ALL: mContactsUnavailableFragment.setMessageText(R.string.noContacts, -1); Loading @@ -712,7 +716,7 @@ public class PeopleActivity extends ContactsActivity mActionBarAdapter.setCurrentTab(selectedTab, false); showEmptyStateForTab(selectedTab); if (selectedTab == TabState.GROUPS) { mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); } invalidateOptionsMenu(); } Loading Loading @@ -922,7 +926,8 @@ public class PeopleActivity extends ContactsActivity // If there are no accounts on the device and we should show the "no account" prompt // (based on {@link SharedPreferences}), then launch the account setup activity so the // user can sign-in or create an account. if (!areAccountsAvailable() && AccountPromptUtils.shouldShowAccountPrompt(this)) { if (!areContactWritableAccountsAvailable() && AccountPromptUtils.shouldShowAccountPrompt(this)) { AccountPromptUtils.launchAccountPrompt(this); return; } Loading Loading @@ -950,7 +955,7 @@ public class PeopleActivity extends ContactsActivity TabState tab = mActionBarAdapter.getCurrentTab(); if (tab == TabState.GROUPS) { mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); } } Loading Loading @@ -1306,7 +1311,7 @@ public class PeopleActivity extends ContactsActivity break; case GROUPS: // Do not display the "new group" button if no accounts are available if (areAccountsAvailable()) { if (areGroupWritableAccountsAvailable()) { addGroupMenu.setVisible(true); } else { addGroupMenu.setVisible(false); Loading Loading @@ -1412,7 +1417,8 @@ public class PeopleActivity extends ContactsActivity popup.setAnchorView(mAddGroupImageView); // Create a list adapter with all writeable accounts (assume that the writeable accounts all // allow group creation). final AccountsListAdapter adapter = new AccountsListAdapter(this, true); final AccountsListAdapter adapter = new AccountsListAdapter(this, AccountListFilter.ACCOUNTS_GROUP_WRITABLE); popup.setAdapter(adapter); popup.setOnItemClickListener(new OnItemClickListener() { @Override Loading src/com/android/contacts/editor/ContactEditorFragment.java +3 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.contacts.model.EntityDeltaList; import com.android.contacts.model.EntityModifier; import com.android.contacts.model.GoogleAccountType; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import android.accounts.Account; import android.app.Activity; Loading Loading @@ -826,7 +827,8 @@ public class ContactEditorFragment extends Fragment implements public void onClick(View v) { final ListPopupWindow popup = new ListPopupWindow(mContext, null); final AccountsListAdapter adapter = new AccountsListAdapter(mContext, true, currentAccount); new AccountsListAdapter(mContext, AccountListFilter.ACCOUNTS_CONTACT_WRITABLE, currentAccount); popup.setWidth(anchorView.getWidth()); popup.setAnchorView(anchorView); popup.setAdapter(adapter); Loading src/com/android/contacts/editor/SelectAccountDialogFragment.java +9 −3 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.contacts.editor; import com.android.contacts.R; import com.android.contacts.model.AccountWithDataSet; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import android.app.AlertDialog; import android.app.Dialog; Loading @@ -37,13 +38,18 @@ import android.os.Bundle; public class SelectAccountDialogFragment extends DialogFragment { public static final String TAG = "SelectAccountDialogFragment"; private int mTitleResourceId = R.string.dialog_new_contact_account; // TODO: This dialog is used in the context of group editing by default, but should be generic // to work for contact editing as well. Save/restore the resource ID and account list filter // that are passed in as parameters on device rotation. Bug: 5369853 private int mTitleResourceId = R.string.dialog_new_group_account; private AccountListFilter mAccountListFilter = AccountListFilter.ACCOUNTS_GROUP_WRITABLE; public SelectAccountDialogFragment() { } public SelectAccountDialogFragment(int titleResourceId) { public SelectAccountDialogFragment(int titleResourceId, AccountListFilter accountListFilter) { mTitleResourceId = titleResourceId; mAccountListFilter = accountListFilter; } @Override Loading @@ -51,7 +57,7 @@ public class SelectAccountDialogFragment extends DialogFragment { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); final AccountsListAdapter accountAdapter = new AccountsListAdapter(builder.getContext(), true); mAccountListFilter); final DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener() { Loading Loading
src/com/android/contacts/ContactsUtils.java +7 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.contacts; import com.android.contacts.model.AccountType; import com.android.contacts.model.AccountTypeManager; import com.android.contacts.model.AccountWithDataSet; import com.android.contacts.test.NeededForTesting; Loading Loading @@ -172,11 +173,15 @@ public class ContactsUtils { return detector.detectCountry().getCountryIso(); } public static boolean areAccountsAvailable(Context context) { public static boolean areContactWritableAccountsAvailable(Context context) { final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(context).getAccounts(true /* writeable */); return !accounts.isEmpty(); } public static boolean areGroupWritableAccountsAvailable(Context context) { final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(context).getGroupWritableAccounts(); return !accounts.isEmpty(); } }
src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java +3 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.contacts.activities; import android.accounts.Account; import android.app.Activity; import android.content.Intent; import android.os.Bundle; Loading @@ -34,6 +33,7 @@ import com.android.contacts.editor.ContactEditorUtils; import com.android.contacts.model.AccountTypeManager; import com.android.contacts.model.AccountWithDataSet; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import java.util.List; Loading Loading @@ -97,7 +97,8 @@ public class ContactEditorAccountsChangedActivity extends Activity { button.setOnClickListener(mAddAccountClickListener); final ListView accountListView = (ListView) findViewById(R.id.account_list); mAccountListAdapter = new AccountsListAdapter(this, true); mAccountListAdapter = new AccountsListAdapter(this, AccountListFilter.ACCOUNTS_CONTACT_WRITABLE); accountListView.setAdapter(mAccountListAdapter); accountListView.setOnItemClickListener(mAccountListItemClickListener); } else if (numAccounts == 1) { Loading
src/com/android/contacts/activities/PeopleActivity.java +16 −10 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.android.contacts.preference.DisplayOptionsPreferenceFragment; import com.android.contacts.util.AccountPromptUtils; import com.android.contacts.util.AccountSelectionUtil; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import com.android.contacts.util.Constants; import com.android.contacts.util.DialogManager; import com.android.contacts.util.PhoneCapabilityTester; Loading Loading @@ -200,10 +201,13 @@ public class PeopleActivity extends ContactsActivity return mProviderStatus == ProviderStatus.STATUS_NORMAL; } private boolean areAccountsAvailable() { return ContactsUtils.areAccountsAvailable(this); private boolean areContactWritableAccountsAvailable() { return ContactsUtils.areContactWritableAccountsAvailable(this); } private boolean areGroupWritableAccountsAvailable() { return ContactsUtils.areGroupWritableAccountsAvailable(this); } /** * Initialize fragments that are (or may not be) in the layout. Loading Loading @@ -604,7 +608,7 @@ public class PeopleActivity extends ContactsActivity invalidateOptionsMenu(); showEmptyStateForTab(tab); if (tab == TabState.GROUPS) { mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); } return; } Loading @@ -625,7 +629,7 @@ public class PeopleActivity extends ContactsActivity mFavoritesView.setVisibility(View.GONE); mBrowserView.setVisibility(View.VISIBLE); mDetailsView.setVisibility(View.VISIBLE); mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); break; case ALL: mFavoritesView.setVisibility(View.GONE); Loading Loading @@ -686,7 +690,7 @@ public class PeopleActivity extends ContactsActivity break; case GROUPS: mContactsUnavailableFragment.setMessageText(R.string.noGroups, areAccountsAvailable() ? -1 : R.string.noAccounts); areGroupWritableAccountsAvailable() ? -1 : R.string.noAccounts); break; case ALL: mContactsUnavailableFragment.setMessageText(R.string.noContacts, -1); Loading @@ -712,7 +716,7 @@ public class PeopleActivity extends ContactsActivity mActionBarAdapter.setCurrentTab(selectedTab, false); showEmptyStateForTab(selectedTab); if (selectedTab == TabState.GROUPS) { mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); } invalidateOptionsMenu(); } Loading Loading @@ -922,7 +926,8 @@ public class PeopleActivity extends ContactsActivity // If there are no accounts on the device and we should show the "no account" prompt // (based on {@link SharedPreferences}), then launch the account setup activity so the // user can sign-in or create an account. if (!areAccountsAvailable() && AccountPromptUtils.shouldShowAccountPrompt(this)) { if (!areContactWritableAccountsAvailable() && AccountPromptUtils.shouldShowAccountPrompt(this)) { AccountPromptUtils.launchAccountPrompt(this); return; } Loading Loading @@ -950,7 +955,7 @@ public class PeopleActivity extends ContactsActivity TabState tab = mActionBarAdapter.getCurrentTab(); if (tab == TabState.GROUPS) { mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable()); mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable()); } } Loading Loading @@ -1306,7 +1311,7 @@ public class PeopleActivity extends ContactsActivity break; case GROUPS: // Do not display the "new group" button if no accounts are available if (areAccountsAvailable()) { if (areGroupWritableAccountsAvailable()) { addGroupMenu.setVisible(true); } else { addGroupMenu.setVisible(false); Loading Loading @@ -1412,7 +1417,8 @@ public class PeopleActivity extends ContactsActivity popup.setAnchorView(mAddGroupImageView); // Create a list adapter with all writeable accounts (assume that the writeable accounts all // allow group creation). final AccountsListAdapter adapter = new AccountsListAdapter(this, true); final AccountsListAdapter adapter = new AccountsListAdapter(this, AccountListFilter.ACCOUNTS_GROUP_WRITABLE); popup.setAdapter(adapter); popup.setOnItemClickListener(new OnItemClickListener() { @Override Loading
src/com/android/contacts/editor/ContactEditorFragment.java +3 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.contacts.model.EntityDeltaList; import com.android.contacts.model.EntityModifier; import com.android.contacts.model.GoogleAccountType; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import android.accounts.Account; import android.app.Activity; Loading Loading @@ -826,7 +827,8 @@ public class ContactEditorFragment extends Fragment implements public void onClick(View v) { final ListPopupWindow popup = new ListPopupWindow(mContext, null); final AccountsListAdapter adapter = new AccountsListAdapter(mContext, true, currentAccount); new AccountsListAdapter(mContext, AccountListFilter.ACCOUNTS_CONTACT_WRITABLE, currentAccount); popup.setWidth(anchorView.getWidth()); popup.setAnchorView(anchorView); popup.setAdapter(adapter); Loading
src/com/android/contacts/editor/SelectAccountDialogFragment.java +9 −3 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.contacts.editor; import com.android.contacts.R; import com.android.contacts.model.AccountWithDataSet; import com.android.contacts.util.AccountsListAdapter; import com.android.contacts.util.AccountsListAdapter.AccountListFilter; import android.app.AlertDialog; import android.app.Dialog; Loading @@ -37,13 +38,18 @@ import android.os.Bundle; public class SelectAccountDialogFragment extends DialogFragment { public static final String TAG = "SelectAccountDialogFragment"; private int mTitleResourceId = R.string.dialog_new_contact_account; // TODO: This dialog is used in the context of group editing by default, but should be generic // to work for contact editing as well. Save/restore the resource ID and account list filter // that are passed in as parameters on device rotation. Bug: 5369853 private int mTitleResourceId = R.string.dialog_new_group_account; private AccountListFilter mAccountListFilter = AccountListFilter.ACCOUNTS_GROUP_WRITABLE; public SelectAccountDialogFragment() { } public SelectAccountDialogFragment(int titleResourceId) { public SelectAccountDialogFragment(int titleResourceId, AccountListFilter accountListFilter) { mTitleResourceId = titleResourceId; mAccountListFilter = accountListFilter; } @Override Loading @@ -51,7 +57,7 @@ public class SelectAccountDialogFragment extends DialogFragment { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); final AccountsListAdapter accountAdapter = new AccountsListAdapter(builder.getContext(), true); mAccountListFilter); final DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener() { Loading