DefaultDialerCacheTest.java revision eacd67b9bc4d6152fdeddc69a8fc823d2dc0fffc
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 17package com.android.server.telecom.tests; 18 19import android.content.BroadcastReceiver; 20import android.content.Context; 21import android.content.Intent; 22import android.content.IntentFilter; 23import android.database.ContentObserver; 24import android.net.Uri; 25import android.os.Handler; 26import android.os.UserHandle; 27import android.test.suitebuilder.annotation.SmallTest; 28 29import com.android.server.telecom.DefaultDialerCache; 30import com.android.server.telecom.TelecomServiceImpl; 31import com.android.server.telecom.TelecomSystem; 32 33import org.mockito.ArgumentCaptor; 34import org.mockito.Mock; 35 36import static org.mockito.Matchers.any; 37import static org.mockito.Matchers.eq; 38import static org.mockito.Matchers.isNull; 39import static org.mockito.Mockito.times; 40import static org.mockito.Mockito.verify; 41import static org.mockito.Mockito.when; 42 43public class DefaultDialerCacheTest extends TelecomTestCase { 44 45 private static final String DIALER1 = "com.android.dialer"; 46 private static final String DIALER2 = "xyz.abc.dialer"; 47 private static final String DIALER3 = "aaa.bbb.ccc.ddd"; 48 private static final int USER0 = 0; 49 private static final int USER1 = 1; 50 private static final int USER2 = 2; 51 52 private DefaultDialerCache mDefaultDialerCache; 53 private ContentObserver mDefaultDialerSettingObserver; 54 private BroadcastReceiver mPackageChangeReceiver; 55 56 @Mock private TelecomServiceImpl.DefaultDialerManagerAdapter mMockDefaultDialerManager; 57 58 public void setUp() throws Exception { 59 super.setUp(); 60 mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); 61 62 ArgumentCaptor<BroadcastReceiver> receiverCaptor = 63 ArgumentCaptor.forClass(BroadcastReceiver.class); 64 65 mDefaultDialerCache = new DefaultDialerCache( 66 mContext, mMockDefaultDialerManager, new TelecomSystem.SyncRoot() { }); 67 68 verify(mContext).registerReceiverAsUser( 69 receiverCaptor.capture(), eq(UserHandle.ALL), any(IntentFilter.class), 70 isNull(String.class), isNull(Handler.class)); 71 mPackageChangeReceiver = receiverCaptor.getValue(); 72 mDefaultDialerSettingObserver = mDefaultDialerCache.getContentObserver(); 73 74 when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER0))) 75 .thenReturn(DIALER1); 76 when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER1))) 77 .thenReturn(DIALER2); 78 when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER2))) 79 .thenReturn(DIALER3); 80 } 81 82 @SmallTest 83 public void testThreeUsers() { 84 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(), DIALER1); 85 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 86 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 87 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 88 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(), DIALER1); 89 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 90 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 91 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 92 93 verify(mMockDefaultDialerManager, times(1)) 94 .getDefaultDialerApplication(any(Context.class), eq(USER0)); 95 verify(mMockDefaultDialerManager, times(1)) 96 .getDefaultDialerApplication(any(Context.class), eq(USER1)); 97 verify(mMockDefaultDialerManager, times(1)) 98 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 99 } 100 101 @SmallTest 102 public void testDialer1PackageChanged() { 103 // Populate the caches first 104 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 105 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 106 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 107 108 Intent packageChangeIntent = new Intent(Intent.ACTION_PACKAGE_CHANGED, 109 Uri.fromParts("package", DIALER1, null)); 110 when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER0))) 111 .thenReturn(DIALER2); 112 mPackageChangeReceiver.onReceive(mContext, packageChangeIntent); 113 verify(mMockDefaultDialerManager, times(2)) 114 .getDefaultDialerApplication(any(Context.class), eq(USER0)); 115 verify(mMockDefaultDialerManager, times(1)) 116 .getDefaultDialerApplication(any(Context.class), eq(USER1)); 117 verify(mMockDefaultDialerManager, times(1)) 118 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 119 120 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER2); 121 } 122 123 @SmallTest 124 public void testRandomOtherPackageChanged() { 125 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 126 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 127 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 128 129 Intent packageChangeIntent = new Intent(Intent.ACTION_PACKAGE_CHANGED, 130 Uri.fromParts("package", "red.orange.blue", null)); 131 mPackageChangeReceiver.onReceive(mContext, packageChangeIntent); 132 verify(mMockDefaultDialerManager, times(1)) 133 .getDefaultDialerApplication(any(Context.class), eq(USER0)); 134 verify(mMockDefaultDialerManager, times(1)) 135 .getDefaultDialerApplication(any(Context.class), eq(USER1)); 136 verify(mMockDefaultDialerManager, times(1)) 137 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 138 } 139 140 @SmallTest 141 public void testPackageRemovedWithoutReplace() { 142 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 143 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 144 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 145 146 Intent packageChangeIntent = new Intent(Intent.ACTION_PACKAGE_REMOVED, 147 Uri.fromParts("package", DIALER1, null)); 148 packageChangeIntent.putExtra(Intent.EXTRA_REPLACING, false); 149 150 mPackageChangeReceiver.onReceive(mContext, packageChangeIntent); 151 verify(mMockDefaultDialerManager, times(2)) 152 .getDefaultDialerApplication(any(Context.class), eq(USER0)); 153 verify(mMockDefaultDialerManager, times(1)) 154 .getDefaultDialerApplication(any(Context.class), eq(USER1)); 155 verify(mMockDefaultDialerManager, times(1)) 156 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 157 } 158 159 @SmallTest 160 public void testPackageAdded() { 161 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 162 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 163 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 164 165 Intent packageChangeIntent = new Intent(Intent.ACTION_PACKAGE_ADDED, 166 Uri.fromParts("package", "ppp.qqq.zzz", null)); 167 168 mPackageChangeReceiver.onReceive(mContext, packageChangeIntent); 169 verify(mMockDefaultDialerManager, times(2)) 170 .getDefaultDialerApplication(any(Context.class), eq(USER0)); 171 verify(mMockDefaultDialerManager, times(2)) 172 .getDefaultDialerApplication(any(Context.class), eq(USER1)); 173 verify(mMockDefaultDialerManager, times(2)) 174 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 175 } 176 177 @SmallTest 178 public void testPackageRemovedWithReplace() { 179 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 180 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 181 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 182 183 Intent packageChangeIntent = new Intent(Intent.ACTION_PACKAGE_REMOVED, 184 Uri.fromParts("package", DIALER1, null)); 185 packageChangeIntent.putExtra(Intent.EXTRA_REPLACING, true); 186 187 mPackageChangeReceiver.onReceive(mContext, packageChangeIntent); 188 verify(mMockDefaultDialerManager, times(1)) 189 .getDefaultDialerApplication(any(Context.class), eq(USER0)); 190 verify(mMockDefaultDialerManager, times(1)) 191 .getDefaultDialerApplication(any(Context.class), eq(USER1)); 192 verify(mMockDefaultDialerManager, times(1)) 193 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 194 } 195 196 @SmallTest 197 public void testDefaultDialerSettingChanged() { 198 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); 199 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 200 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER3); 201 202 when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER0))) 203 .thenReturn(DIALER2); 204 when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER1))) 205 .thenReturn(DIALER2); 206 when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER2))) 207 .thenReturn(DIALER2); 208 mDefaultDialerSettingObserver.onChange(false); 209 210 verify(mMockDefaultDialerManager, times(2)) 211 .getDefaultDialerApplication(any(Context.class), eq(USER0)); 212 verify(mMockDefaultDialerManager, times(2)) 213 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 214 verify(mMockDefaultDialerManager, times(2)) 215 .getDefaultDialerApplication(any(Context.class), eq(USER2)); 216 217 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER2); 218 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); 219 assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER2), DIALER2); 220 } 221} 222