mirror of
https://github.com/moparisthebest/k-9
synced 2024-12-25 00:58:50 -05:00
Make stars and envelopes on folder active.
This commit is contained in:
parent
4bec5ea2a3
commit
f185240f67
@ -40,6 +40,7 @@
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
<RelativeLayout
|
||||
android:id="@+id/active_icons"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical"
|
||||
@ -48,6 +49,7 @@
|
||||
android:paddingLeft="6dip"
|
||||
android:paddingRight="6dip"
|
||||
android:gravity="right"
|
||||
android:clickable="true"
|
||||
>
|
||||
<TextView
|
||||
android:id="@+id/folder_unread_message_count"
|
||||
@ -65,7 +67,9 @@
|
||||
android:paddingRight="10dip"
|
||||
android:gravity="right"
|
||||
android:layout_gravity="top"
|
||||
android:layout_alignParentTop="true"/>
|
||||
android:layout_alignParentTop="true"
|
||||
android:clickable="true"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/folder_flagged_message_count"
|
||||
android:ellipsize="end"
|
||||
@ -82,6 +86,7 @@
|
||||
android:gravity="right"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:clickable="true"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
@ -701,7 +701,7 @@ public class MessagingController implements Runnable
|
||||
|
||||
public void searchLocalMessages(SearchSpecification searchSpecification, final Message[] messages, final MessagingListener listener)
|
||||
{
|
||||
searchLocalMessages(searchSpecification.getAccountUuids(), null, messages,
|
||||
searchLocalMessages(searchSpecification.getAccountUuids(), searchSpecification.getFolderNames(), messages,
|
||||
searchSpecification.getQuery(), searchSpecification.isIntegrate(), searchSpecification.getRequiredFlags(), searchSpecification.getForbiddenFlags(), listener);
|
||||
}
|
||||
|
||||
@ -719,20 +719,33 @@ public class MessagingController implements Runnable
|
||||
public void searchLocalMessages(final String[] accountUuids, final String[] folderNames, final Message[] messages, final String query, final boolean integrate,
|
||||
final Flag[] requiredFlags, final Flag[] forbiddenFlags, final MessagingListener listener)
|
||||
{
|
||||
final AccountStats stats = new AccountStats();
|
||||
final Set<String> accountUuidsSet = new HashSet<String>();
|
||||
if (accountUuids != null)
|
||||
if (K9.DEBUG)
|
||||
{
|
||||
for (String accountUuid : accountUuids)
|
||||
{
|
||||
accountUuidsSet.add(accountUuid);
|
||||
}
|
||||
Log.i(K9.LOG_TAG, "searchLocalMessages ("
|
||||
+ "accounts=" + Utility.combine(accountUuids, ',')
|
||||
+ ", folders = " + Utility.combine(folderNames, ',')
|
||||
+ ", messages.size() = " + (messages != null ? messages.length : null)
|
||||
+ ", query = " + query
|
||||
+ ", integrate = " + integrate
|
||||
+ ", requiredFlags = " + Utility.combine(requiredFlags, ',')
|
||||
+ ", forbiddenFlags = " + Utility.combine(forbiddenFlags, ',')
|
||||
+ ")");
|
||||
}
|
||||
|
||||
threadPool.execute(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
|
||||
final AccountStats stats = new AccountStats();
|
||||
final Set<String> accountUuidsSet = new HashSet<String>();
|
||||
if (accountUuids != null)
|
||||
{
|
||||
for (String accountUuid : accountUuids)
|
||||
{
|
||||
accountUuidsSet.add(accountUuid);
|
||||
}
|
||||
}
|
||||
final Preferences prefs = Preferences.getPreferences(mApplication.getApplicationContext());
|
||||
Account[] accounts = prefs.getAccounts();
|
||||
List<LocalFolder> foldersToSearch = null;
|
||||
@ -768,20 +781,20 @@ public class MessagingController implements Runnable
|
||||
listener.listLocalMessagesStarted(account, null);
|
||||
}
|
||||
|
||||
if (integrate || displayableOnly || folderNames != null || noSpecialFolders)
|
||||
if (integrate || displayableOnly || folderNames != null || noSpecialFolders)
|
||||
{
|
||||
List<LocalFolder> tmpFoldersToSearch = new LinkedList<LocalFolder>();
|
||||
try
|
||||
{
|
||||
LocalStore store = account.getLocalStore();
|
||||
List<? extends Folder> folders = store.getPersonalNamespaces();
|
||||
ArrayList<String> folderNameList = null;
|
||||
Set<String> folderNameSet = null;
|
||||
if (folderNames != null)
|
||||
{
|
||||
folderNameList = new ArrayList<String>();
|
||||
folderNameSet = new HashSet<String>();
|
||||
for (String folderName : folderNames)
|
||||
{
|
||||
folderNameList.add(folderName);
|
||||
folderNameSet.add(folderName);
|
||||
}
|
||||
}
|
||||
for (Folder folder : folders)
|
||||
@ -796,9 +809,13 @@ public class MessagingController implements Runnable
|
||||
}
|
||||
else
|
||||
{
|
||||
if (folderNameList != null && folderNameList.contains(localFolder.getName()) == false)
|
||||
if (folderNameSet != null)
|
||||
{
|
||||
include = false;
|
||||
if (folderNameSet.contains(localFolderName) == false)
|
||||
|
||||
{
|
||||
include = false;
|
||||
}
|
||||
}
|
||||
else if (noSpecialFolders && (
|
||||
localFolderName.equals(account.getTrashFolderName()) ||
|
||||
@ -836,11 +853,6 @@ public class MessagingController implements Runnable
|
||||
public void messageFinished(Message message, int number, int ofTotal)
|
||||
{
|
||||
List<Message> messages = new ArrayList<Message>();
|
||||
LocalFolder localFolder = (LocalStore.LocalFolder)message.getFolder();
|
||||
if (localFolder.getName().equals(localFolder.getAccount().getErrorFolderName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
messages.add(message);
|
||||
stats.unreadMessageCount += (message.isSet(Flag.SEEN) == false) ? 1 : 0;
|
||||
@ -2934,7 +2946,6 @@ public class MessagingController implements Runnable
|
||||
{
|
||||
throw new IllegalArgumentException("Message not found: folder=" + folder + ", uid=" + uid);
|
||||
}
|
||||
|
||||
for (MessagingListener l : getListeners())
|
||||
{
|
||||
l.loadMessageForViewHeadersAvailable(account, folder, uid, message);
|
||||
|
@ -9,7 +9,6 @@ import java.util.UUID;
|
||||
import android.content.Context;
|
||||
|
||||
import com.fsck.k9.mail.Flag;
|
||||
import com.fsck.k9.mail.Message;
|
||||
|
||||
public class SearchAccount implements BaseAccount, SearchSpecification, Serializable
|
||||
{
|
||||
@ -22,6 +21,7 @@ public class SearchAccount implements BaseAccount, SearchSpecification, Serializ
|
||||
private String mUuid = UUID.randomUUID().toString();
|
||||
private boolean builtin = false;
|
||||
private String[] accountUuids = null;
|
||||
private String[] folderNames = null;
|
||||
|
||||
public SearchAccount(Preferences preferences)
|
||||
{
|
||||
@ -122,4 +122,13 @@ public class SearchAccount implements BaseAccount, SearchSpecification, Serializ
|
||||
{
|
||||
this.accountUuids = accountUuids;
|
||||
}
|
||||
@Override
|
||||
public String[] getFolderNames()
|
||||
{
|
||||
return folderNames;
|
||||
}
|
||||
public void setFolderNames(String[] folderNames)
|
||||
{
|
||||
this.folderNames = folderNames;
|
||||
}
|
||||
}
|
@ -15,4 +15,6 @@ public interface SearchSpecification
|
||||
public String getQuery();
|
||||
|
||||
public String[] getAccountUuids();
|
||||
|
||||
public String[] getFolderNames();
|
||||
}
|
@ -969,6 +969,12 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getFolderNames()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
MessageList.actionHandle(Accounts.this, description, searchSpec);
|
||||
}
|
||||
@ -976,22 +982,4 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC
|
||||
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.*;
|
||||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.*;
|
||||
import android.widget.AdapterView.AdapterContextMenuInfo;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
@ -23,6 +24,7 @@ import com.fsck.k9.*;
|
||||
import com.fsck.k9.Account.FolderMode;
|
||||
import com.fsck.k9.activity.setup.AccountSettings;
|
||||
import com.fsck.k9.activity.setup.FolderSettings;
|
||||
import com.fsck.k9.mail.Flag;
|
||||
import com.fsck.k9.mail.Folder;
|
||||
import com.fsck.k9.mail.Message;
|
||||
import com.fsck.k9.mail.MessagingException;
|
||||
@ -64,7 +66,6 @@ public class FolderList extends K9ListActivity
|
||||
private FolderListHandler mHandler = new FolderListHandler();
|
||||
|
||||
private int mUnreadMessageCount;
|
||||
private int mFlaggedMessageCount;
|
||||
|
||||
private FontSizes mFontSizes = K9.getFontSizes();
|
||||
|
||||
@ -1190,6 +1191,7 @@ public class FolderList extends K9ListActivity
|
||||
holder.newMessageCount = (TextView) view.findViewById(R.id.folder_unread_message_count);
|
||||
holder.flaggedMessageCount = (TextView) view.findViewById(R.id.folder_flagged_message_count);
|
||||
holder.folderStatus = (TextView) view.findViewById(R.id.folder_status);
|
||||
holder.activeIcons = (RelativeLayout) view.findViewById(R.id.active_icons);
|
||||
holder.chip = view.findViewById(R.id.chip);
|
||||
holder.rawFolderName = folder.name;
|
||||
|
||||
@ -1240,6 +1242,7 @@ public class FolderList extends K9ListActivity
|
||||
{
|
||||
holder.newMessageCount.setText(Integer
|
||||
.toString(folder.unreadMessageCount));
|
||||
holder.newMessageCount.setOnClickListener(new FolderClickListener(mAccount, folder.name, folder.displayName, SearchModifier.UNREAD));
|
||||
holder.newMessageCount.setVisibility(View.VISIBLE);
|
||||
}
|
||||
else
|
||||
@ -1251,12 +1254,22 @@ public class FolderList extends K9ListActivity
|
||||
{
|
||||
holder.flaggedMessageCount.setText(Integer
|
||||
.toString(folder.flaggedMessageCount));
|
||||
holder.flaggedMessageCount.setOnClickListener(new FolderClickListener(mAccount, folder.name, folder.displayName, SearchModifier.FLAGGED));
|
||||
holder.flaggedMessageCount.setVisibility(View.VISIBLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
holder.flaggedMessageCount.setVisibility(View.GONE);
|
||||
}
|
||||
holder.activeIcons.setOnClickListener(new OnClickListener()
|
||||
{
|
||||
public void onClick(View v)
|
||||
{
|
||||
Toast toast = Toast.makeText(getApplication(), getString(R.string.tap_hint), Toast.LENGTH_SHORT);
|
||||
toast.show();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
holder.chip.setBackgroundResource(K9.COLOR_CHIP_RES_IDS[mAccount.getAccountNumber() % K9.COLOR_CHIP_RES_IDS.length]);
|
||||
|
||||
@ -1422,8 +1435,77 @@ public class FolderList extends K9ListActivity
|
||||
public TextView newMessageCount;
|
||||
public TextView flaggedMessageCount;
|
||||
|
||||
public RelativeLayout activeIcons;
|
||||
public String rawFolderName;
|
||||
public View chip;
|
||||
}
|
||||
|
||||
private class FolderClickListener implements OnClickListener
|
||||
{
|
||||
|
||||
final BaseAccount account;
|
||||
final String folderName;
|
||||
final String displayName;
|
||||
final SearchModifier searchModifier;
|
||||
FolderClickListener(BaseAccount nAccount, String folderName, String displayName, SearchModifier nSearchModifier )
|
||||
{
|
||||
account = nAccount;
|
||||
this.folderName = folderName;
|
||||
searchModifier = nSearchModifier;
|
||||
this.displayName = displayName;
|
||||
}
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
String description = getString(R.string.search_title,
|
||||
getString(R.string.message_list_title, account.getDescription(), displayName),
|
||||
getString(searchModifier.resId));
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getFolderNames()
|
||||
{
|
||||
return new String[] { folderName };
|
||||
}
|
||||
|
||||
};
|
||||
MessageList.actionHandle(FolderList.this, description, searchSpec);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -67,7 +67,8 @@ public class MessageList
|
||||
private static final String EXTRA_QUERY_FLAGS = "queryFlags";
|
||||
private static final String EXTRA_FORBIDDEN_FLAGS = "forbiddenFlags";
|
||||
private static final String EXTRA_INTEGRATE = "integrate";
|
||||
private static final String EXTRA_ACCOUNT_UUIDS = "accountUuids";
|
||||
private static final String EXTRA_ACCOUNT_UUIDS = "accountUuids";
|
||||
private static final String EXTRA_FOLDER_NAMES = "folderNames";
|
||||
private static final String EXTRA_TITLE = "title";
|
||||
|
||||
private ListView mListView;
|
||||
@ -99,6 +100,7 @@ public class MessageList
|
||||
private Flag[] mForbiddenFlags = null;
|
||||
private boolean mIntegrate = false;
|
||||
private String[] mAccountUuids = null;
|
||||
private String[] mFolderNames = null;
|
||||
private String mTitle;
|
||||
|
||||
private MessageListHandler mHandler = new MessageListHandler();
|
||||
@ -343,6 +345,7 @@ public class MessageList
|
||||
}
|
||||
intent.putExtra(EXTRA_INTEGRATE, searchSpecification.isIntegrate());
|
||||
intent.putExtra(EXTRA_ACCOUNT_UUIDS, searchSpecification.getAccountUuids());
|
||||
intent.putExtra(EXTRA_FOLDER_NAMES, searchSpecification.getFolderNames());
|
||||
intent.putExtra(EXTRA_TITLE, title);
|
||||
context.startActivity(intent);
|
||||
|
||||
@ -414,7 +417,7 @@ public class MessageList
|
||||
}
|
||||
mIntegrate = intent.getBooleanExtra(EXTRA_INTEGRATE, false);
|
||||
mAccountUuids = intent.getStringArrayExtra(EXTRA_ACCOUNT_UUIDS);
|
||||
|
||||
mFolderNames = intent.getStringArrayExtra(EXTRA_FOLDER_NAMES);
|
||||
mTitle = intent.getStringExtra(EXTRA_TITLE);
|
||||
|
||||
// Take the initial folder into account only if we are *not* restoring the
|
||||
@ -488,7 +491,7 @@ public class MessageList
|
||||
}
|
||||
else if (mQueryString != null)
|
||||
{
|
||||
mController.searchLocalMessages(mAccountUuids, null, null, mQueryString, mIntegrate, mQueryFlags, mForbiddenFlags, mAdapter.mListener);
|
||||
mController.searchLocalMessages(mAccountUuids, mFolderNames, null, mQueryString, mIntegrate, mQueryFlags, mForbiddenFlags, mAdapter.mListener);
|
||||
}
|
||||
|
||||
mHandler.refreshTitle();
|
||||
|
24
src/com/fsck/k9/activity/SearchModifier.java
Normal file
24
src/com/fsck/k9/activity/SearchModifier.java
Normal file
@ -0,0 +1,24 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package com.fsck.k9.activity;
|
||||
|
||||
import com.fsck.k9.R;
|
||||
import com.fsck.k9.mail.Flag;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user