Fix ImportVCardActivity so that NPE will never occur during import.

The NPE occurs only when the importing thread exits before the progress dialog is shown.
In theory (and in practice), this is rare, but anyway, this is a bug.

-----IMPORTANT-----

This change is cherry-picked from the latest build to the eclair.
Please see the description in the issue bellow.

-------------------

Internal issue number: 2164280
diff --git a/src/com/android/contacts/ImportVCardActivity.java b/src/com/android/contacts/ImportVCardActivity.java
index 1dacd62..8fd9c0d 100644
--- a/src/com/android/contacts/ImportVCardActivity.java
+++ b/src/com/android/contacts/ImportVCardActivity.java
@@ -101,6 +101,7 @@
     private ProgressDialog mProgressDialogForScanVCard;
 
     private List<VCardFile> mAllVCardFileList;
+    private VCardScanThread mVCardScanThread;
     private VCardReadThread mVCardReadThread;
     private ProgressDialog mProgressDialogForReadVCard;
 
@@ -602,7 +603,6 @@
         mHandler.post(new Runnable() {
             public void run() {
                 mVCardReadThread = new VCardReadThread(selectedVCardFileList);
-                mVCardReadThread.start();
                 showDialog(R.id.dialog_reading_vcard);
             }
         });
@@ -612,7 +612,6 @@
         mHandler.post(new Runnable() {
             public void run() {
                 mVCardReadThread = new VCardReadThread(canonicalPath);
-                mVCardReadThread.start();
                 showDialog(R.id.dialog_reading_vcard);
             }
         });
@@ -683,6 +682,7 @@
             mProgressDialogForReadVCard.setMessage(message);
             mProgressDialogForReadVCard.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
             mProgressDialogForReadVCard.setOnCancelListener(mVCardReadThread);
+            mVCardReadThread.start();
         }
         return mProgressDialogForReadVCard;
     }
@@ -709,14 +709,15 @@
     protected Dialog onCreateDialog(int resId) {
         switch (resId) {
             case R.id.dialog_searching_vcard: {
-                if (mProgressDialogForScanVCard != null) {
-                    return mProgressDialogForScanVCard;
-                } else {
-                    // It may happen in the complicated situation.
-                    // TODO: Investigate on this.
-                    Log.e(LOG_TAG, "Cached ProgressDialog object is null, which should not happen.");
-                    break;
+                if (mProgressDialogForScanVCard == null) {
+                    String title = getString(R.string.searching_vcard_title);
+                    String message = getString(R.string.searching_vcard_message);
+                    mProgressDialogForScanVCard =
+                        ProgressDialog.show(this, title, message, true, false);
+                    mProgressDialogForScanVCard.setOnCancelListener(mVCardScanThread);
+                    mVCardScanThread.start();
                 }
+                return mProgressDialogForScanVCard;
             }
             case R.id.dialog_sdcard_not_found: {
                 AlertDialog.Builder builder = new AlertDialog.Builder(this)
@@ -747,7 +748,6 @@
                 return getVCardFileSelectDialog(false);
             }
             case R.id.dialog_reading_vcard: {
-                // mVCardReadThread.start() must be called before.
                 return getReadingVCardDialog();
             }
             case R.id.dialog_io_exception: {
@@ -821,12 +821,7 @@
             showDialog(R.id.dialog_sdcard_not_found);
         } else {
             File sdcardDirectory = new File("/sdcard");
-            String title = getString(R.string.searching_vcard_title);
-            String message = getString(R.string.searching_vcard_message);
-            mProgressDialogForScanVCard = ProgressDialog.show(this, title, message, true, false);
-            VCardScanThread thread = new VCardScanThread(sdcardDirectory);
-            mProgressDialogForScanVCard.setOnCancelListener(thread);
-            thread.start();
+            mVCardScanThread = new VCardScanThread(sdcardDirectory);
             showDialog(R.id.dialog_searching_vcard);
         }
     }