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

Commit fac695a3 authored by Marcus Hagerott's avatar Marcus Hagerott
Browse files

Add device and SIM to AccountTypeManager

This makes these account types available throughout the app rather than
just the Nav drawer.

Test:
Added unit tests for new classes; run with:
$ adb shell am instrument -w \
  com.google.android.tests/android.test.InstrumentationTestRunner

Manually on Nexus 6, LG G5 and Samsung S7 with device and SIM contacts
in CP2 by verifying "Device" and "SIM" options were available in
* nav drawer
* account list accessed by Pressing FAB without default account set
* editor account dropdown for new contact
* editor account label  when editing existing contact
* picker for default account in settings
* settings customize screen account list

Bug 30867780

Change-Id: I329381ccc58d59f2e27f65a3d9dc0164fb20c971
parent 46cb310f
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -19,20 +19,23 @@
-keep class com.android.contacts.common.database.NoNullCursorAsyncQueryHandler { *; }
-keep class com.android.contacts.common.format.FormatUtils { *; }
-keep class com.android.contacts.common.format.TextHighlighter { *; }
-keep class com.android.contacts.common.list.ContactListFilter { *; }
-keep class com.android.contacts.common.list.ContactListItemView { *; }
-keep class com.android.contacts.common.list.ContactsSectionIndexer { *; }
-keep class com.android.contacts.common.location.CountryDetector { *; }
-keep class com.android.contacts.common.model.account.AccountDisplayInfo { *; }
-keep class com.android.contacts.common.model.account.AccountDisplayInfoFactory { *; }
-keep class com.android.contacts.common.model.account.AccountType { *; }
-keep class com.android.contacts.common.model.account.AccountType$* { *; }
-keep class com.android.contacts.common.model.account.AccountTypeWithDataSet { *; }
-keep class com.android.contacts.common.model.account.AccountWithDataSet { *; }
-keep class com.android.contacts.common.model.account.BaseAccountType { *; }
-keep class com.android.contacts.common.model.account.BaseAccountType$* { *; }
-keep class com.android.contacts.common.model.account.DeviceLocalAccountType { *; }
-keep class com.android.contacts.common.model.account.ExchangeAccountType { *; }
-keep class com.android.contacts.common.model.account.ExternalAccountType { *; }
-keep class com.android.contacts.common.model.account.FallbackAccountType { *; }
-keep class com.android.contacts.common.model.account.GoogleAccountType { *; }
-keep class com.android.contacts.common.model.account.SimAccountType { *; }
-keep class com.android.contacts.common.model.AccountTypeManager { *; }
-keep class com.android.contacts.common.model.AccountTypeManagerImpl { *; }
-keep class com.android.contacts.common.model.BuilderWrapper { *; }
@@ -53,6 +56,7 @@
-keep class com.android.contacts.common.model.dataitem.StructuredNameDataItem { *; }
-keep class com.android.contacts.common.model.dataitem.StructuredPostalDataItem { *; }
-keep class com.android.contacts.common.model.dataitem.WebsiteDataItem { *; }
-keep class com.android.contacts.common.model.DeviceLocalAccountLocator { *; }
-keep class com.android.contacts.common.model.RawContact { *; }
-keep class com.android.contacts.common.model.RawContactDelta { *; }
-keep class com.android.contacts.common.model.RawContactDeltaList { *; }
@@ -64,14 +68,11 @@
-keep class com.android.contacts.common.util.BitmapUtil { *; }
-keep class com.android.contacts.common.util.ContactDisplayUtils { *; }
-keep class com.android.contacts.common.util.DateUtils { *; }
-keep class com.android.contacts.common.util.DeviceLocalAccountTypeFactory { *; }
-keep class com.android.contacts.common.util.DeviceLocalAccountTypeFactory$* { *; }
-keep class com.android.contacts.common.util.NameConverter { *; }
-keep class com.android.contacts.common.util.SearchUtil { *; }
-keep class com.android.contacts.common.util.SearchUtil$* { *; }
-keep class com.android.contacts.common.util.DeviceAccountFilter { *; }
-keep class com.android.contacts.common.util.DeviceAccountFilter$* { *; }
-keep class com.android.contacts.common.util.DeviceAccountPresentationValues { *; }
-keep class com.android.contacts.common.util.DeviceAccountPresentationValues$* { *; }
-keep class com.android.contacts.common.util.DeviceLocalContactsFilterProvider { *; }
-keep class com.android.contacts.ContactsApplication { *; }
-keep class com.android.contacts.ContactSaveService { *; }
-keep class com.android.contacts.ContactSaveService$* { *; }
+2 −1
Original line number Diff line number Diff line
@@ -19,7 +19,8 @@
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
        android:viewportHeight="24.0"
        android:tint="@color/device_account_tint_color">
    <path
        android:fillColor="#FF000000"
        android:pathData="M19.99,4c0,-1.1 -0.89,-2 -1.99,-2h-8L4,8v12c0,1.1 0.9,2 2,2h12.01c1.1,0 1.99,-0.9 1.99,-2l-0.01,-16zM9,19L7,19v-2h2v2zM17,19h-2v-2h2v2zM9,15L7,15v-4h2v4zM13,19h-2v-4h2v4zM13,13h-2v-2h2v2zM17,15h-2v-4h2v4z"/>
