2010-08-17 22:49:13 -04:00
|
|
|
package com.fsck.k9.activity;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
import com.fsck.k9.Account;
|
|
|
|
import com.fsck.k9.K9;
|
|
|
|
import com.fsck.k9.R;
|
|
|
|
import com.fsck.k9.mail.Folder;
|
|
|
|
import com.fsck.k9.mail.MessagingException;
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
public class FolderInfoHolder implements Comparable<FolderInfoHolder> {
|
2010-08-17 22:49:13 -04:00
|
|
|
public String name;
|
|
|
|
public String displayName;
|
|
|
|
public long lastChecked;
|
|
|
|
public int unreadMessageCount;
|
|
|
|
public int flaggedMessageCount;
|
|
|
|
public boolean loading;
|
|
|
|
public String status;
|
|
|
|
public boolean lastCheckFailed;
|
|
|
|
public Folder folder;
|
|
|
|
public boolean pushActive;
|
|
|
|
|
|
|
|
@Override
|
2011-02-06 17:09:48 -05:00
|
|
|
public boolean equals(Object o) {
|
2010-08-17 22:49:13 -04:00
|
|
|
return this.name.equals(((FolderInfoHolder)o).name);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2011-02-06 17:09:48 -05:00
|
|
|
public int hashCode() {
|
2010-08-17 22:49:13 -04:00
|
|
|
return name.hashCode();
|
|
|
|
}
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
public int compareTo(FolderInfoHolder o) {
|
2010-08-17 22:49:13 -04:00
|
|
|
String s1 = this.name;
|
|
|
|
String s2 = o.name;
|
|
|
|
|
|
|
|
int ret = s1.compareToIgnoreCase(s2);
|
2011-02-06 17:09:48 -05:00
|
|
|
if (ret != 0) {
|
2010-08-17 22:49:13 -04:00
|
|
|
return ret;
|
2011-02-06 17:09:48 -05:00
|
|
|
} else {
|
2010-08-17 22:49:13 -04:00
|
|
|
return s1.compareTo(s2);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
private String truncateStatus(String mess) {
|
|
|
|
if (mess != null && mess.length() > 27) {
|
2010-08-17 22:49:13 -04:00
|
|
|
mess = mess.substring(0, 27);
|
|
|
|
}
|
|
|
|
return mess;
|
|
|
|
}
|
|
|
|
|
|
|
|
// constructor for an empty object for comparisons
|
2011-02-06 17:09:48 -05:00
|
|
|
public FolderInfoHolder() {
|
2010-08-17 22:49:13 -04:00
|
|
|
}
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
public FolderInfoHolder(Context context, Folder folder, Account account) {
|
|
|
|
if (context == null) {
|
2010-11-13 16:40:56 -05:00
|
|
|
throw new IllegalArgumentException("null context given");
|
|
|
|
}
|
2010-08-17 22:49:13 -04:00
|
|
|
populate(context, folder, account);
|
|
|
|
}
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
public FolderInfoHolder(Context context, Folder folder, Account account, int unreadCount) {
|
2010-11-12 22:09:23 -05:00
|
|
|
populate(context, folder, account, unreadCount);
|
2010-08-17 22:49:13 -04:00
|
|
|
}
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
public void populate(Context context, Folder folder, Account account, int unreadCount) {
|
2010-08-17 22:49:13 -04:00
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
try {
|
2010-08-17 22:49:13 -04:00
|
|
|
folder.open(Folder.OpenMode.READ_WRITE);
|
|
|
|
// unreadCount = folder.getUnreadMessageCount();
|
2011-02-06 17:09:48 -05:00
|
|
|
} catch (MessagingException me) {
|
2010-08-17 22:49:13 -04:00
|
|
|
Log.e(K9.LOG_TAG, "Folder.getUnreadMessageCount() failed", me);
|
|
|
|
}
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
populate(context, folder, account);
|
2010-08-17 22:49:13 -04:00
|
|
|
|
|
|
|
this.unreadMessageCount = unreadCount;
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
try {
|
2010-08-17 22:49:13 -04:00
|
|
|
this.flaggedMessageCount = folder.getFlaggedMessageCount();
|
2011-02-06 17:09:48 -05:00
|
|
|
} catch (Exception e) {
|
2010-08-17 22:49:13 -04:00
|
|
|
Log.e(K9.LOG_TAG, "Unable to get flaggedMessageCount", e);
|
|
|
|
}
|
|
|
|
|
|
|
|
folder.close();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-02-06 17:09:48 -05:00
|
|
|
public void populate(Context context, Folder folder, Account account) {
|
2010-08-17 22:49:13 -04:00
|
|
|
this.folder = folder;
|
|
|
|
this.name = folder.getName();
|
2010-11-12 22:09:23 -05:00
|
|
|
this.lastChecked = folder.getLastUpdate();
|
|
|
|
|
2010-11-30 22:00:36 -05:00
|
|
|
this.status = truncateStatus(folder.getStatus());
|
2010-08-17 22:49:13 -04:00
|
|
|
|
2012-08-24 21:48:43 -04:00
|
|
|
this.displayName = getDisplayName(context, account, name);
|
2012-04-21 20:02:46 -04:00
|
|
|
}
|
2010-08-17 22:49:13 -04:00
|
|
|
|
2012-04-21 20:02:46 -04:00
|
|
|
/**
|
|
|
|
* Returns the display name for a folder.
|
|
|
|
*
|
|
|
|
* <p>
|
|
|
|
* This will return localized strings for special folders like the Inbox or the Trash folder.
|
|
|
|
* </p>
|
|
|
|
*
|
|
|
|
* @param context
|
|
|
|
* A {@link Context} instance that is used to get the string resources.
|
2012-08-24 21:48:43 -04:00
|
|
|
* @param account
|
|
|
|
* The {@link Account} the folder belongs to.
|
|
|
|
* @param name
|
|
|
|
* The name of the folder for which to return the display name.
|
2012-04-21 20:02:46 -04:00
|
|
|
*
|
|
|
|
* @return The localized name for the provided folder if it's a special folder or the original
|
|
|
|
* folder name if it's a non-special folder.
|
|
|
|
*/
|
2012-08-24 21:48:43 -04:00
|
|
|
public static String getDisplayName(Context context, Account account, String name) {
|
2012-04-21 20:02:46 -04:00
|
|
|
final String displayName;
|
|
|
|
if (name.equals(account.getSpamFolderName())) {
|
|
|
|
displayName = String.format(
|
|
|
|
context.getString(R.string.special_mailbox_name_spam_fmt), name);
|
|
|
|
} else if (name.equals(account.getArchiveFolderName())) {
|
|
|
|
displayName = String.format(
|
|
|
|
context.getString(R.string.special_mailbox_name_archive_fmt), name);
|
|
|
|
} else if (name.equals(account.getSentFolderName())) {
|
|
|
|
displayName = String.format(
|
|
|
|
context.getString(R.string.special_mailbox_name_sent_fmt), name);
|
|
|
|
} else if (name.equals(account.getTrashFolderName())) {
|
|
|
|
displayName = String.format(
|
|
|
|
context.getString(R.string.special_mailbox_name_trash_fmt), name);
|
|
|
|
} else if (name.equals(account.getDraftsFolderName())) {
|
|
|
|
displayName = String.format(
|
|
|
|
context.getString(R.string.special_mailbox_name_drafts_fmt), name);
|
|
|
|
} else if (name.equals(account.getOutboxFolderName())) {
|
|
|
|
displayName = context.getString(R.string.special_mailbox_name_outbox);
|
|
|
|
// FIXME: We really shouldn't do a case-insensitive comparison here
|
|
|
|
} else if (name.equalsIgnoreCase(account.getInboxFolderName())) {
|
|
|
|
displayName = context.getString(R.string.special_mailbox_name_inbox);
|
|
|
|
} else {
|
|
|
|
displayName = name;
|
2010-08-17 22:49:13 -04:00
|
|
|
}
|
|
|
|
|
2012-04-21 20:02:46 -04:00
|
|
|
return displayName;
|
2010-08-17 22:49:13 -04:00
|
|
|
}
|
|
|
|
}
|