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

-keepclasseswithmembers class * {
  public static void actionEditOutgoingSettings(android.app.Activity, int, 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(...);
}
