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

-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>;
}


-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.ConversationViewFragment$MessageJsBridge {
  public <methods>;
}

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

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

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

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