1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-30 13:12:25 -05:00

Star and envelope are now active for regular accounts.

This commit is contained in:
Daniel Applebaum 2010-04-22 04:58:50 +00:00
parent 41c5dc5986
commit 8e0ee1a6e1
4 changed files with 172 additions and 123 deletions

View File

@ -690,6 +690,10 @@ Welcome to K-9 Mail setup. K-9 is an open source mail client for Android origin
<string name="count_search_title">Count search results</string> <string name="count_search_title">Count search results</string>
<string name="count_search_summary">Turn off for faster display</string> <string name="count_search_summary">Turn off for faster display</string>
<string name="search_title"><xliff:g id="search_name">%s</xliff:g> <xliff:g id="modifier">%s</xliff:g></string>
<string name="flagged_modifier"> - Starred</string>
<string name="unread_modifier"> - Unread</string>
<string name="search_all_messages_title">All messages</string> <string name="search_all_messages_title">All messages</string>
<string name="search_all_messages_detail">All messages in searchable folders</string> <string name="search_all_messages_detail">All messages in searchable folders</string>

View File

@ -736,21 +736,31 @@ public class MessagingController implements Runnable
Account[] accounts = prefs.getAccounts(); Account[] accounts = prefs.getAccounts();
List<LocalFolder> foldersToSearch = null; List<LocalFolder> foldersToSearch = null;
boolean displayableOnly = false; boolean displayableOnly = false;
boolean noSpecialFolders = true;
for (final Account account : accounts) for (final Account account : accounts)
{ {
if (accountUuids != null && accountUuidsSet.contains(account.getUuid()) == false) if (accountUuids != null && accountUuidsSet.contains(account.getUuid()) == false)
{ {
continue; continue;
} }
Account.Searchable searchableFolders = account.getSearchableFolders();
switch (searchableFolders)
{
case NONE:
continue;
case DISPLAYABLE:
displayableOnly = true;
break;
if (accountUuids != null && accountUuidsSet.contains(account.getUuid()) == true)
{
displayableOnly = true;
noSpecialFolders = true;
}
else
{
Account.Searchable searchableFolders = account.getSearchableFolders();
switch (searchableFolders)
{
case NONE:
continue;
case DISPLAYABLE:
displayableOnly = true;
break;
}
} }
if (listener != null) if (listener != null)
{ {
@ -769,11 +779,21 @@ public class MessagingController implements Runnable
LocalFolder localFolder = (LocalFolder)folder; LocalFolder localFolder = (LocalFolder)folder;
boolean include = true; boolean include = true;
folder.refresh(prefs); folder.refresh(prefs);
if (displayableOnly && modeMismatch(account.getFolderDisplayMode(), folder.getDisplayClass())) String localFolderName = localFolder.getName();
if (noSpecialFolders && (
localFolderName.equals(account.getTrashFolderName()) ||
localFolderName.equals(account.getOutboxFolderName()) ||
localFolderName.equals(account.getDraftsFolderName()) ||
localFolderName.equals(account.getSentFolderName()) ||
localFolderName.equals(account.getErrorFolderName())))
{ {
include = false; include = false;
} }
if (integrate && localFolder.isIntegrate() == false) else if (displayableOnly && modeMismatch(account.getFolderDisplayMode(), folder.getDisplayClass()))
{
include = false;
}
else if (integrate && localFolder.isIntegrate() == false)
{ {
include = false; include = false;
@ -816,7 +836,7 @@ public class MessagingController implements Runnable
} }
public void messagesFinished(int number) public void messagesFinished(int number)
{ {
listener.searchStats(stats);
} }
}; };
@ -842,6 +862,10 @@ public class MessagingController implements Runnable
} }
} }
} }
if (listener != null)
{
listener.searchStats(stats);
}
} }
}); });
} }

View File

