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 @@ + + + + + +