In my MyFirebaseMessagingService, I create a notification (even when the app is currently in foreground):
<code>intent = Intent(applicationContext, MyActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
val pendingIntent = PendingIntent.getActivity(applicationContext, 0, intent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE)
notificationBuilder = notificationBuilder
.setContentIntent(pendingIntent)
...
</code>
<code>intent = Intent(applicationContext, MyActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
val pendingIntent = PendingIntent.getActivity(applicationContext, 0, intent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE)
notificationBuilder = notificationBuilder
.setContentIntent(pendingIntent)
...
</code>
intent = Intent(applicationContext, MyActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
val pendingIntent = PendingIntent.getActivity(applicationContext, 0, intent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE)
notificationBuilder = notificationBuilder
.setContentIntent(pendingIntent)
...
Now I believe I have tried everything in my power for this new activity to trigger an animation:
(1) set animation via bundle with pending intent:
<code>val animationBundle = ActivityOptions.makeCustomAnimation(
this,
R.anim.slide_in_right, // Animation for new activity entering
R.anim.slide_out_left // Animation for current activity exiting
).toBundle()
val pendingIntent = PendingIntent.getActivity(this, 0, availabilityDealIntent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE, animationBundle)
</code>
<code>val animationBundle = ActivityOptions.makeCustomAnimation(
this,
R.anim.slide_in_right, // Animation for new activity entering
R.anim.slide_out_left // Animation for current activity exiting
).toBundle()
val pendingIntent = PendingIntent.getActivity(this, 0, availabilityDealIntent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE, animationBundle)
</code>
val animationBundle = ActivityOptions.makeCustomAnimation(
this,
R.anim.slide_in_right, // Animation for new activity entering
R.anim.slide_out_left // Animation for current activity exiting
).toBundle()
val pendingIntent = PendingIntent.getActivity(this, 0, availabilityDealIntent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE, animationBundle)
(2) via onCreate of the new activity (works perfectly when I start the activity via startActivity, but not when I click the notification):
<code>if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, R.anim.slide_in_right, R.anim.slide_out_left, 0)
} else {
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
}
</code>
<code>if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, R.anim.slide_in_right, R.anim.slide_out_left, 0)
} else {
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
}
</code>
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, R.anim.slide_in_right, R.anim.slide_out_left, 0)
} else {
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
}
(3) via app theme animation (android:windowAnimationStyle):
<code><item name="android:windowAnimationStyle">@style/LeftRightAnimation</item>
<resources>
<style name="LeftRightAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">
u/anim/slide_in_right
</item>
<item name="android:activityOpenExitAnimation">
u/anim/slide_out_left
</item>
<item name="android:activityCloseEnterAnimation">
@anim/slide_in_left
</item>
<item name="android:activityCloseExitAnimation">
@anim/slide_out_right
</item>
</style>
</resources>
</code>
<code><item name="android:windowAnimationStyle">@style/LeftRightAnimation</item>
<resources>
<style name="LeftRightAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">
u/anim/slide_in_right
</item>
<item name="android:activityOpenExitAnimation">
u/anim/slide_out_left
</item>
<item name="android:activityCloseEnterAnimation">
@anim/slide_in_left
</item>
<item name="android:activityCloseExitAnimation">
@anim/slide_out_right
</item>
</style>
</resources>
</code>
<item name="android:windowAnimationStyle">@style/LeftRightAnimation</item>
<resources>
<style name="LeftRightAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">
u/anim/slide_in_right
</item>
<item name="android:activityOpenExitAnimation">
u/anim/slide_out_left
</item>
<item name="android:activityCloseEnterAnimation">
@anim/slide_in_left
</item>
<item name="android:activityCloseExitAnimation">
@anim/slide_out_right
</item>
</style>
</resources>
(4) via app theme transition:
<code><item name="android:windowActivityTransitions">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@anim/slide_in_right</item>
<item name="android:windowExitTransition">@anim/slide_out_left</item>
</code>
<code><item name="android:windowActivityTransitions">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@anim/slide_in_right</item>
<item name="android:windowExitTransition">@anim/slide_out_left</item>
</code>
<item name="android:windowActivityTransitions">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@anim/slide_in_right</item>
<item name="android:windowExitTransition">@anim/slide_out_left</item>
Some additional information:
- no launch mode set in Manifest
- doesn’t matter which activity is currently active while I click the notification, animation never happens
- doesn’t matter whether the app is in foreground or background while clicking the notification
- onCreate() of the new activity gets only called once
- animations work perfectly fine in every other case
I’m at the point of giving up.