diff options
-rw-r--r-- | src/com/android/server/telecom/CreateConnectionProcessor.java | 3 | ||||
-rw-r--r-- | src/com/android/server/telecom/PhoneAccountRegistrar.java | 22 |
2 files changed, 15 insertions, 10 deletions
diff --git a/src/com/android/server/telecom/CreateConnectionProcessor.java b/src/com/android/server/telecom/CreateConnectionProcessor.java index 67c63a02..f31f4232 100644 --- a/src/com/android/server/telecom/CreateConnectionProcessor.java +++ b/src/com/android/server/telecom/CreateConnectionProcessor.java @@ -228,8 +228,7 @@ final class CreateConnectionProcessor { CallAttemptRecord record = new CallAttemptRecord( mPhoneAccountRegistrar.getSimCallManager(), mAttemptRecords.get(0).targetPhoneAccount); - Log.v(this, "setConnectionManager, changing %s -> %s", - mAttemptRecords.get(0).targetPhoneAccount, record); + Log.v(this, "setConnectionManager, changing %s -> %s", mAttemptRecords.get(0), record); mAttemptRecords.set(0, record); } else { Log.v(this, "setConnectionManager, not changing"); diff --git a/src/com/android/server/telecom/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java index bb231237..35502015 100644 --- a/src/com/android/server/telecom/PhoneAccountRegistrar.java +++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java @@ -250,7 +250,8 @@ public final class PhoneAccountRegistrar { // Return the registered sim call manager iff it still exists (we keep a sticky // setting to survive account deletion and re-addition) for (int i = 0; i < mState.accounts.size(); i++) { - if (mState.accounts.get(i).getAccountHandle().equals(mState.simCallManager)) { + if (mState.accounts.get(i).getAccountHandle().equals(mState.simCallManager) + && !resolveComponent(mState.simCallManager.getComponentName()).isEmpty()) { return mState.simCallManager; } } @@ -260,14 +261,9 @@ public final class PhoneAccountRegistrar { String defaultConnectionMgr = mContext.getResources().getString(R.string.default_connection_manager_component); if (!TextUtils.isEmpty(defaultConnectionMgr)) { - PackageManager pm = mContext.getPackageManager(); - ComponentName componentName = ComponentName.unflattenFromString(defaultConnectionMgr); - Intent intent = new Intent(ConnectionService.SERVICE_INTERFACE); - intent.setComponent(componentName); - // Make sure that the component can be resolved. - List<ResolveInfo> resolveInfos = pm.queryIntentServices(intent, 0); + List<ResolveInfo> resolveInfos = resolveComponent(componentName); if (!resolveInfos.isEmpty()) { // See if there is registered PhoneAccount by this component. List<PhoneAccountHandle> handles = getAllPhoneAccountHandles(); @@ -287,6 +283,13 @@ public final class PhoneAccountRegistrar { return null; } + private List<ResolveInfo> resolveComponent(ComponentName componentName) { + PackageManager pm = mContext.getPackageManager(); + Intent intent = new Intent(ConnectionService.SERVICE_INTERFACE); + intent.setComponent(componentName); + return pm.queryIntentServices(intent, 0); + } + /** * Retrieves a list of all {@link PhoneAccountHandle}s registered. * @@ -520,7 +523,10 @@ public final class PhoneAccountRegistrar { List<PhoneAccountHandle> accountHandles = new ArrayList<>(); for (PhoneAccount m : mState.accounts) { if (m.hasCapabilities(flags) && (uriScheme == null || m.supportsUriScheme(uriScheme))) { - accountHandles.add(m.getAccountHandle()); + // Also filter out unresolveable accounts + if (!resolveComponent(m.getAccountHandle().getComponentName()).isEmpty()) { + accountHandles.add(m.getAccountHandle()); + } } } return accountHandles; |