# keep names that are used by reflection.
-keep class com.android.email.provider.EmailContent$Account
-keepclasseswithmembers class * {
  public static void actionEditIncomingSettings(android.app.Activity, com.android.email.provider.EmailContent$Account);
}

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

-keepclasseswithmembers class * {
  public *** newInstance(android.content.Context, java.lang.String);
}

-keep class com.android.email.mail.Store$PersistentDataCallbacks {
  *** getPersistentString(...);
  *** setPersistentString(...);
}

-keepclasseswithmembers class * {
  public *** newInstance(java.lang.String, android.content.Context, com.android.email.mail.Store$PersistentDataCallbacks);
}

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

# Keep names that are used only by unit tests

# Any methods whose name is '*ForTest' are preserved.
-keep class ** {
  *** *ForTest(...);
}

-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.email.mail.Address {
  <init>(...);
  *** parseAndPack(java.lang.String);
  *** legacyUnpack(java.lang.String);
}

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

-keepclasseswithmembers class com.android.email.SecurityPolicy$PolicySet {
  <init>(...);
}

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

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

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

-keepclasseswithmembers class com.android.email.Account {
  *** getContentUri();
}

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

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

-keepclasseswithmembers class com.android.email.mail.Message {
  *** setRecipient(...);
}

-keepclasseswithmembers class com.android.email.mail.internet.MimeMessage {
  <init>(...);
  *** getExtendedHeader(java.lang.String);
  *** setExtendedHeader(java.lang.String, java.lang.String);
}

-keep class com.android.email.mail.Part

-keepclasseswithmembers class com.android.email.mail.internet.MimeUtility {
  *** foldAndEncode(...);
  *** findPartByContentId(...);
  *** findFirstPartByMimeType(...);
}

-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.ImapStore$ImapFolder {
  *** getUnreadMessageCount(...);
  *** getRole(...);
}

-keepclasseswithmembers class com.android.email.mail.store.LocalStore {
  *** resetVisibleLimits(...);
  *** getPersistentCallbacks(...);
  *** getPersistentString(...);
  *** setPersistentString(...);
}

-keepclasseswithmembers class com.android.email.mail.store.LocalStore$LocalFolder {
  *** updateMessage(...);
  *** getMessages(...);
  *** getPersistentCallbacks(...);
  *** getVisibleLimit(...);
  *** setVisibleLimit(...);
  *** getId(...);
  *** getPersistentString(...);
}

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

-keepclasseswithmembers class com.android.email.mail.store.Pop3Store$Pop3Folder {
  *** getUnreadMessageCount(...);
  *** isOpen(...);
}

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

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

-keepclasseswithmembers class com.android.email.mail.Folder$PersistentDataCallbacks {
  *** getPersistentString(...);
  *** setPersistentString(...);
  *** setPersistentStringAndMessageFlags(...);
}

-keep class com.android.email.mail.MessageRetrievalListener

-keepclasseswithmembers class com.android.exchange.adapter.Parser {
  *** resetInput(...);
}

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

-keepclasseswithmembers class com.android.email.mail.PackedString$Builder {
  <init>(...);
  *** get(...);
}

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

# 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(...);
}
