Don't modify UI from email-sending thread

This commit is contained in:
str4d
2014-12-16 08:13:51 +00:00
parent 7d859446a7
commit 40885edbf7
3 changed files with 66 additions and 48 deletions

View File

@@ -1,5 +1,6 @@
0.3.1
* Fixed crash when clicking "Create new contact" button
* Fixed crash when sending email
* 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

View File

@@ -41,12 +41,14 @@ import i2p.bote.android.service.Init.RouterChoice;
import i2p.bote.android.util.MoveToDialogFragment;
import i2p.bote.fileencryption.PasswordCacheListener;
import i2p.bote.folder.EmailFolder;
import i2p.bote.folder.FolderListener;
import i2p.bote.network.NetworkStatusListener;
public class EmailListActivity extends ActionBarActivity implements
EmailListFragment.OnEmailSelectedListener,
MoveToDialogFragment.MoveToDialogListener,
PasswordCacheListener,
FolderListener,
NetworkStatusListener {
private I2PAndroidHelper mHelper;
private RouterChoice mRouterChoice;
@@ -108,7 +110,7 @@ public class EmailListActivity extends ActionBarActivity implements
// Set the list of folders
// TODO: This is slow, needs a loader
mFolderAdapter.setData(I2PBote.getInstance().getEmailFolders());
mFolderAdapter.setData(I2PBote.getInstance().getEmailFolders(), this);
// Set a custom shadow that overlays the main content when the drawer opens
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
@@ -289,7 +291,7 @@ public class EmailListActivity extends ActionBarActivity implements
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if(mDrawerToggle.onOptionsItemSelected(item)) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
@@ -416,6 +418,38 @@ public class EmailListActivity extends ActionBarActivity implements
});
}
// FolderListener
@Override
public void elementAdded(String messageId) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mFolderAdapter.notifyDataSetChanged();
}
});
}
@Override
public void elementUpdated() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mFolderAdapter.notifyDataSetChanged();
}
});
}
@Override
public void elementRemoved(String messageId) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mFolderAdapter.notifyDataSetChanged();
}
});
}
// NetworkStatusListener
@Override

View File

@@ -14,7 +14,7 @@ import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class FolderListAdapter extends ArrayAdapter<EmailFolder> implements FolderListener {
public class FolderListAdapter extends ArrayAdapter<EmailFolder> {
private final LayoutInflater mInflater;
public FolderListAdapter(Context context) {
@@ -22,16 +22,16 @@ public class FolderListAdapter extends ArrayAdapter<EmailFolder> implements Fold
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void setData(List<EmailFolder> folders) {
public void setData(List<EmailFolder> folders, FolderListener folderListener) {
// Remove previous FolderListeners
for (int i = 0; i < getCount(); i++) {
getItem(i).removeFolderListener(this);
getItem(i).removeFolderListener(folderListener);
}
clear();
if (folders != null) {
for (EmailFolder folder : folders) {
add(folder);
folder.addFolderListener(this);
folder.addFolderListener(folderListener);
}
}
}
@@ -53,21 +53,4 @@ public class FolderListAdapter extends ArrayAdapter<EmailFolder> implements Fold
return v;
}
// FolderListener
@Override
public void elementAdded(String messageId) {
notifyDataSetChanged();
}
@Override
public void elementUpdated() {
notifyDataSetChanged();
}
@Override
public void elementRemoved(String messageId) {
notifyDataSetChanged();
}
}