Enable icon selection in call log

Originally the call log was not hooked up with the PhoneAccount API,
this change hooks that part up.

Bug: 15473965

Change-Id: I96bdde927473abcdf7493573be29bf4979cf2696
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 3ef78af..42e4659 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -17,6 +17,7 @@
 package com.android.dialer;
 
 import android.app.Activity;
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
@@ -32,6 +33,8 @@
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.VoicemailContract.Voicemails;
+import android.telecomm.PhoneAccount;
+import android.telecomm.TelecommManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
@@ -54,6 +57,7 @@
 import com.android.dialer.calllog.CallTypeHelper;
 import com.android.dialer.calllog.ContactInfo;
 import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.calllog.PhoneAccountUtils;
 import com.android.dialer.calllog.PhoneNumberDisplayHelper;
 import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
 import com.android.dialer.util.AsyncTaskExecutor;
@@ -491,7 +495,11 @@
             final int callType = callCursor.getInt(CALL_TYPE_COLUMN_INDEX);
             String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX);
             final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX);
-            final Drawable accountIcon = getAccountIcon(callCursor);
+
+            final Drawable accountIcon = PhoneAccountUtils.getAccountIcon(this,
+                    PhoneAccountUtils.getAccount(
+                    callCursor.getString(ACCOUNT_COMPONENT_NAME),
+                    callCursor.getString(ACCOUNT_ID)));
 
             if (TextUtils.isEmpty(countryIso)) {
                 countryIso = mDefaultCountryIso;
@@ -547,17 +555,6 @@
         }
     }
 
-    /**
-     * Generate account object from data in Telecomm database
-     */
-    private Drawable getAccountIcon(Cursor c) {
-        final String component_name = c.getString(ACCOUNT_COMPONENT_NAME);
-        final String account_id = c.getString(ACCOUNT_ID);
-
-        // TODO: actually pull data from the database
-        return null;
-    }
-
     /** Load the contact photos and places them in the corresponding views. */
     private void loadContactPhotos(Uri contactUri, Uri photoUri, String displayName,
             String lookupKey, int contactType) {
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index e831441..682dbd1 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.calllog;
 
+import android.content.ComponentName;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -644,9 +645,11 @@
         final long date = c.getLong(CallLogQuery.DATE);
         final long duration = c.getLong(CallLogQuery.DURATION);
         final int callType = c.getInt(CallLogQuery.CALL_TYPE);
-        final PhoneAccountHandle accountHandle = getAccountHandle(c);
-        final Drawable accountIcon = accountHandle == null ? null :
-                TelecommManager.from(mContext).getPhoneAccount(accountHandle).getIcon(mContext);
+        final PhoneAccountHandle accountHandle = PhoneAccountUtils.getAccount(
+                c.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME),
+                c.getString(CallLogQuery.ACCOUNT_ID));
+        final Drawable accountIcon = PhoneAccountUtils.getAccountIcon(mContext,
+                accountHandle);
         final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
         final long rowId = c.getLong(CallLogQuery.ID);
         views.rowId = rowId;
@@ -1262,14 +1265,6 @@
         return features;
     }
 
-    private PhoneAccountHandle getAccountHandle(Cursor c) {
-        final String component_name = c.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME);
-        final String account_id = c.getString(CallLogQuery.ACCOUNT_ID);
-
-        // TODO: actually pull data from the database
-        return null;
-    }
-
     private void setPhoto(CallLogListItemViews views, long photoId, Uri contactUri,
             String displayName, String identifier, int contactType) {
         views.quickContactView.assignContactUri(contactUri);
diff --git a/src/com/android/dialer/calllog/PhoneAccountUtils.java b/src/com/android/dialer/calllog/PhoneAccountUtils.java
new file mode 100644
index 0000000..adb12f9
--- /dev/null
+++ b/src/com/android/dialer/calllog/PhoneAccountUtils.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.calllog;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.telecomm.PhoneAccount;
+import android.telecomm.PhoneAccountHandle;
+import android.telecomm.TelecommManager;
+import android.text.TextUtils;
+
+/**
+ * Methods to help extract {@code PhoneAccount} information from database and Telecomm sources
+ */
+public class PhoneAccountUtils {
+    /**
+     * Generate account info from data in Telecomm database
+     */
+    public static PhoneAccountHandle getAccount(String componentString,
+            String accountId) {
+        if (TextUtils.isEmpty(componentString) || TextUtils.isEmpty(accountId)) {
+            return null;
+        }
+        final ComponentName componentName = ComponentName.unflattenFromString(componentString);
+        return new PhoneAccountHandle(componentName, accountId);
+    }
+
+    /**
+     * Generate account icon from data in Telecomm database
+     */
+    public static Drawable getAccountIcon(Context context, PhoneAccountHandle phoneAccount) {
+        final PhoneAccount accountMetadata = TelecommManager.from(context)
+                .getPhoneAccount(phoneAccount);
+        if (accountMetadata == null) {
+            return null;
+        }
+        return accountMetadata.getIcon(context);
+    }
+}