| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.android.contacts.util; |
| |
| import android.graphics.Canvas; |
| import android.graphics.ColorFilter; |
| import android.graphics.PixelFormat; |
| import android.graphics.drawable.Drawable; |
| import android.test.AndroidTestCase; |
| import android.test.suitebuilder.annotation.SmallTest; |
| |
| import com.android.contacts.common.model.AccountTypeManager; |
| import com.android.contacts.common.model.account.AccountDisplayInfo; |
| import com.android.contacts.common.model.account.AccountDisplayInfoFactory; |
| import com.android.contacts.common.model.account.AccountType; |
| import com.android.contacts.common.model.account.AccountWithDataSet; |
| import com.android.contacts.common.test.mocks.MockAccountTypeManager; |
| import com.android.contacts.common.util.DeviceLocalAccountTypeFactory; |
| import com.android.contacts.tests.FakeAccountType; |
| import com.android.contacts.tests.FakeDeviceAccountTypeFactory; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| @SmallTest |
| public class AccountDisplayInfoFactoryTests extends AndroidTestCase { |
| |
| private Map<AccountWithDataSet, AccountType> mKnownTypes; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| mKnownTypes = new HashMap<>(); |
| } |
| |
| public void test_displayableAccount_hasIconFromAccountType() { |
| final Drawable comExampleIcon = someDrawable(); |
| |
| addTypeMapping(account("user", "com.example"), "title", comExampleIcon); |
| addTypeMapping(account(null, null), "device", someDrawable()); |
| addTypeMapping(account("foo", "bar.type"), "bar", someDrawable()); |
| addTypeMapping(account("user2", "com.example"), "title", comExampleIcon); |
| |
| final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(); |
| |
| final AccountDisplayInfo displayable = sut.getAccountDisplayInfo( |
| account("user", "com.example")); |
| assertEquals(comExampleIcon, displayable.getIcon()); |
| } |
| |
| public void test_displayableAccount_hasNameFromAccount() { |
| final Drawable comExampleIcon = someDrawable(); |
| |
| addTypeMapping(account("user@example.com", "com.example"), "title", comExampleIcon); |
| addTypeMapping(account(null, null), "device", someDrawable()); |
| addTypeMapping(account("foo", "bar.type"), "bar", someDrawable()); |
| addTypeMapping(account("user2@example.com", "com.example"), "title", comExampleIcon); |
| |
| final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(); |
| |
| final AccountDisplayInfo displayable = sut.getAccountDisplayInfo( |
| account("user@example.com", "com.example")); |
| assertEquals("user@example.com", displayable.getNameLabel()); |
| } |
| |
| public void test_displayableAccountForNullAccount_hasNameFromAccountType() { |
| addSomeKnownAccounts(); |
| addTypeMapping(account(null, null), "Device Display Label", someDrawable()); |
| |
| final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(); |
| |
| final AccountDisplayInfo displayable = sut.getAccountDisplayInfo( |
| account(null, null)); |
| assertEquals("Device Display Label", displayable.getNameLabel()); |
| } |
| |
| public void test_displayableAccountForDeviceAccount_hasNameFromAccountType() { |
| addSomeKnownAccounts(); |
| addTypeMapping(account("some.device.account.name", "device.account.type"), "Device Label", |
| someDrawable()); |
| |
| final AccountDisplayInfoFactory sut = createFactoryForKnownTypes( |
| new FakeDeviceAccountTypeFactory().withDeviceTypes("device.account.type")); |
| |
| final AccountDisplayInfo displayable = sut.getAccountDisplayInfo( |
| account("some.device.account.name", "device.account.type")); |
| assertEquals("Device Label", displayable.getNameLabel()); |
| } |
| |
| public void test_displayableAccountForDeviceAccountWhenMultiple_hasNameFromAccount() { |
| addSomeKnownAccounts(); |
| addTypeMapping(account("first.device.account.name", "a.device.account.type"), |
| "Device Display Label", someDrawable()); |
| addTypeMapping(account("second.device.account.name", "b.device.account.type"), |
| "Device Display Label", someDrawable()); |
| addTypeMapping(account("another.device.account.name", "a.device.account.type"), |
| "Device Display Label", someDrawable()); |
| |
| final AccountDisplayInfoFactory sut = createFactoryForKnownTypes( |
| new FakeDeviceAccountTypeFactory().withDeviceTypes("a.device.account.type", |
| "b.device.account.type")); |
| |
| final AccountDisplayInfo displayable = sut.getAccountDisplayInfo( |
| account("first.device.account.name", "a.device.account.type")); |
| assertEquals("first.device.account.name", displayable.getNameLabel()); |
| |
| final AccountDisplayInfo displayable2 = sut.getAccountDisplayInfo( |
| account("second.device.account.name", "b.device.account.type")); |
| assertEquals("second.device.account.name", displayable2.getNameLabel()); |
| } |
| |
| public void test_displayableAccountForSimAccount_hasNameFromAccountType() { |
| addSomeKnownAccounts(); |
| addTypeMapping(account("sim.account.name", "sim.account.type"), "SIM", someDrawable()); |
| |
| final AccountDisplayInfoFactory sut = createFactoryForKnownTypes( |
| new FakeDeviceAccountTypeFactory().withSimTypes("sim.account.type")); |
| |
| final AccountDisplayInfo displayable = sut.getAccountDisplayInfo( |
| account("sim.account.name", "sim.account.type")); |
| assertEquals("SIM", displayable.getNameLabel()); |
| } |
| |
| public void test_displayableAccountForSimAccountWhenMultiple_hasNameFromAccount() { |
| addSomeKnownAccounts(); |
| addTypeMapping(account("sim.account.name", "sim.account.type"), "SIM", someDrawable()); |
| addTypeMapping(account("sim2.account.name", "sim.account.type"), "SIM", someDrawable()); |
| |
| final AccountDisplayInfoFactory sut = createFactoryForKnownTypes( |
| new FakeDeviceAccountTypeFactory().withSimTypes("sim.account.type")); |
| |
| final AccountDisplayInfo displayable = sut.getAccountDisplayInfo( |
| account("sim.account.name", "sim.account.type")); |
| assertEquals("sim.account.name", displayable.getNameLabel()); |
| } |
| |
| private void addSomeKnownAccounts() { |
| final Drawable comExampleIcon = someDrawable(); |
| addTypeMapping(account("user@example.com", "com.example"), "Example Title", comExampleIcon); |
| addTypeMapping(account("foo", "bar.type"), "Bar", someDrawable()); |
| addTypeMapping(account("user2@example.com", "com.example"), "Example Title", comExampleIcon); |
| addTypeMapping(account("user", "com.example.two"), "Some Account", someDrawable()); |
| } |
| |
| private AccountDisplayInfoFactory createFactoryForKnownTypes() { |
| return createFactoryForKnownTypes(new DeviceLocalAccountTypeFactory.Default(getContext())); |
| } |
| |
| private AccountDisplayInfoFactory createFactoryForKnownTypes(DeviceLocalAccountTypeFactory |
| typeFactory) { |
| return new AccountDisplayInfoFactory(getContext(), |
| createFakeAccountTypeManager(mKnownTypes), typeFactory, |
| new ArrayList<>(mKnownTypes.keySet())); |
| } |
| |
| private AccountWithDataSet account(String name, String type) { |
| return new AccountWithDataSet(name, type, /* dataSet */ null); |
| } |
| |
| private void addTypeMapping(AccountWithDataSet account, String label, Drawable icon) { |
| mKnownTypes.put(account, FakeAccountType.create(account, label, icon)); |
| } |
| |
| private AccountTypeManager createFakeAccountTypeManager( |
| final Map<AccountWithDataSet, AccountType> mapping) { |
| return new MockAccountTypeManager(mapping.values().toArray(new AccountType[mapping.size()]), |
| mapping.keySet().toArray(new AccountWithDataSet[mapping.size()])); |
| } |
| |
| private Drawable someDrawable() { |
| return new Drawable() { |
| @Override |
| public void draw(Canvas canvas) { |
| } |
| |
| @Override |
| public void setAlpha(int i) { |
| } |
| |
| @Override |
| public void setColorFilter(ColorFilter colorFilter) { |
| } |
| |
| @Override |
| public int getOpacity() { |
| return PixelFormat.OPAQUE; |
| } |
| }; |
| } |
| |
| } |