diff --git a/app/src/main/java/com/duckduckgo/app/settings/SettingsActivity.kt b/app/src/main/java/com/duckduckgo/app/settings/SettingsActivity.kt
index 6d7b117bc8d6..7c48cb9c7770 100644
--- a/app/src/main/java/com/duckduckgo/app/settings/SettingsActivity.kt
+++ b/app/src/main/java/com/duckduckgo/app/settings/SettingsActivity.kt
@@ -540,7 +540,7 @@ class SettingsActivity : DuckDuckGoActivity() {
BrowserActivity.intent(context = this, launchSource = InAppNavigation, queryExtra = OTHER_PLATFORMS_URL),
)
is Command.LaunchGetDesktopBrowser -> launchScreen(GetDesktopBrowserActivityParams(source = GetDesktopBrowserActivityParams.Source.OTHER))
- is Command.LaunchWhatsNew -> launchScreen(ModalSurfaceActivityFromMessageId(it.messageId, it.messageType))
+ is Command.LaunchWhatsNew -> launchScreen(ModalSurfaceActivityFromMessageId(it.messageId, it.messageType, launchedFromSettings = true))
}
}
diff --git a/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ReEngagementPromptEvaluator.kt b/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ReEngagementPromptEvaluator.kt
index 31b389598450..b8bc4dca32ad 100644
--- a/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ReEngagementPromptEvaluator.kt
+++ b/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ReEngagementPromptEvaluator.kt
@@ -16,6 +16,7 @@
package com.duckduckgo.daxprompts.impl
+import android.app.ActivityOptions
import android.content.Context
import android.content.Intent
import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector
@@ -76,7 +77,8 @@ class ReEngagementPromptEvaluatorImpl @Inject constructor(
delay(MODAL_DISPLAY_DELAY)
appCoroutineScope.launch(dispatchers.main()) {
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP
- applicationContext.startActivity(intent)
+ val options = ActivityOptions.makeCustomAnimation(applicationContext, R.anim.slide_from_bottom, 0).toBundle()
+ applicationContext.startActivity(intent, options)
}
return@withContext ModalEvaluator.EvaluationResult.ModalShown
diff --git a/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/WinBackPromptEvaluator.kt b/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/WinBackPromptEvaluator.kt
index 1024204144e7..2dfaa4176184 100644
--- a/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/WinBackPromptEvaluator.kt
+++ b/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/WinBackPromptEvaluator.kt
@@ -16,6 +16,7 @@
package com.duckduckgo.daxprompts.impl
+import android.app.ActivityOptions
import android.content.Context
import android.content.Intent
import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector
@@ -74,7 +75,8 @@ class WinBackPromptEvaluatorImpl @Inject constructor(
delay(MODAL_DISPLAY_DELAY)
appCoroutineScope.launch(dispatchers.main()) {
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP
- applicationContext.startActivity(intent)
+ val options = ActivityOptions.makeCustomAnimation(applicationContext, R.anim.slide_from_bottom, 0).toBundle()
+ applicationContext.startActivity(intent, options)
}
return@withContext ModalEvaluator.EvaluationResult.ModalShown
diff --git a/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ui/DaxPromptBrowserComparisonActivity.kt b/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ui/DaxPromptBrowserComparisonActivity.kt
index a0b297455c4c..511e4ebdf1c4 100644
--- a/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ui/DaxPromptBrowserComparisonActivity.kt
+++ b/dax-prompts/dax-prompts-impl/src/main/java/com/duckduckgo/daxprompts/impl/ui/DaxPromptBrowserComparisonActivity.kt
@@ -23,6 +23,7 @@ import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.graphics.Color
+import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import android.provider.Settings
import android.view.WindowManager
@@ -98,6 +99,10 @@ class DaxPromptBrowserComparisonActivity : DuckDuckGoActivity() {
setContentView(binding.root)
+ if (SDK_INT >= 34) {
+ overrideActivityTransition(OVERRIDE_TRANSITION_CLOSE, 0, R.anim.slide_to_bottom)
+ }
+
setupListeners()
setupObservers()
setupOnBackNavigation()
@@ -152,6 +157,10 @@ class DaxPromptBrowserComparisonActivity : DuckDuckGoActivity() {
setResult(RESULT_OK, resultIntent)
}
finish()
+ if (SDK_INT < 34) {
+ @Suppress("DEPRECATION")
+ overridePendingTransition(0, R.anim.slide_to_bottom)
+ }
}
is Command.BrowserComparisonChart -> {
diff --git a/dax-prompts/dax-prompts-impl/src/main/res/anim/slide_from_bottom.xml b/dax-prompts/dax-prompts-impl/src/main/res/anim/slide_from_bottom.xml
new file mode 100644
index 000000000000..86c0b1b56961
--- /dev/null
+++ b/dax-prompts/dax-prompts-impl/src/main/res/anim/slide_from_bottom.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/dax-prompts/dax-prompts-impl/src/main/res/anim/slide_to_bottom.xml b/dax-prompts/dax-prompts-impl/src/main/res/anim/slide_to_bottom.xml
new file mode 100644
index 000000000000..992da7a50df3
--- /dev/null
+++ b/dax-prompts/dax-prompts-impl/src/main/res/anim/slide_to_bottom.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/modal-coordinator/modal-coordinator-impl/src/main/java/com/duckduckgo/modalcoordinator/impl/ModalEvaluatorCoordinator.kt b/modal-coordinator/modal-coordinator-impl/src/main/java/com/duckduckgo/modalcoordinator/impl/ModalEvaluatorCoordinator.kt
index 381e9fb6179e..d2e0c43bb811 100644
--- a/modal-coordinator/modal-coordinator-impl/src/main/java/com/duckduckgo/modalcoordinator/impl/ModalEvaluatorCoordinator.kt
+++ b/modal-coordinator/modal-coordinator-impl/src/main/java/com/duckduckgo/modalcoordinator/impl/ModalEvaluatorCoordinator.kt
@@ -67,10 +67,10 @@ class ModalEvaluatorCoordinator @Inject constructor(
logcat { "ModalEvaluatorCoordinator: Starting coordinated evaluation" }
// Check 24-hour blocking first
- if (completionStore.isBlockedBy24HourWindow()) {
- logcat { "ModalEvaluatorCoordinator: Evaluation is blocked by 24-hour window" }
- return@withLock
- }
+ // if (completionStore.isBlockedBy24HourWindow()) {
+ // logcat { "ModalEvaluatorCoordinator: Evaluation is blocked by 24-hour window" }
+ // return@withLock
+ // }
val evaluators = modalEvaluatorPluginPoint.getPlugins().sortedBy { it.priority }
logcat { "ModalEvaluatorCoordinator: Found ${evaluators.size} evaluators" }
diff --git a/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivity.kt b/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivity.kt
index f5cbd09e16b4..bc89cbefaff7 100644
--- a/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivity.kt
+++ b/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivity.kt
@@ -16,6 +16,7 @@
package com.duckduckgo.remote.messaging.impl.modal
+import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import androidx.activity.addCallback
import androidx.lifecycle.Lifecycle
@@ -28,6 +29,7 @@ import com.duckduckgo.common.ui.view.show
import com.duckduckgo.common.ui.viewbinding.viewBinding
import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.navigation.api.getActivityParams
+import com.duckduckgo.remote.messaging.impl.R
import com.duckduckgo.remote.messaging.impl.databinding.ActivityModalSurfaceBinding
import com.duckduckgo.remote.messaging.impl.modal.ModalSurfaceViewModel.Command
import com.duckduckgo.remote.messaging.impl.modal.cardslist.CardsListRemoteMessageView
@@ -41,10 +43,18 @@ class ModalSurfaceActivity : DuckDuckGoActivity(), CardsListRemoteMessageView.Ca
private val viewModel: ModalSurfaceViewModel by bindViewModel()
private val binding: ActivityModalSurfaceBinding by viewBinding()
+ private var launchedFromSettings: Boolean = false
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
+ launchedFromSettings = intent.getActivityParams(ModalSurfaceActivityFromMessageId::class.java)?.launchedFromSettings ?: false
+
+ if (!launchedFromSettings && SDK_INT >= 34) {
+ overrideActivityTransition(OVERRIDE_TRANSITION_CLOSE, 0, R.anim.slide_to_bottom)
+ }
+
initialise()
setupObservers()
setupBackNavigationHandler()
@@ -84,6 +94,10 @@ class ModalSurfaceActivity : DuckDuckGoActivity(), CardsListRemoteMessageView.Ca
when (command) {
is Command.DismissMessage -> {
finish()
+ if (!launchedFromSettings && SDK_INT < 34) {
+ @Suppress("DEPRECATION")
+ overridePendingTransition(0, R.anim.slide_to_bottom)
+ }
}
}
}
diff --git a/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivityParams.kt b/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivityParams.kt
index db44b8540909..5511e61a260a 100644
--- a/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivityParams.kt
+++ b/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/ModalSurfaceActivityParams.kt
@@ -19,4 +19,8 @@ package com.duckduckgo.remote.messaging.impl.modal
import com.duckduckgo.navigation.api.GlobalActivityStarter
import com.duckduckgo.remote.messaging.api.Content.MessageType
-data class ModalSurfaceActivityFromMessageId(val messageId: String, val messageType: MessageType) : GlobalActivityStarter.ActivityParams
+data class ModalSurfaceActivityFromMessageId(
+ val messageId: String,
+ val messageType: MessageType,
+ val launchedFromSettings: Boolean = false,
+) : GlobalActivityStarter.ActivityParams
diff --git a/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/evaluator/RemoteMessageModalSurfaceEvaluator.kt b/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/evaluator/RemoteMessageModalSurfaceEvaluator.kt
index 2509e2c24b24..3bf8879c4341 100644
--- a/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/evaluator/RemoteMessageModalSurfaceEvaluator.kt
+++ b/remote-messaging/remote-messaging-impl/src/main/java/com/duckduckgo/remote/messaging/impl/modal/evaluator/RemoteMessageModalSurfaceEvaluator.kt
@@ -16,6 +16,7 @@
package com.duckduckgo.remote.messaging.impl.modal.evaluator
+import android.app.ActivityOptions
import android.content.Context
import android.content.Intent
import android.os.SystemClock
@@ -26,6 +27,7 @@ import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.modalcoordinator.api.ModalEvaluator
import com.duckduckgo.navigation.api.GlobalActivityStarter
import com.duckduckgo.remote.messaging.api.Surface
+import com.duckduckgo.remote.messaging.impl.R
import com.duckduckgo.remote.messaging.impl.RemoteMessagingFeatureToggles
import com.duckduckgo.remote.messaging.impl.RemoteMessagingRepository
import com.duckduckgo.remote.messaging.impl.modal.ModalSurfaceActivityFromMessageId
@@ -99,7 +101,8 @@ class RemoteMessageModalSurfaceEvaluatorImpl @Inject constructor(
delay(MODAL_DISPLAY_DELAY)
appCoroutineScope.launch(dispatchers.main()) {
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP
- applicationContext.startActivity(intent)
+ val options = ActivityOptions.makeCustomAnimation(applicationContext, R.anim.slide_from_bottom, 0).toBundle()
+ applicationContext.startActivity(intent, options)
}
// Record this message as shown, and clear background timestamp
diff --git a/remote-messaging/remote-messaging-impl/src/main/res/anim/slide_from_bottom.xml b/remote-messaging/remote-messaging-impl/src/main/res/anim/slide_from_bottom.xml
new file mode 100644
index 000000000000..86c0b1b56961
--- /dev/null
+++ b/remote-messaging/remote-messaging-impl/src/main/res/anim/slide_from_bottom.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/remote-messaging/remote-messaging-impl/src/main/res/anim/slide_to_bottom.xml b/remote-messaging/remote-messaging-impl/src/main/res/anim/slide_to_bottom.xml
new file mode 100644
index 000000000000..992da7a50df3
--- /dev/null
+++ b/remote-messaging/remote-messaging-impl/src/main/res/anim/slide_to_bottom.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+