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:
parent
7ac2b6e048
commit
c0033f24a2
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue