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