From 5bc8b5ae64650e1a62d0b676b34c3f150631c951 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. 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