Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.contacts.util;
     17 
     18 import android.graphics.Canvas;
     19 import android.graphics.ColorFilter;
     20 import android.graphics.PixelFormat;
     21 import android.graphics.drawable.Drawable;
     22 import android.test.AndroidTestCase;
     23 import android.test.suitebuilder.annotation.SmallTest;
     24 
     25 import com.android.contacts.model.AccountTypeManager;
     26 import com.android.contacts.model.account.AccountDisplayInfo;
     27 import com.android.contacts.model.account.AccountDisplayInfoFactory;
     28 import com.android.contacts.model.account.AccountType;
     29 import com.android.contacts.model.account.AccountWithDataSet;
     30 import com.android.contacts.test.mocks.MockAccountTypeManager;
     31 import com.android.contacts.tests.FakeAccountType;
     32 import com.android.contacts.tests.FakeDeviceAccountTypeFactory;
     33 
     34 import java.util.ArrayList;
     35 import java.util.HashMap;
     36 import java.util.Map;
     37 
     38 @SmallTest
     39 public class AccountDisplayInfoFactoryTests extends AndroidTestCase {
     40 
     41     private Map<AccountWithDataSet, AccountType> mKnownTypes;
     42 
     43     @Override
     44     protected void setUp() throws Exception {
     45         super.setUp();
     46         mKnownTypes = new HashMap<>();
     47     }
     48 
     49     public void test_displayableAccount_hasIconFromAccountType() {
     50         final Drawable comExampleIcon = someDrawable();
     51 
     52         addTypeMapping(account("user", "com.example"), "title", comExampleIcon);
     53         addTypeMapping(account(null, null), "device", someDrawable());
     54         addTypeMapping(account("foo", "bar.type"), "bar", someDrawable());
     55         addTypeMapping(account("user2", "com.example"), "title", comExampleIcon);
     56 
     57         final AccountDisplayInfoFactory sut = createFactoryForKnownTypes();
     58 
     59         final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
     60                 account("user", "com.example"));
     61         assertEquals(comExampleIcon, displayable.getIcon());
     62     }
     63 
     64     public void test_displayableAccount_hasNameFromAccount() {
     65         final Drawable comExampleIcon = someDrawable();
     66 
     67         addTypeMapping(account("user (at) example.com", "com.example"), "title", comExampleIcon);
     68         addTypeMapping(account(null, null), "device", someDrawable());
     69         addTypeMapping(account("foo", "bar.type"), "bar", someDrawable());
     70         addTypeMapping(account("user2 (at) example.com", "com.example"), "title", comExampleIcon);
     71 
     72         final AccountDisplayInfoFactory sut = createFactoryForKnownTypes();
     73 
     74         final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
     75                 account("user (at) example.com", "com.example"));
     76         assertEquals("user (at) example.com", displayable.getNameLabel());
     77     }
     78 
     79     public void test_displayableAccountForNullAccount_hasNameFromAccountType() {
     80         addSomeKnownAccounts();
     81         addTypeMapping(account(null, null), "Device Display Label", someDrawable());
     82 
     83         final AccountDisplayInfoFactory sut = createFactoryForKnownTypes();
     84 
     85         final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
     86                 account(null, null));
     87         assertEquals("Device Display Label", displayable.getNameLabel());
     88     }
     89 
     90     public void test_displayableAccountForDeviceAccount_hasNameFromAccountType() {
     91         addSomeKnownAccounts();
     92         addTypeMapping(account("some.device.account.name", "device.account.type"), "Device Label",
     93                 someDrawable());
     94 
     95         final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
     96                 new FakeDeviceAccountTypeFactory().withDeviceTypes("device.account.type"));
     97 
     98         final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
     99                 account("some.device.account.name", "device.account.type"));
    100         assertEquals("Device Label", displayable.getNameLabel());
    101     }
    102 
    103     public void test_displayableAccountForDeviceAccountWhenMultiple_hasNameFromAccount() {
    104         addSomeKnownAccounts();
    105         addTypeMapping(account("first.device.account.name", "a.device.account.type"),
    106                 "Device Display Label", someDrawable());
    107         addTypeMapping(account("second.device.account.name", "b.device.account.type"),
    108                 "Device Display Label", someDrawable());
    109         addTypeMapping(account("another.device.account.name", "a.device.account.type"),
    110                 "Device Display Label", someDrawable());
    111 
    112         final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
    113                 new FakeDeviceAccountTypeFactory().withDeviceTypes("a.device.account.type",
    114                         "b.device.account.type"));
    115 
    116         final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
    117                 account("first.device.account.name", "a.device.account.type"));
    118         assertEquals("first.device.account.name", displayable.getNameLabel());
    119 
    120         final AccountDisplayInfo displayable2 = sut.getAccountDisplayInfo(
    121                 account("second.device.account.name", "b.device.account.type"));
    122         assertEquals("second.device.account.name", displayable2.getNameLabel());
    123     }
    124 
    125     public void test_displayableAccountForSimAccount_hasNameFromAccountType() {
    126         addSomeKnownAccounts();
    127         addTypeMapping(account("sim.account.name", "sim.account.type"), "SIM", someDrawable());
    128 
    129         final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
    130                 new FakeDeviceAccountTypeFactory().withSimTypes("sim.account.type"));
    131 
    132         final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
    133                 account("sim.account.name", "sim.account.type"));
    134         assertEquals("SIM", displayable.getNameLabel());
    135     }
    136 
    137     public void test_displayableAccountForSimAccountWhenMultiple_hasNameFromAccount() {
    138         addSomeKnownAccounts();
    139         addTypeMapping(account("sim.account.name", "sim.account.type"), "SIM", someDrawable());
    140         addTypeMapping(account("sim2.account.name", "sim.account.type"), "SIM", someDrawable());
    141 
    142         final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
    143                 new FakeDeviceAccountTypeFactory().withSimTypes("sim.account.type"));
    144 
    145         final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
    146                 account("sim.account.name", "sim.account.type"));
    147         assertEquals("sim.account.name", displayable.getNameLabel());
    148     }
    149 
    150     private void addSomeKnownAccounts() {
    151         final Drawable comExampleIcon = someDrawable();
    152         addTypeMapping(account("user (at) example.com", "com.example"), "Example Title", comExampleIcon);
    153         addTypeMapping(account("foo", "bar.type"), "Bar", someDrawable());
    154         addTypeMapping(account("user2 (at) example.com", "com.example"), "Example Title", comExampleIcon);
    155         addTypeMapping(account("user", "com.example.two"), "Some Account", someDrawable());
    156     }
    157 
    158     private AccountDisplayInfoFactory createFactoryForKnownTypes() {
    159         return createFactoryForKnownTypes(new DeviceLocalAccountTypeFactory.Default(getContext()));
    160     }
    161 
    162     private AccountDisplayInfoFactory createFactoryForKnownTypes(DeviceLocalAccountTypeFactory
    163             typeFactory) {
    164         return new AccountDisplayInfoFactory(getContext(),
    165                 createFakeAccountTypeManager(mKnownTypes), typeFactory,
    166                 new ArrayList<>(mKnownTypes.keySet()));
    167     }
    168 
    169     private AccountWithDataSet account(String name, String type) {
    170         return new AccountWithDataSet(name, type, /* dataSet */ null);
    171     }
    172 
    173     private void addTypeMapping(AccountWithDataSet account, String label, Drawable icon) {
    174         mKnownTypes.put(account, FakeAccountType.create(account, label, icon));
    175     }
    176 
    177     private AccountTypeManager createFakeAccountTypeManager(
    178             final Map<AccountWithDataSet, AccountType> mapping) {
    179         return new MockAccountTypeManager(mapping.values().toArray(new AccountType[mapping.size()]),
    180                 mapping.keySet().toArray(new AccountWithDataSet[mapping.size()]));
    181     }
    182 
    183     private Drawable someDrawable() {
    184         return new Drawable() {
    185             @Override
    186             public void draw(Canvas canvas) {
    187             }
    188 
    189             @Override
    190             public void setAlpha(int i) {
    191             }
    192 
    193             @Override
    194             public void setColorFilter(ColorFilter colorFilter) {
    195             }
    196 
    197             @Override
    198             public int getOpacity() {
    199                 return PixelFormat.OPAQUE;
    200             }
    201         };
    202     }
    203 
    204 }
    205