summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values/config.xml4
-rw-r--r--src/com/android/telecomm/CreateConnectionProcessor.java7
-rw-r--r--src/com/android/telecomm/PhoneAccountPreferencesActivity.java14
-rw-r--r--src/com/android/telecomm/PhoneAccountRegistrar.java36
4 files changed, 42 insertions, 19 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index 6c6f2156..39923d4c 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -43,4 +43,8 @@
if this package has not registered any accounts, then it will be ignored.
[DO NOT TRANSLATE] -->
<string name="default_connection_manager_component" translatable="false"></string>
+
+ <!-- Flag indicating that wi-fi calling through a connection manager is supported.
+ [DO NOT TRANSLATE] -->
+ <bool name="connection_manager_enabled" translatable="false">true</bool>
</resources>
diff --git a/src/com/android/telecomm/CreateConnectionProcessor.java b/src/com/android/telecomm/CreateConnectionProcessor.java
index 9e3b5ee2..d8fd00ad 100644
--- a/src/com/android/telecomm/CreateConnectionProcessor.java
+++ b/src/com/android/telecomm/CreateConnectionProcessor.java
@@ -16,6 +16,7 @@
package com.android.telecomm;
+import android.content.Context;
import android.telecomm.ParcelableConnection;
import android.telecomm.PhoneAccount;
import android.telecomm.PhoneAccountHandle;
@@ -176,6 +177,12 @@ final class CreateConnectionProcessor {
}
private boolean shouldSetConnectionManager() {
+ Context context = TelecommApp.getInstance();
+ if (!context.getResources().getBoolean(R.bool.connection_manager_enabled)) {
+ // Connection Manager support has been turned off, disregard.
+ return false;
+ }
+
if (mAttemptRecords.size() == 0) {
return false;
}
diff --git a/src/com/android/telecomm/PhoneAccountPreferencesActivity.java b/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
index a7a6a62b..9d30b877 100644
--- a/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
+++ b/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
@@ -62,7 +62,7 @@ public class PhoneAccountPreferencesActivity extends Activity {
mSimCallManagerAccount.setModel(
registrar,
- getSimCallManagers(registrar),
+ registrar.getAllConnectionManagerPhoneAccounts(),
registrar.getSimCallManager(),
getString(R.string.do_not_use_sim_call_manager));
@@ -83,17 +83,5 @@ public class PhoneAccountPreferencesActivity extends Activity {
}
return false;
}
-
- private List<PhoneAccountHandle> getSimCallManagers(PhoneAccountRegistrar registrar) {
- List<PhoneAccountHandle> simCallManagers = new ArrayList<>();
- List<PhoneAccountHandle> allAccounts = registrar.getAllPhoneAccountHandles();
- for (int i = 0; i < allAccounts.size(); i++) {
- PhoneAccount account = registrar.getPhoneAccount(allAccounts.get(i));
- if ((account.getCapabilities() & PhoneAccount.CAPABILITY_CONNECTION_MANAGER) != 0) {
- simCallManagers.add(allAccounts.get(i));
- }
- }
- return simCallManagers;
- }
}
}
diff --git a/src/com/android/telecomm/PhoneAccountRegistrar.java b/src/com/android/telecomm/PhoneAccountRegistrar.java
index f3a5a0b9..db05fff8 100644
--- a/src/com/android/telecomm/PhoneAccountRegistrar.java
+++ b/src/com/android/telecomm/PhoneAccountRegistrar.java
@@ -50,6 +50,7 @@ import java.io.InputStream;
import java.lang.SecurityException;
import java.lang.String;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
@@ -74,6 +75,7 @@ public final class PhoneAccountRegistrar {
private final List<Listener> mListeners = new CopyOnWriteArrayList<>();
private final AtomicFile mAtomicFile;
+ private final Context mContext;
private State mState;
public PhoneAccountRegistrar(Context context) {
@@ -85,6 +87,7 @@ public final class PhoneAccountRegistrar {
// TODO: Change file location when Telecomm is part of system
mAtomicFile = new AtomicFile(new File(context.getFilesDir(), fileName));
mState = new State();
+ mContext = context;
read();
}
@@ -148,6 +151,10 @@ public final class PhoneAccountRegistrar {
}
public void setSimCallManager(PhoneAccountHandle callManager) {
+ if (!isEnabledConnectionManager()) {
+ return;
+ }
+
if (callManager != null) {
PhoneAccount callManagerAccount = getPhoneAccount(callManager);
if (callManagerAccount == null) {
@@ -164,6 +171,10 @@ public final class PhoneAccountRegistrar {
}
public PhoneAccountHandle getSimCallManager() {
+ if (!isEnabledConnectionManager()) {
+ return null;
+ }
+
if (mState.simCallManager != null) {
// Return the registered sim call manager iff it still exists (we keep a sticky
// setting to survive account deletion and re-addition)
@@ -175,11 +186,10 @@ public final class PhoneAccountRegistrar {
}
// See if the OEM has specified a default one.
- Context context = TelecommApp.getInstance();
String defaultConnectionMgr =
- context.getResources().getString(R.string.default_connection_manager_component);
+ mContext.getResources().getString(R.string.default_connection_manager_component);
if (!TextUtils.isEmpty(defaultConnectionMgr)) {
- PackageManager pm = context.getPackageManager();
+ PackageManager pm = mContext.getPackageManager();
ComponentName componentName = ComponentName.unflattenFromString(defaultConnectionMgr);
Intent intent = new Intent(ConnectionService.SERVICE_INTERFACE);
@@ -219,7 +229,14 @@ public final class PhoneAccountRegistrar {
}
public List<PhoneAccountHandle> getOutgoingPhoneAccounts() {
- return getCallProviderAccountHandles();
+ return getPhoneAccountHandles(PhoneAccount.CAPABILITY_CALL_PROVIDER);
+ }
+
+ public List<PhoneAccountHandle> getAllConnectionManagerPhoneAccounts() {
+ if (isEnabledConnectionManager()) {
+ return getPhoneAccountHandles(PhoneAccount.CAPABILITY_CONNECTION_MANAGER);
+ }
+ return Collections.emptyList();
}
public PhoneAccount getPhoneAccount(PhoneAccountHandle handle) {
@@ -323,6 +340,10 @@ public final class PhoneAccountRegistrar {
}
}
+ private boolean isEnabledConnectionManager() {
+ return mContext.getResources().getBoolean(R.bool.connection_manager_enabled);
+ }
+
/**
* Determines if the connection service specified by a {@link PhoneAccountHandle} has the
* {@link Manifest.permission#BIND_CONNECTION_SERVICE} permission.
@@ -352,10 +373,13 @@ public final class PhoneAccountRegistrar {
return (account.getCapabilities() & capability) == capability;
}
- private List<PhoneAccountHandle> getCallProviderAccountHandles() {
+ /**
+ * Returns a list of phone account handles with the specified flag.
+ */
+ private List<PhoneAccountHandle> getPhoneAccountHandles(int flags) {
List<PhoneAccountHandle> accountHandles = new ArrayList<>();
for (PhoneAccount m : mState.accounts) {
- if (has(m, PhoneAccount.CAPABILITY_CALL_PROVIDER)) {
+ if (has(m, flags)) {
accountHandles.add(m.getAccountHandle());
}
}