+3 −0
Original line number Diff line number Diff line
@@ -254,4 +254,7 @@

    <!-- Primary text color in Contacts app -->
    <color name="contacts_text_color">#333333</color>

    <!-- tint color for device account icons -->
    <color name="device_account_tint_color">#7f7f7f</color>
</resources>
+3 −8
Original line number Diff line number Diff line
@@ -15,8 +15,7 @@ package com.android.contactsbind;

import com.android.contacts.common.logging.Logger;
import com.android.contacts.common.preference.PreferenceManager;
import com.android.contacts.common.util.DeviceAccountFilter;
import com.android.contacts.common.util.DeviceAccountPresentationValues;
import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;

import android.content.Context;

@@ -31,11 +30,7 @@ public class ObjectFactory {

    public static PreferenceManager getPreferenceManager(Context context) { return null; }

    public static DeviceAccountPresentationValues createDeviceAccountPresentationValues(Context context) {
        return new DeviceAccountPresentationValues.Default(context);
    }

    public static DeviceAccountFilter getDeviceAccountFilter(Context context) {
        return DeviceAccountFilter.ONLY_NULL;
    public static DeviceLocalAccountTypeFactory getDeviceLocalAccountTypeFactory(Context context) {
        return new DeviceLocalAccountTypeFactory.Default(context);
    }
}
+10 −13
Original line number Diff line number Diff line
@@ -54,12 +54,10 @@ import com.android.contacts.common.list.AccountFilterActivity;
import com.android.contacts.common.list.ContactListFilter;
import com.android.contacts.common.list.ContactListFilterController;
import com.android.contacts.common.model.AccountTypeManager;
import com.android.contacts.common.model.account.AccountType;
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.preference.ContactsPreferenceActivity;
import com.android.contacts.common.util.AccountFilterUtil;
import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
import com.android.contacts.common.util.DeviceAccountPresentationValues;
import com.android.contacts.common.util.ImplicitIntentsUtil;
import com.android.contacts.common.util.ViewUtil;
import com.android.contacts.editor.ContactEditorFragment;
@@ -72,10 +70,11 @@ import com.android.contacts.group.GroupsFragment.GroupsListener;
import com.android.contacts.interactions.AccountFiltersFragment;
import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
import com.android.contacts.quickcontact.QuickContactActivity;
import com.android.contacts.common.model.account.AccountDisplayInfo;
import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
import com.android.contacts.util.SharedPreferenceUtil;
import com.android.contactsbind.Assistants;
import com.android.contactsbind.HelpUtils;
import com.android.contactsbind.ObjectFactory;

import java.util.HashMap;
import java.util.Iterator;
@@ -173,7 +172,6 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i

    // The account the new group will be created under.
    private AccountWithDataSet mNewGroupAccount;
    private DeviceAccountPresentationValues mDeviceAccountPresentationValues;

    private int mPositionOfLastGroup;

@@ -186,8 +184,6 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i

        super.setContentView(R.layout.contacts_drawer_activity);

        mDeviceAccountPresentationValues = ObjectFactory.createDeviceAccountPresentationValues(this);

        // Set up the action bar.
        mToolbar = getView(R.id.toolbar);
        setSupportActionBar(mToolbar);
@@ -461,6 +457,9 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i

    @Override
    public void onFiltersLoaded(List<ContactListFilter> accountFilterItems) {
        final AccountDisplayInfoFactory accountDisplayFactory = AccountDisplayInfoFactory.
                fromListFilters(this, accountFilterItems);

        final Menu menu = mNavigationView.getMenu();
        final MenuItem filtersMenuItem = menu.findItem(R.id.nav_filters);
        final SubMenu subMenu = filtersMenuItem.getSubMenu();
@@ -473,12 +472,12 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i

        int positionOfLastFilter = mPositionOfLastGroup + GAP_BETWEEN_TWO_MENU_GROUPS;

        mDeviceAccountPresentationValues.setFilters(accountFilterItems);

        for (int i = 0; i < accountFilterItems.size(); i++) {
            positionOfLastFilter++;
            final ContactListFilter filter = accountFilterItems.get(i);
            final CharSequence menuName = mDeviceAccountPresentationValues.getLabel(i);
            final AccountDisplayInfo displayableAccount =
                    accountDisplayFactory.getAccountDisplayInfoFor(filter);
            final CharSequence menuName = displayableAccount.getNameLabel();
            final MenuItem menuItem = subMenu.add(R.id.nav_filters_items, Menu.NONE,
                    positionOfLastFilter, menuName);
            mFilterMenuMap.put(filter, menuItem);
@@ -502,17 +501,15 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
                    return true;
                }
            });
            menuItem.setIcon(mDeviceAccountPresentationValues.getIcon(i));
            menuItem.setIcon(displayableAccount.getIcon());
            // Get rid of the default menu item overlay and show original account icons.
            menuItem.getIcon().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_ATOP);
            // Create a dummy action view to attach extra hidden content description to the menuItem
            // for Talkback. We want Talkback to read out the account type but not have it be part
            // of the menuItem title.
            final AccountType account = AccountTypeManager.getInstance(this)
                    .getAccountType(filter.accountType, filter.dataSet);
            LinearLayout view = (LinearLayout) LayoutInflater.from(this)
                    .inflate(R.layout.account_type_info, null);
            view.setContentDescription(account.getDisplayLabel(this));
            view.setContentDescription(displayableAccount.getTypeLabel());
            view.setVisibility(View.VISIBLE);
            menuItem.setActionView(view);
        }
Loading