@ -26,8 +26,10 @@ import com.fsck.k9.activity.setup.Prefs;
import com.fsck.k9.mail.Flag; import com.fsck.k9.mail.Flag;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
public class Accounts extends K9ListActivity implements OnItemClickListener, OnClickListener public class Accounts extends K9ListActivity implements OnItemClickListener, OnClickListener
@ -484,7 +486,7 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC
if (account instanceof SearchAccount) if (account instanceof SearchAccount)
{ {
SearchAccount searchAccount = (SearchAccount)account; SearchAccount searchAccount = (SearchAccount)account;
MessageList.actionHandle(this, searchAccount.getDescription(), "", searchAccount.isIntegrate(), searchAccount.getRequiredFlags(), searchAccount.getForbiddenFlags()); MessageList.actionHandle(this, searchAccount.getDescription(), searchAccount);
} }
else else
{ {
@ -827,116 +829,9 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC
holder.flaggedMessageCount.setText(Integer.toString(stats.flaggedMessageCount)); holder.flaggedMessageCount.setText(Integer.toString(stats.flaggedMessageCount));
holder.flaggedMessageCount.setVisibility(K9.messageListStars() && stats.flaggedMessageCount > 0 ? View.VISIBLE : View.GONE); holder.flaggedMessageCount.setVisibility(K9.messageListStars() && stats.flaggedMessageCount > 0 ? View.VISIBLE : View.GONE);
holder.flaggedMessageCount.setOnClickListener(new OnClickListener() holder.flaggedMessageCount.setOnClickListener(new AccountClickListener(account, SearchModifier.FLAGGED));
{ holder.newMessageCount.setOnClickListener(new AccountClickListener(account, SearchModifier.UNREAD));
public void onClick(View v)
{
Log.i(K9.LOG_TAG, "Star on " + account.getDescription());
// TODO: Better String formatting using resources
String description = account.getDescription() + " (Stars)";
if (account instanceof SearchAccount)
{
SearchAccount searchAccount = (SearchAccount)account;
MessageList.actionHandle(Accounts.this,
description, "", searchAccount.isIntegrate(), new Flag[] { Flag.FLAGGED }, null);
}
else
{
SearchSpecification searchSpec = new SearchSpecification()
{
@Override
public String[] getAccountUuids()
{
return new String[] { account.getUuid() };
}
@Override
public Flag[] getForbiddenFlags()
{
return null;
}
@Override
public String getQuery()
{
return null;
}
@Override
public Flag[] getRequiredFlags()
{
return new Flag[] { Flag.FLAGGED };
}
@Override
public boolean isIntegrate()
{
return false;
}
};
// TODO: Need a way to pass a SearchSpecification to the MessageList
// MessageList.actionHandle(Accounts.this,
// description, searchSpec);
}
}
});
holder.newMessageCount.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO: Better String formatting using resources
String description = account.getDescription() + " (Unread)";
Log.i(K9.LOG_TAG, "Envelope on " + account.getDescription());
if (account instanceof SearchAccount)
{
SearchAccount searchAccount = (SearchAccount)account;
MessageList.actionHandle(Accounts.this,
description, "", searchAccount.isIntegrate(), null, new Flag[] { Flag.SEEN });
}
else
{
SearchSpecification searchSpec = new SearchSpecification()
{
@Override
public String[] getAccountUuids()
{
return new String[] { account.getUuid() };
}
@Override
public Flag[] getForbiddenFlags()
{
return new Flag[] { Flag.SEEN };
}
@Override
public String getQuery()
{
return null;
}
@Override
public Flag[] getRequiredFlags()
{
return null;
}
@Override
public boolean isIntegrate()
{
return false;
}
};
// TODO: Need a way to pass a SearchSpecification to the MessageList
// MessageList.actionHandle(Accounts.this,
// description, searchSpec);
}
}
});
holder.activeIcons.setOnClickListener(new OnClickListener() holder.activeIcons.setOnClickListener(new OnClickListener()
{ {
public void onClick(View v) public void onClick(View v)
@ -992,4 +887,108 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC
public View chip; public View chip;
} }
} }
private Flag[] combine(Flag[] set1, Flag[] set2)
{
if (set1 == null)
{
return set2;
}
if (set2 == null)
{
return set1;
}
Set<Flag> flags = new HashSet<Flag>();
for (Flag flag : set1)
{
flags.add(flag);
}
for (Flag flag : set2)
{
flags.add(flag);
}
return flags.toArray(new Flag[0]);
}
private class AccountClickListener implements OnClickListener
{
final BaseAccount account;
final SearchModifier searchModifier;
AccountClickListener(BaseAccount nAccount, SearchModifier nSearchModifier )
{
account = nAccount;
searchModifier = nSearchModifier;
}
@Override
public void onClick(View v)
{
String description = getString(R.string.search_title, account.getDescription(), getString(searchModifier.resId));
if (account instanceof SearchAccount)
{
SearchAccount searchAccount = (SearchAccount)account;
MessageList.actionHandle(Accounts.this,
description, "", searchAccount.isIntegrate(),
combine(searchAccount.getRequiredFlags(), searchModifier.requiredFlags),
combine(searchAccount.getForbiddenFlags(), searchModifier.forbiddenFlags));
}
else
{
SearchSpecification searchSpec = new SearchSpecification()
{
@Override
public String[] getAccountUuids()
{
return new String[] { account.getUuid() };
}
@Override
public Flag[] getForbiddenFlags()
{
return searchModifier.forbiddenFlags;
}
@Override
public String getQuery()
{
return "";
}
@Override
public Flag[] getRequiredFlags()
{
return searchModifier.requiredFlags;
}
@Override
public boolean isIntegrate()
{
return false;
}
};
MessageList.actionHandle(Accounts.this, description, searchSpec);
}
}
}
private enum SearchModifier
{
FLAGGED(R.string.flagged_modifier, new Flag[] { Flag.FLAGGED}, null), UNREAD(R.string.unread_modifier, null, new Flag[] { Flag.SEEN} );
final int resId;
final Flag[] requiredFlags;
final Flag[] forbiddenFlags;
SearchModifier(int nResId, Flag[] nRequiredFlags, Flag[] nForbiddenFlags)
{
resId = nResId;
requiredFlags = nRequiredFlags;
forbiddenFlags = nForbiddenFlags;
}
}
} }

