1558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki/* 2558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * Copyright (C) 2011 The Android Open Source Project 3558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * 4558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * you may not use this file except in compliance with the License. 6558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * You may obtain a copy of the License at 7558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * 8558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * 10558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * Unless required by applicable law or agreed to in writing, software 11558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * See the License for the specific language governing permissions and 14558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * limitations under the License. 15558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki */ 16558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 17558669dab4109afebd19eade1f95a396215fb44dMakoto Onukipackage com.android.contacts.editor; 18558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 19807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport static junit.framework.Assert.assertEquals; 20807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport static junit.framework.Assert.assertFalse; 21807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport static junit.framework.Assert.assertNull; 22807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport static org.junit.Assert.assertTrue; 23807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott 24807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport android.support.test.InstrumentationRegistry; 25807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport android.support.test.filters.SmallTest; 26807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport android.support.test.runner.AndroidJUnit4; 27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 2869c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountType; 2969c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountWithDataSet; 300a49afa2ad697307cc04ef4cb86570574fa720f2Gary Mai 31807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport org.junit.Before; 32807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport org.junit.Test; 33807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport org.junit.runner.RunWith; 34558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 35807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport java.util.ArrayList; 36807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport java.util.Arrays; 37807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport java.util.Collections; 38807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottimport java.util.List; 39558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 40558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki/** 41558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * Test case for {@link ContactEditorUtils}. 42558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * 43558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * adb shell am instrument -w -e class com.android.contacts.editor.ContactEditorUtilsTest \ 44558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki com.android.contacts.tests/android.test.InstrumentationTestRunner 45807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott 46807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * <p>It may make sense to just delete or move these tests since the code under test just forwards 47807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * calls to {@link com.android.contacts.preference.ContactsPreferences} and that logic is already 48807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * covered by {@link com.android.contacts.preference.ContactsPreferencesTest} 49807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * </p> 50558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki */ 51558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki@SmallTest 52807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott@RunWith(AndroidJUnit4.class) 53807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerottpublic class ContactEditorUtilsTest { 54558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki private ContactEditorUtils mTarget; 55558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 56807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott private static final String TYPE1 = "type1"; 57807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott private static final String TYPE2 = "type2"; 58807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott private static final String TYPE2_EXT = "ext"; 59558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 60807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott private static final AccountWithDataSet ACCOUNT_1_A = new AccountWithDataSet("a", TYPE1, null); 61807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott private static final AccountWithDataSet ACCOUNT_1_B = new AccountWithDataSet("b", TYPE1, null); 62558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 63807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott private static final AccountWithDataSet ACCOUNT_2_A = new AccountWithDataSet("a", TYPE2, null); 64558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki private static final AccountWithDataSet ACCOUNT_2EX_A = new AccountWithDataSet( 65807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott "a", TYPE2, TYPE2_EXT); 66558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 67807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott @Before 68807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott public void setUp() throws Exception { 69807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott mTarget = ContactEditorUtils.create(InstrumentationRegistry.getTargetContext()); 70558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 71558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Clear the preferences. 72558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki mTarget.cleanupForTest(); 73558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 74558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 75558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki /** 76558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki * Test for 77949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott * - {@link ContactEditorUtils#saveDefaultAccount} 78949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott * - {@link ContactEditorUtils#getOnlyOrDefaultAccount} 79558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki */ 80807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott @Test 81949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott public void testSaveDefaultAccount() { 82949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(null); 83807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertNull(mTarget.getOnlyOrDefaultAccount(Collections.<AccountWithDataSet>emptyList())); 84558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 85949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(ACCOUNT_1_A); 86807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertEquals(ACCOUNT_1_A, mTarget.getOnlyOrDefaultAccount(Collections. 87807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott <AccountWithDataSet>emptyList())); 88558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 89558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 90558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki /** 91807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * Tests for 92807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)}, 93807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * starting with 0 accounts. 94558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki */ 95807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott @Test 96558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki public void testShouldShowAccountChangedNotification_0Accounts() { 97807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott List<AccountWithDataSet> currentAccounts = new ArrayList<>(); 98807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 99558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 100558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // We show the notification here, and user clicked "add account" 101807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.add(ACCOUNT_1_A); 102558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 103558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Now we open the contact editor with the new account. 104558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 105558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // When closing the editor, we save the default account. 106949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(ACCOUNT_1_A); 107558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 108558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Next time the user creates a contact, we don't show the notification. 109807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 110558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 111558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // User added a new writable account, ACCOUNT_1_B. 112807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.add(ACCOUNT_1_B); 113558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 11483ff34fa9417cf673e68b56b2bf682b56d6a505eTingting Wang // Since default account is still ACCOUNT_1_A, we don't show the notification. 115807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 116558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 117558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // User saved a new contact. We update the account list and the default account. 118949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(ACCOUNT_1_B); 119558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 120558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // User created another contact. Now we don't show the notification. 121807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 122558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 123558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // User installed a new contact sync adapter... 124558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 125558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Add new accounts: ACCOUNT_2_A, ACCOUNT_2EX_A. 126807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.add(ACCOUNT_2_A); 127807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.add(ACCOUNT_2EX_A); 128558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 12983ff34fa9417cf673e68b56b2bf682b56d6a505eTingting Wang // New added account but default account is still not changed, so no notification. 130807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 131558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 132558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // User saves a new contact, with a different default account. 133949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(ACCOUNT_2_A); 134558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 135558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Next time user creates a contact, no notification. 136807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 137558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 138558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Remove ACCOUNT_2EX_A. 139807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.remove(ACCOUNT_2EX_A); 140558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 141558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // ACCOUNT_2EX_A was not default, so no notification either. 142807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 143558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 144807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott // Remove ACCOUNT_2_A, which is default. 145807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.remove(ACCOUNT_2_A); 146558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 147558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Now we show the notification. 148807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 14983ff34fa9417cf673e68b56b2bf682b56d6a505eTingting Wang 15083ff34fa9417cf673e68b56b2bf682b56d6a505eTingting Wang // Do not save the default account, and add a new account now. 151807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.add(ACCOUNT_2EX_A); 15283ff34fa9417cf673e68b56b2bf682b56d6a505eTingting Wang 15383ff34fa9417cf673e68b56b2bf682b56d6a505eTingting Wang // No default account, so show notification. 154807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 155558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 156558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 157558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki /** 158807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * Tests for 159807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)}, 160807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * starting with 1 accounts. 161558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki */ 162807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott @Test 163558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki public void testShouldShowAccountChangedNotification_1Account() { 16437ad9fbba748664acfeaf058a36c221600aa62d5Tingting Wang // Always returns false when 1 writable account. 165807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification( 166807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott Collections.singletonList(ACCOUNT_1_A))); 167558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 168558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // User saves a new contact. 169949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(ACCOUNT_1_A); 170558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 171558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Next time, no notification. 172807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification( 173807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott Collections.singletonList(ACCOUNT_1_A))); 174558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 175558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // The rest is the same... 176558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 177558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 178558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki /** 179807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * Tests for 180807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)}, 181807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott * starting with 0 accounts, and the user selected "local only". 182558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki */ 183807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott @Test 184558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki public void testShouldShowAccountChangedNotification_0Account_localOnly() { 185558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // First launch -- always true. 186807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertTrue(mTarget.shouldShowAccountChangedNotification(Collections. 187807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott <AccountWithDataSet>emptyList())); 188558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 189558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // We show the notification here, and user clicked "keep local" and saved an contact. 190949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(AccountWithDataSet.getNullAccount()); 191558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 192558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // Now there are no accounts, and default account is null. 193558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 194558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki // The user created another contact, but this we shouldn't show the notification. 195807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(Collections. 196807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott <AccountWithDataSet>emptyList())); 197558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 198558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 199807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott @Test 200131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki public void testShouldShowAccountChangedNotification_sanity_check() { 201131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki // Prepare 1 account and save it as the default. 202949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mTarget.saveDefaultAccount(ACCOUNT_1_A); 203131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki 204131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki // Right after a save, the dialog shouldn't show up. 205807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification( 206807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott Collections.singletonList(ACCOUNT_1_A))); 207131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki 208131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki // Remove the default account to emulate broken preferences. 209131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki mTarget.removeDefaultAccountForTest(); 21063859fe784a843f4790f15603c767d4692e5be9bguanxiongliu 21163859fe784a843f4790f15603c767d4692e5be9bguanxiongliu // The dialog shouldn't show up. 21263859fe784a843f4790f15603c767d4692e5be9bguanxiongliu // The logic is, if there's a writable account, we'll pick it as default 213807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification( 214807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott Collections.singletonList(ACCOUNT_1_A))); 215131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki } 216131e6ac666868645b48ae6932575d85751ff57c0Makoto Onuki 217807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott @Test 218807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott public void testShouldShowAccountChangedNotification_nullAccount() { 219807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott final List<AccountWithDataSet> currentAccounts = new ArrayList<>(); 220807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott final AccountWithDataSet nullAccount = AccountWithDataSet.getNullAccount(); 221807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott currentAccounts.add(nullAccount); 222807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott 223807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 224807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott 225807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott // User chooses to keep the "device" account as the default 226807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott mTarget.saveDefaultAccount(nullAccount); 227807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott 228807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott // Right after a save, the dialog shouldn't show up. 229807e6208d6bc4ff1a6b0b4d8900229df27077246Marcus Hagerott assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts)); 230558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 231558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 232558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki private static class MockAccountType extends AccountType { 233558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki private boolean mAreContactsWritable; 234558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 235558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki public MockAccountType(String accountType, String dataSet, boolean areContactsWritable) { 236558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki this.accountType = accountType; 237558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki this.dataSet = dataSet; 238558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki mAreContactsWritable = areContactsWritable; 239558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 240558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 241558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki @Override 242558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki public boolean areContactsWritable() { 243558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki return mAreContactsWritable; 244558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 245558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki 246558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki @Override 247558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki public boolean isGroupMembershipEditable() { 248558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki return true; 249558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 250558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki } 251558669dab4109afebd19eade1f95a396215fb44dMakoto Onuki} 252