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.
113 lines
4.7 KiB
Kotlin
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
|
|
}
|
|
}
|