Convert remainder of app to use provider-based accounts

What works:
* Unit tests, except for com.android.email.activity.setup.*
* Editing existing accounts
* Create new accounts
* Checking account settings against server
* Mail sync using accounts
* Viewing mailboxes

What breaks (in approx order of planned fixes)
* Unit tests in com.android.email.activity.setup.*
* Viewing messages
* Composing messages
* Some details of account editing
* Import of existing accounts
This commit is contained in:
Andrew Stadler 2009-06-08 15:27:17 -07:00
parent 7ac2b6e048
commit c0033f24a2
21 changed files with 628 additions and 533 deletions

View File

@ -19,6 +19,8 @@ package com.android.email;
import com.android.email.activity.AccountShortcutPicker;
import com.android.email.activity.MessageCompose;
import com.android.email.mail.internet.BinaryTempFileBody;
import com.android.email.provider.EmailContent;
import com.android.email.provider.EmailStore;
import com.android.email.service.BootReceiver;
import com.android.email.service.MailService;
@ -26,6 +28,7 @@ import android.app.Application;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import java.io.File;
@ -126,7 +129,19 @@ public class Email extends Application {
* whether any accounts are configured.
*/
public static void setServicesEnabled(Context context) {
setServicesEnabled(context, Preferences.getPreferences(context).getAccounts().length > 0);
Cursor c = null;
try {
c = context.getContentResolver().query(
EmailStore.Account.CONTENT_URI,
EmailStore.Account.CONTENT_PROJECTION,
null, null, null);
boolean enable = c.getCount() > 0;
setServicesEnabled(context, c.getCount() > 0);
} finally {
if (c != null) {
c.close();
}
}
}
public static void setServicesEnabled(Context context, boolean enabled) {
@ -175,7 +190,23 @@ public class Email extends Application {
Preferences prefs = Preferences.getPreferences(this);
DEBUG = prefs.geteEnableDebugLogging();
DEBUG_SENSITIVE = prefs.getEnableSensitiveLogging();
MessagingController.getInstance(this).resetVisibleLimits(prefs.getAccounts());
// Reset all accounts to default visible window
Cursor c = null;
try {
c = getContentResolver().query(
EmailStore.Account.CONTENT_URI,
EmailStore.Account.CONTENT_PROJECTION,
null, null, null);
while (c.moveToNext()) {
EmailStore.Account account = EmailContent.getContent(c, EmailStore.Account.class);
MessagingController.getInstance(this).resetVisibleLimits(account);
}
} finally {
if (c != null) {
c.close();
}
}
/*
* We have to give MimeMessage a temp directory because File.createTempFile(String, String)

View File

@ -33,6 +33,7 @@ import com.android.email.mail.store.LocalStore;
import com.android.email.mail.store.LocalStore.LocalFolder;
import com.android.email.mail.store.LocalStore.LocalMessage;
import com.android.email.mail.store.LocalStore.PendingCommand;
import com.android.email.provider.EmailStore;
import android.content.Context;
import android.os.Process;
@ -198,9 +199,7 @@ public class MessagingController implements Runnable {
* @param listener
* @throws MessagingException
*/
public void listFolders(
final Account account,
boolean refreshRemote,
public void listFolders(final EmailStore.Account account, boolean refreshRemote,
MessagingListener listener) {
synchronized (mListeners) {
for (MessagingListener l : mListeners) {
@ -208,7 +207,8 @@ public class MessagingController implements Runnable {
}
}
try {
Store localStore = Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store localStore = Store.getInstance(account.getLocalStoreUri(mContext), mContext,
null);
Folder[] localFolders = localStore.getPersonalNamespaces();
if (localFolders == null || localFolders.length == 0) {
@ -234,8 +234,8 @@ public class MessagingController implements Runnable {
public void run() {
try {
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
Store store = Store.getInstance(account.getStoreUri(), mContext,
account.getLocalStoreUri(mContext), mContext, null);
Store store = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
Folder[] remoteFolders = store.getPersonalNamespaces();
@ -258,10 +258,10 @@ public class MessagingController implements Runnable {
for (Folder localFolder : localFolders) {
String localFolderName = localFolder.getName();
if (localFolderName.equalsIgnoreCase(Email.INBOX) ||
localFolderName.equals(account.getTrashFolderName()) ||
localFolderName.equals(account.getOutboxFolderName()) ||
localFolderName.equals(account.getDraftsFolderName()) ||
localFolderName.equals(account.getSentFolderName())) {
localFolderName.equals(account.getTrashFolderName(mContext)) ||
localFolderName.equals(account.getOutboxFolderName(mContext)) ||
localFolderName.equals(account.getDraftsFolderName(mContext)) ||
localFolderName.equals(account.getSentFolderName(mContext))) {
continue;
}
if (!remoteFolderNames.contains(localFolder.getName())) {
@ -310,8 +310,11 @@ public class MessagingController implements Runnable {
*
* NOTE: Inbox is not queried, because we require it to be INBOX, and outbox is not
* queried, because outbox is local-only.
*
* TODO: Rewrite this to use simple folder tagging and none of this account nonsense
*/
/* package */ void updateAccountFolderNames(Account account, Folder[] remoteFolders) {
/* package */ void updateAccountFolderNames(EmailStore.Account account,
Folder[] remoteFolders) {
String trash = null;
String sent = null;
String drafts = null;
@ -326,24 +329,25 @@ public class MessagingController implements Runnable {
drafts = folder.getName();
}
}
/*
// Do not update when null (defaults are already in place)
boolean commit = false;
if (trash != null && !trash.equals(account.getTrashFolderName())) {
if (trash != null && !trash.equals(account.getTrashFolderName(mContext))) {
account.setTrashFolderName(trash);
commit = true;
}
if (sent != null && !sent.equals(account.getSentFolderName())) {
if (sent != null && !sent.equals(account.getSentFolderName(mContext))) {
account.setSentFolderName(sent);
commit = true;
}
if (drafts != null && !drafts.equals(account.getDraftsFolderName())) {
if (drafts != null && !drafts.equals(account.getDraftsFolderName(mContext))) {
account.setDraftsFolderName(drafts);
commit = true;
}
if (commit) {
account.save(Preferences.getPreferences(mContext));
account.saveOrUpdate(mContext);
}
*/
}
/**
@ -355,7 +359,7 @@ public class MessagingController implements Runnable {
* @param listener
* @throws MessagingException
*/
public void listLocalMessages(final Account account, final String folder,
public void listLocalMessages(final EmailStore.Account account, final String folder,
MessagingListener listener) {
synchronized (mListeners) {
for (MessagingListener l : mListeners) {
@ -364,7 +368,8 @@ public class MessagingController implements Runnable {
}
try {
Store localStore = Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store localStore = Store.getInstance(account.getLocalStoreUri(mContext), mContext,
null);
Folder localFolder = localStore.getFolder(folder);
localFolder.open(OpenMode.READ_WRITE, null);
Message[] localMessages = localFolder.getMessages(null);
@ -392,11 +397,13 @@ public class MessagingController implements Runnable {
}
}
public void loadMoreMessages(Account account, String folder, MessagingListener listener) {
public void loadMoreMessages(EmailStore.Account account, String folder,
MessagingListener listener) {
try {
Store.StoreInfo info = Store.StoreInfo.getStoreInfo(account.getStoreUri(), mContext);
Store.StoreInfo info = Store.StoreInfo.getStoreInfo(account.getStoreUri(mContext),
mContext);
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
int oldLimit = localFolder.getVisibleLimit();
if (oldLimit <= 0) {
@ -410,18 +417,16 @@ public class MessagingController implements Runnable {
}
}
public void resetVisibleLimits(Account[] accounts) {
for (Account account : accounts) {
try {
Store.StoreInfo info = Store.StoreInfo.getStoreInfo(account.getStoreUri(),
mContext);
LocalStore localStore =
(LocalStore) Store.getInstance(account.getLocalStoreUri(), mContext, null);
localStore.resetVisibleLimits(info.mVisibleLimitDefault);
}
catch (MessagingException e) {
Log.e(Email.LOG_TAG, "Unable to reset visible limits", e);
}
public void resetVisibleLimits(EmailStore.Account account) {
try {
Store.StoreInfo info = Store.StoreInfo.getStoreInfo(account.getStoreUri(mContext),
mContext);
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(mContext), mContext, null);
localStore.resetVisibleLimits(info.mVisibleLimitDefault);
}
catch (MessagingException e) {
Log.e(Email.LOG_TAG, "Unable to reset visible limits", e);
}
}
@ -431,12 +436,12 @@ public class MessagingController implements Runnable {
* @param folder
* @param listener
*/
public void synchronizeMailbox(final Account account, final String folder,
public void synchronizeMailbox(final EmailStore.Account account, final String folder,
MessagingListener listener) {
/*
* We don't ever sync the Outbox.
*/
if (folder.equals(account.getOutboxFolderName())) {
if (folder.equals(account.getOutboxFolderName(mContext))) {
return;
}
synchronized (mListeners) {
@ -458,7 +463,8 @@ public class MessagingController implements Runnable {
* @param folder
* @param listener
*/
private void synchronizeMailboxSynchronous(final Account account, final String folder) {
private void synchronizeMailboxSynchronous(final EmailStore.Account account,
final String folder) {
synchronized (mListeners) {
for (MessagingListener l : mListeners) {
l.synchronizeMailboxStarted(account, folder);
@ -471,8 +477,8 @@ public class MessagingController implements Runnable {
// Select generic sync or store-specific sync
final LocalStore localStore =
(LocalStore) Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store remoteStore = Store.getInstance(account.getStoreUri(), mContext,
(LocalStore) Store.getInstance(account.getLocalStoreUri(mContext), mContext, null);
Store remoteStore = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
StoreSynchronizer customSync = remoteStore.getMessageSynchronizer();
if (customSync == null) {
@ -516,14 +522,14 @@ public class MessagingController implements Runnable {
* @return
* @throws MessagingException
*/
private StoreSynchronizer.SyncResults synchronizeMailboxGeneric(final Account account,
final String folder) throws MessagingException {
private StoreSynchronizer.SyncResults synchronizeMailboxGeneric(
final EmailStore.Account account, final String folder) throws MessagingException {
/*
* Get the message list from the local store and create an index of
* the uids within the list.
*/
final LocalStore localStore =
(LocalStore) Store.getInstance(account.getLocalStoreUri(), mContext, null);
(LocalStore) Store.getInstance(account.getLocalStoreUri(mContext), mContext, null);
final LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
localFolder.open(OpenMode.READ_WRITE, null);
Message[] localMessages = localFolder.getMessages(null);
@ -536,7 +542,7 @@ public class MessagingController implements Runnable {
}
}
Store remoteStore = Store.getInstance(account.getStoreUri(), mContext,
Store remoteStore = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
Folder remoteFolder = remoteStore.getFolder(folder);
@ -547,9 +553,9 @@ public class MessagingController implements Runnable {
* designed and on Imap folders during error conditions. This allows us
* to treat Pop3 and Imap the same in this code.
*/
if (folder.equals(account.getTrashFolderName()) ||
folder.equals(account.getSentFolderName()) ||
folder.equals(account.getDraftsFolderName())) {
if (folder.equals(account.getTrashFolderName(mContext)) ||
folder.equals(account.getSentFolderName(mContext)) ||
folder.equals(account.getDraftsFolderName(mContext))) {
if (!remoteFolder.exists()) {
if (!remoteFolder.create(FolderType.HOLDS_MESSAGES)) {
return new StoreSynchronizer.SyncResults(0, 0);
@ -592,7 +598,8 @@ public class MessagingController implements Runnable {
int visibleLimit = localFolder.getVisibleLimit();
if (visibleLimit <= 0) {
Store.StoreInfo info = Store.StoreInfo.getStoreInfo(account.getStoreUri(), mContext);
Store.StoreInfo info = Store.StoreInfo.getStoreInfo(account.getStoreUri(mContext),
mContext);
visibleLimit = info.mVisibleLimitDefault;
localFolder.setVisibleLimit(visibleLimit);
}
@ -920,10 +927,10 @@ public class MessagingController implements Runnable {
return results;
}
private void queuePendingCommand(Account account, PendingCommand command) {
private void queuePendingCommand(EmailStore.Account account, PendingCommand command) {
try {
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
localStore.addPendingCommand(command);
}
catch (Exception e) {
@ -931,7 +938,7 @@ public class MessagingController implements Runnable {
}
}
private void processPendingCommands(final Account account) {
private void processPendingCommands(final EmailStore.Account account) {
put("processPendingCommands", null, new Runnable() {
public void run() {
try {
@ -950,9 +957,10 @@ public class MessagingController implements Runnable {
});
}
private void processPendingCommandsSynchronous(Account account) throws MessagingException {
private void processPendingCommandsSynchronous(EmailStore.Account account)
throws MessagingException {
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
ArrayList<PendingCommand> commands = localStore.getPendingCommands();
for (PendingCommand command : commands) {
/*
@ -985,13 +993,13 @@ public class MessagingController implements Runnable {
* @param account
* @throws MessagingException
*/
private void processPendingAppend(PendingCommand command, Account account)
private void processPendingAppend(PendingCommand command, EmailStore.Account account)
throws MessagingException {
String folder = command.arguments[0];
String uid = command.arguments[1];
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
LocalMessage localMessage = (LocalMessage) localFolder.getMessage(uid);
@ -999,7 +1007,7 @@ public class MessagingController implements Runnable {
return;
}
Store remoteStore = Store.getInstance(account.getStoreUri(), mContext,
Store remoteStore = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
Folder remoteFolder = remoteStore.getFolder(folder);
if (!remoteFolder.exists()) {
@ -1083,16 +1091,16 @@ public class MessagingController implements Runnable {
* @param account
* @throws MessagingException
*/
private void processPendingTrash(PendingCommand command, final Account account)
private void processPendingTrash(PendingCommand command, final EmailStore.Account account)
throws MessagingException {
String folder = command.arguments[0];
String uid = command.arguments[1];
final LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
Store remoteStore = Store.getInstance(account.getStoreUri(), mContext,
Store remoteStore = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
Folder remoteFolder = remoteStore.getFolder(folder);
if (!remoteFolder.exists()) {
@ -1112,7 +1120,7 @@ public class MessagingController implements Runnable {
return;
}
Folder remoteTrashFolder = remoteStore.getFolder(account.getTrashFolderName());
Folder remoteTrashFolder = remoteStore.getFolder(account.getTrashFolderName(mContext));
/*
* Attempt to copy the remote message to the remote trash folder.
*/
@ -1129,7 +1137,7 @@ public class MessagingController implements Runnable {
* and pass in the persistence callbacks.
*/
final LocalFolder localTrashFolder =
(LocalFolder) localStore.getFolder(account.getTrashFolderName());
(LocalFolder) localStore.getFolder(account.getTrashFolderName(mContext));
remoteTrashFolder.open(OpenMode.READ_WRITE, localTrashFolder.getPersistentCallbacks());
if (remoteTrashFolder.getMode() != OpenMode.READ_WRITE) {
return;
@ -1176,17 +1184,17 @@ public class MessagingController implements Runnable {
* @param command arguments = (String folder, String uid, boolean read)
* @param account
*/
private void processPendingMarkRead(PendingCommand command, Account account)
private void processPendingMarkRead(PendingCommand command, EmailStore.Account account)
throws MessagingException {
String folder = command.arguments[0];
String uid = command.arguments[1];
boolean read = Boolean.parseBoolean(command.arguments[2]);
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
Store remoteStore = Store.getInstance(account.getStoreUri(), mContext,
Store remoteStore = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
Folder remoteFolder = remoteStore.getFolder(folder);
if (!remoteFolder.exists()) {
@ -1215,12 +1223,13 @@ public class MessagingController implements Runnable {
* @param seen
*/
public void markMessageRead(
final Account account,
final EmailStore.Account account,
final String folder,
final String uid,
final boolean seen) {
try {
Store localStore = Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store localStore = Store.getInstance(account.getLocalStoreUri(mContext), mContext,
null);
Folder localFolder = localStore.getFolder(folder);
localFolder.open(OpenMode.READ_WRITE, null);
@ -1237,13 +1246,13 @@ public class MessagingController implements Runnable {
}
}
private void loadMessageForViewRemote(final Account account, final String folder,
private void loadMessageForViewRemote(final EmailStore.Account account, final String folder,
final String uid, MessagingListener listener) {
put("loadMessageForViewRemote", listener, new Runnable() {
public void run() {
try {
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
localFolder.open(OpenMode.READ_WRITE, null);
@ -1276,7 +1285,7 @@ public class MessagingController implements Runnable {
* fully if possible.
*/
Store remoteStore = Store.getInstance(account.getStoreUri(), mContext,
Store remoteStore = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
Folder remoteFolder = remoteStore.getFolder(folder);
remoteFolder.open(OpenMode.READ_WRITE, localFolder.getPersistentCallbacks());
@ -1349,15 +1358,16 @@ public class MessagingController implements Runnable {
});
}
public void loadMessageForView(final Account account, final String folder, final String uid,
MessagingListener listener) {
public void loadMessageForView(final EmailStore.Account account, final String folder,
final String uid, MessagingListener listener) {
synchronized (mListeners) {
for (MessagingListener l : mListeners) {
l.loadMessageForViewStarted(account, folder, uid);
}
}
try {
Store localStore = Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store localStore = Store.getInstance(account.getLocalStoreUri(mContext), mContext,
null);
LocalFolder localFolder = (LocalFolder) localStore.getFolder(folder);
localFolder.open(OpenMode.READ_WRITE, null);
@ -1413,7 +1423,7 @@ public class MessagingController implements Runnable {
* @param listener
*/
public void loadAttachment(
final Account account,
final EmailStore.Account account,
final Message message,
final Part part,
final Object tag,
@ -1452,7 +1462,7 @@ public class MessagingController implements Runnable {
public void run() {
try {
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
account.getLocalStoreUri(mContext), mContext, null);
/*
* We clear out any attachments already cached in the entire store and then
* we update the passed in message to reflect that there are no cached
@ -1466,7 +1476,7 @@ public class MessagingController implements Runnable {
for (Part attachment : attachments) {
attachment.setBody(null);
}
Store remoteStore = Store.getInstance(account.getStoreUri(), mContext,
Store remoteStore = Store.getInstance(account.getStoreUri(mContext), mContext,
localStore.getPersistentCallbacks());
LocalFolder localFolder =
(LocalFolder) localStore.getFolder(message.getFolder().getName());
@ -1505,13 +1515,13 @@ public class MessagingController implements Runnable {
* @param message
* @param listener
*/
public void sendMessage(final Account account,
final Message message,
public void sendMessage(final EmailStore.Account account, final Message message,
MessagingListener listener) {
try {
Store localStore = Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store localStore = Store.getInstance(account.getLocalStoreUri(mContext), mContext,
null);
LocalFolder localFolder =
(LocalFolder) localStore.getFolder(account.getOutboxFolderName());
(LocalFolder) localStore.getFolder(account.getOutboxFolderName(mContext));
localFolder.open(OpenMode.READ_WRITE, null);
localFolder.appendMessages(new Message[] {
message
@ -1535,8 +1545,7 @@ public class MessagingController implements Runnable {
* @param account
* @param listener
*/
public void sendPendingMessages(final Account account,
MessagingListener listener) {
public void sendPendingMessages(final EmailStore.Account account, MessagingListener listener) {
put("sendPendingMessages", listener, new Runnable() {
public void run() {
sendPendingMessagesSynchronous(account);
@ -1549,11 +1558,11 @@ public class MessagingController implements Runnable {
* @param account
* @param listener
*/
public void sendPendingMessagesSynchronous(final Account account) {
public void sendPendingMessagesSynchronous(final EmailStore.Account account) {
try {
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), mContext, null);
Folder localFolder = localStore.getFolder(account.getOutboxFolderName());
account.getLocalStoreUri(mContext), mContext, null);
Folder localFolder = localStore.getFolder(account.getOutboxFolderName(mContext));
if (!localFolder.exists()) {
return;
}
@ -1570,14 +1579,14 @@ public class MessagingController implements Runnable {
fp.add(FetchProfile.Item.BODY);
LocalFolder localSentFolder =
(LocalFolder) localStore.getFolder(account.getSentFolderName());
(LocalFolder) localStore.getFolder(account.getSentFolderName(mContext));
// Determine if upload to "sent" folder is necessary
Store remoteStore = Store.getInstance(
account.getStoreUri(), mContext, localStore.getPersistentCallbacks());
account.getStoreUri(mContext), mContext, localStore.getPersistentCallbacks());
boolean requireCopyMessageToSentFolder = remoteStore.requireCopyMessageToSentFolder();
Sender sender = Sender.getInstance(account.getSenderUri(), mContext);
Sender sender = Sender.getInstance(account.getSenderUri(mContext), mContext);
for (Message message : localMessages) {
try {
localFolder.fetch(new Message[] { message }, fp, null);
@ -1643,15 +1652,16 @@ public class MessagingController implements Runnable {
* @param message
* @param listener
*/
public void deleteMessage(final Account account, final String folder, final Message message,
MessagingListener listener) {
if (folder.equals(account.getTrashFolderName())) {
public void deleteMessage(final EmailStore.Account account, final String folder,
final Message message, MessagingListener listener) {
if (folder.equals(account.getTrashFolderName(mContext))) {
return;
}
try {
Store localStore = Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store localStore = Store.getInstance(account.getLocalStoreUri(mContext), mContext,
null);
Folder localFolder = localStore.getFolder(folder);
Folder localTrashFolder = localStore.getFolder(account.getTrashFolderName());
Folder localTrashFolder = localStore.getFolder(account.getTrashFolderName(mContext));
localFolder.copyMessages(new Message[] { message }, localTrashFolder, null);
message.setFlag(Flag.DELETED, true);
@ -1669,14 +1679,14 @@ public class MessagingController implements Runnable {
}
}
public void emptyTrash(final Account account, MessagingListener listener) {
public void emptyTrash(final EmailStore.Account account, MessagingListener listener) {
put("emptyTrash", listener, new Runnable() {
public void run() {
// TODO IMAP
try {
Store localStore = Store.getInstance(
account.getLocalStoreUri(), mContext, null);
Folder localFolder = localStore.getFolder(account.getTrashFolderName());
account.getLocalStoreUri(mContext), mContext, null);
Folder localFolder = localStore.getFolder(account.getTrashFolderName(mContext));
localFolder.open(OpenMode.READ_WRITE, null);
Message[] messages = localFolder.getMessages(null);
localFolder.setFlags(messages, new Flag[] {
@ -1713,7 +1723,7 @@ public class MessagingController implements Runnable {
* @param accounts List of accounts to check, or null to check all accounts
* @param listener
*/
public void checkMail(final Context context, Account[] accounts,
public void checkMail(final Context context, EmailStore.Account[] accounts,
final MessagingListener listener) {
/**
* Note: The somewhat tortured logic here is to guarantee proper ordering of events:
@ -1733,9 +1743,10 @@ public class MessagingController implements Runnable {
}
}
if (accounts == null) {
accounts = Preferences.getPreferences(context).getAccounts();
// TODO eliminate this use case, implement, or ...?
// accounts = Preferences.getPreferences(context).getAccounts();
}
for (final Account account : accounts) {
for (final EmailStore.Account account : accounts) {
listFolders(account, true, null);
put("checkMail", listener, new Runnable() {
@ -1756,11 +1767,12 @@ public class MessagingController implements Runnable {
});
}
public void saveDraft(final Account account, final Message message) {
public void saveDraft(final EmailStore.Account account, final Message message) {
try {
Store localStore = Store.getInstance(account.getLocalStoreUri(), mContext, null);
Store localStore = Store.getInstance(account.getLocalStoreUri(mContext), mContext,
null);
LocalFolder localFolder =
(LocalFolder) localStore.getFolder(account.getDraftsFolderName());
(LocalFolder) localStore.getFolder(account.getDraftsFolderName(mContext));
localFolder.open(OpenMode.READ_WRITE, null);
localFolder.appendMessages(new Message[] {
message
@ -1781,7 +1793,7 @@ public class MessagingController implements Runnable {
}
}
class Command {
private static class Command {
public Runnable runnable;
public MessagingListener listener;

View File

@ -16,11 +16,12 @@
package com.android.email;
import android.content.Context;
import com.android.email.mail.Folder;
import com.android.email.mail.Message;
import com.android.email.mail.Part;
import com.android.email.provider.EmailStore;
import android.content.Context;
/**
* Defines the interface that MessagingController will use to callback to requesters. This class
@ -30,91 +31,95 @@ import com.android.email.mail.Part;
* changes in this class.
*/
public class MessagingListener {
public void listFoldersStarted(Account account) {
public void listFoldersStarted(EmailStore.Account account) {
}
public void listFolders(Account account, Folder[] folders) {
public void listFolders(EmailStore.Account account, Folder[] folders) {
}
public void listFoldersFailed(Account account, String message) {
public void listFoldersFailed(EmailStore.Account account, String message) {
}
public void listFoldersFinished(Account account) {
public void listFoldersFinished(EmailStore.Account account) {
}
public void listLocalMessagesStarted(Account account, String folder) {
public void listLocalMessagesStarted(EmailStore.Account account, String folder) {
}
public void listLocalMessages(Account account, String folder, Message[] messages) {
public void listLocalMessages(EmailStore.Account account, String folder, Message[] messages) {
}
public void listLocalMessagesFailed(Account account, String folder, String message) {
public void listLocalMessagesFailed(EmailStore.Account account, String folder, String message) {
}
public void listLocalMessagesFinished(Account account, String folder) {
public void listLocalMessagesFinished(EmailStore.Account account, String folder) {
}
public void synchronizeMailboxStarted(Account account, String folder) {
public void synchronizeMailboxStarted(EmailStore.Account account, String folder) {
}
public void synchronizeMailboxNewMessage(Account account, String folder, Message message) {
public void synchronizeMailboxNewMessage(EmailStore.Account account, String folder,
Message message) {
}
public void synchronizeMailboxRemovedMessage(Account account, String folder,Message message) {
public void synchronizeMailboxRemovedMessage(EmailStore.Account account, String folder,
Message message) {
}
public void synchronizeMailboxFinished(Account account, String folder,
public void synchronizeMailboxFinished(EmailStore.Account account, String folder,
int totalMessagesInMailbox, int numNewMessages) {
}
public void synchronizeMailboxFailed(Account account, String folder, Exception e) {
public void synchronizeMailboxFailed(EmailStore.Account account, String folder, Exception e) {
}
public void loadMessageForViewStarted(Account account, String folder, String uid) {
public void loadMessageForViewStarted(EmailStore.Account account, String folder, String uid) {
}
public void loadMessageForViewHeadersAvailable(Account account, String folder, String uid,
public void loadMessageForViewHeadersAvailable(EmailStore.Account account, String folder,
String uid, Message message) {
}
public void loadMessageForViewBodyAvailable(EmailStore.Account account, String folder,
String uid, Message message) {
}
public void loadMessageForViewFinished(EmailStore.Account account, String folder, String uid,
Message message) {
}
public void loadMessageForViewBodyAvailable(Account account, String folder, String uid,
Message message) {
public void loadMessageForViewFailed(EmailStore.Account account, String folder, String uid,
String message) {
}
public void loadMessageForViewFinished(Account account, String folder, String uid,
Message message) {
public void checkMailStarted(Context context, EmailStore.Account account) {
}
public void loadMessageForViewFailed(Account account, String folder, String uid, String message) {
public void checkMailFinished(Context context, EmailStore.Account account) {
}
public void checkMailStarted(Context context, Account account) {
public void checkMailFailed(Context context, EmailStore.Account account, String reason) {
}
public void checkMailFinished(Context context, Account account) {
public void sendPendingMessagesCompleted(EmailStore.Account account) {
}
public void checkMailFailed(Context context, Account account, String reason) {
public void sendPendingMessagesFailed(EmailStore.Account account, Exception reason) {
}
public void sendPendingMessagesCompleted(Account account) {
public void sendPendingMessageFailed(EmailStore.Account account, Message message,
Exception reason) {
}
public void sendPendingMessagesFailed(Account account, Exception reason) {
public void emptyTrashCompleted(EmailStore.Account account) {
}
public void sendPendingMessageFailed(Account account, Message message, Exception reason) {
}
public void emptyTrashCompleted(Account account) {
}
public void messageUidChanged(Account account, String folder, String oldUid, String newUid) {
public void messageUidChanged(EmailStore.Account account, String folder,
String oldUid, String newUid) {
}
public void loadAttachmentStarted(
Account account,
EmailStore.Account account,
Message message,
Part part,
Object tag,
@ -123,7 +128,7 @@ public class MessagingListener {
}
public void loadAttachmentFinished(
Account account,
EmailStore.Account account,
Message message,
Part part,
Object tag)
@ -131,7 +136,7 @@ public class MessagingListener {
}
public void loadAttachmentFailed(
Account account,
EmailStore.Account account,
Message message,
Part part,
Object tag,

View File

@ -16,24 +16,21 @@
package com.android.email.activity;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.mail.MessagingException;
import com.android.email.mail.Store;
import com.android.email.mail.store.LocalStore;
import com.android.email.mail.store.LocalStore.LocalFolder;
import com.android.email.provider.EmailStore;
import com.android.email.provider.EmailStore.Account;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
@ -45,9 +42,21 @@ import android.widget.AdapterView.OnItemClickListener;
* (or, one could be a base class of the other).
*/
public class AccountShortcutPicker extends ListActivity implements OnItemClickListener {
Account[] mAccounts;
/**
* Support for list adapter
*/
private final static String[] sFromColumns = new String[] {
EmailStore.AccountColumns.DISPLAY_NAME,
EmailStore.AccountColumns.EMAIL_ADDRESS,
EmailStore.RECORD_ID
};
private final int[] sToIds = new int[] {
R.id.description,
R.id.email,
R.id.new_message_count
};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@ -59,8 +68,11 @@ public class AccountShortcutPicker extends ListActivity implements OnItemClickLi
}
// finish() immediately if no accounts are configured
mAccounts = Preferences.getPreferences(this).getAccounts();
if (mAccounts.length == 0) {
Cursor c = this.managedQuery(
EmailStore.Account.CONTENT_URI,
EmailStore.Account.CONTENT_PROJECTION,
null, null);
if (c.getCount() == 0) {
finish();
return;
}
@ -70,16 +82,10 @@ public class AccountShortcutPicker extends ListActivity implements OnItemClickLi
listView.setOnItemClickListener(this);
listView.setItemsCanFocus(false);
listView.setEmptyView(findViewById(R.id.empty));
}
@Override
public void onResume() {
super.onResume();
refresh();
}
private void refresh() {
getListView().setAdapter(new AccountsAdapter(mAccounts));
AccountsAdapter a = new AccountsAdapter(this,
R.layout.accounts_item, c, sFromColumns, sToIds);
listView.setAdapter(a);
}
private void onOpenAccount(Account account) {
@ -93,58 +99,33 @@ public class AccountShortcutPicker extends ListActivity implements OnItemClickLi
onOpenAccount(account);
}
class AccountsAdapter extends ArrayAdapter<Account> {
public AccountsAdapter(Account[] accounts) {
super(AccountShortcutPicker.this, 0, accounts);
}
private static class AccountsAdapter extends SimpleCursorAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Account account = getItem(position);
View view;
if (convertView != null) {
view = convertView;
}
else {
view = getLayoutInflater().inflate(R.layout.accounts_item, parent, false);
}
AccountViewHolder holder = (AccountViewHolder) view.getTag();
if (holder == null) {
holder = new AccountViewHolder();
holder.description = (TextView) view.findViewById(R.id.description);
holder.email = (TextView) view.findViewById(R.id.email);
holder.newMessageCount = (TextView) view.findViewById(R.id.new_message_count);
view.setTag(holder);
}
holder.description.setText(account.getDescription());
holder.email.setText(account.getEmail());
if (account.getEmail().equals(account.getDescription())) {
holder.email.setVisibility(View.GONE);
}
int unreadMessageCount = 0;
try {
LocalStore localStore = (LocalStore) Store.getInstance(
account.getLocalStoreUri(), getApplication(), null);
LocalFolder localFolder = (LocalFolder) localStore.getFolder(Email.INBOX);
if (localFolder.exists()) {
unreadMessageCount = localFolder.getUnreadMessageCount();
public AccountsAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
setViewBinder(new MyViewBinder());
}
/**
* This is only used for the unread messages count. Most of the views are handled
* normally by SimpleCursorAdapter.
*/
private static class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (view.getId() == R.id.new_message_count) {
int unreadMessageCount = 0; // TODO get unread count from Account
if (unreadMessageCount <= 0) {
view.setVisibility(View.GONE);
} else {
((TextView)view).setText(String.valueOf(unreadMessageCount));
}
return true;
}
return false;
}
catch (MessagingException me) {
/*
* This is not expected to fail under normal circumstances.
*/
throw new RuntimeException("Unable to get unread count from local store.", me);
}
holder.newMessageCount.setText(Integer.toString(unreadMessageCount));
holder.newMessageCount.setVisibility(unreadMessageCount > 0 ? View.VISIBLE : View.GONE);
return view;
}
class AccountViewHolder {
public TextView description;
public TextView email;
public TextView newMessageCount;
}
}
@ -175,11 +156,11 @@ public class AccountShortcutPicker extends ListActivity implements OnItemClickLi
* with an appropriate Uri for your content, but any Intent will work here as long as it
* triggers the desired action within your Activity.
*/
private void setupShortcut(Account account) {
private void setupShortcut(EmailStore.Account account) {
// First, set up the shortcut intent.
Intent shortcutIntent = FolderMessageList.actionHandleAccountUriIntent(this,
account, Email.INBOX);
account.mId, Email.INBOX);
// Then, set up the container intent (the response to the caller)

View File

@ -16,11 +16,9 @@
package com.android.email.activity;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.MessagingController;
import com.android.email.MessagingListener;
import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.Utility;
import com.android.email.activity.setup.AccountSettings;
@ -35,9 +33,11 @@ import com.android.email.mail.Message.RecipientType;
import com.android.email.mail.store.LocalStore;
import com.android.email.mail.store.LocalStore.LocalFolder;
import com.android.email.mail.store.LocalStore.LocalMessage;
import com.android.email.provider.EmailStore;
import android.app.ExpandableListActivity;
import android.app.NotificationManager;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
@ -88,7 +88,7 @@ import java.util.Date;
* And don't refresh remote folders ever unless the user runs a refresh. Maybe not even then.
*/
public class FolderMessageList extends ExpandableListActivity {
private static final String EXTRA_ACCOUNT = "account";
private static final String EXTRA_ACCOUNT_ID = "account";
private static final String EXTRA_CLEAR_NOTIFICATION = "clearNotification";
private static final String EXTRA_INITIAL_FOLDER = "initialFolder";
@ -134,7 +134,8 @@ public class FolderMessageList extends ExpandableListActivity {
private FolderMessageListAdapter mAdapter;
private LayoutInflater mInflater;
private Account mAccount;
private long mAccountId;
private EmailStore.Account mAccount;
private boolean mSyncWindowUser;
/**
@ -353,7 +354,7 @@ public class FolderMessageList extends ExpandableListActivity {
String mFolder;
boolean mSynchronizeRemote;
MessagingListener mListener;
Account mAccount;
EmailStore.Account mAccount;
MessagingController mController;
/**
@ -363,7 +364,8 @@ public class FolderMessageList extends ExpandableListActivity {
* @param synchronizeRemote
*/
public FolderUpdateWorker(String folder, boolean synchronizeRemote,
MessagingListener listener, Account account, MessagingController controller) {
MessagingListener listener, EmailStore.Account account,
MessagingController controller) {
mFolder = folder;
mSynchronizeRemote = synchronizeRemote;
mListener = listener;
@ -390,21 +392,6 @@ public class FolderMessageList extends ExpandableListActivity {
}
}
@Deprecated
public static void actionHandleAccount(Context context, Account account, String initialFolder) {
Intent intent = new Intent(context, FolderMessageList.class);
intent.putExtra(EXTRA_ACCOUNT, account);
if (initialFolder != null) {
intent.putExtra(EXTRA_INITIAL_FOLDER, initialFolder);
}
context.startActivity(intent);
}
@Deprecated
public static void actionHandleAccount(Context context, Account account) {
actionHandleAccount(context, account, null);
}
/**
* Open a specific account.
* @param context
@ -421,15 +408,17 @@ public class FolderMessageList extends ExpandableListActivity {
* @param initialFolder The folder to open, or null for none
*/
public static void actionHandleAccount(Context context, long id, String initialFolder) {
// TODO Auto-generated method stub
// DO NOT CHECK IN UNTIL WRITTEN
// PLACEHOLDER: Just return to accounts list, for now
Accounts.actionShowAccounts(context);
Intent intent = new Intent(context, FolderMessageList.class);
intent.putExtra(EXTRA_ACCOUNT_ID, id);
if (initialFolder != null) {
intent.putExtra(EXTRA_INITIAL_FOLDER, initialFolder);
}
context.startActivity(intent);
}
public static Intent actionHandleAccountIntent(Context context, Account account, String initialFolder) {
public static Intent actionHandleAccountIntent(Context context, long id, String initialFolder) {
Intent intent = new Intent(context, FolderMessageList.class);
intent.putExtra(EXTRA_ACCOUNT, account);
intent.putExtra(EXTRA_ACCOUNT_ID, id);
intent.putExtra(EXTRA_CLEAR_NOTIFICATION, true);
if (initialFolder != null) {
intent.putExtra(EXTRA_INITIAL_FOLDER, initialFolder);
@ -446,11 +435,12 @@ public class FolderMessageList extends ExpandableListActivity {
* @param initialFolder If non-null, can set the folder name to open (typically Email.INBOX)
* @return an Intent which can be used to view that account
*/
public static Intent actionHandleAccountUriIntent(Context context, Account account,
public static Intent actionHandleAccountUriIntent(Context context, long id,
String initialFolder) {
Intent i = actionHandleAccountIntent(context, account, initialFolder);
i.removeExtra(EXTRA_ACCOUNT);
i.setData(account.getContentUri());
Intent i = actionHandleAccountIntent(context, id, initialFolder);
i.removeExtra(EXTRA_ACCOUNT_ID);
Uri uri = ContentUris.withAppendedId(EmailStore.Account.CONTENT_URI, id);
i.setData(uri);
return i;
}
@ -479,11 +469,14 @@ public class FolderMessageList extends ExpandableListActivity {
mInflater = getLayoutInflater();
Intent intent = getIntent();
mAccount = (Account)intent.getSerializableExtra(EXTRA_ACCOUNT);
mAccountId = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1);
mAccount = EmailStore.Account.restoreAccountWithId(this, mAccountId);
if (mAccount == null) {
Uri uri = intent.getData();
if (uri != null) {
mAccount = Preferences.getPreferences(this).getAccountByContentUri(uri);
// TODO - DO NOT CHECK IN - add Account.restoreFromUri()
// mAccount = Preferences.getPreferences(this).getAccountByContentUri(uri);
}
}
// If no useable account was specified, just go to the accounts list screen instead
@ -502,13 +495,13 @@ public class FolderMessageList extends ExpandableListActivity {
* Since the color chip is always the same color for a given account we just cache the id
* of the chip right here.
*/
colorChipResId = colorChipResIds[mAccount.getAccountNumber() % colorChipResIds.length];
colorChipResId = colorChipResIds[(int)mAccountId % colorChipResIds.length];
/**
* "User" means the user adjusts the sync window in the UI (load more messages).
* Non-user means that it's set to a fixed window e.g. 3 days
*/
mSyncWindowUser = mAccount.getSyncWindow() == Account.SYNC_WINDOW_USER;
mSyncWindowUser = mAccount.getSyncWindow() == EmailStore.Account.SYNC_WINDOW_USER;
mAdapter = new FolderMessageListAdapter();
@ -567,7 +560,7 @@ public class FolderMessageList extends ExpandableListActivity {
notifMgr.cancel(1);
MessagingController.getInstance(getApplication()).addListener(mAdapter.mListener);
mAccount.refresh(Preferences.getPreferences(this));
mAccount.refresh(this);
onRefresh(false);
}
@ -624,7 +617,7 @@ public class FolderMessageList extends ExpandableListActivity {
FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getGroup(groupPosition);
if (folder.outbox) {
if (childPosition == folder.messages.size() && !folder.loading) {
mHandler.folderLoading(mAccount.getOutboxFolderName(), true);
mHandler.folderLoading(mAccount.getOutboxFolderName(this), true);
mHandler.progress(true);
MessagingController.getInstance(getApplication()).sendPendingMessages(
mAccount,
@ -671,7 +664,8 @@ public class FolderMessageList extends ExpandableListActivity {
mRefreshRemote,
mAdapter.mListener);
if (forceRemote) {
mHandler.folderLoading(mAccount.getOutboxFolderName(), true);
mHandler.folderLoading(mAccount.getOutboxFolderName(FolderMessageList.this),
true);
mHandler.progress(true);
MessagingController.getInstance(getApplication()).sendPendingMessages(
mAccount,
@ -695,14 +689,14 @@ public class FolderMessageList extends ExpandableListActivity {
}
if (folder.drafts) {
MessageCompose.actionEditDraft(this, mAccount, message.message);
MessageCompose.actionEditDraft(this, mAccountId, message.message);
}
else {
ArrayList<String> folderUids = new ArrayList<String>();
for (MessageInfoHolder holder : folder.messages) {
folderUids.add(holder.uid);
}
MessageView.actionView(this, mAccount, folder.name, message.uid, folderUids);
MessageView.actionView(this, mAccountId, folder.name, message.uid, folderUids);
}
}
@ -710,7 +704,7 @@ public class FolderMessageList extends ExpandableListActivity {
// We request a remote refresh *after* the account settings because user changes may
// change the results we get from the server. This will be picked up in onResume().
mRefreshRemote = true;
AccountSettings.actionSettings(this, mAccount);
AccountSettings.actionSettings(this, mAccountId);
}
private void onAccounts() {
@ -719,7 +713,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
private void onCompose() {
MessageCompose.actionCompose(this, mAccount);
MessageCompose.actionCompose(this, mAccountId);
}
private void onDelete(MessageInfoHolder holder) {
@ -733,15 +727,15 @@ public class FolderMessageList extends ExpandableListActivity {
}
private void onReply(MessageInfoHolder holder) {
MessageCompose.actionReply(this, mAccount, holder.message, false);
MessageCompose.actionReply(this, mAccountId, holder.message, false);
}
private void onReplyAll(MessageInfoHolder holder) {
MessageCompose.actionReply(this, mAccount, holder.message, true);
MessageCompose.actionReply(this, mAccountId, holder.message, true);
}
private void onForward(MessageInfoHolder holder) {
MessageCompose.actionForward(this, mAccount, holder.message);
MessageCompose.actionForward(this, mAccountId, holder.message);
}
private void onToggleRead(MessageInfoHolder holder) {
@ -846,7 +840,7 @@ public class FolderMessageList extends ExpandableListActivity {
private MessagingListener mListener = new MessagingListener() {
@Override
public void listFoldersStarted(Account account) {
public void listFoldersStarted(EmailStore.Account account) {
if (!account.equals(mAccount)) {
return;
}
@ -854,7 +848,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void listFoldersFailed(Account account, String message) {
public void listFoldersFailed(EmailStore.Account account, String message) {
if (!account.equals(mAccount)) {
return;
}
@ -865,7 +859,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void listFoldersFinished(Account account) {
public void listFoldersFinished(EmailStore.Account account) {
if (!account.equals(mAccount)) {
return;
}
@ -874,7 +868,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void listFolders(Account account, Folder[] folders) {
public void listFolders(EmailStore.Account account, Folder[] folders) {
if (!account.equals(mAccount)) {
return;
}
@ -882,7 +876,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void listLocalMessagesStarted(Account account, String folder) {
public void listLocalMessagesStarted(EmailStore.Account account, String folder) {
if (!account.equals(mAccount)) {
return;
}
@ -891,7 +885,8 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void listLocalMessagesFailed(Account account, String folder, String message) {
public void listLocalMessagesFailed(EmailStore.Account account, String folder,
String message) {
if (!account.equals(mAccount)) {
return;
}
@ -900,7 +895,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void listLocalMessagesFinished(Account account, String folder) {
public void listLocalMessagesFinished(EmailStore.Account account, String folder) {
if (!account.equals(mAccount)) {
return;
}
@ -909,7 +904,8 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void listLocalMessages(Account account, String folder, Message[] messages) {
public void listLocalMessages(EmailStore.Account account, String folder,
Message[] messages) {
if (!account.equals(mAccount)) {
return;
}
@ -917,9 +913,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void synchronizeMailboxStarted(
Account account,
String folder) {
public void synchronizeMailboxStarted(EmailStore.Account account, String folder) {
if (!account.equals(mAccount)) {
return;
}
@ -929,11 +923,8 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void synchronizeMailboxFinished(
Account account,
String folder,
int totalMessagesInMailbox,
int numNewMessages) {
public void synchronizeMailboxFinished(EmailStore.Account account, String folder,
int totalMessagesInMailbox, int numNewMessages) {
if (!account.equals(mAccount)) {
return;
}
@ -944,7 +935,8 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void synchronizeMailboxFailed(Account account, String folder, Exception e) {
public void synchronizeMailboxFailed(EmailStore.Account account, String folder,
Exception e) {
if (!account.equals(mAccount)) {
return;
}
@ -978,9 +970,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void synchronizeMailboxNewMessage(
Account account,
String folder,
public void synchronizeMailboxNewMessage(EmailStore.Account account, String folder,
Message message) {
if (!account.equals(mAccount)) {
return;
@ -989,9 +979,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void synchronizeMailboxRemovedMessage(
Account account,
String folder,
public void synchronizeMailboxRemovedMessage(EmailStore.Account account, String folder,
Message message) {
if (!account.equals(mAccount)) {
return;
@ -1000,7 +988,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void emptyTrashCompleted(Account account) {
public void emptyTrashCompleted(EmailStore.Account account) {
if (!account.equals(mAccount)) {
return;
}
@ -1008,21 +996,21 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void sendPendingMessagesCompleted(Account account) {
public void sendPendingMessagesCompleted(EmailStore.Account account) {
if (!account.equals(mAccount)) {
return;
}
mHandler.folderLoading(account.getOutboxFolderName(), false);
mHandler.folderLoading(account.getOutboxFolderName(FolderMessageList.this), false);
mHandler.progress(false);
onRefresh(false);
}
@Override
public void sendPendingMessagesFailed(Account account, Exception reason) {
public void sendPendingMessagesFailed(EmailStore.Account account, Exception reason) {
if (!account.equals(mAccount)) {
return;
}
String outboxName = account.getOutboxFolderName();
String outboxName = account.getOutboxFolderName(FolderMessageList.this);
mHandler.folderLoading(outboxName, false);
mHandler.progress(false);
mHandler.folderStatus(outboxName, reason.getMessage(), false);
@ -1030,7 +1018,7 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void sendPendingMessageFailed(Account account, Message message,
public void sendPendingMessageFailed(EmailStore.Account account, Message message,
Exception reason) {
if (!account.equals(mAccount)) {
return;
@ -1041,11 +1029,8 @@ public class FolderMessageList extends ExpandableListActivity {
}
@Override
public void messageUidChanged(
Account account,
String folder,
String oldUid,
String newUid) {
public void messageUidChanged(EmailStore.Account account, String folder,
String oldUid, String newUid) {
if (!mAccount.equals(account)) {
return;
}
@ -1068,16 +1053,16 @@ public class FolderMessageList extends ExpandableListActivity {
if (folderName.equalsIgnoreCase(Email.INBOX)) {
holder.inbox = true;
holder.displayName = getString(R.string.special_mailbox_name_inbox);
} else if (folderName.equals(mAccount.getDraftsFolderName())) {
} else if (folderName.equals(mAccount.getDraftsFolderName(FolderMessageList.this))) {
holder.drafts = true;
holder.displayName = getString(R.string.special_mailbox_display_name_drafts);
} else if (folderName.equals(mAccount.getOutboxFolderName())) {
} else if (folderName.equals(mAccount.getOutboxFolderName(FolderMessageList.this))) {
holder.outbox = true;
holder.displayName = getString(R.string.special_mailbox_display_name_outbox);
} else if (folderName.equals(mAccount.getSentFolderName())) {
} else if (folderName.equals(mAccount.getSentFolderName(FolderMessageList.this))) {
holder.sent = true;
holder.displayName = getString(R.string.special_mailbox_display_name_sent);
} else if (folderName.equals(mAccount.getTrashFolderName())) {
} else if (folderName.equals(mAccount.getTrashFolderName(FolderMessageList.this))) {
holder.trash = true;
holder.displayName = getString(R.string.special_mailbox_display_name_trash);
} else {

View File

@ -16,13 +16,11 @@
package com.android.email.activity;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.EmailAddressAdapter;
import com.android.email.EmailAddressValidator;
import com.android.email.MessagingController;
import com.android.email.MessagingListener;
import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.Utility;
import com.android.email.mail.Address;
@ -41,6 +39,7 @@ import com.android.email.mail.internet.MimeUtility;
import com.android.email.mail.internet.TextBody;
import com.android.email.mail.store.LocalStore;
import com.android.email.mail.store.LocalStore.LocalAttachmentBody;
import com.android.email.provider.EmailStore;
import android.app.Activity;
import android.content.ActivityNotFoundException;
@ -61,7 +60,6 @@ import android.text.TextWatcher;
import android.text.util.Rfc822Tokenizer;
import android.util.Config;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -91,7 +89,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
private static final String ACTION_FORWARD = "com.android.email.intent.action.FORWARD";
private static final String ACTION_EDIT_DRAFT = "com.android.email.intent.action.EDIT_DRAFT";
private static final String EXTRA_ACCOUNT = "account";
private static final String EXTRA_ACCOUNT_ID = "account_id";
private static final String EXTRA_FOLDER = "folder";
private static final String EXTRA_MESSAGE = "message";
@ -117,7 +115,8 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
private static final int ACTIVITY_REQUEST_PICK_ATTACHMENT = 1;
private Account mAccount;
private long mAccountId;
private EmailStore.Account mAccount;
private String mFolder;
private String mSourceMessageUid;
private Message mSourceMessage;
@ -202,16 +201,20 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
}
/**
* Compose a new message using the given account. If account is null the default account
* Compose a new message using the given account. If account is -1 the default account
* will be used.
* @param context
* @param account
*/
public static void actionCompose(Context context, Account account) {
public static void actionCompose(Context context, long accountId) {
try {
Intent i = new Intent(context, MessageCompose.class);
i.putExtra(EXTRA_ACCOUNT, account);
i.putExtra(EXTRA_FOLDER, account.getDraftsFolderName());
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
/*
* TODO handle drafts via role # note via string
* Is this used? Do we ever compose anywhere else but in drafts?
*/
i.putExtra(EXTRA_FOLDER, context.getString(R.string.special_mailbox_name_drafts));
context.startActivity(i);
} catch (ActivityNotFoundException anfe) {
// Swallow it - this is usually a race condition, especially under automated test.
@ -227,7 +230,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
* @param context
* @param defaultAccountId
*/
public static void actionCompose(Accounts context, long defaultAccountId) {
public static void actionCompose(Activity context, long accountId) {
// TODO Auto-generated method stub
// DO NOT CHECK IN until written
}
@ -242,11 +245,11 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
*/
public static void actionReply(
Context context,
Account account,
long accountId,
Message message,
boolean replyAll) {
Intent i = new Intent(context, MessageCompose.class);
i.putExtra(EXTRA_ACCOUNT, account);
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
i.putExtra(EXTRA_FOLDER, message.getFolder().getName());
i.putExtra(EXTRA_MESSAGE, message.getUid());
if (replyAll) {
@ -264,9 +267,9 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
* @param account
* @param message
*/
public static void actionForward(Context context, Account account, Message message) {
public static void actionForward(Context context, long accountId, Message message) {
Intent i = new Intent(context, MessageCompose.class);
i.putExtra(EXTRA_ACCOUNT, account);
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
i.putExtra(EXTRA_FOLDER, message.getFolder().getName());
i.putExtra(EXTRA_MESSAGE, message.getUid());
i.setAction(ACTION_FORWARD);
@ -282,9 +285,9 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
* @param account
* @param message
*/
public static void actionEditDraft(Context context, Account account, Message message) {
public static void actionEditDraft(Context context, long accountId, Message message) {
Intent i = new Intent(context, MessageCompose.class);
i.putExtra(EXTRA_ACCOUNT, account);
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
i.putExtra(EXTRA_FOLDER, message.getFolder().getName());
i.putExtra(EXTRA_MESSAGE, message.getUid());
i.setAction(ACTION_EDIT_DRAFT);
@ -434,7 +437,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
(Intent.ACTION_SEND.equals(action))) {
// Check first for a valid account
mAccount = Preferences.getPreferences(this).getDefaultAccount();
mAccount = EmailStore.Account.getDefaultAccount(this);
if (mAccount == null) {
// There are no accounts set up. This should not have happened. Prompt the
// user to set up an account as an acceptable bailout.
@ -449,7 +452,8 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
}
else {
// Otherwise, handle the internal cases (Message Composer invoked from within app)
mAccount = (Account) intent.getSerializableExtra(EXTRA_ACCOUNT);
mAccountId = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1);
mAccount = EmailStore.Account.restoreAccountWithId(this, mAccountId);
mFolder = intent.getStringExtra(EXTRA_FOLDER);
mSourceMessageUid = intent.getStringExtra(EXTRA_MESSAGE);
}
@ -728,7 +732,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
*/
if (ACTION_EDIT_DRAFT.equals(getIntent().getAction())
&& mSourceMessageUid != null
&& mFolder.equals(mAccount.getDraftsFolderName())) {
&& mFolder.equals(mAccount.getDraftsFolderName(this))) {
/*
* We're sending a previously saved draft, so delete the old draft first.
*/
@ -1253,7 +1257,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
setNewMessageFocus();
mSourceMessageProcessed = true;
mDraftNeedsSaving = mFolder != null && !mFolder.equals(mAccount.getDraftsFolderName());
mDraftNeedsSaving = mFolder != null && !mFolder.equals(mAccount.getDraftsFolderName(this));
}
/**
@ -1280,19 +1284,20 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
class Listener extends MessagingListener {
@Override
public void loadMessageForViewStarted(Account account, String folder, String uid) {
public void loadMessageForViewStarted(EmailStore.Account account, String folder,
String uid) {
mHandler.sendEmptyMessage(MSG_PROGRESS_ON);
}
@Override
public void loadMessageForViewFinished(Account account, String folder, String uid,
Message message) {
public void loadMessageForViewFinished(EmailStore.Account account, String folder,
String uid, Message message) {
mHandler.sendEmptyMessage(MSG_PROGRESS_OFF);
}
@Override
public void loadMessageForViewBodyAvailable(Account account, String folder, String uid,
final Message message) {
public void loadMessageForViewBodyAvailable(EmailStore.Account account, String folder,
String uid, final Message message) {
mSourceMessage = message;
runOnUiThread(new Runnable() {
public void run() {
@ -1302,22 +1307,18 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
}
@Override
public void loadMessageForViewFailed(Account account, String folder, String uid,
public void loadMessageForViewFailed(EmailStore.Account account, String folder, String uid,
final String message) {
mHandler.sendEmptyMessage(MSG_PROGRESS_OFF);
// TODO show network error
}
@Override
public void messageUidChanged(
Account account,
String folder,
String oldUid,
public void messageUidChanged(EmailStore.Account account, String folder,String oldUid,
String newUid) {
if (account.equals(mAccount)
&& (folder.equals(mFolder)
|| (mFolder == null
&& folder.equals(mAccount.getDraftsFolderName())))) {
if (account.equals(mAccount) && (folder.equals(mFolder)
|| (mFolder == null
&& folder.equals(mAccount.getDraftsFolderName(MessageCompose.this))))) {
if (oldUid.equals(mDraftUid)) {
mDraftUid = newUid;
}

View File

@ -16,7 +16,6 @@
package com.android.email.activity;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.MessagingController;
import com.android.email.MessagingListener;
@ -33,6 +32,7 @@ import com.android.email.mail.internet.MimeUtility;
import com.android.email.mail.store.LocalStore.LocalAttachmentBodyPart;
import com.android.email.mail.store.LocalStore.LocalMessage;
import com.android.email.provider.AttachmentProvider;
import com.android.email.provider.EmailStore;
import org.apache.commons.io.IOUtils;
@ -83,7 +83,7 @@ import java.util.regex.Pattern;
public class MessageView extends Activity
implements OnClickListener {
private static final String EXTRA_ACCOUNT = "com.android.email.MessageView_account";
private static final String EXTRA_ACCOUNT_ID = "com.android.email.MessageView_account_id";
private static final String EXTRA_FOLDER = "com.android.email.MessageView_folder";
private static final String EXTRA_MESSAGE = "com.android.email.MessageView_message";
private static final String EXTRA_FOLDER_UIDS = "com.android.email.MessageView_folderUids";
@ -114,7 +114,8 @@ public class MessageView extends Activity
private ImageView mSenderPresenceView;
private ProgressDialog mProgressDialog;
private Account mAccount;
private long mAccountId;
private EmailStore.Account mAccount;
private String mFolder;
private String mMessageUid;
private ArrayList<String> mFolderUids;
@ -300,15 +301,15 @@ public class MessageView extends Activity
public ImageView iconView;
}
public static void actionView(Context context, Account account,
public static void actionView(Context context, long accountId,
String folder, String messageUid, ArrayList<String> folderUids) {
actionView(context, account, folder, messageUid, folderUids, null);
actionView(context, accountId, folder, messageUid, folderUids, null);
}
public static void actionView(Context context, Account account,
public static void actionView(Context context, long accountId,
String folder, String messageUid, ArrayList<String> folderUids, Bundle extras) {
Intent i = new Intent(context, MessageView.class);
i.putExtra(EXTRA_ACCOUNT, account);
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
i.putExtra(EXTRA_FOLDER, folder);
i.putExtra(EXTRA_MESSAGE, messageUid);
i.putExtra(EXTRA_FOLDER_UIDS, folderUids);
@ -362,7 +363,8 @@ public class MessageView extends Activity
mTimeFormat = android.text.format.DateFormat.getTimeFormat(this); // 12/24 date format
Intent intent = getIntent();
mAccount = (Account) intent.getSerializableExtra(EXTRA_ACCOUNT);
mAccountId = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1);
mAccount = EmailStore.Account.restoreAccountWithId(this, mAccountId);
mFolder = intent.getStringExtra(EXTRA_FOLDER);
mMessageUid = intent.getStringExtra(EXTRA_MESSAGE);
mFolderUids = intent.getStringArrayListExtra(EXTRA_FOLDER_UIDS);
@ -505,21 +507,21 @@ public class MessageView extends Activity
private void onReply() {
if (mMessage != null) {
MessageCompose.actionReply(this, mAccount, mMessage, false);
MessageCompose.actionReply(this, mAccountId, mMessage, false);
finish();
}
}
private void onReplyAll() {
if (mMessage != null) {
MessageCompose.actionReply(this, mAccount, mMessage, true);
MessageCompose.actionReply(this, mAccountId, mMessage, true);
finish();
}
}
private void onForward() {
if (mMessage != null) {
MessageCompose.actionForward(this, mAccount, mMessage);
MessageCompose.actionForward(this, mAccountId, mMessage);
finish();
}
}
@ -527,12 +529,12 @@ public class MessageView extends Activity
private void onNext() {
Bundle extras = new Bundle(1);
extras.putBoolean(EXTRA_NEXT, true);
MessageView.actionView(this, mAccount, mFolder, mNextMessageUid, mFolderUids, extras);
MessageView.actionView(this, mAccountId, mFolder, mNextMessageUid, mFolderUids, extras);
finish();
}
private void onPrevious() {
MessageView.actionView(this, mAccount, mFolder, mPreviousMessageUid, mFolderUids);
MessageView.actionView(this, mAccountId, mFolder, mPreviousMessageUid, mFolderUids);
finish();
}
@ -875,8 +877,8 @@ public class MessageView extends Activity
class Listener extends MessagingListener {
@Override
public void loadMessageForViewHeadersAvailable(Account account, String folder, String uid,
final Message message) {
public void loadMessageForViewHeadersAvailable(EmailStore.Account account, String folder,
String uid, final Message message) {
MessageView.this.mMessage = message;
try {
String subjectText = message.getSubject();
@ -905,8 +907,8 @@ public class MessageView extends Activity
}
@Override
public void loadMessageForViewBodyAvailable(Account account, String folder, String uid,
Message message) {
public void loadMessageForViewBodyAvailable(EmailStore.Account account, String folder,
String uid, Message message) {
MessageView.this.mMessage = message;
try {
Part part = MimeUtility.findFirstPartByMimeType(mMessage, "text/html");
@ -987,7 +989,7 @@ public class MessageView extends Activity
}
@Override
public void loadMessageForViewFailed(Account account, String folder, String uid,
public void loadMessageForViewFailed(EmailStore.Account account, String folder, String uid,
final String message) {
mHandler.post(new Runnable() {
public void run() {
@ -999,8 +1001,8 @@ public class MessageView extends Activity
}
@Override
public void loadMessageForViewFinished(Account account, String folder, String uid,
Message message) {
public void loadMessageForViewFinished(EmailStore.Account account, String folder,
String uid, Message message) {
mHandler.post(new Runnable() {
public void run() {
setProgressBarIndeterminateVisibility(false);
@ -1009,7 +1011,8 @@ public class MessageView extends Activity
}
@Override
public void loadMessageForViewStarted(Account account, String folder, String uid) {
public void loadMessageForViewStarted(EmailStore.Account account, String folder, String uid)
{
mHandler.post(new Runnable() {
public void run() {
loadMessageContentUrl("file:///android_asset/loading.html");
@ -1019,7 +1022,7 @@ public class MessageView extends Activity
}
@Override
public void loadAttachmentStarted(Account account, Message message,
public void loadAttachmentStarted(EmailStore.Account account, Message message,
Part part, Object tag, boolean requiresDownload) {
mHandler.setAttachmentsEnabled(false);
Object[] params = (Object[]) tag;
@ -1030,7 +1033,7 @@ public class MessageView extends Activity
}
@Override
public void loadAttachmentFinished(Account account, Message message,
public void loadAttachmentFinished(EmailStore.Account account, Message message,
Part part, Object tag) {
mHandler.setAttachmentsEnabled(true);
mHandler.progress(false, null);
@ -1077,7 +1080,7 @@ public class MessageView extends Activity
}
@Override
public void loadAttachmentFailed(Account account, Message message, Part part,
public void loadAttachmentFailed(EmailStore.Account account, Message message, Part part,
Object tag, String reason) {
mHandler.setAttachmentsEnabled(true);
mHandler.progress(false, null);

View File

@ -16,10 +16,8 @@
package com.android.email.activity.setup;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.R;
import com.android.email.activity.Accounts;
import com.android.email.mail.MessagingException;
import com.android.email.mail.Sender;
import com.android.email.mail.Store;
@ -41,7 +39,6 @@ import android.util.Log;
import android.view.KeyEvent;
public class AccountSettings extends PreferenceActivity {
private static final String EXTRA_ACCOUNT = "account";
private static final String EXTRA_ACCOUNT_ID = "account_id";
private static final String PREFERENCE_TOP_CATEGORY = "account_settings";
@ -70,20 +67,10 @@ public class AccountSettings extends PreferenceActivity {
private CheckBoxPreference mAccountVibrate;
private RingtonePreference mAccountRingtone;
/**
* TODO remove
*/
@Deprecated
public static void actionSettings(Activity fromActivity, Account account) {
Intent i = new Intent(fromActivity, AccountSettings.class);
i.putExtra(EXTRA_ACCOUNT, account);
fromActivity.startActivity(i);
}
/**
* Display (and edit) settings for a specific account
*/
public static void actionSettings(Accounts fromActivity, long accountId) {
public static void actionSettings(Activity fromActivity, long accountId) {
Intent i = new Intent(fromActivity, AccountSettings.class);
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
fromActivity.startActivity(i);

View File

@ -16,8 +16,8 @@
package com.android.email.mail;
import com.android.email.Account;
import com.android.email.MessagingListener;
import com.android.email.provider.EmailStore;
import android.content.Context;
@ -70,7 +70,7 @@ public interface StoreSynchronizer {
* @param context if needed for making system calls
* @return an object describing the sync results
*/
public SyncResults SynchronizeMessagesSynchronous(Account account, String folder,
public SyncResults SynchronizeMessagesSynchronous(EmailStore.Account account, String folder,
Collection<MessagingListener> listeners, Context context) throws MessagingException;
}

View File

@ -16,12 +16,12 @@
package com.android.email.mail.internet;
import com.android.email.Account;
import com.android.email.mail.MessagingException;
import com.android.email.mail.Multipart;
import com.android.email.mail.Part;
import com.android.email.mail.store.LocalStore.LocalAttachmentBodyPart;
import com.android.email.provider.AttachmentProvider;
import com.android.email.provider.EmailStore;
import android.content.ContentResolver;
import android.net.Uri;
@ -47,7 +47,7 @@ public class EmailHtmlUtil {
* @return html text in which src attribute of img tag may be replaced with content uri
*/
public static String resolveInlineImage(
ContentResolver resolver, Account account, String text, Part part, int depth)
ContentResolver resolver, EmailStore.Account account, String text, Part part, int depth)
throws MessagingException {
// avoid too deep recursive call.
if (depth >= 10 || text == null) {

View File

@ -16,13 +16,7 @@
package com.android.email.provider;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import com.android.email.mail.internet.MimeUtility;
import android.content.ContentProvider;
import android.content.ContentResolver;
@ -34,14 +28,13 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.provider.OpenableColumns;
import android.util.Config;
import android.util.Log;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.Utility;
import com.android.email.mail.internet.MimeUtility;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/*
* A simple ContentProvider that allows file access to Email's attachments.
@ -59,7 +52,7 @@ public class AttachmentProvider extends ContentProvider {
public static final String SIZE = "_size";
}
public static Uri getAttachmentUri(Account account, long id) {
public static Uri getAttachmentUri(EmailStore.Account account, long id) {
return CONTENT_URI.buildUpon()
.appendPath(account.getUuid() + ".db")
.appendPath(Long.toString(id))
@ -67,7 +60,8 @@ public class AttachmentProvider extends ContentProvider {
.build();
}
public static Uri getAttachmentThumbnailUri(Account account, long id, int width, int height) {
public static Uri getAttachmentThumbnailUri(EmailStore.Account account, long id,
int width, int height) {
return CONTENT_URI.buildUpon()
.appendPath(account.getUuid() + ".db")
.appendPath(Long.toString(id))

View File

@ -16,6 +16,8 @@
package com.android.email.provider;
import com.android.email.R;
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentUris;
@ -612,7 +614,7 @@ public class EmailStore {
}
createTable(db);
}
public static Account restoreAccountWithId(Context context, long id) {
Uri u = ContentUris.withAppendedId(Account.CONTENT_URI, id);
Cursor c = context.getContentResolver().query(u, Account.CONTENT_PROJECTION,
@ -628,6 +630,23 @@ public class EmailStore {
c.close();
}
}
/**
* Refresh an account that has already been loaded. This is slightly less expensive
* that generating a brand-new account object.
*/
public void refresh(Context context) {
Cursor c = context.getContentResolver().query(this.getUri(), Account.CONTENT_PROJECTION,
null, null, null);
try {
c.moveToFirst();
restore(c);
} finally {
if (c != null) {
c.close();
}
}
}
@Override
@SuppressWarnings("unchecked")
@ -1065,6 +1084,35 @@ public class EmailStore {
return values;
}
/**
* TODO don't store these names in the account - just tag the folders
*/
public String getDraftsFolderName(Context context) {
return context.getString(R.string.special_mailbox_name_drafts);
}
/**
* TODO don't store these names in the account - just tag the folders
*/
public String getSentFolderName(Context context) {
return context.getString(R.string.special_mailbox_name_sent);
}
/**
* TODO don't store these names in the account - just tag the folders
*/
public String getTrashFolderName(Context context) {
return context.getString(R.string.special_mailbox_name_trash);
}
/**
* TODO don't store these names in the account - just tag the folders
*/
public String getOutboxFolderName(Context context) {
return context.getString(R.string.special_mailbox_name_outbox);
}
/**
* Supports Parcelable
*/

View File

@ -27,6 +27,8 @@ import com.android.email.activity.FolderMessageList;
import com.android.email.mail.MessagingException;
import com.android.email.mail.Store;
import com.android.email.mail.store.LocalStore;
import com.android.email.provider.EmailContent;
import com.android.email.provider.EmailStore;
import android.app.AlarmManager;
import android.app.Notification;
@ -35,6 +37,7 @@ import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.IBinder;
import android.os.SystemClock;
@ -109,18 +112,34 @@ public class MailService extends Service {
// accounts. This needs to be cleaned up for better efficiency.
String specificStoreUri = intent.getStringExtra(EXTRA_CHECK_ACCOUNT);
ArrayList<Account> accountsToCheck = new ArrayList<Account>();
for (Account account : Preferences.getPreferences(this).getAccounts()) {
int interval = account.getAutomaticCheckIntervalMinutes();
String storeUri = account.getStoreUri();
if (interval > 0 || (storeUri != null && storeUri.equals(specificStoreUri))) {
accountsToCheck.add(account);
ArrayList<EmailStore.Account> accountsToCheck = new ArrayList<EmailStore.Account>();
Cursor c = null;
try {
c = this.getContentResolver().query(
EmailStore.Account.CONTENT_URI,
EmailStore.Account.CONTENT_PROJECTION,
null, null, null);
while (c.moveToNext()) {
EmailStore.Account account = EmailContent.getContent(c,
EmailStore.Account.class);
int interval = account.getAutomaticCheckIntervalMinutes();
String storeUri = account.getStoreUri(this);
if (interval > 0 || (storeUri != null && storeUri.equals(specificStoreUri))) {
accountsToCheck.add(account);
}
// For each account, switch pushmail on or off
enablePushMail(account, interval == EmailStore.Account.CHECK_INTERVAL_PUSH);
}
} finally {
if (c != null) {
c.close();
}
// For each account, switch pushmail on or off
enablePushMail(account, interval == Account.CHECK_INTERVAL_PUSH);
}
Account[] accounts = accountsToCheck.toArray(new Account[accountsToCheck.size()]);
EmailStore.Account[] accounts = accountsToCheck.toArray(
new EmailStore.Account[accountsToCheck.size()]);
controller.checkMail(this, accounts, mListener);
}
else if (ACTION_CANCEL.equals(intent.getAction())) {
@ -162,12 +181,25 @@ public class MailService extends Service {
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
int shortestInterval = -1;
for (Account account : Preferences.getPreferences(this).getAccounts()) {
int interval = account.getAutomaticCheckIntervalMinutes();
if (interval > 0 && (interval < shortestInterval || shortestInterval == -1)) {
shortestInterval = interval;
Cursor c = null;
try {
c = this.getContentResolver().query(
EmailStore.Account.CONTENT_URI,
EmailStore.Account.CONTENT_PROJECTION,
null, null, null);
while (c.moveToNext()) {
EmailStore.Account account = EmailContent.getContent(c,
EmailStore.Account.class);
int interval = account.getAutomaticCheckIntervalMinutes();
if (interval > 0 && (interval < shortestInterval || shortestInterval == -1)) {
shortestInterval = interval;
}
enablePushMail(account, interval == Account.CHECK_INTERVAL_PUSH);
}
} finally {
if (c != null) {
c.close();
}
enablePushMail(account, interval == Account.CHECK_INTERVAL_PUSH);
}
if (shortestInterval == -1) {
@ -184,19 +216,20 @@ public class MailService extends Service {
}
class Listener extends MessagingListener {
HashMap<Account, Integer> accountsWithNewMail = new HashMap<Account, Integer>();
HashMap<EmailStore.Account, Integer> accountsWithNewMail =
new HashMap<EmailStore.Account, Integer>();
// TODO this should be redone because account is usually null, not very interesting.
// I think it would make more sense to pass Account[] here in case anyone uses it
// In any case, it should be noticed that this is called once per cycle
@Override
public void checkMailStarted(Context context, Account account) {
public void checkMailStarted(Context context, EmailStore.Account account) {
accountsWithNewMail.clear();
}
// Called once per checked account
@Override
public void checkMailFailed(Context context, Account account, String reason) {
public void checkMailFailed(Context context, EmailStore.Account account, String reason) {
if (Config.LOGD && Email.DEBUG) {
Log.d(Email.LOG_TAG, "*** MailService: checkMailFailed: " + reason);
}
@ -206,16 +239,14 @@ public class MailService extends Service {
// Called once per checked account
@Override
public void synchronizeMailboxFinished(
Account account,
String folder,
int totalMessagesInMailbox,
int numNewMessages) {
public void synchronizeMailboxFinished(EmailStore.Account account, String folder,
int totalMessagesInMailbox, int numNewMessages) {
if (Config.LOGD && Email.DEBUG) {
Log.d(Email.LOG_TAG, "*** MailService: synchronizeMailboxFinished: total=" +
totalMessagesInMailbox + " new=" + numNewMessages);
}
if (account.isNotifyNewMail() && numNewMessages > 0) {
if (numNewMessages > 0 &&
((account.getFlags() & EmailStore.Account.FLAGS_NOTIFY_NEW_MAIL) != 0)) {
accountsWithNewMail.put(account, numNewMessages);
}
}
@ -224,7 +255,7 @@ public class MailService extends Service {
// I think it would make more sense to pass Account[] here in case anyone uses it
// In any case, it should be noticed that this is called once per cycle
@Override
public void checkMailFinished(Context context, Account account) {
public void checkMailFinished(Context context, EmailStore.Account account) {
if (Config.LOGD && Email.DEBUG) {
Log.d(Email.LOG_TAG, "*** MailService: checkMailFinished");
}
@ -237,8 +268,10 @@ public class MailService extends Service {
boolean vibrate = false;
String ringtone = null;
if (accountsWithNewMail.size() > 1) {
for (Account account1 : accountsWithNewMail.keySet()) {
if (account1.isVibrate()) vibrate = true;
for (EmailStore.Account account1 : accountsWithNewMail.keySet()) {
if ((account1.getFlags() & EmailStore.Account.FLAGS_VIBRATE) != 0) {
vibrate = true;
}
ringtone = account1.getRingtone();
}
Intent i = new Intent(context, Accounts.class);
@ -249,16 +282,17 @@ public class MailService extends Service {
accountsWithNewMail.size(),
accountsWithNewMail.size()), pi);
} else {
Account account1 = accountsWithNewMail.keySet().iterator().next();
EmailStore.Account account1 = accountsWithNewMail.keySet().iterator().next();
int totalNewMails = accountsWithNewMail.get(account1);
Intent i = FolderMessageList.actionHandleAccountIntent(context, account1, Email.INBOX);
Intent i = FolderMessageList.actionHandleAccountIntent(context,
account1.mId, Email.INBOX);
PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);
notif.setLatestEventInfo(context, getString(R.string.notification_new_title),
getResources().
getQuantityString(R.plurals.notification_new_one_account_fmt,
totalNewMails, totalNewMails,
account1.getDescription()), pi);
vibrate = account1.isVibrate();
vibrate = ((account1.getFlags() & EmailStore.Account.FLAGS_VIBRATE) != 0);
ringtone = account1.getRingtone();
}
notif.defaults = Notification.DEFAULT_LIGHTS;
@ -281,10 +315,10 @@ public class MailService extends Service {
*
* @param account the account that needs push delivery enabled
*/
private void enablePushMail(Account account, boolean enable) {
private void enablePushMail(EmailStore.Account account, boolean enable) {
try {
String localUri = account.getLocalStoreUri();
String storeUri = account.getStoreUri();
String localUri = account.getLocalStoreUri(this);
String storeUri = account.getStoreUri(this);
if (localUri != null && storeUri != null) {
LocalStore localStore = (LocalStore) Store.getInstance(
localUri, this.getBaseContext(), null);

View File

@ -16,19 +16,10 @@
package com.android.email;
import com.android.email.mail.Store;
import android.content.Context;
import android.content.SharedPreferences;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* This is a series of unit tests for the Account class.
*

View File

@ -18,30 +18,25 @@ package com.android.email;
import com.android.email.mail.Folder;
import com.android.email.mail.MockFolder;
import com.android.email.provider.EmailStore;
import android.content.ContentUris;
import android.content.Context;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
/**
* This is a series of unit tests for the MessagingController class.
*
* Technically these are functional because they use the underlying preferences framework.
* Technically these are functional because they use the underlying provider framework.
*/
@SmallTest
public class MessagingControllerUnitTests extends AndroidTestCase {
private Preferences mPreferences;
private long mAccountId;
private EmailStore.Account mAccount;
private String mUuid;
private Account mAccount;
@Override
protected void setUp() throws Exception {
super.setUp();
mPreferences = Preferences.getPreferences(getContext());
}
/**
* Delete any dummy accounts we set up for this test
*/
@ -49,20 +44,26 @@ public class MessagingControllerUnitTests extends AndroidTestCase {
protected void tearDown() throws Exception {
super.tearDown();
if (mAccount != null && mPreferences != null) {
mAccount.delete(mPreferences);
if (mAccount != null) {
Uri uri = ContentUris.withAppendedId(
EmailStore.Account.CONTENT_URI, mAccountId);
getContext().getContentResolver().delete(uri, null, null);
}
}
/**
* Test the code that copies server-supplied folder names into the account data
*
* TODO: custom folder naming is being re-implemented using folder types, and the notion
* of saving the names in the Account will probably go away. This test should be replaced
* by an equivalent test, once there is a new implementation to look at.
*/
public void testUpdateAccountFolderNames() {
public void disabled_testUpdateAccountFolderNames() {
MessagingController mc = MessagingController.getInstance(getContext());
// Create a dummy account
createTestAccount();
// Refresh it to fill in all fields (many will have default values)
mAccount.refresh(mPreferences);
mAccount.refresh(getContext());
// Replace one entry, others are not included
Folder[] folders1 = new Folder[] {
@ -72,7 +73,8 @@ public class MessagingControllerUnitTests extends AndroidTestCase {
checkServerFolderNames("folders1", mAccount, "DRAFTS_1", "Sent", "Trash", "Outbox");
// test that the data is shared across multiple account instantiations
Account account2 = new Account(mPreferences, mUuid);
EmailStore.Account account2 = EmailStore.Account.
restoreAccountWithId(getContext(), mAccountId);
checkServerFolderNames("folders1-2", account2, "DRAFTS_1", "Sent", "Trash", "Outbox");
// Replace one entry, others are included but called out as unknown
@ -86,7 +88,7 @@ public class MessagingControllerUnitTests extends AndroidTestCase {
checkServerFolderNames("folders2", mAccount, "DRAFTS_1", "SENT_2", "Trash", "Outbox");
// test that the data is shared across multiple account instantiations
account2 = new Account(mPreferences, mUuid);
account2 = EmailStore.Account.restoreAccountWithId(getContext(), mAccountId);
checkServerFolderNames("folders2-2", account2, "DRAFTS_1", "SENT_2", "Trash", "Outbox");
// Replace one entry, check that "other" is ignored, check that Outbox is ignored
@ -100,19 +102,20 @@ public class MessagingControllerUnitTests extends AndroidTestCase {
checkServerFolderNames("folders3", mAccount, "DRAFTS_1", "SENT_2", "TRASH_3", "Outbox");
// test that the data is shared across multiple account instantiations
account2 = new Account(mPreferences, mUuid);
account2 = EmailStore.Account.restoreAccountWithId(getContext(), mAccountId);
checkServerFolderNames("folders3-2", account2, "DRAFTS_1", "SENT_2", "TRASH_3", "Outbox");
}
/**
* Quickly check all four folder name slots in mAccount
*/
private void checkServerFolderNames(String diagnostic, Account account,
private void checkServerFolderNames(String diagnostic, EmailStore.Account account,
String drafts, String sent, String trash, String outbox) {
assertEquals(diagnostic, drafts, account.getDraftsFolderName());
assertEquals(diagnostic, sent, account.getSentFolderName());
assertEquals(diagnostic, trash, account.getTrashFolderName());
assertEquals(diagnostic, outbox, account.getOutboxFolderName());
Context context = getContext();
assertEquals(diagnostic, drafts, account.getDraftsFolderName(context));
assertEquals(diagnostic, sent, account.getSentFolderName(context));
assertEquals(diagnostic, trash, account.getTrashFolderName(context));
assertEquals(diagnostic, outbox, account.getOutboxFolderName(context));
}
/**
@ -141,10 +144,10 @@ public class MessagingControllerUnitTests extends AndroidTestCase {
* Create a dummy account with minimal fields
*/
private void createTestAccount() {
mAccount = new Account(getContext());
mAccount.save(mPreferences);
mAccount = new EmailStore.Account();
mAccount.saveOrUpdate(getContext());
mUuid = mAccount.getUuid();
mAccountId = mAccount.mId;
}
}

View File

@ -16,9 +16,9 @@
package com.android.email.activity;
import com.android.email.Account;
import com.android.email.Preferences;
import com.android.email.provider.EmailStore;
import android.content.ContentUris;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
@ -27,25 +27,16 @@ import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
/**
* This is a series of unit tests for the Preferences class.
* This is a series of unit tests for the FolderMessageList class.
*
* This is just unit tests of simple statics - the activity is not instantiated
*/
@SmallTest
public class FolderMessageListUnitTests extends AndroidTestCase {
private Preferences mPreferences;
private long mAccountId;
private EmailStore.Account mAccount;
private String mUuid;
private Account mAccount;
@Override
protected void setUp() throws Exception {
super.setUp();
mPreferences = Preferences.getPreferences(getContext());
}
/**
* Delete any dummy accounts we set up for this test
*/
@ -53,8 +44,10 @@ public class FolderMessageListUnitTests extends AndroidTestCase {
protected void tearDown() throws Exception {
super.tearDown();
if (mAccount != null && mPreferences != null) {
mAccount.delete(mPreferences);
if (mAccount != null) {
Uri uri = ContentUris.withAppendedId(
EmailStore.Account.CONTENT_URI, mAccountId);
getContext().getContentResolver().delete(uri, null, null);
}
}
@ -70,13 +63,13 @@ public class FolderMessageListUnitTests extends AndroidTestCase {
MyContext mockContext = new MyContext(getContext());
// First, try with no initial folder
FolderMessageList.actionHandleAccount(mockContext, mAccount);
FolderMessageList.actionHandleAccount(mockContext, mAccountId);
Intent i = mockContext.startActivityIntent;
assertNotNull(i);
checkIntent(i, null, mAccount, null);
// Next try with initial folder specified
FolderMessageList.actionHandleAccount(mockContext, mAccount, "test-folder-name");
FolderMessageList.actionHandleAccount(mockContext, mAccountId, "test-folder-name");
i = mockContext.startActivityIntent;
assertNotNull(i);
checkIntent(i, null, mAccount, "test-folder-name");
@ -91,12 +84,12 @@ public class FolderMessageListUnitTests extends AndroidTestCase {
// First try with no initial folder
Intent result = FolderMessageList.actionHandleAccountIntent(
getContext(), mAccount, null);
getContext(), mAccountId, null);
checkIntent(result, null, mAccount, null);
// now try with a specified initial folder
result = FolderMessageList.actionHandleAccountIntent(
getContext(), mAccount, "test-folder-name");
getContext(), mAccountId, "test-folder-name");
checkIntent(result, null, mAccount, "test-folder-name");
}
@ -106,29 +99,31 @@ public class FolderMessageListUnitTests extends AndroidTestCase {
public void testActionHandleAccountUriIntent() {
// Create a dummy account
createTestAccount();
Uri uri = ContentUris.withAppendedId(EmailStore.Account.CONTENT_URI, mAccountId);
// First try with no initial folder
Intent result = FolderMessageList.actionHandleAccountUriIntent(
getContext(), mAccount, null);
checkIntent(result, mAccount.getContentUri(), null, null);
getContext(), mAccountId, null);
checkIntent(result, uri, null, null);
// now try with a specified initial folder
result = FolderMessageList.actionHandleAccountUriIntent(
getContext(), mAccount, "test-folder-name");
checkIntent(result, mAccount.getContentUri(), null, "test-folder-name");
getContext(), mAccountId, "test-folder-name");
checkIntent(result, uri, null, "test-folder-name");
}
/**
* Check the values in a generated intent
*/
private void checkIntent(Intent i,
Uri expectData, Account expectAccount, String expectFolder) {
Uri expectData, EmailStore.Account expectAccount, String expectFolder) {
Uri resultUri = i.getData();
assertEquals(expectData, resultUri);
Account resultAccount = (Account) i.getSerializableExtra("account");
assertEquals(expectAccount, resultAccount);
long resultAccountId = i.getLongExtra("account", -1);
long expectAccountId = (expectAccount != null) ? expectAccount.mId : -1;
assertEquals(expectAccountId, resultAccountId);
String resultFolder = i.getStringExtra("initialFolder");
assertEquals(expectFolder, resultFolder);
@ -138,10 +133,10 @@ public class FolderMessageListUnitTests extends AndroidTestCase {
* Create a dummy account with minimal fields
*/
private void createTestAccount() {
mAccount = new Account(getContext());
mAccount.save(mPreferences);
mAccount = new EmailStore.Account();
mAccount.saveOrUpdate(getContext());
mUuid = mAccount.getUuid();
mAccountId = mAccount.mId;
}
/**

View File

@ -16,9 +16,7 @@
package com.android.email.activity;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.mail.Address;
import com.android.email.mail.Message;
@ -26,6 +24,7 @@ import com.android.email.mail.MessagingException;
import com.android.email.mail.Message.RecipientType;
import com.android.email.mail.internet.MimeMessage;
import com.android.email.mail.internet.TextBody;
import com.android.email.provider.EmailStore;
import android.content.Context;
import android.content.Intent;
@ -101,13 +100,10 @@ public class MessageComposeInstrumentationTests
protected void setUp() throws Exception {
super.setUp();
Context context = getInstrumentation().getTargetContext();
Account[] accounts = Preferences.getPreferences(context).getAccounts();
if (accounts.length > 0)
{
// This depends on getDefaultAccount() to auto-assign the default account, if necessary
Preferences.getPreferences(context).getDefaultAccount();
Email.setServicesEnabled(context);
}
EmailStore.Account.getDefaultAccount(context);
Email.setServicesEnabled(context);
Intent intent = new Intent(Intent.ACTION_VIEW);
setActivityIntent(intent);
final MessageCompose a = getActivity();

View File

@ -16,12 +16,11 @@
package com.android.email.activity;
import com.android.email.Account;
import com.android.email.Email;
import com.android.email.MessagingController;
import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.mail.internet.BinaryTempFileBody;
import com.android.email.provider.EmailStore;
import android.app.Application;
import android.content.Context;
@ -51,7 +50,7 @@ public class MessageViewTests
extends ActivityInstrumentationTestCase2<MessageView> {
// copied from MessageView (could be package class)
private static final String EXTRA_ACCOUNT = "com.android.email.MessageView_account";
private static final String EXTRA_ACCOUNT_ID = "com.android.email.MessageView_account_id";
private static final String EXTRA_FOLDER = "com.android.email.MessageView_folder";
private static final String EXTRA_MESSAGE = "com.android.email.MessageView_message";
private static final String EXTRA_FOLDER_UIDS = "com.android.email.MessageView_folderUids";
@ -60,7 +59,8 @@ public class MessageViewTests
private static final String FOLDER_NAME = "folder";
private static final String MESSAGE_UID = "message_uid";
private Account mAccount;
private EmailStore.Account mAccount;
private long mAccountId;
private TextView mToView;
private TextView mSubjectView;
private WebView mMessageContentView;
@ -75,20 +75,17 @@ public class MessageViewTests
super.setUp();
mContext = getInstrumentation().getTargetContext();
Account[] accounts = Preferences.getPreferences(mContext).getAccounts();
if (accounts.length > 0)
{
// This depends on getDefaultAccount() to auto-assign the default account, if necessary
mAccount = Preferences.getPreferences(mContext).getDefaultAccount();
Email.setServicesEnabled(mContext);
}
// force assignment of a default account
mAccount = EmailStore.Account.getDefaultAccount(mContext);
mAccountId = mAccount.mId;
Email.setServicesEnabled(mContext);
// setup an intent to spin up this activity with something useful
ArrayList<String> FOLDER_UIDS = new ArrayList<String>(
Arrays.asList(new String[]{ "why", "is", "java", "so", "ugly?" }));
// Log.d("MessageViewTest", "--- folder:" + FOLDER_UIDS);
Intent i = new Intent()
.putExtra(EXTRA_ACCOUNT, mAccount)
.putExtra(EXTRA_ACCOUNT_ID, mAccountId)
.putExtra(EXTRA_FOLDER, FOLDER_NAME)
.putExtra(EXTRA_MESSAGE, MESSAGE_UID)
.putStringArrayListExtra(EXTRA_FOLDER_UIDS, FOLDER_UIDS);

View File

@ -16,10 +16,13 @@
package com.android.email.activity.setup;
import com.android.email.Account;
import com.android.email.mail.Store;
import com.android.email.provider.EmailStore;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.preference.ListPreference;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.MediumTest;
@ -29,7 +32,14 @@ import android.test.suitebuilder.annotation.MediumTest;
*/
@MediumTest
public class AccountSettingsTests extends ActivityInstrumentationTestCase2<AccountSettings> {
// Borrowed from AccountSettings
private static final String EXTRA_ACCOUNT_ID = "account_id";
private long mAccountId;
private EmailStore.Account mAccount;
private Context mContext;
private AccountSettings mActivity;
private ListPreference mCheckFrequency;
@ -39,6 +49,30 @@ public class AccountSettingsTests extends ActivityInstrumentationTestCase2<Accou
super("com.android.email", AccountSettings.class);
}
/**
* Common setup code for all tests.
*/
@Override
protected void setUp() throws Exception {
super.setUp();
mContext = this.getInstrumentation().getTargetContext();
}
/**
* Delete any dummy accounts we set up for this test
*/
@Override
protected void tearDown() throws Exception {
super.tearDown();
if (mAccount != null) {
Uri uri = ContentUris.withAppendedId(
EmailStore.Account.CONTENT_URI, mAccountId);
mContext.getContentResolver().delete(uri, null, null);
}
}
/**
* Test that POP accounts aren't displayed with a push option
*/
@ -49,7 +83,7 @@ public class AccountSettingsTests extends ActivityInstrumentationTestCase2<Accou
getActivityAndFields();
boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
boolean hasPush = frequencySpinnerHasValue(EmailStore.Account.CHECK_INTERVAL_PUSH);
assertFalse(hasPush);
}
@ -63,7 +97,7 @@ public class AccountSettingsTests extends ActivityInstrumentationTestCase2<Accou
getActivityAndFields();
boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
boolean hasPush = frequencySpinnerHasValue(EmailStore.Account.CHECK_INTERVAL_PUSH);
assertFalse(hasPush);
}
@ -83,7 +117,7 @@ public class AccountSettingsTests extends ActivityInstrumentationTestCase2<Accou
getActivityAndFields();
boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
boolean hasPush = frequencySpinnerHasValue(EmailStore.Account.CHECK_INTERVAL_PUSH);
assertTrue(hasPush);
}
@ -112,12 +146,15 @@ public class AccountSettingsTests extends ActivityInstrumentationTestCase2<Accou
* Create an intent with the Account in it
*/
private Intent getTestIntent(String name, String storeUri, String senderUri) {
Account account = new Account(this.getInstrumentation().getTargetContext());
account.setName(name);
account.setStoreUri(storeUri);
account.setSenderUri(senderUri);
EmailStore.Account mAccount = new EmailStore.Account();
mAccount.setName(name);
mAccount.setStoreUri(mContext, storeUri);
mAccount.setSenderUri(mContext, senderUri);
mAccount.saveOrUpdate(mContext);
mAccountId = mAccount.mId;
Intent i = new Intent(Intent.ACTION_MAIN);
i.putExtra("account", account); // AccountSetupNames.EXTRA_ACCOUNT == "account"
i.putExtra(EXTRA_ACCOUNT_ID, mAccountId);
return i;
}

View File

@ -16,7 +16,6 @@
package com.android.email.mail;
import com.android.email.Account;
import com.android.email.mail.internet.BinaryTempFileBody;
import com.android.email.mail.internet.MimeBodyPart;
import com.android.email.mail.internet.MimeHeader;
@ -25,6 +24,7 @@ import com.android.email.mail.internet.MimeMultipart;
import com.android.email.mail.internet.TextBody;
import com.android.email.mail.store.LocalStore;
import com.android.email.provider.AttachmentProvider;
import com.android.email.provider.EmailStore;
import android.net.Uri;
@ -65,7 +65,7 @@ public class MessageTestUtils {
* @param account Account object
* @return AttachmentProvider content URI
*/
public static Uri contentUri(long attachmentId, Account account) {
public static Uri contentUri(long attachmentId, EmailStore.Account account) {
return AttachmentProvider.getAttachmentUri(account, attachmentId);
}

View File

@ -16,8 +16,6 @@
package com.android.email.mail.internet;
import com.android.email.Account;
import com.android.email.Preferences;
import com.android.email.mail.Message;
import com.android.email.mail.MessageTestUtils;
import com.android.email.mail.MessagingException;
@ -25,6 +23,7 @@ import com.android.email.mail.MessageTestUtils.MessageBuilder;
import com.android.email.mail.MessageTestUtils.MultipartBuilder;
import com.android.email.mail.MessageTestUtils.TextBuilder;
import com.android.email.mail.store.LocalStore;
import com.android.email.provider.EmailStore;
import android.net.Uri;
import android.test.AndroidTestCase;
@ -34,7 +33,7 @@ import java.io.IOException;
@MediumTest
public class EmailHtmlUtilTest extends AndroidTestCase {
private Account mAccount;
private EmailStore.Account mAccount;
private static final String textTags = "<b>Plain</b> &";
private static final String textSpaces = "3 spaces end.";
@ -43,12 +42,8 @@ public class EmailHtmlUtilTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
Account[] accounts = Preferences.getPreferences(mContext).getAccounts();
if (accounts.length > 0)
{
// This depends on getDefaultAccount() to auto-assign the default account, if necessary
mAccount = Preferences.getPreferences(mContext).getAccounts()[0];
}
// Force assignment of a default account, and retrieve it
mAccount = EmailStore.Account.getDefaultAccount(getContext());
// This is needed for mime image bodypart.
BinaryTempFileBody.setTempDirectory(getContext().getCacheDir());
@ -59,8 +54,8 @@ public class EmailHtmlUtilTest extends AndroidTestCase {
*/
public void testResolveInlineImage() throws MessagingException, IOException {
final LocalStore store = (LocalStore) LocalStore.newInstance(mAccount.getLocalStoreUri(),
mContext, null);
final LocalStore store = (LocalStore) LocalStore.newInstance(
mAccount.getLocalStoreUri(getContext()), mContext, null);
// Single cid case.
final String cid1 = "cid.1@android.com";
final long aid1 = 10;