View File

@ -67,8 +67,8 @@ public class MessageList
private static final String EXTRA_QUERY_FLAGS = "queryFlags"; private static final String EXTRA_QUERY_FLAGS = "queryFlags";
private static final String EXTRA_FORBIDDEN_FLAGS = "forbiddenFlags"; private static final String EXTRA_FORBIDDEN_FLAGS = "forbiddenFlags";
private static final String EXTRA_INTEGRATE = "integrate"; private static final String EXTRA_INTEGRATE = "integrate";
private static final String EXTRA_ACCOUNT_UUIDS = "accountUuids";
private static final String EXTRA_TITLE = "title"; private static final String EXTRA_TITLE = "title";
private static final String EXTRA_SEARCH_SPECIFICATION = "searchSpecification";
private ListView mListView; private ListView mListView;
@ -98,6 +98,7 @@ public class MessageList
private Flag[] mQueryFlags = null; private Flag[] mQueryFlags = null;
private Flag[] mForbiddenFlags = null; private Flag[] mForbiddenFlags = null;
private boolean mIntegrate = false; private boolean mIntegrate = false;
private String[] mAccountUuids = null;
private String mTitle; private String mTitle;
private MessageListHandler mHandler = new MessageListHandler(); private MessageListHandler mHandler = new MessageListHandler();
@ -328,6 +329,25 @@ public class MessageList
} }
public static void actionHandle(Context context, String title, SearchSpecification searchSpecification)
{
Intent intent = new Intent(context, MessageList.class);
intent.putExtra(EXTRA_QUERY, searchSpecification.getQuery());
if (searchSpecification.getRequiredFlags() != null)
{
intent.putExtra(EXTRA_QUERY_FLAGS, Utility.combine(searchSpecification.getRequiredFlags(), ','));
}
if (searchSpecification.getForbiddenFlags() != null)
{
intent.putExtra(EXTRA_FORBIDDEN_FLAGS, Utility.combine(searchSpecification.getForbiddenFlags(), ','));
}
intent.putExtra(EXTRA_INTEGRATE, searchSpecification.isIntegrate());
intent.putExtra(EXTRA_ACCOUNT_UUIDS, searchSpecification.getAccountUuids());
intent.putExtra(EXTRA_TITLE, title);
context.startActivity(intent);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{ {
if (mCurrentFolder != null && ((position+1) == mAdapter.getCount())) if (mCurrentFolder != null && ((position+1) == mAdapter.getCount()))
@ -393,6 +413,8 @@ public class MessageList
} }
} }
mIntegrate = intent.getBooleanExtra(EXTRA_INTEGRATE, false); mIntegrate = intent.getBooleanExtra(EXTRA_INTEGRATE, false);
mAccountUuids = intent.getStringArrayExtra(EXTRA_ACCOUNT_UUIDS);
mTitle = intent.getStringExtra(EXTRA_TITLE); mTitle = intent.getStringExtra(EXTRA_TITLE);
// Take the initial folder into account only if we are *not* restoring the // Take the initial folder into account only if we are *not* restoring the
@ -466,7 +488,7 @@ public class MessageList
} }
else if (mQueryString != null) else if (mQueryString != null)
{ {
mController.searchLocalMessages(null, mQueryString, null, mIntegrate, mQueryFlags, mForbiddenFlags, mAdapter.mListener); mController.searchLocalMessages(mAccountUuids, mQueryString, null, mIntegrate, mQueryFlags, mForbiddenFlags, mAdapter.mListener);
} }
mHandler.refreshTitle(); mHandler.refreshTitle();