Merge 6b6862135687b303362f0a5ce44209a8748ff379 on remote branch

Change-Id: I3129d1817fd63022c3c070b0d47cd0dcd8e48ea0
diff --git a/src/com/android/contacts/common/CallUtil.java b/src/com/android/contacts/common/CallUtil.java
index d253a4d..3a2bd5b 100644
--- a/src/com/android/contacts/common/CallUtil.java
+++ b/src/com/android/contacts/common/CallUtil.java
@@ -209,11 +209,12 @@
      *
      * @param context The context, enable.
      */
-    public static void saveVideoCallConfig(Context context, boolean enable) {
+    public static boolean saveVideoCallConfig(Context context, boolean enable) {
         if(Settings.System.canWrite(context)) {
-            Settings.System.putInt(context.getContentResolver(),
+            return Settings.System.putInt(context.getContentResolver(),
                     CONFIG_VIDEO_CALLING,enable?ENABLE_VIDEO_CALLING:DISABLE_VIDEO_CALLING);
         }
+        return false;
     }
 
     /**
diff --git a/src/com/android/contacts/common/vcard/ImportVCardActivity.java b/src/com/android/contacts/common/vcard/ImportVCardActivity.java
old mode 100644
new mode 100755
index 9da8c0b..0bc0132
--- a/src/com/android/contacts/common/vcard/ImportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/ImportVCardActivity.java
@@ -110,6 +110,8 @@
 
     private Handler mHandler = new Handler();
 
+    private boolean mBind = false;
+
     // Runs on the UI thread.
     private class DialogDisplayer implements Runnable {
         private final int mResId;
@@ -153,14 +155,18 @@
         @Override
         public void onServiceConnected(ComponentName name, IBinder binder) {
             mService = ((VCardService.MyBinder) binder).getService();
-            Log.i(LOG_TAG,
-                    String.format("Connected to VCardService. Kick a vCard cache thread (uri: %s)",
-                            Arrays.toString(mVCardCacheThread.getSourceUris())));
-            mVCardCacheThread.start();
+            mBind = true;
+            if (mVCardCacheThread != null) {
+                Log.i(LOG_TAG, String.format(
+                                "Connected to VCardService. Kick a vCard cache thread (uri: %s)",
+                                Arrays.toString(mVCardCacheThread.getSourceUris())));
+                mVCardCacheThread.start();
+            }
         }
 
         @Override
         public void onServiceDisconnected(ComponentName name) {
+            mBind = false;
             Log.i(LOG_TAG, "Disconnected from VCardService");
         }
     }
@@ -284,9 +290,10 @@
             } finally {
                 Log.i(LOG_TAG, "Finished caching vCard.");
                 mWakeLock.release();
-                unbindService(mConnection);
-                mProgressDialogForCachingVCard.dismiss();
-                mProgressDialogForCachingVCard = null;
+                if (mProgressDialogForCachingVCard != null) {
+                    mProgressDialogForCachingVCard.dismiss();
+                    mProgressDialogForCachingVCard = null;
+                }
                 finish();
             }
         }
@@ -766,4 +773,13 @@
             }
         });
     }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (mBind) {
+            unbindService(mConnection);
+            mBind = false;
+        }
+    }
 }