diff --git a/ad-blocking/ad-blocking-impl/src/main/java/com/duckduckgo/adblocking/impl/menu/AdBlockingMenuBottomSheetDialog.kt b/ad-blocking/ad-blocking-impl/src/main/java/com/duckduckgo/adblocking/impl/menu/AdBlockingMenuBottomSheetDialog.kt
new file mode 100644
index 000000000000..b14e69600c0c
--- /dev/null
+++ b/ad-blocking/ad-blocking-impl/src/main/java/com/duckduckgo/adblocking/impl/menu/AdBlockingMenuBottomSheetDialog.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2026 DuckDuckGo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.duckduckgo.adblocking.impl.menu
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.LayoutInflater
+import com.duckduckgo.adblocking.impl.databinding.BottomSheetAdBlockingMenuBinding
+import com.google.android.material.bottomsheet.BottomSheetDialog
+
+@SuppressLint("NoBottomSheetDialog")
+class AdBlockingMenuBottomSheetDialog(builderContext: Context) : BottomSheetDialog(builderContext) {
+
+ interface EventListener {
+ fun onAlwaysOnClicked()
+ fun onDisableUntilRelaunchClicked()
+ fun onAlwaysOffClicked()
+ }
+
+ var eventListener: EventListener? = null
+
+ private val binding: BottomSheetAdBlockingMenuBinding =
+ BottomSheetAdBlockingMenuBinding.inflate(LayoutInflater.from(context))
+
+ init {
+ setContentView(binding.root)
+
+ binding.adBlockingMenuCloseButton.setOnClickListener { dismiss() }
+ binding.adBlockingMenuAlwaysOn.setOnClickListener {
+ eventListener?.onAlwaysOnClicked()
+ dismiss()
+ }
+ binding.adBlockingMenuDisableUntilRelaunch.setOnClickListener {
+ eventListener?.onDisableUntilRelaunchClicked()
+ dismiss()
+ }
+ binding.adBlockingMenuAlwaysOff.setOnClickListener {
+ eventListener?.onAlwaysOffClicked()
+ dismiss()
+ }
+ }
+}
diff --git a/ad-blocking/ad-blocking-impl/src/main/java/com/duckduckgo/adblocking/impl/menu/AdBlockingMenuItemView.kt b/ad-blocking/ad-blocking-impl/src/main/java/com/duckduckgo/adblocking/impl/menu/AdBlockingMenuItemView.kt
index a2bc0eaf82b1..792f528d606f 100644
--- a/ad-blocking/ad-blocking-impl/src/main/java/com/duckduckgo/adblocking/impl/menu/AdBlockingMenuItemView.kt
+++ b/ad-blocking/ad-blocking-impl/src/main/java/com/duckduckgo/adblocking/impl/menu/AdBlockingMenuItemView.kt
@@ -36,6 +36,7 @@ import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
+import logcat.logcat
import javax.inject.Inject
@InjectWith(ViewScope::class)
@@ -77,7 +78,10 @@ class AdBlockingMenuItemView @JvmOverloads constructor(
super.onAttachedToWindow()
val url = this.url ?: return
- menuItem.setOnClickListener { onHostClick?.invoke() }
+ menuItem.setOnClickListener {
+ showMenuBottomSheet()
+ onHostClick?.invoke()
+ }
scope?.cancel()
scope = CoroutineScope(SupervisorJob() + dispatcherProvider.main()).also { scope ->
@@ -94,6 +98,24 @@ class AdBlockingMenuItemView @JvmOverloads constructor(
super.onDetachedFromWindow()
}
+ private fun showMenuBottomSheet() {
+ AdBlockingMenuBottomSheetDialog(context).apply {
+ eventListener = object : AdBlockingMenuBottomSheetDialog.EventListener {
+ override fun onAlwaysOnClicked() {
+ logcat { "AdBlocking menu: Always On" }
+ }
+
+ override fun onDisableUntilRelaunchClicked() {
+ logcat { "AdBlocking menu: Disable Until Relaunch" }
+ }
+
+ override fun onAlwaysOffClicked() {
+ logcat { "AdBlocking menu: Always Off" }
+ }
+ }
+ }.show()
+ }
+
private fun render(state: AdBlockingMenuState) {
when (state) {
AdBlockingMenuState.Hidden -> isGone = true
diff --git a/ad-blocking/ad-blocking-impl/src/main/res/drawable/check.xml b/ad-blocking/ad-blocking-impl/src/main/res/drawable/check.xml
new file mode 100644
index 000000000000..0e219b75818d
--- /dev/null
+++ b/ad-blocking/ad-blocking-impl/src/main/res/drawable/check.xml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/ad-blocking/ad-blocking-impl/src/main/res/layout/bottom_sheet_ad_blocking_menu.xml b/ad-blocking/ad-blocking-impl/src/main/res/layout/bottom_sheet_ad_blocking_menu.xml
new file mode 100644
index 000000000000..70fdbf71e1fa
--- /dev/null
+++ b/ad-blocking/ad-blocking-impl/src/main/res/layout/bottom_sheet_ad_blocking_menu.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ad-blocking/ad-blocking-impl/src/main/res/values/donottranslate.xml b/ad-blocking/ad-blocking-impl/src/main/res/values/donottranslate.xml
index 02f6d409adff..2569228b521a 100644
--- a/ad-blocking/ad-blocking-impl/src/main/res/values/donottranslate.xml
+++ b/ad-blocking/ad-blocking-impl/src/main/res/values/donottranslate.xml
@@ -19,4 +19,9 @@
Blocks invasive trackers before they load, effectively eliminating ads that rely on tracking
Disable YouTube Ad Blocking
Enable YouTube Ad Blocking
+ YouTube Ad Blocking
+ Close
+ Always On
+ Disable Until Relaunch
+ Always Off