Merge change I94ee30d0 into eclair-mr2

* changes:
  Fix the layout issue reported in b/2167690
diff --git a/src/com/android/contacts/ExportVCardActivity.java b/src/com/android/contacts/ExportVCardActivity.java
index baf2371..dd1ecc3 100644
--- a/src/com/android/contacts/ExportVCardActivity.java
+++ b/src/com/android/contacts/ExportVCardActivity.java
@@ -36,6 +36,14 @@
 import java.util.HashSet;
 import java.util.Set;
 
+/**
+ * Class for exporting vCard.
+ *
+ * Note that this Activity assumes that the instance is a "one-shot Activity", which will be
+ * finished (with the method {@link Activity#finish()}) after the export and never reuse
+ * any Dialog in the instance. So this code is careless about the management around managed
+ * dialogs stuffs (like how onCreateDialog() is used).
+ */
 public class ExportVCardActivity extends Activity {
     private static final String LOG_TAG = "ExportVCardActivity";
 
diff --git a/src/com/android/contacts/ImportVCardActivity.java b/src/com/android/contacts/ImportVCardActivity.java
index 1a08137..eb99c95 100644
--- a/src/com/android/contacts/ImportVCardActivity.java
+++ b/src/com/android/contacts/ImportVCardActivity.java
@@ -90,6 +90,11 @@
 /**
  * Class for importing vCard. Several user interaction will be required while reading
  * (selecting a file, waiting a moment, etc.)
+ *
+ * Note that this Activity assumes that the instance is a "one-shot Activity", which will be
+ * finished (with the method {@link Activity#finish()}) after the import and never reuse
+ * any Dialog in the instance. So this code is careless about the management around managed
+ * dialogs stuffs (like how onCreateDialog() is used).
  */
 public class ImportVCardActivity extends Activity {
     private static final String LOG_TAG = "ImportVCardActivity";
@@ -677,20 +682,6 @@
         return builder.create();
     }
 
-    private Dialog getReadingVCardDialog() {
-        if (mProgressDialogForReadVCard == null) {
-            String title = getString(R.string.reading_vcard_title);
-            String message = getString(R.string.reading_vcard_message);
-            mProgressDialogForReadVCard = new ProgressDialog(this);
-            mProgressDialogForReadVCard.setTitle(title);
-            mProgressDialogForReadVCard.setMessage(message);
-            mProgressDialogForReadVCard.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
-            mProgressDialogForReadVCard.setOnCancelListener(mVCardReadThread);
-            mVCardReadThread.start();
-        }
-        return mProgressDialogForReadVCard;
-    }
-
     @Override
     protected void onCreate(Bundle bundle) {
         super.onCreate(bundle);
@@ -752,7 +743,17 @@
                 return getVCardFileSelectDialog(false);
             }
             case R.id.dialog_reading_vcard: {
-                return getReadingVCardDialog();
+                if (mProgressDialogForReadVCard == null) {
+                    String title = getString(R.string.reading_vcard_title);
+                    String message = getString(R.string.reading_vcard_message);
+                    mProgressDialogForReadVCard = new ProgressDialog(this);
+                    mProgressDialogForReadVCard.setTitle(title);
+                    mProgressDialogForReadVCard.setMessage(message);
+                    mProgressDialogForReadVCard.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+                    mProgressDialogForReadVCard.setOnCancelListener(mVCardReadThread);
+                    mVCardReadThread.start();
+                }
+                return mProgressDialogForReadVCard;
             }
             case R.id.dialog_io_exception: {
                 String message = (getString(R.string.scanning_sdcard_failed_message,
diff --git a/tests/src/com/android/contacts/RecentCallsListActivityTests.java b/tests/src/com/android/contacts/RecentCallsListActivityTests.java
index 2cdd8d7..afa1a7a 100644
--- a/tests/src/com/android/contacts/RecentCallsListActivityTests.java
+++ b/tests/src/com/android/contacts/RecentCallsListActivityTests.java
@@ -276,7 +276,7 @@
             duration = mRnd.nextInt(10 * 60);  // 0 - 10 minutes random.
         }
         row.add(duration);  // duration
-        if (mVoicemail.equals(number)) {
+        if (mVoicemail != null && mVoicemail.equals(number)) {
             assertEquals(Calls.OUTGOING_TYPE, type);
         }
         row.add(type);  // type
@@ -309,7 +309,10 @@
      * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
      */
     private void insertVoicemail(long date, int duration) {
-        insert(mVoicemail, date, duration, Calls.OUTGOING_TYPE);
+        // mVoicemail may be null
+        if (mVoicemail != null) {
+            insert(mVoicemail, date, duration, Calls.OUTGOING_TYPE);
+        }
     }
 
     /**