Loading src/com/android/server/telecom/DefaultDialerCache.java +18 −3 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.telecom.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; import com.android.server.telecom.flags.FeatureFlags; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; Loading @@ -48,6 +49,7 @@ public class DefaultDialerCache { private final DefaultDialerManagerAdapter mDefaultDialerManagerAdapter; private final ComponentName mSystemDialerComponentName; private final RoleManagerAdapter mRoleManagerAdapter; private final FeatureFlags mFeatureFlags; private final ConcurrentHashMap<Integer, String> mCurrentDefaultDialerPerUser = new ConcurrentHashMap<>(); private final BroadcastReceiver mReceiver = new BroadcastReceiver() { Loading Loading @@ -115,10 +117,11 @@ public class DefaultDialerCache { public DefaultDialerCache(Context context, DefaultDialerManagerAdapter defaultDialerManagerAdapter, RoleManagerAdapter roleManagerAdapter, TelecomSystem.SyncRoot lock) { TelecomSystem.SyncRoot lock, FeatureFlags featureFlags) { mContext = context; mDefaultDialerManagerAdapter = defaultDialerManagerAdapter; mRoleManagerAdapter = roleManagerAdapter; mFeatureFlags = featureFlags; Resources resources = mContext.getResources(); mSystemDialerComponentName = new ComponentName(resources.getString( Loading @@ -131,10 +134,22 @@ public class DefaultDialerCache { packageIntentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); packageIntentFilter.addDataScheme("package"); packageIntentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); context.registerReceiverAsUser(mReceiver, UserHandle.ALL, packageIntentFilter, null, null); Context userContext = context.createContextAsUser(UserHandle.ALL, 0); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mReceiver, packageIntentFilter, Context.RECEIVER_NOT_EXPORTED); } else { context.registerReceiverAsUser(mReceiver, UserHandle.ALL, packageIntentFilter, null, null); } IntentFilter bootIntentFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mReceiver, bootIntentFilter, Context.RECEIVER_NOT_EXPORTED); } else { context.registerReceiverAsUser(mReceiver, UserHandle.ALL, bootIntentFilter, null, null); } IntentFilter userRemovedFilter = new IntentFilter(Intent.ACTION_USER_REMOVED); context.registerReceiver(mUserRemovedReceiver, userRemovedFilter); Loading src/com/android/server/telecom/InCallController.java +8 −2 Original line number Diff line number Diff line Loading @@ -2234,9 +2234,15 @@ public class InCallController extends CallsManagerListenerBase implements IntentFilter packageChangedFilter = new IntentFilter(Intent.ACTION_PACKAGE_CHANGED); packageChangedFilter.addDataScheme("package"); Context userContext = mContext.createContextAsUser(UserHandle.ALL, 0); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mPackageChangedReceiver, packageChangedFilter, null, null); } else { mContext.registerReceiverAsUser(mPackageChangedReceiver, UserHandle.ALL, packageChangedFilter, null, null); } } private void updateNonUiInCallServices(Call call) { UserHandle userFromCall = getUserFromCall(call); Loading src/com/android/server/telecom/TelecomSystem.java +17 −7 Original line number Diff line number Diff line Loading @@ -243,7 +243,7 @@ public class TelecomSystem { new DefaultDialerCache.DefaultDialerManagerAdapterImpl(); DefaultDialerCache defaultDialerCache = new DefaultDialerCache(mContext, defaultDialerAdapter, roleManagerAdapter, mLock); defaultDialerAdapter, roleManagerAdapter, mLock, mFeatureFlags); Log.startSession("TS.init"); // Wrap this in a try block to ensure session cleanup occurs in the case of error. Loading Loading @@ -467,12 +467,22 @@ public class TelecomSystem { asyncTaskExecutor, featureFlags); mCallsManager.setRespondViaSmsManager(mRespondViaSmsManager); Context userContext = mContext.createContextAsUser(UserHandle.ALL, 0); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mUserSwitchedReceiver, USER_SWITCHED_FILTER, Context.RECEIVER_NOT_EXPORTED); userContext.registerReceiver(mUserStartingReceiver, USER_STARTING_FILTER, Context.RECEIVER_NOT_EXPORTED); userContext.registerReceiver(mBootCompletedReceiver, BOOT_COMPLETE_FILTER, Context.RECEIVER_NOT_EXPORTED); } else { mContext.registerReceiverAsUser(mUserSwitchedReceiver, UserHandle.ALL, USER_SWITCHED_FILTER, null, null); USER_SWITCHED_FILTER, null, null, Context.RECEIVER_NOT_EXPORTED); mContext.registerReceiverAsUser(mUserStartingReceiver, UserHandle.ALL, USER_STARTING_FILTER, null, null); USER_STARTING_FILTER, null, null, Context.RECEIVER_NOT_EXPORTED); mContext.registerReceiverAsUser(mBootCompletedReceiver, UserHandle.ALL, BOOT_COMPLETE_FILTER, null, null); BOOT_COMPLETE_FILTER, null, null, Context.RECEIVER_NOT_EXPORTED); } // Set current user explicitly since USER_SWITCHED_FILTER intent can be missed at // startup Loading tests/src/com/android/server/telecom/tests/ComponentContextFixture.java +7 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,13 @@ public class ComponentContextFixture implements TestFixture<Context> { return null; } @Override public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle handle, IntentFilter filter, String broadcastPermission, Handler scheduler, int flags) { mBroadcastReceivers.add(receiver); return null; } @Override public void sendBroadcast(Intent intent) { // TODO -- need to ensure this is captured Loading tests/src/com/android/server/telecom/tests/DefaultDialerCacheTest.java +9 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.telecom.tests; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.times; Loading Loading @@ -67,24 +68,27 @@ public class DefaultDialerCacheTest extends TelecomTestCase { private DefaultDialerCache.DefaultDialerManagerAdapter mMockDefaultDialerManager; @Mock private RoleManagerAdapter mRoleManagerAdapter; @Mock private Context mUserContext; @Override @Before public void setUp() throws Exception { super.setUp(); mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); when(mFeatureFlags.resolveHiddenDependenciesTwo()).thenReturn(true); when(mContext.createContextAsUser(any(UserHandle.class), anyInt())) .thenReturn(mUserContext); ArgumentCaptor<BroadcastReceiver> packageReceiverCaptor = ArgumentCaptor.forClass(BroadcastReceiver.class); mDefaultDialerCache = new DefaultDialerCache( mContext, mMockDefaultDialerManager, mRoleManagerAdapter, new TelecomSystem.SyncRoot() { }); new TelecomSystem.SyncRoot() {}, mFeatureFlags); verify(mContext, times(2)).registerReceiverAsUser( packageReceiverCaptor.capture(), eq(UserHandle.ALL), any(IntentFilter.class), isNull(), isNull()); verify(mUserContext, times(2)).registerReceiver( packageReceiverCaptor.capture(), any(IntentFilter.class), eq(Context.RECEIVER_NOT_EXPORTED)); // Receive the first receiver that was captured, the package change receiver. mPackageChangeReceiver = packageReceiverCaptor.getAllValues().get(0); Loading Loading
src/com/android/server/telecom/DefaultDialerCache.java +18 −3 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.telecom.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; import com.android.server.telecom.flags.FeatureFlags; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; Loading @@ -48,6 +49,7 @@ public class DefaultDialerCache { private final DefaultDialerManagerAdapter mDefaultDialerManagerAdapter; private final ComponentName mSystemDialerComponentName; private final RoleManagerAdapter mRoleManagerAdapter; private final FeatureFlags mFeatureFlags; private final ConcurrentHashMap<Integer, String> mCurrentDefaultDialerPerUser = new ConcurrentHashMap<>(); private final BroadcastReceiver mReceiver = new BroadcastReceiver() { Loading Loading @@ -115,10 +117,11 @@ public class DefaultDialerCache { public DefaultDialerCache(Context context, DefaultDialerManagerAdapter defaultDialerManagerAdapter, RoleManagerAdapter roleManagerAdapter, TelecomSystem.SyncRoot lock) { TelecomSystem.SyncRoot lock, FeatureFlags featureFlags) { mContext = context; mDefaultDialerManagerAdapter = defaultDialerManagerAdapter; mRoleManagerAdapter = roleManagerAdapter; mFeatureFlags = featureFlags; Resources resources = mContext.getResources(); mSystemDialerComponentName = new ComponentName(resources.getString( Loading @@ -131,10 +134,22 @@ public class DefaultDialerCache { packageIntentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); packageIntentFilter.addDataScheme("package"); packageIntentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); context.registerReceiverAsUser(mReceiver, UserHandle.ALL, packageIntentFilter, null, null); Context userContext = context.createContextAsUser(UserHandle.ALL, 0); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mReceiver, packageIntentFilter, Context.RECEIVER_NOT_EXPORTED); } else { context.registerReceiverAsUser(mReceiver, UserHandle.ALL, packageIntentFilter, null, null); } IntentFilter bootIntentFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mReceiver, bootIntentFilter, Context.RECEIVER_NOT_EXPORTED); } else { context.registerReceiverAsUser(mReceiver, UserHandle.ALL, bootIntentFilter, null, null); } IntentFilter userRemovedFilter = new IntentFilter(Intent.ACTION_USER_REMOVED); context.registerReceiver(mUserRemovedReceiver, userRemovedFilter); Loading
src/com/android/server/telecom/InCallController.java +8 −2 Original line number Diff line number Diff line Loading @@ -2234,9 +2234,15 @@ public class InCallController extends CallsManagerListenerBase implements IntentFilter packageChangedFilter = new IntentFilter(Intent.ACTION_PACKAGE_CHANGED); packageChangedFilter.addDataScheme("package"); Context userContext = mContext.createContextAsUser(UserHandle.ALL, 0); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mPackageChangedReceiver, packageChangedFilter, null, null); } else { mContext.registerReceiverAsUser(mPackageChangedReceiver, UserHandle.ALL, packageChangedFilter, null, null); } } private void updateNonUiInCallServices(Call call) { UserHandle userFromCall = getUserFromCall(call); Loading
src/com/android/server/telecom/TelecomSystem.java +17 −7 Original line number Diff line number Diff line Loading @@ -243,7 +243,7 @@ public class TelecomSystem { new DefaultDialerCache.DefaultDialerManagerAdapterImpl(); DefaultDialerCache defaultDialerCache = new DefaultDialerCache(mContext, defaultDialerAdapter, roleManagerAdapter, mLock); defaultDialerAdapter, roleManagerAdapter, mLock, mFeatureFlags); Log.startSession("TS.init"); // Wrap this in a try block to ensure session cleanup occurs in the case of error. Loading Loading @@ -467,12 +467,22 @@ public class TelecomSystem { asyncTaskExecutor, featureFlags); mCallsManager.setRespondViaSmsManager(mRespondViaSmsManager); Context userContext = mContext.createContextAsUser(UserHandle.ALL, 0); if (mFeatureFlags.resolveHiddenDependenciesTwo()) { userContext.registerReceiver(mUserSwitchedReceiver, USER_SWITCHED_FILTER, Context.RECEIVER_NOT_EXPORTED); userContext.registerReceiver(mUserStartingReceiver, USER_STARTING_FILTER, Context.RECEIVER_NOT_EXPORTED); userContext.registerReceiver(mBootCompletedReceiver, BOOT_COMPLETE_FILTER, Context.RECEIVER_NOT_EXPORTED); } else { mContext.registerReceiverAsUser(mUserSwitchedReceiver, UserHandle.ALL, USER_SWITCHED_FILTER, null, null); USER_SWITCHED_FILTER, null, null, Context.RECEIVER_NOT_EXPORTED); mContext.registerReceiverAsUser(mUserStartingReceiver, UserHandle.ALL, USER_STARTING_FILTER, null, null); USER_STARTING_FILTER, null, null, Context.RECEIVER_NOT_EXPORTED); mContext.registerReceiverAsUser(mBootCompletedReceiver, UserHandle.ALL, BOOT_COMPLETE_FILTER, null, null); BOOT_COMPLETE_FILTER, null, null, Context.RECEIVER_NOT_EXPORTED); } // Set current user explicitly since USER_SWITCHED_FILTER intent can be missed at // startup Loading
tests/src/com/android/server/telecom/tests/ComponentContextFixture.java +7 −0 Original line number Diff line number Diff line Loading @@ -417,6 +417,13 @@ public class ComponentContextFixture implements TestFixture<Context> { return null; } @Override public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle handle, IntentFilter filter, String broadcastPermission, Handler scheduler, int flags) { mBroadcastReceivers.add(receiver); return null; } @Override public void sendBroadcast(Intent intent) { // TODO -- need to ensure this is captured Loading
tests/src/com/android/server/telecom/tests/DefaultDialerCacheTest.java +9 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.telecom.tests; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.times; Loading Loading @@ -67,24 +68,27 @@ public class DefaultDialerCacheTest extends TelecomTestCase { private DefaultDialerCache.DefaultDialerManagerAdapter mMockDefaultDialerManager; @Mock private RoleManagerAdapter mRoleManagerAdapter; @Mock private Context mUserContext; @Override @Before public void setUp() throws Exception { super.setUp(); mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); when(mFeatureFlags.resolveHiddenDependenciesTwo()).thenReturn(true); when(mContext.createContextAsUser(any(UserHandle.class), anyInt())) .thenReturn(mUserContext); ArgumentCaptor<BroadcastReceiver> packageReceiverCaptor = ArgumentCaptor.forClass(BroadcastReceiver.class); mDefaultDialerCache = new DefaultDialerCache( mContext, mMockDefaultDialerManager, mRoleManagerAdapter, new TelecomSystem.SyncRoot() { }); new TelecomSystem.SyncRoot() {}, mFeatureFlags); verify(mContext, times(2)).registerReceiverAsUser( packageReceiverCaptor.capture(), eq(UserHandle.ALL), any(IntentFilter.class), isNull(), isNull()); verify(mUserContext, times(2)).registerReceiver( packageReceiverCaptor.capture(), any(IntentFilter.class), eq(Context.RECEIVER_NOT_EXPORTED)); // Receive the first receiver that was captured, the package change receiver. mPackageChangeReceiver = packageReceiverCaptor.getAllValues().get(0); Loading