#Email-specific proguard flags that are not covered by UnifiedEmail go here

-keep class com.android.emailcommon.provider.Account

-keepclasseswithmembers class * {
  public static void actionEditIncomingSettings(android.app.Activity, int, com.android.emailcommon.provider.Account);
}

-keepclasseswithmembers class * {
  public static void actionEditOutgoingSettings(android.app.Activity, int, com.android.emailcommon.provider.Account);
}

-keepclasseswithmembers class * {
  public *** newInstance(com.android.emailcommon.provider.Account, android.content.Context);
}

-keepclasseswithmembers class * {
  public *** newInstance(com.android.emailcommon.provider.Account, android.content.Context);
}

-keepclasseswithmembers class android.content.SharedPreferences$Editor {
  *** apply();
}

-keepclasseswithmembers class com.android.emailcommon.utility.Utility$CloseTraceCursorWrapper {
  *** getTraceIfAvailable(android.database.Cursor);
  *** log(android.database.Cursor);
}

-keep class * extends org.apache.james.mime4j.util.TempStorage

# Keep names that are used only by unit tests or by animators
-keep class ** {
  *** *ForTest(...);
  *** *Anim(...);
}

-keepclasseswithmembers class com.android.email.activity.RecentMailboxManager {
  *** touch(long);
  *** getInstance(android.content.Context);
  *** getMostRecent(long, boolean);
}

-keepclasseswithmembers class com.android.email.activity.setup.AccountSetupAccountType {
  *** checkAccountInstanceLimit(com.android.email.mail.Store$StoreInfo);
}

-keepclasseswithmembers class com.android.email.GroupMessagingListener {
  *** removeListener(com.android.email.MessagingListener);
}

-keepclasseswithmembers class com.android.email.Controller {
  *** setProviderContext(android.content.Context);
}

-keepclasseswithmembers class com.android.emailcommon.internet.Rfc822Output {
  *** getHtmlBody(java.lang.String);
  *** buildBodyText(android.content.Context, com.android.emailcommon.provider.EmailContent$Message, boolean);
}

-keepclasseswithmembers class com.android.emailcommon.mail.Address {
  <init>(java.lang.String);
  <init>(java.lang.String,java.lang.String);
  *** parseAndPack(java.lang.String);
}

-keepclasseswithmembers class com.android.email.SecurityPolicy {
  *** setContext(android.content.Context);
}

-keepclasseswithmembers class com.android.email.MessagingController {
  *** injectMockController(com.android.email.MessagingController);
}

-keepclasseswithmembers class com.android.emailcommon.utility.Utility {
  *** dumpCursor(android.database.Cursor);
  *** fromUtf8(byte[]);
  *** isFirstUtf8Byte(byte);
  *** replaceBareLfWithCrlf(java.lang.String);
}
-keepclasseswithmembers class com.android.emailcommon.utility.Utility$CloseTraceCursorWrapper {
  *** getTraceIfAvailable(android.database.Cursor);
  *** log(android.database.Cursor);
}

-keepclasseswithmembers class com.android.email.provider.EmailProvider {
  *** getReadableDatabase(android.content.Context);
}

-keepclasseswithmembers class com.android.emailcommon.provider.EmailContent$Attachment {
  *** createUniqueFile(java.lang.String);
}

-keepclasseswithmembers class com.android.email.service.AttachmentDownloadService {
  *** addServiceClass(long, java.lang.Class);
}

-keepclasseswithmembers class com.android.email.service.AttachmentDownloadService$AccountManagerStub {
  *** setNumberOfAccounts(int);
}

-keepclasseswithmembers class com.android.email.Preferences {
  *** getAccountByContentUri(android.net.Uri);
}

-keep class com.android.emailcommon.mail.Message$RecipientType

-keepclasseswithmembers class com.android.emailcommon.mail.Message {
  *** setRecipient(com.android.emailcommon.mail.Message$RecipientType, com.android.emailcommon.mail.Address);
}

-keepclasseswithmembers class com.android.emailcommon.internet.MimeHeader {
  *** writeToString();
}

