208 lines
7.4 KiB
Java
208 lines
7.4 KiB
Java
/*
|
|
* Copyright (C) 2008 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.emailcommon.mail;
|
|
|
|
import com.android.emailcommon.service.SearchParams;
|
|
|
|
|
|
public abstract class Folder {
|
|
public enum OpenMode {
|
|
READ_WRITE, READ_ONLY,
|
|
}
|
|
|
|
public enum FolderType {
|
|
HOLDS_FOLDERS, HOLDS_MESSAGES,
|
|
}
|
|
|
|
/**
|
|
* Identifiers of "special" folders.
|
|
*/
|
|
public enum FolderRole {
|
|
INBOX, // NOTE: The folder's name must be INBOX
|
|
TRASH,
|
|
SENT,
|
|
DRAFTS,
|
|
|
|
OUTBOX, // Local folders only - not used in remote Stores
|
|
OTHER, // this folder has no specific role
|
|
UNKNOWN // the role of this folder is unknown
|
|
}
|
|
|
|
/**
|
|
* Callback for each message retrieval.
|
|
*
|
|
* Not all {@link Folder} implementations may invoke it.
|
|
*/
|
|
public interface MessageRetrievalListener {
|
|
public void messageRetrieved(Message message);
|
|
public void loadAttachmentProgress(int progress);
|
|
}
|
|
|
|
/**
|
|
* Forces an open of the MailProvider. If the provider is already open this
|
|
* function returns without doing anything.
|
|
*
|
|
* @param mode READ_ONLY or READ_WRITE
|
|
* @param callbacks Pointer to callbacks class. This may be used by the folder between this
|
|
* time and when close() is called. This is only used for remote stores - should be null
|
|
* for LocalStore.LocalFolder.
|
|
*/
|
|
public abstract void open(OpenMode mode)
|
|
throws MessagingException;
|
|
|
|
/**
|
|
* Forces a close of the MailProvider. Any further access will attempt to
|
|
* reopen the MailProvider.
|
|
*
|
|
* @param expunge If true all deleted messages will be expunged.
|
|
*/
|
|
public abstract void close(boolean expunge) throws MessagingException;
|
|
|
|
/**
|
|
* @return True if further commands are not expected to have to open the
|
|
* connection.
|
|
*/
|
|
public abstract boolean isOpen();
|
|
|
|
/**
|
|
* Returns the mode the folder was opened with. This may be different than the mode the open
|
|
* was requested with.
|
|
*/
|
|
public abstract OpenMode getMode() throws MessagingException;
|
|
|
|
/**
|
|
* Reports if the Store is able to create folders of the given type.
|
|
* Does not actually attempt to create a folder.
|
|
* @param type
|
|
* @return true if can create, false if cannot create
|
|
*/
|
|
public abstract boolean canCreate(FolderType type);
|
|
|
|
/**
|
|
* Attempt to create the given folder remotely using the given type.
|
|
* @return true if created, false if cannot create (e.g. server side)
|
|
*/
|
|
public abstract boolean create(FolderType type) throws MessagingException;
|
|
|
|
public abstract boolean exists() throws MessagingException;
|
|
|
|
/**
|
|
* Returns the number of messages in the selected folder.
|
|
*/
|
|
public abstract int getMessageCount() throws MessagingException;
|
|
|
|
public abstract int getUnreadMessageCount() throws MessagingException;
|
|
|
|
public abstract Message getMessage(String uid) throws MessagingException;
|
|
|
|
/**
|
|
* Fetches the given list of messages. The specified listener is notified as
|
|
* each fetch completes. Messages are downloaded as (as) lightweight (as
|
|
* possible) objects to be filled in with later requests. In most cases this
|
|
* means that only the UID is downloaded.
|
|
*/
|
|
public abstract Message[] getMessages(int start, int end, MessageRetrievalListener listener)
|
|
throws MessagingException;
|
|
|
|
public abstract Message[] getMessages(SearchParams params,MessageRetrievalListener listener)
|
|
throws MessagingException;
|
|
|
|
public abstract Message[] getMessages(String[] uids, MessageRetrievalListener listener)
|
|
throws MessagingException;
|
|
|
|
/**
|
|
* Return a set of messages based on the state of the flags.
|
|
* Note: Not typically implemented in remote stores, so not abstract.
|
|
*
|
|
* @param setFlags The flags that should be set for a message to be selected (can be null)
|
|
* @param clearFlags The flags that should be clear for a message to be selected (can be null)
|
|
* @param listener
|
|
* @return A list of messages matching the desired flag states.
|
|
* @throws MessagingException
|
|
*/
|
|
public Message[] getMessages(Flag[] setFlags, Flag[] clearFlags,
|
|
MessageRetrievalListener listener) throws MessagingException {
|
|
throw new MessagingException("Not implemented");
|
|
}
|
|
|
|
public abstract void appendMessages(Message[] messages) throws MessagingException;
|
|
|
|
/**
|
|
* Copies the given messages to the destination folder.
|
|
*/
|
|
public abstract void copyMessages(Message[] msgs, Folder folder,
|
|
MessageUpdateCallbacks callbacks) throws MessagingException;
|
|
|
|
public abstract void setFlags(Message[] messages, Flag[] flags, boolean value)
|
|
throws MessagingException;
|
|
|
|
public abstract Message[] expunge() throws MessagingException;
|
|
|
|
public abstract void fetch(Message[] messages, FetchProfile fp,
|
|
MessageRetrievalListener listener) throws MessagingException;
|
|
|
|
public abstract void delete(boolean recurse) throws MessagingException;
|
|
|
|
public abstract String getName();
|
|
|
|
public abstract Flag[] getPermanentFlags() throws MessagingException;
|
|
|
|
/**
|
|
* This method returns a string identifying the name of a "role" folder
|
|
* (such as inbox, draft, sent, or trash). Stores that do not implement this
|
|
* feature can be used - the account UI will provide default strings. To
|
|
* let the server identify specific folder roles, simply override this method.
|
|
*
|
|
* @return The server- or protocol- specific role for this folder. If some roles are known
|
|
* but this is not one of them, return FolderRole.OTHER. If roles are unsupported here,
|
|
* return FolderRole.UNKNOWN.
|
|
*/
|
|
public FolderRole getRole() {
|
|
return FolderRole.UNKNOWN;
|
|
}
|
|
|
|
/**
|
|
* Create an empty message of the appropriate type for the Folder.
|
|
*/
|
|
public abstract Message createMessage(String uid) throws MessagingException;
|
|
|
|
/**
|
|
* Callback interface by which a folder can report UID changes caused by certain operations.
|
|
*/
|
|
public interface MessageUpdateCallbacks {
|
|
/**
|
|
* The operation caused the message's UID to change
|
|
* @param message The message for which the UID changed
|
|
* @param newUid The new UID for the message
|
|
*/
|
|
public void onMessageUidChange(Message message, String newUid) throws MessagingException;
|
|
|
|
/**
|
|
* The operation could not be completed because the message doesn't exist
|
|
* (for example, it was already deleted from the server side.)
|
|
* @param message The message that does not exist
|
|
* @throws MessagingException
|
|
*/
|
|
public void onMessageNotFound(Message message) throws MessagingException;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return getName();
|
|
}
|
|
}
|