Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9655d2a authored by Katherine Kuan's avatar Katherine Kuan
Browse files

DO NOT MERGE Fix account list for group editing

- Don't use contact writable account list to populate the
account picker when creating new groups, instead check for
isGroupMembershipEditable() on the account type

- Repeat the same for determining whether the "new group"
button should appear in the PeopleActivity or not

Bug: 5360120
Change-Id: Ia1ec62eff3fe4fd5b495548218c58f238ff49788
parent 46c864c9
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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();
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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) {
+16 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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.
@@ -604,7 +608,7 @@ public class PeopleActivity extends ContactsActivity
            invalidateOptionsMenu();
            showEmptyStateForTab(tab);
            if (tab == TabState.GROUPS) {
                mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable());
                mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable());
            }
            return;
        }
@@ -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);
@@ -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);
@@ -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();
            }
@@ -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;
            }
@@ -950,7 +955,7 @@ public class PeopleActivity extends ContactsActivity

            TabState tab = mActionBarAdapter.getCurrentTab();
            if (tab == TabState.GROUPS) {
                mGroupsFragment.setAddAccountsVisibility(!areAccountsAvailable());
                mGroupsFragment.setAddAccountsVisibility(!areGroupWritableAccountsAvailable());
            }
        }

@@ -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);
@@ -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
+3 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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);
+9 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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