Add PhoneAccount registration.
Writes/Reads PhoneAccount registration as they are added and
removed through the TelecommManager APIs.
Ultimately, we may want to use a proper Telecomm-provider DB instead of
string-based serialized setting.
Bug: 16292368
Change-Id: I1214fcdd8728cddc949945a590b20e328de5ee7f
diff --git a/src/com/android/telecomm/TelecommServiceImpl.java b/src/com/android/telecomm/TelecommServiceImpl.java
index 509307b..d848029 100644
--- a/src/com/android/telecomm/TelecommServiceImpl.java
+++ b/src/com/android/telecomm/TelecommServiceImpl.java
@@ -20,7 +20,6 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.res.Resources;
-import android.net.Uri;
import android.os.Binder;
import android.os.Handler;
import android.os.Looper;
@@ -35,10 +34,7 @@
import com.android.internal.telecomm.ITelecommService;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
/**
* Implementation of the ITelecomm interface.
@@ -117,10 +113,13 @@
private final MainThreadHandler mMainThreadHandler = new MainThreadHandler();
private final CallsManager mCallsManager = CallsManager.getInstance();
private final MissedCallNotifier mMissedCallNotifier;
+ private final PhoneAccountRegistrar mPhoneAccountRegistrar;
private final AppOpsManager mAppOpsManager;
- private TelecommServiceImpl(MissedCallNotifier missedCallNotifier) {
+ private TelecommServiceImpl(
+ MissedCallNotifier missedCallNotifier, PhoneAccountRegistrar phoneAccountRegistrar) {
mMissedCallNotifier = missedCallNotifier;
+ mPhoneAccountRegistrar = phoneAccountRegistrar;
mAppOpsManager =
(AppOpsManager) TelecommApp.getInstance().getSystemService(Context.APP_OPS_SERVICE);
@@ -131,10 +130,11 @@
* Initialize the singleton TelecommServiceImpl instance.
* This is only done once, at startup, from TelecommApp.onCreate().
*/
- static TelecommServiceImpl init(MissedCallNotifier missedCallNotifier) {
+ static TelecommServiceImpl init(
+ MissedCallNotifier missedCallNotifier, PhoneAccountRegistrar phoneAccountRegistrar) {
synchronized (TelecommServiceImpl.class) {
if (sInstance == null) {
- sInstance = new TelecommServiceImpl(missedCallNotifier);
+ sInstance = new TelecommServiceImpl(missedCallNotifier, phoneAccountRegistrar);
} else {
Log.wtf(TAG, "init() called multiple times! sInstance %s", sInstance);
}
@@ -146,98 +146,43 @@
// Implementation of the ITelecommService interface.
//
- private static Map<PhoneAccount, PhoneAccountMetadata> sMetadataByAccount = new HashMap<>();
-
- static {
- // TODO (STOPSHIP): Static list of Accounts for testing and UX work only.
- ComponentName componentName = new ComponentName(
- "com.android.telecomm",
- TelecommServiceImpl.class.getName()); // This field is a no-op
- Context app = TelecommApp.getInstance();
-
- PhoneAccount[] accounts = new PhoneAccount[] {
- new PhoneAccount(
- componentName,
- "account0",
- Uri.parse("tel:999-555-1212"),
- 0),
- new PhoneAccount(
- componentName,
- "account1",
- Uri.parse("tel:333-111-2222"),
- 0),
- new PhoneAccount(
- componentName,
- "account2",
- Uri.parse("mailto:two@example.com"),
- 0),
- new PhoneAccount(
- componentName,
- "account3",
- Uri.parse("mailto:three@example.com"),
- 0)
- };
-
- sMetadataByAccount.put(
- accounts[0],
- new PhoneAccountMetadata(
- accounts[0],
- 0,
- app.getString(R.string.test_account_0_label),
- app.getString(R.string.test_account_0_short_description)));
- sMetadataByAccount.put(
- accounts[1],
- new PhoneAccountMetadata(
- accounts[1],
- 0,
- app.getString(R.string.test_account_1_label),
- app.getString(R.string.test_account_1_short_description)));
- sMetadataByAccount.put(
- accounts[2],
- new PhoneAccountMetadata(
- accounts[2],
- 0,
- app.getString(R.string.test_account_2_label),
- app.getString(R.string.test_account_2_short_description)));
- sMetadataByAccount.put(
- accounts[3],
- new PhoneAccountMetadata(
- accounts[3],
- 0,
- app.getString(R.string.test_account_3_label),
- app.getString(R.string.test_account_3_short_description)));
- }
-
@Override
public List<PhoneAccount> getEnabledPhoneAccounts() {
- return new ArrayList<>(sMetadataByAccount.keySet());
+ return mPhoneAccountRegistrar.getEnabledAccounts();
}
@Override
public PhoneAccountMetadata getPhoneAccountMetadata(PhoneAccount account) {
- return sMetadataByAccount.get(account);
+ PhoneAccount registeredAccount = mPhoneAccountRegistrar.getRegisteredAccount(account);
+ if (registeredAccount != null) {
+ return new PhoneAccountMetadata(
+ registeredAccount, 0, account.getComponentName().getPackageName(), null);
+ }
+ return null;
}
@Override
public void registerPhoneAccount(PhoneAccount account, PhoneAccountMetadata metadata) {
enforceModifyPermissionOrCallingPackage(account.getComponentName().getPackageName());
- // TODO(santoscordon) -- IMPLEMENT ...
+ mPhoneAccountRegistrar.addAccount(account);
+ // TODO(santoscordon): Implement metadata
}
@Override
public void unregisterPhoneAccount(PhoneAccount account) {
enforceModifyPermissionOrCallingPackage(account.getComponentName().getPackageName());
- // TODO(santoscordon) -- IMPLEMENT ...
+ mPhoneAccountRegistrar.removeAccount(account);
}
@Override
public void clearAccounts(String packageName) {
enforceModifyPermissionOrCallingPackage(packageName);
- // TODO(santoscordon) -- IMPLEMENT ...
+ // TODO(santoscordon): Is this needed?
+ Log.e(TAG, null, "Unexpected method call: clearAccounts()");
}
/**
- * @see TelecommManager#silenceringer
+ * @see TelecommManager#silenceRinger
*/
@Override
public void silenceRinger() {