# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.

-dontwarn android.support.v4.**
-dontwarn android.support.v13.**
-dontwarn com.android.ex.photo.**

# keep names that are used by reflection, from javascript or from unit tests

-keepclasseswithmembers class com.android.mail.compose.ComposeActivity {
  *** registerTestSendOrSaveCallback(...);
  *** getSubject(...);
  *** getBodyHtml(...);
}

-keepclasseswithmembers class com.android.mail.providers.protos.mock.MockUiProvider {
  *** getAccountsUri(...);
}

-keepclasseswithmembers class com.android.mail.providers.UIProvider {
  *** getAccountsUri(...);
}

-keepclasseswithmembers class com.android.mail.utils.LogUtils {
  public <methods>;
}

# Needed for Parcelable/SafeParcelable Creators to not get stripped
-keep class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keepclasseswithmembers class com.google.common.collect.ImmutableMap {
  *** of(...);
}

-keepclasseswithmembers class com.google.common.collect.ImmutableList {
  *** of(...);
}

-keepclasseswithmembers class com.google.common.collect.Sets {
  *** of(...);
}

-keepclasseswithmembers class com.android.mail.ui.LeaveBehindItem {
  *** setAnimatedHeight(...);
}

-keepclasseswithmembers class com.android.mail.ui.ConversationViewFragment$MailJsBridge {
  public <methods>;
}

-keepclasseswithmembers class com.android.mail.ui.TwoPaneLayout {
  *** setFoldersLeft(...);
  *** setListBitmapLeft(...);
  *** setListBitmapAlpha(...);
  *** setListLeft(...);
  *** setListAlpha(...);
  *** setConversationLeft(...);
}

-keepclasseswithmembers class com.android.mail.browse.ConversationItemView {
  *** setAnimatedHeightFraction(...);
}

-keepclasseswithmembers class com.android.mail.ui.MailActivity {
  *** doNothingClickHandler(...);
}

-keepclasseswithmembers class * extends com.android.mail.ui.ConversationSpecialItemView {
  *** setAnimatedHeight(...);
}

# the widget "Tap to set up" intent builder references this class by name...
-keep class com.android.mail.ui.MailboxSelectionActivity

# not yet used in UnifiedEmail, but needed by UnifiedEmailTests
-keep class com.android.mail.ui.MailAsyncTaskLoader

-keepclasseswithmembers class com.android.emailcommon.mail.Address {
  public <methods>;
}
