1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-08-13 17:03:48 -04:00

Bulletproof MessageList against not having a folder loaded

This commit is contained in:
Jesse Vincent 2009-12-27 16:51:32 +00:00
parent 5c8a0a908c
commit c953ff2c1b

View File

@ -236,10 +236,9 @@ public class MessageList
private void setWindowProgress() private void setWindowProgress()
{ {
int level = Window.PROGRESS_END; int level = Window.PROGRESS_END;
if (mCurrentFolder.loading && mAdapter.mListener.getFolderTotal() > 0)
if (mCurrentFolder != null && mCurrentFolder.loading && mAdapter.mListener.getFolderTotal() > 0)
{ {
level = (Window.PROGRESS_END / mAdapter.mListener.getFolderTotal()) * (mAdapter.mListener.getFolderCompleted()) ; level = (Window.PROGRESS_END / mAdapter.mListener.getFolderTotal()) * (mAdapter.mListener.getFolderCompleted()) ;
if (level > Window.PROGRESS_END) if (level > Window.PROGRESS_END)
@ -308,7 +307,11 @@ public class MessageList
public void onItemClick(AdapterView parent, View v, int position, long id) public void onItemClick(AdapterView parent, View v, int position, long id)
{ {
// Debug.stopMethodTracing(); // Debug.stopMethodTracing();
if ((position+1) == (mAdapter.getCount())) if (
mCurrentFolder != null
&&
((position+1) == mAdapter.getCount())
)
{ {
mController.loadMoreMessages( mController.loadMoreMessages(
mAccount, mAccount,
@ -402,7 +405,10 @@ public class MessageList
mAdapter.messages.addAll((List<MessageInfoHolder>) previousData); mAdapter.messages.addAll((List<MessageInfoHolder>) previousData);
} }
if (mFolderName != null)
{
mCurrentFolder = mAdapter.getFolder(mFolderName); mCurrentFolder = mAdapter.getFolder(mFolderName);
}
mController = MessagingController.getInstance(getApplication()); mController = MessagingController.getInstance(getApplication());
@ -459,6 +465,8 @@ public class MessageList
mController.addListener(mAdapter.mListener); mController.addListener(mAdapter.mListener);
mAdapter.messages.clear(); mAdapter.messages.clear();
mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetChanged();
if (mFolderName != null) {
mController.listLocalMessagesSynchronous(mAccount, mFolderName, mAdapter.mListener); mController.listLocalMessagesSynchronous(mAccount, mFolderName, mAdapter.mListener);
NotificationManager notifMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager notifMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
@ -466,6 +474,7 @@ public class MessageList
notifMgr.cancel(-1000 - mAccount.getAccountNumber()); notifMgr.cancel(-1000 - mAccount.getAccountNumber());
mController.getFolderUnreadMessageCount(mAccount, mFolderName, mAdapter.mListener); mController.getFolderUnreadMessageCount(mAccount, mFolderName, mAdapter.mListener);
}
mHandler.refreshTitle(); mHandler.refreshTitle();
@ -919,7 +928,7 @@ public class MessageList
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) protected void onActivityResult(int requestCode, int resultCode, Intent data)
{ {
if (resultCode != RESULT_OK) if (resultCode == RESULT_OK)
return; return;
switch (requestCode) switch (requestCode)
@ -933,13 +942,9 @@ public class MessageList
String uid = data.getStringExtra(ChooseFolder.EXTRA_MESSAGE_UID); String uid = data.getStringExtra(ChooseFolder.EXTRA_MESSAGE_UID);
FolderInfoHolder srcHolder = mCurrentFolder;
if (srcHolder != null && destFolderName != null)
{
MessageInfoHolder m = mAdapter.getMessage(uid); MessageInfoHolder m = mAdapter.getMessage(uid);
if (destFolderName != null && m != null)
if (m != null)
{ {
switch (requestCode) switch (requestCode)
{ {
@ -956,40 +961,26 @@ public class MessageList
} }
} }
} }
}
private void onMoveChosen(MessageInfoHolder holder, String folderName) private void onMoveChosen(MessageInfoHolder holder, String folderName)
{ {
if (mController.isMoveCapable(mAccount) == false) if (mController.isMoveCapable(mAccount) == true && folderName != null)
{ {
return;
}
if (folderName == null)
{
return;
}
mAdapter.removeMessage(holder); mAdapter.removeMessage(holder);
mController.moveMessage(mAccount, holder.message.getFolder().getName(), holder.message, folderName, null); mController.moveMessage(mAccount, holder.message.getFolder().getName(), holder.message, folderName, null);
}
} }
private void onCopyChosen(MessageInfoHolder holder, String folderName) private void onCopyChosen(MessageInfoHolder holder, String folderName)
{ {
if (mController.isCopyCapable(mAccount) == false) if (mController.isCopyCapable(mAccount) == true && folderName != null)
{ {
return;
}
if (folderName == null)
{
return;
}
mController.copyMessage(mAccount, mController.copyMessage(mAccount,
holder.message.getFolder().getName(), holder.message, folderName, null); holder.message.getFolder().getName(), holder.message, folderName, null);
} }
}
private void onReply(MessageInfoHolder holder) private void onReply(MessageInfoHolder holder)
@ -1036,9 +1027,10 @@ public class MessageList
switch (id) switch (id)
{ {
case DIALOG_MARK_ALL_AS_READ: case DIALOG_MARK_ALL_AS_READ:
if (mCurrentFolder != null ) {
((AlertDialog)dialog).setMessage(getString(R.string.mark_all_as_read_dlg_instructions_fmt, ((AlertDialog)dialog).setMessage(getString(R.string.mark_all_as_read_dlg_instructions_fmt,
mCurrentFolder.displayName)); mCurrentFolder.displayName));
}
break; break;
default: default:
@ -1123,7 +1115,9 @@ public class MessageList
switch (itemId) switch (itemId)
{ {
case R.id.check_mail: case R.id.check_mail:
if (mFolderName != null) {
checkMail(mAccount, mFolderName); checkMail(mAccount, mFolderName);
}
return true; return true;
case R.id.send_messages: case R.id.send_messages:
sendMail(mAccount); sendMail(mAccount);
@ -1175,13 +1169,15 @@ public class MessageList
return true; return true;
case R.id.mark_all_as_read: case R.id.mark_all_as_read:
if (mFolderName != null ) {
onMarkAllAsRead(mAccount, mFolderName); onMarkAllAsRead(mAccount, mFolderName);
}
return true; return true;
case R.id.folder_settings: case R.id.folder_settings:
if (mFolderName != null ) {
FolderSettings.actionSettings(this, mAccount, mFolderName); FolderSettings.actionSettings(this, mAccount, mFolderName);
}
return true; return true;
case R.id.account_settings: case R.id.account_settings:
@ -1241,7 +1237,9 @@ public class MessageList
return true; return true;
case R.id.expunge: case R.id.expunge:
if (mCurrentFolder != null ) {
onExpunge(mAccount, mCurrentFolder.name); onExpunge(mAccount, mCurrentFolder.name);
}
return true; return true;
default: default:
@ -1310,7 +1308,7 @@ public class MessageList
} }
} }
if (mCurrentFolder.outbox) if (mCurrentFolder != null && mCurrentFolder.outbox)
{ {
menu.findItem(R.id.check_mail).setVisible(false); menu.findItem(R.id.check_mail).setVisible(false);
} }
@ -1319,7 +1317,7 @@ public class MessageList
menu.findItem(R.id.send_messages).setVisible(false); menu.findItem(R.id.send_messages).setVisible(false);
} }
if (K9.ERROR_FOLDER_NAME.equals(mCurrentFolder.name)) if (mCurrentFolder != null && K9.ERROR_FOLDER_NAME.equals(mCurrentFolder.name))
{ {
menu.findItem(R.id.expunge).setVisible(false); menu.findItem(R.id.expunge).setVisible(false);
} }
@ -1476,7 +1474,7 @@ public class MessageList
{ {
super.synchronizeMailboxStarted(account, folder); super.synchronizeMailboxStarted(account, folder);
if (account.equals(mAccount) && folder.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folder.equals(mFolderName))
{ {
mHandler.progress(true); mHandler.progress(true);
mHandler.folderLoading(folder, true); mHandler.folderLoading(folder, true);
@ -1492,7 +1490,7 @@ public class MessageList
{ {
super.synchronizeMailboxFinished(account, folder, totalMessagesInMailbox, numNewMessages); super.synchronizeMailboxFinished(account, folder, totalMessagesInMailbox, numNewMessages);
if (account.equals(mAccount) && folder.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folder.equals(mFolderName))
{ {
mHandler.progress(false); mHandler.progress(false);
mHandler.folderLoading(folder, false); mHandler.folderLoading(folder, false);
@ -1506,7 +1504,7 @@ public class MessageList
{ {
super.synchronizeMailboxFailed(account, folder, message); super.synchronizeMailboxFailed(account, folder, message);
if (account.equals(mAccount) && folder.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folder.equals(mFolderName))
{ {
// Perhaps this can be restored, if done in the mHandler thread // Perhaps this can be restored, if done in the mHandler thread
// Toast.makeText(MessageList.this, message, Toast.LENGTH_LONG).show(); // Toast.makeText(MessageList.this, message, Toast.LENGTH_LONG).show();
@ -1549,7 +1547,7 @@ public class MessageList
@Override @Override
public void synchronizeMailboxAddOrUpdateMessage(Account account, String folder, Message message) public void synchronizeMailboxAddOrUpdateMessage(Account account, String folder, Message message)
{ {
if (account.equals(mAccount) && folder.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folder.equals(mFolderName))
{ {
addOrUpdateMessage(folder, message); addOrUpdateMessage(folder, message);
} }
@ -1600,7 +1598,7 @@ public class MessageList
@Override @Override
public void listLocalMessagesRemoveMessage(Account account, String folder,Message message) public void listLocalMessagesRemoveMessage(Account account, String folder,Message message)
{ {
if (account.equals(mAccount) && folder.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folder.equals(mFolderName))
{ {
MessageInfoHolder holder = getMessage(message.getUid()); MessageInfoHolder holder = getMessage(message.getUid());
if (holder != null) if (holder != null)
@ -1614,7 +1612,7 @@ public class MessageList
@Override @Override
public void listLocalMessagesAddMessages(Account account, String folder, List<Message> messages) public void listLocalMessagesAddMessages(Account account, String folder, List<Message> messages)
{ {
if (account.equals(mAccount) && folder.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folder.equals(mFolderName))
{ {
addOrUpdateMessages(folder, messages); addOrUpdateMessages(folder, messages);
} }
@ -1625,7 +1623,7 @@ public class MessageList
@Override @Override
public void listLocalMessagesUpdateMessage(Account account, String folder, Message message) public void listLocalMessagesUpdateMessage(Account account, String folder, Message message)
{ {
if (account.equals(mAccount) && folder.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folder.equals(mFolderName))
{ {
addOrUpdateMessage(folder, message); addOrUpdateMessage(folder, message);
} }
@ -1634,7 +1632,7 @@ public class MessageList
@Override @Override
public void folderStatusChanged(Account account, String folderName, int unreadMessageCount) public void folderStatusChanged(Account account, String folderName, int unreadMessageCount)
{ {
if (account.equals(mAccount) && folderName.equals(mFolderName)) if (account.equals(mAccount) && mFolderName != null && folderName.equals(mFolderName))
{ {
mUnreadMessageCount = unreadMessageCount; mUnreadMessageCount = unreadMessageCount;
mHandler.refreshTitle(); mHandler.refreshTitle();
@ -1642,6 +1640,8 @@ public class MessageList
} }
public void pendingCommandsProcessing(Account account) public void pendingCommandsProcessing(Account account)
{ {
super.pendingCommandsProcessing(account); super.pendingCommandsProcessing(account);
@ -1995,14 +1995,14 @@ public class MessageList
FooterViewHolder holder = (FooterViewHolder)footerView.getTag(); FooterViewHolder holder = (FooterViewHolder)footerView.getTag();
if (mCurrentFolder.loading) if (mCurrentFolder != null && mCurrentFolder.loading)
{ {
holder.main.setText(getString(R.string.status_loading_more)); holder.main.setText(getString(R.string.status_loading_more));
holder.progress.setVisibility(ProgressBar.VISIBLE); holder.progress.setVisibility(ProgressBar.VISIBLE);
} }
else else
{ {
if (mCurrentFolder.lastCheckFailed == false) if (mCurrentFolder != null && mCurrentFolder.lastCheckFailed == false)
{ {
holder.main.setText(String.format(getString(R.string.load_more_messages_fmt), mAccount.getDisplayCount())); holder.main.setText(String.format(getString(R.string.load_more_messages_fmt), mAccount.getDisplayCount()));
} }