-keepclasseswithmembers class com.android.emailcommon.internet.MimeMessage {
  <init>();
  <init>(java.io.InputStream);
  *** getExtendedHeader(java.lang.String);
  *** setExtendedHeader(java.lang.String, java.lang.String);
  *** getExtendedHeaders();
  *** setExtendedHeaders(java.lang.String);
}

-keepclasseswithmembers class com.android.emailcommon.internet.MimeUtility {
  *** foldAndEncode(java.lang.String);
  *** findPartByContentId(com.android.emailcommon.mail.Part, java.lang.String);
  *** findFirstPartByMimeType(com.android.emailcommon.mail.Part, java.lang.String);
}

-keepclasseswithmembers class com.android.email.mail.transport.SmtpSender {
  *** setTransport(com.android.email.mail.Transport);
}

-keepclasseswithmembers class com.android.email.mail.Store {
  *** requireStructurePrefetch();
}

-keepclasseswithmembers class com.android.email.mail.store.ImapStore {
  *** setTransport(com.android.email.mail.Transport);
}

-keepclasseswithmembers class com.android.email.mail.store.ImapFolder {
  *** getMessages(int, int, com.android.emailcommon.mail.Folder$MessageRetrievalListener);
  *** getMessages(com.android.emailcommon.mail.Folder$MessageRetrievalListener);
  *** getMessages(java.lang.String[], com.android.emailcommon.mail.Folder$MessageRetrievalListener);
  *** getUnreadMessageCount();
}

-keepclasseswithmembers class com.android.email.mail.store.Pop3Store {
  *** setTransport(com.android.email.mail.Transport);
}

-keepclasseswithmembers class com.android.email.mail.store.Pop3Store$Pop3Folder {
  *** getMessages(int, int, com.android.emailcommon.mail.Folder$MessageRetrievalListener);
  *** getMessages(com.android.emailcommon.mail.Folder$MessageRetrievalListener);
  *** getMessages(java.lang.String[], com.android.emailcommon.mail.Folder$MessageRetrievalListener);
  *** getUnreadMessageCount();
  *** isOpen();
}

-keep class com.android.emailcommon.mail.Flag

-keepclasseswithmembers class com.android.emailcommon.mail.Folder {
  *** getUnreadMessageCount();
  *** delete(boolean);
  *** getRole();
}

-keep class com.android.emailcommon.mail.Folder$FolderRole

-keepclasseswithmembers class com.android.emailcommon.mail.PackedString$Builder {
  <init>();
  <init>(java.lang.String);
  *** get(java.lang.String);
  *** put(java.lang.String, java.lang.String);
}

-keepclasseswithmembers class com.android.email.provider.ContentCache$CounterMap {
  *** getCount(...);
  *** size();
}

-keepclasseswithmembers class com.android.emailcommon.provider.Account {
  *** getShortcutSafeUri();
  *** refresh(android.content.Context);
}

-keepclasseswithmembers class com.android.emailcommon.provider.Policy {
  *** setAttachmentFlagsForNewPolicy(android.content.Context,
    com.android.emailcommon.provider.Account,
    com.android.emailcommon.provider.Policy);
  *** clearAccountPolicy(android.content.Context,
    com.android.emailcommon.provider.Account);
}

-keep class org.apache.james.mime4j.field.Field {
  *** getBody();
}

-keepclasseswithmembers class com.android.email.FolderProperties {
  *** getDisplayName(int);
}

# The following classes are used only by unit tests.
# We should move them into tests/ if possible.

-keep class org.apache.james.mime4j.message.Message {
  *;
}

-keepclasseswithmembers class org.apache.commons.io.IOUtils {
  *** toByteArray(java.io.InputStream);
  *** toByteArray(java.io.Reader);
  *** toByteArray(java.io.Reader, java.lang.String);
  *** toByteArray(java.lang.String);
}

-keepclasseswithmembers class com.android.email.activity.ThreePaneLayout {
  *** setMessageListWidthAnim(...);
  *** setMailboxListLeftAnim(...);
}
