120d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling/* 220d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * Copyright (C) 2016 The Android Open Source Project 320d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * 420d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 520d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * you may not use this file except in compliance with the License. 620d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * You may obtain a copy of the License at 720d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * 820d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * http://www.apache.org/licenses/LICENSE-2.0 920d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * 1020d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * Unless required by applicable law or agreed to in writing, software 1120d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * distributed under the License is distributed on an "AS IS" BASIS, 1220d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * See the License for the specific language governing permissions and 1420d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * limitations under the License. 1520d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling */ 1620d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingpackage com.android.settings.accounts; 1720d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 18044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhangimport static com.google.common.truth.Truth.assertThat; 19771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 20771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport static org.mockito.Answers.RETURNS_DEEP_STUBS; 21771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport static org.mockito.Matchers.anyInt; 22771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport static org.mockito.Mockito.when; 23044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhang 2420d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport android.accounts.Account; 25771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport android.accounts.AccountManager; 26771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport android.accounts.AuthenticatorDescription; 2720d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport android.content.Context; 28044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhangimport android.content.Intent; 29771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport android.content.SyncAdapterType; 3020d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport android.os.UserHandle; 3120d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport android.support.v7.preference.Preference; 3220d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 33044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhangimport com.android.settings.R; 3420d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport com.android.settings.SettingsActivity; 359f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner; 3620d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport com.android.settings.TestConfig; 37771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport com.android.settings.testutils.shadow.ShadowAccountManager; 38771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport com.android.settings.testutils.shadow.ShadowContentResolver; 3920d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 40771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport org.junit.After; 41771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport org.junit.Before; 4220d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport org.junit.Test; 4320d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport org.junit.runner.RunWith; 44771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport org.mockito.Mock; 45771848dde0d2960b8ec7d359090ba5106d6bb727Doris Lingimport org.mockito.MockitoAnnotations; 4620d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport org.robolectric.annotation.Config; 4720d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingimport org.robolectric.shadows.ShadowApplication; 4820d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 4920d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling@RunWith(SettingsRobolectricTestRunner.class) 50771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, 51771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling shadows = {ShadowAccountManager.class, ShadowContentResolver.class}) 5220d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingpublic class AccountSyncPreferenceControllerTest { 5320d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 54771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Mock(answer = RETURNS_DEEP_STUBS) 55771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling private AccountManager mAccountManager; 56771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 57771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling private Context mContext; 58771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling private AccountSyncPreferenceController mController; 59771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling private Preference mPreference; 60771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 61771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Before 62771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void setUp() { 63771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling MockitoAnnotations.initMocks(this); 64771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowApplication application = ShadowApplication.getInstance(); 65771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling application.setSystemService(Context.ACCOUNT_SERVICE, mAccountManager); 66771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mContext = application.getApplicationContext(); 67771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 68771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling when(mAccountManager.getAuthenticatorTypesAsUser(anyInt())).thenReturn( 69771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling new AuthenticatorDescription[0]); 70771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[0]); 71771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 72771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mPreference = new Preference(mContext); 73771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mPreference.setKey("account_sync"); 74771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 75771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController = new AccountSyncPreferenceController(mContext); 76771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.init(new Account("acct1", "type1"), new UserHandle(3)); 77771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 78771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 79771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @After 80771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void tearDown() { 81771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.reset(); 82771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 83771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 8420d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling @Test 8520d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling public void handlePreferenceTreeClick_shouldStartFragment() { 86771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.handlePreferenceTreeClick(mPreference); 8720d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 88771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling final Intent nextActivity = ShadowApplication.getInstance().getNextStartedActivity(); 89044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhang 90044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhang assertThat(nextActivity.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) 91044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhang .isEqualTo(AccountSyncSettings.class.getName()); 92044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhang assertThat(nextActivity.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) 93044dc59acca6711ca604e9dca1d169ef5f19e2c8Fan Zhang .isEqualTo(R.string.account_sync_title); 9420d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling } 9520d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 96771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Test 97771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void updateSummary_adapterInvisible_shouldNotCount() { 98771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType = new SyncAdapterType("authority" /* authority */, 99771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, false /* userVisible */, true /* supportsUploading */); 100771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType[] syncAdapters = {syncAdapterType}; 101771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAdapterTypes(syncAdapters); 102771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 103771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.updateSummary(mPreference); 104771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 105771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling assertThat(mPreference.getSummary()) 106771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling .isEqualTo(mContext.getString(R.string.account_sync_summary_all_off)); 107771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 108771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 109771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Test 110771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void updateSummary_notSameAccountType_shouldNotCount() { 111771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType = new SyncAdapterType("authority" /* authority */, 112771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type5" /* accountType */, true /* userVisible */, true /* supportsUploading */); 113771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType[] syncAdapters = {syncAdapterType}; 114771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAdapterTypes(syncAdapters); 115771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 116771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.updateSummary(mPreference); 117771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 118771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling assertThat(mPreference.getSummary()) 119771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling .isEqualTo(mContext.getString(R.string.account_sync_summary_all_off)); 120771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 121771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 122771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Test 123771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void updateSummary_notSyncable_shouldNotCount() { 124771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType = new SyncAdapterType("authority" /* authority */, 125771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, true /* userVisible */, true /* supportsUploading */); 126771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType[] syncAdapters = {syncAdapterType}; 127771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAdapterTypes(syncAdapters); 128771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncable("authority", 0); 129771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 130771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.updateSummary(mPreference); 131771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 132771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling assertThat(mPreference.getSummary()) 133771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling .isEqualTo(mContext.getString(R.string.account_sync_summary_all_off)); 134771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 135771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 136771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Test 137771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void updateSummary_syncDisabled_shouldNotCount() { 138771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType = new SyncAdapterType("authority" /* authority */, 139771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, true /* userVisible */, true /* supportsUploading */); 140771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType[] syncAdapters = {syncAdapterType}; 141771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAdapterTypes(syncAdapters); 142771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAutomatically("authority", false); 143771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setMasterSyncAutomatically(3, true); 144771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 145771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.updateSummary(mPreference); 146771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 147771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling assertThat(mPreference.getSummary()) 148771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling .isEqualTo(mContext.getString(R.string.account_sync_summary_all_off)); 149771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 150771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 151771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Test 152771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void updateSummary_syncEnabled_shouldCount() { 153771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType = new SyncAdapterType("authority" /* authority */, 154771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, true /* userVisible */, true /* supportsUploading */); 155771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType[] syncAdapters = {syncAdapterType}; 156771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAdapterTypes(syncAdapters); 157771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 158771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.updateSummary(mPreference); 159771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 160771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling assertThat(mPreference.getSummary()) 161771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling .isEqualTo(mContext.getString(R.string.account_sync_summary_all_on)); 162771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 163771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 164771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling @Test 165771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling public void updateSummary_multipleSyncAdapters_shouldSetSummary() { 166771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType1 = new SyncAdapterType("authority1" /* authority */, 167771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, true /* userVisible */, true /* supportsUploading */); 168771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType2 = new SyncAdapterType("authority2" /* authority */, 169771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, true /* userVisible */, true /* supportsUploading */); 170771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType3 = new SyncAdapterType("authority3" /* authority */, 171771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, true /* userVisible */, true /* supportsUploading */); 172771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType syncAdapterType4 = new SyncAdapterType("authority4" /* authority */, 173771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling "type1" /* accountType */, true /* userVisible */, true /* supportsUploading */); 174771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling SyncAdapterType[] syncAdapters = 175771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling {syncAdapterType1, syncAdapterType2, syncAdapterType3, syncAdapterType4}; 176771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAdapterTypes(syncAdapters); 177771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 178771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling ShadowContentResolver.setSyncAutomatically("authority4", false); 179771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 180771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling mController.updateSummary(mPreference); 181771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling 182771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling assertThat(mPreference.getSummary()) 183771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling .isEqualTo(mContext.getString(R.string.account_sync_summary_some_on, 3, 4)); 184771848dde0d2960b8ec7d359090ba5106d6bb727Doris Ling } 18520d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling} 186