From: Daisuke Miyakawa Date: Fri, 2 Oct 2009 23:48:06 +0000 (-0700) Subject: Fix ImportVCardActivity so that NPE will never occur during import. X-Git-Tag: android-x86-2.2~159^2~7^2~38^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=652a8d7b159ea159205a617ee43712bfbcc40def;p=android-x86%2Fpackages-apps-Contacts.git 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 @@ 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); } }