You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/dialog/CookieBannerReEngagementDia...

113 lines
4.7 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.settings.quicksettings.protections.cookiebanners.dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.DialogFragment
import mozilla.components.concept.engine.EngineSession.CookieBannerHandlingMode.DISABLED
import mozilla.components.concept.engine.EngineSession.CookieBannerHandlingMode.REJECT_ALL
import mozilla.components.concept.engine.Settings
import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.GleanMetrics.CookieBanners
import org.mozilla.fenix.R
import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.getRootView
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.theme.FirefoxTheme
/**
* Displays a cookie banner dialog fragment that contains the dialog compose and his logic.
*/
class CookieBannerReEngagementDialog : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View = ComposeView(requireContext()).apply {
CookieBanners.visitedReEngagementDialog.record(NoExtras())
setContent {
FirefoxTheme {
val title =
context.getString(
R.string.reduce_cookie_banner_dialog_title,
context.getString(R.string.app_name),
)
val message =
context.getString(
R.string.reduce_cookie_banner_dialog_body,
context.getString(R.string.app_name),
)
val allowButtonText =
context.getString(
R.string.reduce_cookie_banner_dialog_change_setting_button,
)
CookieBannerReEngagementDialogCompose(
dialogTitle = title,
dialogText = message,
allowButtonText = allowButtonText,
declineButtonText = getString(R.string.reduce_cookie_banner_dialog_not_now_button),
onAllowButtonClicked = {
CookieBanners.allowReEngagementDialog.record(NoExtras())
requireContext().settings().shouldUseCookieBanner = true
getEngineSettings().cookieBannerHandlingModePrivateBrowsing = REJECT_ALL
getEngineSettings().cookieBannerHandlingMode = REJECT_ALL
getEngineSettings().cookieBannerHandlingDetectOnlyMode = false
reload()
requireContext().getRootView()?.let {
FenixSnackbar.make(
view = it,
duration = LENGTH_SNACKBAR_DURATION,
isDisplayedWithBrowserToolbar = true,
)
.setText(getString(R.string.reduce_cookie_banner_dialog_snackbar_text))
.show()
}
dismiss()
},
onNotNowButtonClicked = {
disabledCookieBannerHandlingDetectOnlyMode()
CookieBanners.notNowReEngagementDialog.record(NoExtras())
dismiss()
},
onCloseButtonClicked = {
disabledCookieBannerHandlingDetectOnlyMode()
requireContext().settings().userOptOutOfReEngageCookieBannerDialog = true
CookieBanners.optOutReEngagementDialog.record(NoExtras())
dismiss()
},
)
}
}
}
private fun disabledCookieBannerHandlingDetectOnlyMode() {
getEngineSettings().cookieBannerHandlingDetectOnlyMode = false
getEngineSettings().cookieBannerHandlingModePrivateBrowsing = DISABLED
getEngineSettings().cookieBannerHandlingMode = DISABLED
}
private fun getEngineSettings(): Settings {
return requireContext().components.core.engine.settings
}
private fun reload() {
return requireContext().components.useCases.sessionUseCases.reload()
}
companion object {
private const val LENGTH_SNACKBAR_DURATION = 4000 // 4 seconds in ms
}
}