Conditionally removing SIP call button

Bug: 3413467
Change-Id: Ic5364825bb8e55bcb9022d3c796a8ea5a476dfae
diff --git a/src/com/android/contacts/quickcontact/QuickContactWindow.java b/src/com/android/contacts/quickcontact/QuickContactWindow.java
index bbb928d..5ec8dc7 100644
--- a/src/com/android/contacts/quickcontact/QuickContactWindow.java
+++ b/src/com/android/contacts/quickcontact/QuickContactWindow.java
@@ -623,7 +623,7 @@
      * Handle the result from the {@link #TOKEN_DATA} query.
      */
     private void handleData(Cursor cursor) {
-        final ResolveCache cache = ResolveCache.getInstance(mContext.getPackageManager());
+        final ResolveCache cache = ResolveCache.getInstance(mContext);
         if (cursor == null) return;
         if (cursor.getCount() == 0) {
             Toast.makeText(mContext, R.string.invalidContactMessage, Toast.LENGTH_LONG).show();
diff --git a/src/com/android/contacts/quickcontact/ResolveCache.java b/src/com/android/contacts/quickcontact/ResolveCache.java
index 5d84253..2b9e92f 100644
--- a/src/com/android/contacts/quickcontact/ResolveCache.java
+++ b/src/com/android/contacts/quickcontact/ResolveCache.java
@@ -16,14 +16,17 @@
 
 package com.android.contacts.quickcontact;
 
+import com.android.contacts.util.PhoneCapabilityTester;
 import com.google.android.collect.Sets;
 
+import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
 import android.text.TextUtils;
 
 import java.lang.ref.SoftReference;
@@ -51,6 +54,7 @@
             "com.android.phone",
             "com.android.browser");
 
+    private final Context mContext;
     private final PackageManager mPackageManager;
 
     private static ResolveCache sInstance;
@@ -59,9 +63,9 @@
      * Returns an instance of the ResolveCache. Only one internal instance is kept, so
      * the argument packageManagers is ignored for all but the first call
      */
-    public synchronized static ResolveCache getInstance(PackageManager packageManager) {
+    public synchronized static ResolveCache getInstance(Context context) {
         if (sInstance == null) {
-            return sInstance = new ResolveCache(packageManager);
+            return sInstance = new ResolveCache(context.getApplicationContext());
         }
         return sInstance;
     }
@@ -81,8 +85,10 @@
 
     private HashMap<String, Entry> mCache = new HashMap<String, Entry>();
 
-    private ResolveCache(PackageManager packageManager) {
-        mPackageManager = packageManager;
+
+    private ResolveCache(Context context) {
+        mContext = context;
+        mPackageManager = context.getPackageManager();
     }
 
     /**
@@ -95,7 +101,12 @@
         if (entry != null) return entry;
         entry = new Entry();
 
-        final Intent intent = action.getIntent();
+        Intent intent = action.getIntent();
+        if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)
+                && !PhoneCapabilityTester.isSipPhone(mContext)) {
+            intent = null;
+        }
+
         if (intent != null) {
             final List<ResolveInfo> matches = mPackageManager.queryIntentActivities(intent,
                     PackageManager.MATCH_DEFAULT_ONLY);