Loading src/com/android/server/telecom/DefaultDialerCache.java +24 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,22 @@ public class DefaultDialerCache { } }; private final BroadcastReceiver mUserRemovedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_REMOVED.equals(intent.getAction())) { int removedUser = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); if (removedUser == UserHandle.USER_NULL) { Log.w(LOG_TAG, "Expected EXTRA_USER_HANDLE with ACTION_USER_REMOVED"); } else { removeUserFromCache(removedUser); Log.i(LOG_TAG, "Removing user %s", removedUser); } } } }; private final Handler mHandler = new Handler(Looper.getMainLooper()); private final ContentObserver mDefaultDialerObserver = new ContentObserver(mHandler) { @Override Loading Loading @@ -137,6 +153,8 @@ public class DefaultDialerCache { IntentFilter bootIntentFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); context.registerReceiverAsUser(mReceiver, UserHandle.ALL, bootIntentFilter, null, null); IntentFilter userRemovedFilter = new IntentFilter(Intent.ACTION_USER_REMOVED); context.registerReceiver(mUserRemovedReceiver, userRemovedFilter); Uri defaultDialerSetting = Settings.Secure.getUriFor(Settings.Secure.DIALER_DEFAULT_APPLICATION); Loading Loading @@ -221,6 +239,12 @@ public class DefaultDialerCache { } } private void removeUserFromCache(int userId) { synchronized (mLock) { mCurrentDefaultDialerPerUser.remove(userId); } } /** * registerContentObserver is really hard to mock out, so here is a getter method for the * content observer for testing instead. Loading tests/src/com/android/server/telecom/tests/DefaultDialerCacheTest.java +29 −3 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class DefaultDialerCacheTest extends TelecomTestCase { private DefaultDialerCache mDefaultDialerCache; private ContentObserver mDefaultDialerSettingObserver; private BroadcastReceiver mPackageChangeReceiver; private BroadcastReceiver mUserRemovedReceiver; @Mock private DefaultDialerCache.DefaultDialerManagerAdapter mMockDefaultDialerManager; Loading @@ -58,17 +59,24 @@ public class DefaultDialerCacheTest extends TelecomTestCase { super.setUp(); mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); ArgumentCaptor<BroadcastReceiver> receiverCaptor = ArgumentCaptor<BroadcastReceiver> packageReceiverCaptor = ArgumentCaptor.forClass(BroadcastReceiver.class); mDefaultDialerCache = new DefaultDialerCache( mContext, mMockDefaultDialerManager, new TelecomSystem.SyncRoot() { }); verify(mContext, times(2)).registerReceiverAsUser( receiverCaptor.capture(), eq(UserHandle.ALL), any(IntentFilter.class), packageReceiverCaptor.capture(), eq(UserHandle.ALL), any(IntentFilter.class), isNull(String.class), isNull(Handler.class)); // Receive the first receiver that was captured, the package change receiver. mPackageChangeReceiver = receiverCaptor.getAllValues().get(0); mPackageChangeReceiver = packageReceiverCaptor.getAllValues().get(0); ArgumentCaptor<BroadcastReceiver> userRemovedReceiverCaptor = ArgumentCaptor.forClass(BroadcastReceiver.class); verify(mContext).registerReceiver( userRemovedReceiverCaptor.capture(), any(IntentFilter.class)); mUserRemovedReceiver = userRemovedReceiverCaptor.getAllValues().get(0); mDefaultDialerSettingObserver = mDefaultDialerCache.getContentObserver(); when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER0))) Loading Loading @@ -137,6 +145,24 @@ public class DefaultDialerCacheTest extends TelecomTestCase { .getDefaultDialerApplication(any(Context.class), eq(USER2)); } @SmallTest public void testUserRemoved() { assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); Intent userRemovalIntent = new Intent(Intent.ACTION_USER_REMOVED); userRemovalIntent.putExtra(Intent.EXTRA_USER_HANDLE, USER0); mUserRemovedReceiver.onReceive(mContext, userRemovalIntent); assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); verify(mMockDefaultDialerManager, times(2)) .getDefaultDialerApplication(any(Context.class), eq(USER0)); verify(mMockDefaultDialerManager, times(1)) .getDefaultDialerApplication(any(Context.class), eq(USER1)); } @SmallTest public void testPackageRemovedWithoutReplace() { assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); Loading Loading
src/com/android/server/telecom/DefaultDialerCache.java +24 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,22 @@ public class DefaultDialerCache { } }; private final BroadcastReceiver mUserRemovedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_REMOVED.equals(intent.getAction())) { int removedUser = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); if (removedUser == UserHandle.USER_NULL) { Log.w(LOG_TAG, "Expected EXTRA_USER_HANDLE with ACTION_USER_REMOVED"); } else { removeUserFromCache(removedUser); Log.i(LOG_TAG, "Removing user %s", removedUser); } } } }; private final Handler mHandler = new Handler(Looper.getMainLooper()); private final ContentObserver mDefaultDialerObserver = new ContentObserver(mHandler) { @Override Loading Loading @@ -137,6 +153,8 @@ public class DefaultDialerCache { IntentFilter bootIntentFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); context.registerReceiverAsUser(mReceiver, UserHandle.ALL, bootIntentFilter, null, null); IntentFilter userRemovedFilter = new IntentFilter(Intent.ACTION_USER_REMOVED); context.registerReceiver(mUserRemovedReceiver, userRemovedFilter); Uri defaultDialerSetting = Settings.Secure.getUriFor(Settings.Secure.DIALER_DEFAULT_APPLICATION); Loading Loading @@ -221,6 +239,12 @@ public class DefaultDialerCache { } } private void removeUserFromCache(int userId) { synchronized (mLock) { mCurrentDefaultDialerPerUser.remove(userId); } } /** * registerContentObserver is really hard to mock out, so here is a getter method for the * content observer for testing instead. Loading
tests/src/com/android/server/telecom/tests/DefaultDialerCacheTest.java +29 −3 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class DefaultDialerCacheTest extends TelecomTestCase { private DefaultDialerCache mDefaultDialerCache; private ContentObserver mDefaultDialerSettingObserver; private BroadcastReceiver mPackageChangeReceiver; private BroadcastReceiver mUserRemovedReceiver; @Mock private DefaultDialerCache.DefaultDialerManagerAdapter mMockDefaultDialerManager; Loading @@ -58,17 +59,24 @@ public class DefaultDialerCacheTest extends TelecomTestCase { super.setUp(); mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); ArgumentCaptor<BroadcastReceiver> receiverCaptor = ArgumentCaptor<BroadcastReceiver> packageReceiverCaptor = ArgumentCaptor.forClass(BroadcastReceiver.class); mDefaultDialerCache = new DefaultDialerCache( mContext, mMockDefaultDialerManager, new TelecomSystem.SyncRoot() { }); verify(mContext, times(2)).registerReceiverAsUser( receiverCaptor.capture(), eq(UserHandle.ALL), any(IntentFilter.class), packageReceiverCaptor.capture(), eq(UserHandle.ALL), any(IntentFilter.class), isNull(String.class), isNull(Handler.class)); // Receive the first receiver that was captured, the package change receiver. mPackageChangeReceiver = receiverCaptor.getAllValues().get(0); mPackageChangeReceiver = packageReceiverCaptor.getAllValues().get(0); ArgumentCaptor<BroadcastReceiver> userRemovedReceiverCaptor = ArgumentCaptor.forClass(BroadcastReceiver.class); verify(mContext).registerReceiver( userRemovedReceiverCaptor.capture(), any(IntentFilter.class)); mUserRemovedReceiver = userRemovedReceiverCaptor.getAllValues().get(0); mDefaultDialerSettingObserver = mDefaultDialerCache.getContentObserver(); when(mMockDefaultDialerManager.getDefaultDialerApplication(any(Context.class), eq(USER0))) Loading Loading @@ -137,6 +145,24 @@ public class DefaultDialerCacheTest extends TelecomTestCase { .getDefaultDialerApplication(any(Context.class), eq(USER2)); } @SmallTest public void testUserRemoved() { assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); Intent userRemovalIntent = new Intent(Intent.ACTION_USER_REMOVED); userRemovalIntent.putExtra(Intent.EXTRA_USER_HANDLE, USER0); mUserRemovedReceiver.onReceive(mContext, userRemovalIntent); assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER1), DIALER2); verify(mMockDefaultDialerManager, times(2)) .getDefaultDialerApplication(any(Context.class), eq(USER0)); verify(mMockDefaultDialerManager, times(1)) .getDefaultDialerApplication(any(Context.class), eq(USER1)); } @SmallTest public void testPackageRemovedWithoutReplace() { assertEquals(mDefaultDialerCache.getDefaultDialerApplication(USER0), DIALER1); Loading