From 8d03317da19f8b587f03bc6ff1fc1ddbc6f348f6 Mon Sep 17 00:00:00 2001 From: str4d Date: Tue, 16 Dec 2014 06:07:55 +0000 Subject: [PATCH] More robust email checking --- CHANGELOG | 1 + .../i2p/bote/android/EmailListFragment.java | 49 +++++++++++++++++-- app/src/main/res/values/strings.xml | 1 + 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 36b0b5c..f625958 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ 0.3.1 * Fixed crash when clicking "Create new contact" button * Fixed occasional crashes when Bote connects to / disconnects from the network + * Improved robustness and user feedback for email checking * Added "Copy to clipboard" button to identities and contacts * Added labels to the address book actions menu * Updated translations diff --git a/app/src/main/java/i2p/bote/android/EmailListFragment.java b/app/src/main/java/i2p/bote/android/EmailListFragment.java index 97d05fc..7821295 100644 --- a/app/src/main/java/i2p/bote/android/EmailListFragment.java +++ b/app/src/main/java/i2p/bote/android/EmailListFragment.java @@ -58,6 +58,7 @@ public class EmailListFragment extends AuthenticatedListFragment implements OnEmailSelectedListener mCallback; private MultiSwipeRefreshLayout mSwipeRefreshLayout; + private AsyncTask mCheckingTask; private TextView mEmptyText; private TextView mNumIncompleteEmails; @@ -135,7 +136,6 @@ public class EmailListFragment extends AuthenticatedListFragment implements R.color.primary, R.color.accent, R.color.primary, R.color.accent); mSwipeRefreshLayout.setSwipeableChildren(android.R.id.list, android.R.id.empty); mSwipeRefreshLayout.setOnRefreshListener(this); - mSwipeRefreshLayout.setRefreshing(I2PBote.getInstance().isCheckingForMail()); } return v; @@ -177,6 +177,29 @@ public class EmailListFragment extends AuthenticatedListFragment implements } } + @Override + public void onStart() { + super.onStart(); + + if (mSwipeRefreshLayout != null) { + boolean isChecking = I2PBote.getInstance().isCheckingForMail(); + mSwipeRefreshLayout.setRefreshing(isChecking); + if (isChecking) + onRefresh(); + } + } + + @Override + public void onStop() { + super.onStop(); + + if (mCheckingTask != null) { + mCheckingTask.cancel(true); + mCheckingTask = null; + mSwipeRefreshLayout.setRefreshing(false); + } + } + /** * Start loading the list of emails from this folder. * Only called when we have a password cached, or no @@ -237,8 +260,16 @@ public class EmailListFragment extends AuthenticatedListFragment implements boolean passwordRequired = I2PBote.getInstance().isPasswordRequired(); mNewEmail.setVisibility(passwordRequired ? View.GONE : View.VISIBLE); mCheckEmail.setVisible(mSwipeRefreshLayout != null && !passwordRequired); - if (mSwipeRefreshLayout != null) + if (mSwipeRefreshLayout != null) { mSwipeRefreshLayout.setEnabled(!passwordRequired); + if (mSwipeRefreshLayout.isRefreshing()) { + mCheckEmail.setTitle(R.string.checking_email); + mCheckEmail.setEnabled(false); + } else { + mCheckEmail.setTitle(R.string.check_email); + mCheckEmail.setEnabled(true); + } + } } @Override @@ -248,6 +279,7 @@ public class EmailListFragment extends AuthenticatedListFragment implements if (!mSwipeRefreshLayout.isRefreshing()) { mSwipeRefreshLayout.setRefreshing(true); onRefresh(); + getActivity().supportInvalidateOptionsMenu(); } return true; @@ -496,13 +528,17 @@ public class EmailListFragment extends AuthenticatedListFragment implements // SwipeRefreshLayout.OnRefreshListener public void onRefresh() { + // If we are already checking, do nothing else + if (mCheckingTask != null) + return; + I2PBote bote = I2PBote.getInstance(); if (bote.isConnected()) { try { if (!bote.isCheckingForMail()) bote.checkForMail(); - new AsyncTask() { + mCheckingTask = new AsyncTask() { @Override protected Void doInBackground(Void... params) { while (I2PBote.getInstance().isCheckingForMail()) { @@ -510,6 +546,9 @@ public class EmailListFragment extends AuthenticatedListFragment implements Thread.sleep(100); } catch (InterruptedException e) { } + if (isCancelled()) { + break; + } } return null; } @@ -534,8 +573,10 @@ public class EmailListFragment extends AuthenticatedListFragment implements // Notify PullToRefreshLayout that the refresh has finished mSwipeRefreshLayout.setRefreshing(false); + getActivity().supportInvalidateOptionsMenu(); } - }.execute(); + }; + mCheckingTask.execute(); } catch (PasswordException e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1cea043..316927a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,7 @@ Disconnect from network Settings Check email + Checking email… One incomplete email