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:
parent
5c8a0a908c
commit
c953ff2c1b
@ -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()));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user