From 652a8d7b159ea159205a617ee43712bfbcc40def Mon Sep 17 00:00:00 2001 From: Daisuke Miyakawa Date: Fri, 2 Oct 2009 16:48:06 -0700 Subject: [PATCH] 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 --- src/com/android/contacts/ImportVCardActivity.java | 27 +++++++++-------------- 1 file changed, 11 insertions(+), 16 deletions(-) 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 @@ public class ImportVCardActivity extends Activity { private ProgressDialog mProgressDialogForScanVCard; private List mAllVCardFileList; + private VCardScanThread mVCardScanThread; private VCardReadThread mVCardReadThread; private ProgressDialog mProgressDialogForReadVCard; @@ -602,7 +603,6 @@ public class ImportVCardActivity extends Activity { mHandler.post(new Runnable() { public void run() { mVCardReadThread = new VCardReadThread(selectedVCardFileList); - mVCardReadThread.start(); showDialog(R.id.dialog_reading_vcard); } }); @@ -612,7 +612,6 @@ public class ImportVCardActivity extends Activity { mHandler.post(new Runnable() { public void run() { mVCardReadThread = new VCardReadThread(canonicalPath); - mVCardReadThread.start(); showDialog(R.id.dialog_reading_vcard); } }); @@ -683,6 +682,7 @@ public class ImportVCardActivity extends Activity { mProgressDialogForReadVCard.setMessage(message); mProgressDialogForReadVCard.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialogForReadVCard.setOnCancelListener(mVCardReadThread); + mVCardReadThread.start(); } return mProgressDialogForReadVCard; } @@ -709,14 +709,15 @@ public class ImportVCardActivity extends Activity { 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 @@ public class ImportVCardActivity extends Activity { 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 @@ public class ImportVCardActivity extends Activity { 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); } } -- 2.11.0