diff --git a/res/layout/dialog_password.xml b/res/layout/dialog_password.xml index 3f4b67a..204de96 100644 --- a/res/layout/dialog_password.xml +++ b/res/layout/dialog_password.xml @@ -20,4 +20,10 @@ + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 0cdf02b..1cf4f9b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8,6 +8,7 @@ Close nav Enter password: + Checking password… Password was incorrect Could not read password verification file Not authenticated diff --git a/src/i2p/bote/EmailListFragment.java b/src/i2p/bote/EmailListFragment.java index 7e906c8..bb1fb6f 100644 --- a/src/i2p/bote/EmailListFragment.java +++ b/src/i2p/bote/EmailListFragment.java @@ -15,8 +15,10 @@ import i2p.bote.util.BetterAsyncTaskLoader; import i2p.bote.util.BoteHelper; import android.app.Activity; import android.app.AlertDialog; +import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; +import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; @@ -25,6 +27,7 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.ListView; +import android.widget.TextView; public class EmailListFragment extends ListFragment implements LoaderManager.LoaderCallbacks> { @@ -37,6 +40,9 @@ public class EmailListFragment extends ListFragment implements private EmailListAdapter mAdapter; private EmailFolder mFolder; + private EditText mPasswordInput; + private TextView mPasswordError; + public static EmailListFragment newInstance(String folderName) { EmailListFragment f = new EmailListFragment(); Bundle args = new Bundle(); @@ -98,25 +104,14 @@ public class EmailListFragment extends ListFragment implements View promptView = li.inflate(R.layout.dialog_password, null); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(promptView); - final EditText input = (EditText) promptView.findViewById(R.id.passwordInput); + mPasswordInput = (EditText) promptView.findViewById(R.id.passwordInput); + mPasswordError = (TextView) promptView.findViewById(R.id.passwordError); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { - try { - if (BoteHelper.tryPassword(input.getText().toString())) - initializeList(); - else - setEmptyText(getResources().getString( - R.string.password_incorrect)); - } catch (IOException e) { - setEmptyText(getResources().getString( - R.string.password_file_error)); - } catch (GeneralSecurityException e) { - setEmptyText(getResources().getString( - R.string.password_file_error)); - } dialog.dismiss(); + new PasswordWaiter().execute(); } }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override @@ -130,6 +125,49 @@ public class EmailListFragment extends ListFragment implements passwordDialog.show(); } + private class PasswordWaiter extends AsyncTask { + private final ProgressDialog dialog = new ProgressDialog(EmailListFragment.this.getActivity()); + + protected void onPreExecute() { + dialog.setMessage(getResources().getString( + R.string.checking_password)); + dialog.setCancelable(false); + dialog.show(); + } + + protected String doInBackground(Void... params) { + try { + if (BoteHelper.tryPassword(mPasswordInput.getText().toString())) + return null; + else { + cancel(false); + return getResources().getString( + R.string.password_incorrect); + } + } catch (IOException e) { + cancel(false); + return getResources().getString( + R.string.password_file_error); + } catch (GeneralSecurityException e) { + cancel(false); + return getResources().getString( + R.string.password_file_error); + } + } + + protected void onCancelled(String result) { + dialog.dismiss(); + requestPassword(); + mPasswordError.setText(result); + } + + protected void onPostExecute(String result) { + // Password is valid + initializeList(); + dialog.dismiss(); + } + } + /** * Start loading the list of emails from this folder. * Only called when we have a password cached, or no