diff --git a/app/src/main/res/drawable/ic_try_for_free_pill.xml b/android-design-system/design-system/src/main/res/drawable/ic_try_for_free_pill.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_try_for_free_pill.xml
rename to android-design-system/design-system/src/main/res/drawable/ic_try_for_free_pill.xml
diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt
index 2773a6d15f6e..6fb01bcf6ab1 100644
--- a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt
+++ b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt
@@ -132,7 +132,6 @@ import com.duckduckgo.app.browser.viewstate.FindInPageViewState
import com.duckduckgo.app.browser.viewstate.GlobalLayoutViewState
import com.duckduckgo.app.browser.viewstate.HighlightableButton
import com.duckduckgo.app.browser.viewstate.LoadingViewState
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
import com.duckduckgo.app.browser.webview.MaliciousSiteBlockedWarningLayout.Action.LearnMore
import com.duckduckgo.app.browser.webview.MaliciousSiteBlockedWarningLayout.Action.LeaveSite
import com.duckduckgo.app.browser.webview.MaliciousSiteBlockedWarningLayout.Action.ReportError
@@ -225,6 +224,7 @@ import com.duckduckgo.browser.api.autocomplete.AutoComplete.AutoCompleteSuggesti
import com.duckduckgo.browser.api.autocomplete.AutoCompleteSettings
import com.duckduckgo.browser.api.brokensite.BrokenSiteContext
import com.duckduckgo.browser.api.webviewcompat.WebViewCompatWrapper
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import com.duckduckgo.common.test.CoroutineTestRule
import com.duckduckgo.common.test.InstantSchedulersRule
import com.duckduckgo.common.ui.tabs.SwipingTabsFeature
diff --git a/app/src/androidTest/java/com/duckduckgo/espresso/BasicJourneyTest.kt b/app/src/androidTest/java/com/duckduckgo/espresso/BasicJourneyTest.kt
index 2f639c106cd6..4540bc5084a9 100644
--- a/app/src/androidTest/java/com/duckduckgo/espresso/BasicJourneyTest.kt
+++ b/app/src/androidTest/java/com/duckduckgo/espresso/BasicJourneyTest.kt
@@ -49,6 +49,6 @@ class BasicJourneyTest {
onView(allOf(withId(R.id.browserMenu), isClickable())).perform(click())
// check that the forward arrow is visible
- onView(withId(R.id.forwardMenuItem)).check(matches(isDisplayed()))
+ onView(withContentDescription("Forward")).check(matches(isDisplayed()))
}
}
diff --git a/app/src/androidTest/java/com/duckduckgo/espresso/DaxDialogsJourneyTest.kt b/app/src/androidTest/java/com/duckduckgo/espresso/DaxDialogsJourneyTest.kt
index e3c2877d5c01..5ceb206aa126 100644
--- a/app/src/androidTest/java/com/duckduckgo/espresso/DaxDialogsJourneyTest.kt
+++ b/app/src/androidTest/java/com/duckduckgo/espresso/DaxDialogsJourneyTest.kt
@@ -57,6 +57,6 @@ class DaxDialogsJourneyTest {
onView(isRoot()).perform(waitForView(withId(R.id.browserMenu)))
onView(allOf(withId(R.id.browserMenu), isClickable())).perform(click())
- onView(withId(R.id.forwardMenuItem)).check(matches(isDisplayed()))
+ onView(withContentDescription("Forward")).check(matches(isDisplayed()))
}
}
diff --git a/app/src/androidTest/java/com/duckduckgo/espresso/privacy/RequestBlockingTest.kt b/app/src/androidTest/java/com/duckduckgo/espresso/privacy/RequestBlockingTest.kt
index 50f1e71ab03b..c6b028d1c010 100644
--- a/app/src/androidTest/java/com/duckduckgo/espresso/privacy/RequestBlockingTest.kt
+++ b/app/src/androidTest/java/com/duckduckgo/espresso/privacy/RequestBlockingTest.kt
@@ -88,8 +88,8 @@ class RequestBlockingTest {
IdlingRegistry.getInstance().register(idlingResourceForDisableProtections)
onView(allOf(withId(R.id.browserMenu), isClickable())).perform(click())
- onView(isRoot()).perform(waitForView(withId(R.id.privacyProtectionMenuItem)))
- onView(withId(R.id.privacyProtectionMenuItem)).perform(click())
+ onView(isRoot()).perform(waitForView(withText("Disable Privacy Protection")))
+ onView(withText("Disable Privacy Protection")).perform(click())
// handle the privacy protection toggle check screen showing
onView(isRoot()).perform(ViewActions.pressBack())
diff --git a/app/src/androidTest/java/com/duckduckgo/espresso/privacy/SurrogatesTest.kt b/app/src/androidTest/java/com/duckduckgo/espresso/privacy/SurrogatesTest.kt
index e459d734d775..7bd32b5a58e3 100644
--- a/app/src/androidTest/java/com/duckduckgo/espresso/privacy/SurrogatesTest.kt
+++ b/app/src/androidTest/java/com/duckduckgo/espresso/privacy/SurrogatesTest.kt
@@ -95,8 +95,8 @@ class SurrogatesTest {
IdlingRegistry.getInstance().register(idlingResourceForDisableProtections)
onView(allOf(withId(R.id.browserMenu), isClickable())).perform(ViewActions.click())
- onView(isRoot()).perform(waitForView(withId(R.id.privacyProtectionMenuItem)))
- onView(withId(R.id.privacyProtectionMenuItem)).perform(ViewActions.click())
+ onView(isRoot()).perform(waitForView(withText("Disable Privacy Protection")))
+ onView(withText("Disable Privacy Protection")).perform(ViewActions.click())
// handle the privacy protection toggle check screen showing
onView(isRoot()).perform(ViewActions.pressBack())
diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt
index 27cbe54bfe79..7479dcdacf5c 100644
--- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt
+++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt
@@ -136,7 +136,7 @@ import com.duckduckgo.app.browser.history.NavigationHistorySheet
import com.duckduckgo.app.browser.history.NavigationHistorySheet.NavigationHistorySheetListener
import com.duckduckgo.app.browser.httpauth.WebViewHttpAuthStore
import com.duckduckgo.app.browser.logindetection.DOMLoginDetector
-import com.duckduckgo.app.browser.menu.BrowserPopupMenu
+import com.duckduckgo.app.browser.menu.BrowserMenuViewStateFactory
import com.duckduckgo.app.browser.menu.VpnMenuStore
import com.duckduckgo.app.browser.model.BasicAuthenticationCredentials
import com.duckduckgo.app.browser.model.BasicAuthenticationRequest
@@ -178,7 +178,6 @@ import com.duckduckgo.app.browser.viewstate.LoadingViewState
import com.duckduckgo.app.browser.viewstate.OmnibarViewState
import com.duckduckgo.app.browser.viewstate.PrivacyShieldViewState
import com.duckduckgo.app.browser.viewstate.SavedSiteChangedViewState
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
import com.duckduckgo.app.browser.webauthn.WebViewPasskeyInitializer
import com.duckduckgo.app.browser.webshare.WebShareChooser
import com.duckduckgo.app.browser.webshare.WebViewCompatWebShareChooser
@@ -253,6 +252,8 @@ import com.duckduckgo.browser.api.ui.BrowserScreens.PrivateSearchScreenNoParams
import com.duckduckgo.browser.api.ui.BrowserScreens.WebViewActivityWithParams
import com.duckduckgo.browser.api.webviewcompat.WebViewCompatWrapper
import com.duckduckgo.browser.ui.autocomplete.BrowserAutoCompleteSuggestionsAdapter
+import com.duckduckgo.browser.ui.browsermenu.BrowserMenu
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import com.duckduckgo.common.ui.DuckDuckGoActivity
import com.duckduckgo.common.ui.DuckDuckGoFragment
import com.duckduckgo.common.ui.store.BrowserAppTheme
@@ -614,7 +615,7 @@ class BrowserTabFragment :
private val skipHome get() = requireArguments().getBoolean(SKIP_HOME_ARG)
- private lateinit var popupMenu: BrowserPopupMenu
+ private lateinit var popupMenu: BrowserMenu
private lateinit var ctaBottomSheet: PromoBottomSheetDialog
private lateinit var widgetBottomSheetDialog: AlternativeHomeScreenWidgetBottomSheetDialog
@@ -1313,17 +1314,11 @@ class BrowserTabFragment :
}
private fun createPopupMenu() {
- val popupMenuResourceType =
- when (omnibar.omnibarType) {
- OmnibarType.SINGLE_TOP -> BrowserPopupMenu.ResourceType.TOP
- OmnibarType.SINGLE_BOTTOM, OmnibarType.SPLIT -> BrowserPopupMenu.ResourceType.BOTTOM
- }
-
popupMenu =
- BrowserPopupMenu(
+ BrowserMenu(
context = requireContext(),
layoutInflater = layoutInflater,
- popupMenuResourceType = popupMenuResourceType,
+ omnibarType = omnibar.omnibarType,
)
popupMenu.apply {
onMenuItemClicked(forwardMenuItem) {
@@ -1443,7 +1438,6 @@ class BrowserTabFragment :
private fun launchPopupMenu(anchorToNavigationBar: Boolean, addExtraDelay: Boolean = false) {
val isFocusedNtp = omnibar.viewMode == ViewMode.NewTab && omnibar.getText().isEmpty() && omnibar.omnibarTextInput.hasFocus()
-
val delay = if (addExtraDelay) POPUP_MENU_DELAY * 2 else POPUP_MENU_DELAY
// small delay added to let keyboard disappear and avoid jarring transition
binding.rootView.postDelayed(delay) {
@@ -1456,7 +1450,6 @@ class BrowserTabFragment :
vpnMenuStore.incrementVpnMenuShownCount()
}
}
-
if (anchorToNavigationBar) {
val anchorView = browserNavigationBarIntegration.navigationBarView.popupMenuAnchor
popupMenu.showAnchoredView(requireActivity(), binding.rootView, anchorView)
@@ -1778,6 +1771,16 @@ class BrowserTabFragment :
browserNavigationBarIntegration.configureBrowserViewMode()
}
+ private fun showDuckAI(browserViewState: BrowserViewState) {
+ val browseMenuState = BrowserMenuViewStateFactory.create(
+ omnibarViewMode = ViewMode.DuckAI,
+ viewState = browserViewState,
+ customTabsMode = tabDisplayedInCustomTabScreen,
+ )
+ popupMenu.render(browseMenuState)
+ omnibar.setViewMode(ViewMode.DuckAI)
+ }
+
private fun showMaliciousWarning(
siteUrl: Uri,
feed: Feed,
@@ -2362,7 +2365,7 @@ class BrowserTabFragment :
is Command.SubmitChat -> duckChat.openDuckChatWithAutoPrompt(it.query)
is Command.EnqueueCookiesAnimation -> enqueueCookiesAnimation(it.isCosmetic)
is Command.PageStarted -> onPageStarted()
- is Command.EnableDuckAIFullScreen -> omnibar.setViewMode(ViewMode.DuckAI)
+ is Command.EnableDuckAIFullScreen -> showDuckAI(it.browserViewState)
is Command.DisableDuckAIFullScreen -> omnibar.setViewMode(ViewMode.Browser(it.url))
}
}
@@ -4613,7 +4616,13 @@ class BrowserTabFragment :
browserNavigationBarIntegration.configureFireButtonHighlight(highlighted = viewState.fireButton.isHighlighted())
- popupMenu.renderState(browserShowing, viewState, tabDisplayedInCustomTabScreen)
+ val browseMenuState = BrowserMenuViewStateFactory.create(
+ omnibarViewMode = omnibar.viewMode,
+ viewState = viewState,
+ customTabsMode = tabDisplayedInCustomTabScreen,
+ )
+ logcat { "BrowserMenu: viewMode ${omnibar.viewMode} render browseMenuState $browseMenuState" }
+ popupMenu.render(browseMenuState)
renderFullscreenMode(viewState)
privacyProtectionsPopup.setViewState(viewState.privacyProtectionsPopupViewState)
diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt
index d9612e659cc0..2866abdda9a8 100644
--- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt
+++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt
@@ -214,7 +214,6 @@ import com.duckduckgo.app.browser.viewstate.LoadingViewState
import com.duckduckgo.app.browser.viewstate.OmnibarViewState
import com.duckduckgo.app.browser.viewstate.PrivacyShieldViewState
import com.duckduckgo.app.browser.viewstate.SavedSiteChangedViewState
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
import com.duckduckgo.app.browser.webview.MaliciousSiteBlockedWarningLayout
import com.duckduckgo.app.browser.webview.MaliciousSiteBlockedWarningLayout.Action.LearnMore
import com.duckduckgo.app.browser.webview.MaliciousSiteBlockedWarningLayout.Action.LeaveSite
@@ -295,6 +294,7 @@ import com.duckduckgo.browser.api.brokensite.BrokenSiteData
import com.duckduckgo.browser.api.brokensite.BrokenSiteData.ReportFlow.MENU
import com.duckduckgo.browser.api.brokensite.BrokenSiteData.ReportFlow.RELOAD_THREE_TIMES_WITHIN_20_SECONDS
import com.duckduckgo.browser.api.webviewcompat.WebViewCompatWrapper
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import com.duckduckgo.common.ui.tabs.SwipingTabsFeatureProvider
import com.duckduckgo.common.utils.AppUrl
import com.duckduckgo.common.utils.AppUrl.ParamKey.QUERY
@@ -1969,7 +1969,7 @@ class BrowserTabViewModel @Inject constructor(
if (duckAiFeatureState.showFullScreenMode.value) {
if (duckDuckGoUrlDetector.isDuckDuckGoChatUrl(it)) {
logcat { "Duck.ai: AI Chat page loaded $it" }
- command.value = Command.EnableDuckAIFullScreen
+ command.value = Command.EnableDuckAIFullScreen(currentBrowserViewState())
} else {
command.value = Command.DisableDuckAIFullScreen(url)
}
diff --git a/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt b/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt
index a091be545425..f7a2fb11d7cc 100644
--- a/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt
+++ b/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt
@@ -35,6 +35,7 @@ import com.duckduckgo.app.browser.WebViewErrorResponse
import com.duckduckgo.app.browser.history.NavigationHistoryEntry
import com.duckduckgo.app.browser.model.BasicAuthenticationCredentials
import com.duckduckgo.app.browser.model.BasicAuthenticationRequest
+import com.duckduckgo.app.browser.viewstate.BrowserViewState
import com.duckduckgo.app.browser.viewstate.SavedSiteChangedViewState
import com.duckduckgo.app.cta.ui.BrokenSitePromptDialogCta
import com.duckduckgo.app.cta.ui.DaxBubbleCta
@@ -504,6 +505,6 @@ sealed class Command {
) : Command()
data object PageStarted : Command()
- data object EnableDuckAIFullScreen : Command()
+ data class EnableDuckAIFullScreen(val browserViewState: BrowserViewState) : Command()
data class DisableDuckAIFullScreen(val url: String) : Command()
}
diff --git a/app/src/main/java/com/duckduckgo/app/browser/menu/BrowserMenuViewStateFactory.kt b/app/src/main/java/com/duckduckgo/app/browser/menu/BrowserMenuViewStateFactory.kt
new file mode 100644
index 000000000000..e22c99818348
--- /dev/null
+++ b/app/src/main/java/com/duckduckgo/app/browser/menu/BrowserMenuViewStateFactory.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2025 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.app.browser.menu
+
+import com.duckduckgo.app.browser.SSLErrorType.NONE
+import com.duckduckgo.app.browser.omnibar.Omnibar
+import com.duckduckgo.app.browser.viewstate.BrowserViewState
+import com.duckduckgo.browser.ui.browsermenu.BrowserMenuViewState
+
+object BrowserMenuViewStateFactory {
+ fun create(
+ omnibarViewMode: Omnibar.ViewMode,
+ viewState: BrowserViewState,
+ customTabsMode: Boolean,
+ ): BrowserMenuViewState {
+ return if (customTabsMode) {
+ createCustomTabsViewState(viewState)
+ } else {
+ when (omnibarViewMode) {
+ Omnibar.ViewMode.NewTab -> createNewTabPageViewState(viewState)
+ Omnibar.ViewMode.DuckAI -> createDuckAiViewState(viewState)
+ Omnibar.ViewMode.Error -> createNewTabPageViewState(viewState)
+ Omnibar.ViewMode.SSLWarning -> createNewTabPageViewState(viewState)
+ Omnibar.ViewMode.MaliciousSiteWarning -> createNewTabPageViewState(viewState)
+ else -> createBrowserViewState(browserViewState = viewState)
+ }
+ }
+ }
+
+ private fun createCustomTabsViewState(
+ browserViewState: BrowserViewState,
+ ): BrowserMenuViewState.CustomTabs {
+ return BrowserMenuViewState.CustomTabs(
+ canGoBack = browserViewState.canGoBack,
+ canGoForward = browserViewState.canGoForward,
+ canSharePage = browserViewState.canSharePage,
+ canChangeBrowsingMode = browserViewState.canChangeBrowsingMode,
+ isDesktopBrowsingMode = browserViewState.isDesktopBrowsingMode,
+ canChangePrivacyProtection = browserViewState.canChangePrivacyProtection,
+ isPrivacyProtectionDisabled = browserViewState.isPrivacyProtectionDisabled,
+ )
+ }
+
+ private fun createNewTabPageViewState(
+ browserViewState: BrowserViewState,
+ ): BrowserMenuViewState.NewTabPage {
+ return BrowserMenuViewState.NewTabPage(
+ showDuckChatOption = browserViewState.showDuckChatOption,
+ vpnMenuState = browserViewState.vpnMenuState,
+ showAutofill = browserViewState.showAutofill,
+ )
+ }
+
+ private fun createDuckAiViewState(
+ browserViewState: BrowserViewState,
+ ): BrowserMenuViewState.DuckAi {
+ return BrowserMenuViewState.DuckAi(
+ canPrintPage = browserViewState.canPrintPage,
+ canReportSite = browserViewState.canReportSite,
+ )
+ }
+
+ private fun createBrowserViewState(
+ browserViewState: BrowserViewState,
+ ): BrowserMenuViewState.Browser {
+ return BrowserMenuViewState.Browser(
+ canGoBack = browserViewState.canGoBack,
+ canGoForward = browserViewState.canGoForward,
+ showDuckChatOption = browserViewState.showDuckChatOption,
+ canSharePage = browserViewState.canSharePage,
+ showSelectDefaultBrowserMenuItem = browserViewState.showSelectDefaultBrowserMenuItem,
+ canSaveSite = browserViewState.canSaveSite,
+ isBookmark = browserViewState.bookmark != null,
+ canFireproofSite = browserViewState.canFireproofSite,
+ isFireproofWebsite = browserViewState.isFireproofWebsite,
+ isEmailSignedIn = browserViewState.isEmailSignedIn,
+ canChangeBrowsingMode = browserViewState.canChangeBrowsingMode,
+ isDesktopBrowsingMode = browserViewState.isDesktopBrowsingMode,
+ hasPreviousAppLink = browserViewState.previousAppLink != null,
+ canFindInPage = browserViewState.canFindInPage,
+ addToHomeVisible = browserViewState.addToHomeVisible,
+ addToHomeEnabled = browserViewState.addToHomeEnabled,
+ canChangePrivacyProtection = browserViewState.canChangePrivacyProtection,
+ isPrivacyProtectionDisabled = browserViewState.isPrivacyProtectionDisabled,
+ canReportSite = browserViewState.canReportSite,
+ showAutofill = browserViewState.showAutofill,
+ isSSLError = browserViewState.sslError != NONE,
+ canPrintPage = browserViewState.canPrintPage,
+ )
+ }
+}
diff --git a/app/src/main/java/com/duckduckgo/app/browser/menu/BrowserPopupMenu.kt b/app/src/main/java/com/duckduckgo/app/browser/menu/BrowserPopupMenu.kt
deleted file mode 100644
index c3681c2a86c2..000000000000
--- a/app/src/main/java/com/duckduckgo/app/browser/menu/BrowserPopupMenu.kt
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * Copyright (c) 2022 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.app.browser.menu
-
-import android.content.Context
-import android.view.LayoutInflater
-import android.view.View
-import androidx.core.view.isVisible
-import com.duckduckgo.app.browser.R
-import com.duckduckgo.app.browser.SSLErrorType.NONE
-import com.duckduckgo.app.browser.databinding.PopupWindowBrowserMenuBinding
-import com.duckduckgo.app.browser.databinding.PopupWindowBrowserMenuBottomBinding
-import com.duckduckgo.app.browser.menu.BrowserPopupMenu.ResourceType.BOTTOM
-import com.duckduckgo.app.browser.menu.BrowserPopupMenu.ResourceType.TOP
-import com.duckduckgo.app.browser.viewstate.BrowserViewState
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
-import com.duckduckgo.common.ui.menu.PopupMenu
-import com.duckduckgo.common.ui.view.MenuItemView
-import com.duckduckgo.common.ui.view.StatusIndicatorView
-import com.duckduckgo.mobile.android.R.drawable
-
-class BrowserPopupMenu(
- private val context: Context,
- layoutInflater: LayoutInflater,
- private val popupMenuResourceType: ResourceType,
-) : PopupMenu(
- layoutInflater,
- resourceId = if (popupMenuResourceType == TOP) R.layout.popup_window_browser_menu else R.layout.popup_window_browser_menu_bottom,
- width = context.resources.getDimensionPixelSize(R.dimen.browserPopupMenuWidth),
-) {
- private val topBinding = PopupWindowBrowserMenuBinding.bind(contentView)
- private val bottomBinding = PopupWindowBrowserMenuBottomBinding.bind(contentView)
-
- init {
- contentView =
- when (popupMenuResourceType) {
- TOP -> topBinding.root
- BOTTOM -> bottomBinding.root
- }
- }
-
- internal val backMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.backMenuItem
- BOTTOM -> bottomBinding.backMenuItem
- }
- }
-
- internal val forwardMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.forwardMenuItem
- BOTTOM -> bottomBinding.forwardMenuItem
- }
- }
-
- internal val refreshMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.refreshMenuItem
- BOTTOM -> bottomBinding.refreshMenuItem
- }
- }
-
- internal val printPageMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.printPageMenuItem
- BOTTOM -> bottomBinding.printPageMenuItem
- }
- }
-
- internal val newTabMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.newTabMenuItem
- BOTTOM -> bottomBinding.newTabMenuItem
- }
- }
-
- internal val defaultBrowserMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.includeDefaultBrowserMenuItem.defaultBrowserMenuItem
- BOTTOM -> bottomBinding.includeDefaultBrowserMenuItem.defaultBrowserMenuItem
- }
- }
-
- internal val vpnMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.includeVpnMenuItem.vpnMenuItem
- BOTTOM -> bottomBinding.includeVpnMenuItem.vpnMenuItem
- }
- }
-
- internal val duckChatMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.includeDuckChatMenuItem.duckChatMenuItem
- BOTTOM -> bottomBinding.includeDuckChatMenuItem.duckChatMenuItem
- }
- }
-
- internal val sharePageMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.sharePageMenuItem
- BOTTOM -> bottomBinding.sharePageMenuItem
- }
- }
-
- internal val bookmarksMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.bookmarksMenuItem
- BOTTOM -> bottomBinding.bookmarksMenuItem
- }
- }
-
- internal val downloadsMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.downloadsMenuItem
- BOTTOM -> bottomBinding.downloadsMenuItem
- }
- }
-
- internal val settingsMenuItem: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.settingsMenuItem
- BOTTOM -> bottomBinding.settingsMenuItem
- }
- }
-
- internal val addBookmarksMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.addBookmarksMenuItem
- BOTTOM -> bottomBinding.addBookmarksMenuItem
- }
- }
-
- internal val fireproofWebsiteMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.fireproofWebsiteMenuItem
- BOTTOM -> bottomBinding.fireproofWebsiteMenuItem
- }
- }
-
- internal val createAliasMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.createAliasMenuItem
- BOTTOM -> bottomBinding.createAliasMenuItem
- }
- }
-
- internal val changeBrowserModeMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.changeBrowserModeMenuItem
- BOTTOM -> bottomBinding.changeBrowserModeMenuItem
- }
- }
-
- internal val openInAppMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.openInAppMenuItem
- BOTTOM -> bottomBinding.openInAppMenuItem
- }
- }
-
- internal val findInPageMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.findInPageMenuItem
- BOTTOM -> bottomBinding.findInPageMenuItem
- }
- }
-
- internal val addToHomeMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.addToHomeMenuItem
- BOTTOM -> bottomBinding.addToHomeMenuItem
- }
- }
-
- internal val privacyProtectionMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.privacyProtectionMenuItem
- BOTTOM -> bottomBinding.privacyProtectionMenuItem
- }
- }
-
- internal val brokenSiteMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.brokenSiteMenuItem
- BOTTOM -> bottomBinding.brokenSiteMenuItem
- }
- }
-
- internal val autofillMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.autofillMenuItem
- BOTTOM -> bottomBinding.autofillMenuItem
- }
- }
-
- internal val runningInDdgBrowserMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.runningInDdgBrowserMenuItem
- BOTTOM -> bottomBinding.runningInDdgBrowserMenuItem
- }
- }
-
- internal val siteOptionsMenuDivider: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.siteOptionsMenuDivider
- BOTTOM -> bottomBinding.siteOptionsMenuDivider
- }
- }
-
- internal val browserOptionsMenuDivider: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.browserOptionsMenuDivider
- BOTTOM -> bottomBinding.browserOptionsMenuDivider
- }
- }
-
- internal val settingsMenuDivider: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.settingsMenuDivider
- BOTTOM -> bottomBinding.settingsMenuDivider
- }
- }
-
- internal val customTabsMenuDivider: View by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.customTabsMenuDivider
- BOTTOM -> bottomBinding.customTabsMenuDivider
- }
- }
-
- internal val openInDdgBrowserMenuItem: MenuItemView by lazy {
- when (popupMenuResourceType) {
- TOP -> topBinding.openInDdgBrowserMenuItem
- BOTTOM -> bottomBinding.openInDdgBrowserMenuItem
- }
- }
-
- fun renderState(
- browserShowing: Boolean,
- viewState: BrowserViewState,
- displayedInCustomTabScreen: Boolean,
- ) {
- backMenuItem.isEnabled = viewState.canGoBack
- forwardMenuItem.isEnabled = viewState.canGoForward
- refreshMenuItem.isEnabled = browserShowing
-
- printPageMenuItem.isEnabled = browserShowing
-
- newTabMenuItem.isVisible = !displayedInCustomTabScreen
- duckChatMenuItem.isVisible = viewState.showDuckChatOption && !displayedInCustomTabScreen
- sharePageMenuItem.isVisible = viewState.canSharePage
-
- defaultBrowserMenuItem.isVisible = viewState.showSelectDefaultBrowserMenuItem
-
- configureVpnMenuItem(viewState, browserShowing, displayedInCustomTabScreen)
-
- bookmarksMenuItem.isVisible = !displayedInCustomTabScreen
- downloadsMenuItem.isVisible = !displayedInCustomTabScreen
- settingsMenuItem.isVisible = !displayedInCustomTabScreen
-
- addBookmarksMenuItem.isVisible = viewState.canSaveSite && !displayedInCustomTabScreen
- val isBookmark = viewState.bookmark != null
- addBookmarksMenuItem.label {
- context.getString(if (isBookmark) R.string.editBookmarkMenuTitle else R.string.addBookmarkMenuTitle)
- }
- addBookmarksMenuItem.setIcon(if (isBookmark) drawable.ic_bookmark_solid_16 else drawable.ic_bookmark_16)
-
- fireproofWebsiteMenuItem.isVisible = viewState.canFireproofSite && !displayedInCustomTabScreen
- fireproofWebsiteMenuItem.label {
- context.getString(
- if (viewState.isFireproofWebsite) {
- R.string.fireproofWebsiteMenuTitleRemove
- } else {
- R.string.fireproofWebsiteMenuTitleAdd
- },
- )
- }
- fireproofWebsiteMenuItem.setIcon(if (viewState.isFireproofWebsite) drawable.ic_fire_16 else drawable.ic_fireproof_solid_16)
-
- createAliasMenuItem.isVisible = viewState.isEmailSignedIn && !displayedInCustomTabScreen
-
- changeBrowserModeMenuItem.isVisible = viewState.canChangeBrowsingMode
- changeBrowserModeMenuItem.label {
- context.getString(
- if (viewState.isDesktopBrowsingMode) {
- R.string.requestMobileSiteMenuTitle
- } else {
- R.string.requestDesktopSiteMenuTitle
- },
- )
- }
- changeBrowserModeMenuItem.setIcon(
- if (viewState.isDesktopBrowsingMode) drawable.ic_device_mobile_16 else drawable.ic_device_desktop_16,
- )
-
- openInAppMenuItem.isVisible = viewState.previousAppLink != null
- findInPageMenuItem.isVisible = viewState.canFindInPage
- addToHomeMenuItem.isVisible = viewState.addToHomeVisible && viewState.addToHomeEnabled && !displayedInCustomTabScreen
- privacyProtectionMenuItem.isVisible = viewState.canChangePrivacyProtection
- privacyProtectionMenuItem.label {
- context
- .getText(
- if (viewState.isPrivacyProtectionDisabled) {
- R.string.enablePrivacyProtection
- } else {
- R.string.disablePrivacyProtection
- },
- ).toString()
- }
- privacyProtectionMenuItem.setIcon(
- if (viewState.isPrivacyProtectionDisabled) drawable.ic_shield_16 else drawable.ic_shield_disabled_16,
- )
- brokenSiteMenuItem.isVisible = viewState.canReportSite && !displayedInCustomTabScreen
-
- siteOptionsMenuDivider.isVisible = viewState.browserShowing && !displayedInCustomTabScreen
- browserOptionsMenuDivider.isVisible = viewState.browserShowing && !displayedInCustomTabScreen
- settingsMenuDivider.isVisible = viewState.browserShowing && !displayedInCustomTabScreen
- printPageMenuItem.isVisible = viewState.canPrintPage && !displayedInCustomTabScreen
- autofillMenuItem.isVisible = viewState.showAutofill && !displayedInCustomTabScreen
-
- openInDdgBrowserMenuItem.isVisible = displayedInCustomTabScreen
- customTabsMenuDivider.isVisible = displayedInCustomTabScreen
- runningInDdgBrowserMenuItem.isVisible = displayedInCustomTabScreen
- overrideForSSlError(viewState, displayedInCustomTabScreen)
- }
-
- private fun overrideForSSlError(
- viewState: BrowserViewState,
- displayedInCustomTabScreen: Boolean,
- ) {
- if (viewState.sslError != NONE && !displayedInCustomTabScreen) {
- newTabMenuItem.isVisible = true
- siteOptionsMenuDivider.isVisible = true
- }
- }
-
- private fun configureVpnMenuItem(
- viewState: BrowserViewState,
- browserShowing: Boolean,
- displayedInCustomTabScreen: Boolean,
- ) {
- // Only show VPN menu item in new tab page overflow menu
- val shouldShowVpnMenuItem = !browserShowing && !displayedInCustomTabScreen
-
- when (viewState.vpnMenuState) {
- VpnMenuState.Hidden -> {
- vpnMenuItem.isVisible = false
- }
- VpnMenuState.NotSubscribed -> {
- vpnMenuItem.isVisible = shouldShowVpnMenuItem
- if (shouldShowVpnMenuItem) {
- val (tryForFreePill, statusIndicator, menuItemView) = getVpnMenuViews()
- configureVpnMenuItemForNotSubscribed(tryForFreePill, statusIndicator, menuItemView)
- }
- }
- VpnMenuState.NotSubscribedNoPill -> {
- vpnMenuItem.isVisible = shouldShowVpnMenuItem
- if (shouldShowVpnMenuItem) {
- val (tryForFreePill, statusIndicator, menuItemView) = getVpnMenuViews()
- configureVpnMenuItemForNotSubscribedNoPill(tryForFreePill, statusIndicator, menuItemView)
- }
- }
- is VpnMenuState.Subscribed -> {
- vpnMenuItem.isVisible = shouldShowVpnMenuItem
- if (shouldShowVpnMenuItem) {
- val (tryForFreePill, statusIndicator, menuItemView) = getVpnMenuViews()
- configureVpnMenuItemForSubscribed(tryForFreePill, statusIndicator, menuItemView, viewState.vpnMenuState.isVpnEnabled)
- }
- }
- }
- }
-
- private fun getVpnMenuViews() =
- when (popupMenuResourceType) {
- TOP ->
- Triple(
- topBinding.includeVpnMenuItem.tryForFreePill,
- topBinding.includeVpnMenuItem.statusIndicator,
- topBinding.includeVpnMenuItem.menuItemView,
- )
- BOTTOM ->
- Triple(
- bottomBinding.includeVpnMenuItem.tryForFreePill,
- bottomBinding.includeVpnMenuItem.statusIndicator,
- bottomBinding.includeVpnMenuItem.menuItemView,
- )
- }
-
- private fun configureVpnMenuItemForNotSubscribed(
- tryForFreePill: View,
- statusIndicator: StatusIndicatorView,
- menuItemView: MenuItemView,
- ) {
- tryForFreePill.isVisible = true
- statusIndicator.isVisible = false
- menuItemView.setIcon(drawable.ic_vpn_unlocked_24)
- }
-
- private fun configureVpnMenuItemForNotSubscribedNoPill(
- tryForFreePill: View,
- statusIndicator: StatusIndicatorView,
- menuItemView: MenuItemView,
- ) {
- tryForFreePill.isVisible = false
- statusIndicator.isVisible = false
- menuItemView.setIcon(drawable.ic_vpn_unlocked_24)
- }
-
- private fun configureVpnMenuItemForSubscribed(
- tryForFreePill: View,
- statusIndicator: StatusIndicatorView,
- menuItemView: MenuItemView,
- isVpnEnabled: Boolean,
- ) {
- tryForFreePill.isVisible = false
- statusIndicator.isVisible = true
- statusIndicator.setStatus(isVpnEnabled)
-
- val iconRes = if (isVpnEnabled) drawable.ic_vpn_24 else drawable.ic_vpn_unlocked_24
- menuItemView.setIcon(iconRes)
- }
-
- enum class ResourceType {
- TOP,
- BOTTOM,
- }
-}
diff --git a/app/src/main/java/com/duckduckgo/app/browser/menu/VpnMenuStateProvider.kt b/app/src/main/java/com/duckduckgo/app/browser/menu/VpnMenuStateProvider.kt
index f3fa53abce4c..8f99750a7bf5 100644
--- a/app/src/main/java/com/duckduckgo/app/browser/menu/VpnMenuStateProvider.kt
+++ b/app/src/main/java/com/duckduckgo/app/browser/menu/VpnMenuStateProvider.kt
@@ -16,8 +16,8 @@
package com.duckduckgo.app.browser.menu
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.networkprotection.api.NetworkProtectionState
diff --git a/app/src/main/java/com/duckduckgo/app/browser/viewstate/BrowserViewState.kt b/app/src/main/java/com/duckduckgo/app/browser/viewstate/BrowserViewState.kt
index 20338ca872ce..a76d56f3af1f 100644
--- a/app/src/main/java/com/duckduckgo/app/browser/viewstate/BrowserViewState.kt
+++ b/app/src/main/java/com/duckduckgo/app/browser/viewstate/BrowserViewState.kt
@@ -21,6 +21,7 @@ import com.duckduckgo.app.browser.SpecialUrlDetector
import com.duckduckgo.app.browser.WebViewErrorResponse
import com.duckduckgo.app.browser.omnibar.QueryOrigin
import com.duckduckgo.app.global.model.MaliciousSiteStatus
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import com.duckduckgo.privacyprotectionspopup.api.PrivacyProtectionsPopupViewState
import com.duckduckgo.savedsites.api.models.SavedSite
@@ -63,18 +64,6 @@ data class BrowserViewState(
val vpnMenuState: VpnMenuState = VpnMenuState.Hidden,
)
-sealed class VpnMenuState {
- data object Hidden : VpnMenuState()
-
- data object NotSubscribed : VpnMenuState()
-
- data object NotSubscribedNoPill : VpnMenuState()
-
- data class Subscribed(
- val isVpnEnabled: Boolean,
- ) : VpnMenuState()
-}
-
sealed class HighlightableButton {
data class Visible(
val enabled: Boolean = true,
diff --git a/app/src/main/res/layout/view_menu_item_duck_chat.xml b/app/src/main/res/layout/view_menu_item_duck_chat.xml
deleted file mode 100644
index 073b21d8b58f..000000000000
--- a/app/src/main/res/layout/view_menu_item_duck_chat.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 4b93981e0bd3..c3d5ef92d876 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -47,17 +47,12 @@
Търсене или въвеждане на URL адрес
Изчистване на въведеното търсене
Няма инсталирано съвместимо приложение
- Добави отметка
- Редактиране на отметка
+
Добавяне в любими
Премахване от любими
Добавено в любими
Добавена е отметка
- Сайт на работния плот
- Премахване на огнеустойчивост
- Мобилна версия на сайта
Изтеглени файлове
- Отпечатване на страницата
Премахнато от любими
Премахната огнеустойчивост
Защитата на поверителността е активирана за %1$s
@@ -76,11 +71,9 @@
Опции
Споделяне на връзка
- Споделяне
Копиране на адреса на връзката
- Намери в страницата
Намери следващ
Намери предишен
Затваряне на изгледа за търсене в страницата
@@ -256,7 +249,7 @@
Няма предложения
- Подаване на сигнал за повреден сайт
+
Защитите за този сайт са ВКЛЮЧЕНИ
Защитите за този сайт са ИЗКЛЮЧЕНИ
@@ -279,7 +272,7 @@
Търсене и Duck.ai
- Добавете към Начална Страница
+
Готово! %1$s е добавен към началния екран.
@@ -485,8 +478,6 @@
Незащитени сайтове
- Активиране на защита на поверителността
- Деактивиране на защита на поверителността
Още опции за незащитен сайт %1$s
Сигурни ли сте, че искате да премахнете <b>%1$s</b> от незащитените сайтове?
Към тези сайтове няма да бъде приложена защита на поверителността.
@@ -585,11 +576,9 @@
Можете да отворите тази връзка в %1$s.
Можете да отворите тази връзка в други приложения.
Отваряне с
- Отваряне в приложението
Новият адрес е копиран в клипборда
- Генериране на Duck Address
Преглед
@@ -760,10 +749,6 @@
Паролата е запазена
Паролата е актуализирана
-
- Отваряне в DuckDuckGo
- Работи в DuckDuckGo
-
Предупреждение: Този сайт може да не е сигурен
Сертификатът за този сайт е невалиден. Възможно е да се свързвате със сървър, който се представя за <b>%1$s</b>, което може да изложи поверителната Ви информация на риск.
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 0e9957812ef6..58d05345c243 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -47,17 +47,12 @@
Vyhledat nebo zadat URL
Vymazat vyhledávací vstup
Nebyla nainstalována žádná kompatibilní aplikace
- Přidat záložku
- Upravit záložku
+
Přidat oblíbené
Odebrat oblíbenou položku
Oblíbené položky uloženy
Záložka přidána
- Verze pro počítač
- Odstranit ochranu
- Mobilní režim
Stahování
- Vytisknout stránku
Oblíbená položka odstraněna
Ochrana odstraněna
Ochrana soukromí zapnutá pro %1$s
@@ -78,11 +73,9 @@
Možnosti
Sdílet odkaz
- Sdílet
Kopírovat adresu odkazu
- Vyhledávání na stránce
Najít další
Najít předchozí
Zavřít vyhledání v zobrazení stránky
@@ -258,7 +251,7 @@
Žádné návrhy
- Nahlásit poškozené stránky
+
Na tomhle webu je ochrana ZAPNUTÁ
Na tomhle webu je ochrana VYPNUTÁ
@@ -281,7 +274,7 @@
Vyhledávání a Duck.ai
- Přidat na domovskou obrazovku
+
Podařilo se! %1$s byla přidána na vaši domovskou obrazovku.
@@ -487,8 +480,6 @@
Nechráněné stránky
- Povolit ochranu soukromí
- Zakázat ochranu soukromí
Další možnosti pro nechráněný web %1$s
Opravdu chcete odstranit <b>%1$s</b> z nechráněných stránek?
Tyto stránky nebudou vylepšeny ochranou soukromí.
@@ -587,11 +578,9 @@
Tenhle odkaz můžeš otevřít v aplikaci %1$s.
Tenhle odkaz můžeš otevřít v jiných aplikacích.
Otevřít v aplikaci
- Otevřít v aplikaci
Nová adresa zkopírovaná do vaší schránky
- Vygenerovat adresu Duck
Zobrazit
@@ -788,10 +777,6 @@
Heslo je uložené
Heslo je aktualizované
-
- Otevřít v DuckDuckGo
- Spuštěno v DuckDuckGo
-
Pozor: Tenhle web může být nezabezpečený
Tenhle web nemá platný certifikát. Možná se dokonce připojuješ k serveru, který předstírá, že je %1$s. Tvoje důvěrné informace by mohly být ohrožené.
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 812b94f6a61b..4caeb3e04fe7 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -47,17 +47,12 @@
Søg eller indtast URL
Ryd søgeinput
Ingen kompatibel app installeret
- Tilføj bogmærke
- Rediger bogmærke
+
Tilføj til favorit
Fjern favorit
Favorit tilføjet
Bogmærke tilføjet
- Stationær computer
- Fjern brandsikring
- Mobilwebsted
Downloads
- Udskriv side
Favorit fjernet
Brandsikring fjernet
Beskyttelse af privatlivet aktiveret for %1$s
@@ -76,11 +71,9 @@
Valgmuligheder
Del link
- Del
Kopiér linkadresse
- Find på side
Find næste
Find tidligere
Luk visningen find på side
@@ -256,7 +249,7 @@
Ingen forslag
- Rapporter ødelagt websted
+
Beskyttelse er TIL for dette websted
Beskyttelse er FRA for dette websted
@@ -279,7 +272,7 @@
Søg og Duck.ai
- Tilføj til startskærm
+
Det lykkedes! %1$s er blevet føjet til din startskærm.
@@ -485,8 +478,6 @@
Ubeskyttede websteder
- Aktiver Beskyttelse af privatlivet
- Deaktiver Beskyttelse af privatlivet
Flere indstillinger for ubeskyttet websted %1$s
Er du sikker på, at du vil fjerne <b>%1$s</b> fra ubeskyttede websteder?
Disse websteder vil ikke blive forbedret ved Beskyttelse af privatlivet.
@@ -585,11 +576,9 @@
Du kan åbne dette link i %1$s.
Du kan åbne dette link i andre apps.
Åben med
- Åbn i app
Ny adresse kopieret til din udklipsholder
- Generér Duck-adresse
Se
@@ -760,10 +749,6 @@
Adgangskode gemt
Adgangskode opdateret
-
- Åben i DuckDuckGo
- Kører i DuckDuckGo
-
Advarsel: Denne side kan være usikker
Certifikatet for dette websted er ugyldigt. Du opretter muligvis forbindelse til en server, der foregiver at være %1$s, hvilket kan bringe dine fortrolige oplysninger i fare.
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 3f90f73fbcc7..e176cf6661d5 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -47,17 +47,12 @@
URL eingeben oder suchen
Sucheingabe löschen
Keine kompatible App installiert
- Lesezeichen hinzufügen
- Lesezeichen bearbeiten
+
Favorit hinzufügen
Favorit entfernen
Favorit wurde hinzugefügt
Lesezeichen hinzugefügt
- Desktop-Seite
- Feuerfest-Einstellung deaktivieren
- Mobile Website
Downloads
- Seite drucken
Favorit wurde entfernt
Feuerfest-Einstellung deaktiviert
Datenschutz aktiviert für %1$s
@@ -76,11 +71,9 @@
Optionen
Link teilen
- Teilen
Link-Adresse kopieren
- Auf Seite suchen
Nächstes Ergebnis
Vorheriges Ergebnis
Seitensuchansicht schließen
@@ -256,7 +249,7 @@
Keine Vorschläge
- Fehlerhafte Seite melden
+
Der Schutz ist für diese Website ist AKTIVIERT
Der Schutz für diese Website ist DEAKTIVIERT
@@ -279,7 +272,7 @@
Suche & Duck.ai
- Zum Startbildschirm hinzufügen
+
%1$s wurde erfolgreich zu deinem Startbildschirm hinzugefügt.
@@ -485,8 +478,6 @@
Ungeschützte Websites
- Datenschutz aktivieren
- Datenschutz deaktivieren
Weitere Optionen für die ungeschützte Website %1$s
Möchtest du <b>%1$s</b> wirklich von den ungeschützten Websites entfernen?
Für diese Websites ist der Datenschutz nicht aktiviert.
@@ -585,11 +576,9 @@
Du kannst diesen Link in %1$s öffnen.
Du kannst diesen Link in anderen Apps öffnen.
Öffnen mit
- In App öffnen
Neue Adresse wurde in deine Zwischenablage kopiert
- Duck-Adresse generieren
Ansehen
@@ -760,10 +749,6 @@
Passwort gespeichert
Passwort aktualisiert
-
- In DuckDuckGo öffnen
- Laufen in DuckDuckGo
-
Warnung: Diese Website ist möglicherweise unsicher
Das Zertifikat für diese Website ist ungültig. Möglicherweise stellst du eine Verbindung zu einem Server her, der vorgibt, %1$s zu sein, wodurch deine vertraulichen Daten in Gefahr sein könnten.
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index b0803534d3e0..981b1b7ad229 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -47,17 +47,12 @@
Αναζήτηση ή πληκτρολόγηση διεύθυνσης URL
Εκκαθάριση εισαγωγής αναζήτησης
Δεν υπάρχει εγκατεστημένη συμβατή εφαρμογή
- Προσθήκη σελιδοδείκτη
- Επεξεργασία σελιδοδείκτη
+
Προσθήκη Αγαπημένου
Αφαίρεση αγαπημένου
Προστέθηκε αγαπημένο
Προστέθηκε σελιδοδείκτης
- Ιστότοπος επιφάνειας εργασίας
- Αφαίρεση διαγραφής δραστηριότητας
- Ιστότοπος για κινητά
Λήψεις
- Εκτύπωση σελίδας
Το Αγαπημένο αφαιρέθηκε
Η διαγραφή δραστηριότητας αφαιρέθηκε
Η προστασία απορρήτου ενεργοποιήθηκε για %1$s
@@ -76,11 +71,9 @@
Επιλογές
Κοινή χρήση συνδέσμου
- Κοινή χρήση
Αντιγραφή διεύθυνσης συνδέσμου
- Εύρεση στη σελίδα
Εύρεση επόμενου
Εύρεση προηγούμενου
Κλείσιμο εύρεσης στην προβολή σελίδας
@@ -256,7 +249,7 @@
Δεν υπάρχουν προτάσεις
- Αναφορά κατεστραμμένου ιστότοπου
+
Οι επιλογές προστασίας είναι ΕΝΕΡΓΕΣ για τον συγκεκριμένο ιστότοπο
Οι επιλογές προστασίας είναι ΑΝΕΝΕΡΓΕΣ για τον συγκεκριμένο ιστότοπο
@@ -279,7 +272,7 @@
Αναζήτηση και Duck.ai
- Προσθήκη στην Αρχική Οθόνη
+
Επιτυχία! Το %1$s έχει προστεθεί στην αρχική οθόνη σας.
@@ -485,8 +478,6 @@
Μη προστατευόμενοι ιστότοποι
- Ενεργοποίηση Προστασίας προσωπικών δεδομένων
- Απενεργοποίηση Προστασίας προσωπικών δεδομένων
Περισσότερες επιλογές για τον μη προστατευόμενο ιστότοπο %1$s
Είστε βέβαιοι ότι θέλετε να καταργήσετε το <b>%1$s</b> από τους Μη προστατευόμενους ιστότοπους;
Οι ιστότοποι αυτοί δεν θα ενισχυθούν από την Προστασία προσωπικών δεδομένων.
@@ -585,11 +576,9 @@
Μπορείτε να ανοίξετε τον σύνδεσμο αυτό σε %1$s.
Μπορείτε να ανοίξετε τον σύνδεσμο αυτό σε άλλες εφαρμογές.
Ανοίξτε με
- Ανοίξτε στην εφαρμογή
Έγινε αντιγραφή νέας διεύθυνσης στο πρόχειρό σας
- Δημιουργήστε Duck Address
Προβολή
@@ -760,10 +749,6 @@
Αποθηκευμένος κωδικός πρόσβασης
Ο κωδικός πρόσβασης ενημερώθηκε
-
- Άνοιγμα στο DuckDuckGo
- Εκτέλεση στο DuckDuckGo
-
Προειδοποίηση: Αυτός ο ιστότοπος ενδέχεται να μην είναι ασφαλής
Το πιστοποιητικό για τον ιστότοπο αυτόν δεν είναι έγκυρο. Ίσως συνδέεστε σε διακομιστή που προσποιείται ότι είναι ο τομέας %1$s, γεγονός που θα μπορούσε να θέσει σε κίνδυνο τις εμπιστευτικές πληροφορίες σας.
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 46f6f0e1d976..4d505c4eecd3 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -47,17 +47,12 @@
Buscar o escribir la URL
Borrar búsqueda
No hay ninguna aplicación compatible instalada
- Añadir marcador
- Editar marcador
+
Añadir favorito
Eliminar favorito
Favorito añadido
Marcador añadido
- Versión de escritorio del sitio web
- Desactivar a prueba de fuego
- Sitio móvil
Descargas
- Imprimir página
Favorito eliminado
A prueba de fuego desactivado
Protección de privacidad activada para %1$s
@@ -76,11 +71,9 @@
Opciones
Compartir enlace
- Compartir
Copiar dirección de enlace
- Buscar en la página
Buscar siguiente
Buscar anterior
Cerrar búsqueda en la vista de página
@@ -256,7 +249,7 @@
No hay sugerencias
- Informar de sitio web dañado
+
Las protecciones están ACTIVADAS para este sitio
Las protecciones están DESACTIVADAS para este sitio
@@ -279,7 +272,7 @@
Búsqueda y Duck.ai
- Añadir a la Pantalla de Inicio
+
%1$s se ha añadido a tu pantalla de inicio correctamente.
@@ -485,8 +478,6 @@
Sitios no protegidos
- Activar la protección de privacidad
- Desactivar la protección de privacidad
Más opciones para el sitio no protegido %1$s
¿Seguro que quieres eliminar <b>%1$s</b> de los sitios desprotegidos?
La protección de privacidad está deshabilitada para estos sitios.
@@ -585,11 +576,9 @@
Puedes abrir este enlace en %1$s.
Puedes abrir este enlace en otras aplicaciones.
Abrir con
- Abrir en la aplicación
Nueva dirección copiada en el portapapeles
- Generar Duck Address
Ver
@@ -760,10 +749,6 @@
Contraseña guardada
Contraseña actualizada
-
- Abrir en DuckDuckGo
- Ejecutar en DuckDuckGo
-
Advertencia: este sitio puede ser inseguro
El certificado de este sitio no es válido. Puede que te estés conectando a un servidor que se hace pasar por %1$s, lo que podría poner en riesgo tu información confidencial.
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index 4e8b6af15c94..7837257f4279 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -47,17 +47,12 @@
Otsige või tippige URL
Tühjenda otsingusisend
Ühtegi ühilduvat rakendust pole installitud
- Lisa järjehoidja
- Redigeeri järjehoidjat
+
Lisa lemmik
Eemalda lemmik
Lemmik lisatud
Järjehoidja lisatud
- Töölaua sait
- Eemalda tulekindlus
- Mobiilisait
Allalaadimised
- Prindi leht
Lemmik on eemaldatud
Tulekindlus on eemaldatud
Privaatsuskaitse on domeeni %1$s jaoks lubatud
@@ -76,11 +71,9 @@
Valikud
Jaga linki
- Jaga
Kopeeri lingi aadress
- Otsi lehel
Otsi järgmine
Otsi eelmine
Sulge lehe vaates otsimine
@@ -256,7 +249,7 @@
Ettepanekud puuduvad
- Teatage katkisest saidist
+
Sellel saidil on kaitsefunktsioonid SISSE lülitatud
Sellel saidil on kaitsefunktsioonid VÄLJA lülitatud
@@ -279,7 +272,7 @@
Otsing ja Duck.ai
- Lisa kodukuvale
+
Õnnestus! %1$s lisati teie avaekraanile.
@@ -485,8 +478,6 @@
Kaitseta saidid
- Luba privaatsuse kaitse
- Keela privaatsuse kaitse
Rohkem võimalusi kaitseta saidi %1$s jaoks
Oled kindel, et soovid eemaldada <b>%1$s</b> kaisteta saitide hulgast?
Nendele saitidele ei laiene privaatsuse kaitse.
@@ -585,11 +576,9 @@
Selle lingi saab avada rakenduses %1$s.
Selle lingi saab avada teistes rakendustes.
Ava rakendusega
- Ava rakenduses
Uus aadress kopeeriti teie lõikelauale
- Loo Duck Address
Kuva
@@ -760,10 +749,6 @@
Parool salvestatud
Parool uuendatud
-
- Ava saidil DuckDuckGo
- DuckDuckGo-s käivitamine
-
Hoiatus: see sait võib olla ebaturvaline
Selle saidi sertifikaat on vale. Võimalik, et lood ühenduse serveriga, mis teeskleb olevat %1$s ja see võib sinu konfidentsiaalse teabe ohtu seada.
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index abc564ae9580..69e5e2e5808e 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -47,17 +47,12 @@
Hae tai kirjoita URL
Tyhjennä hakusyöte
Yhteensopivaa sovellusta ei ole asennettu
- Lisää kirjanmerkki
- Muokkaa kirjanmerkkiä
+
Lisää suosikki
Poista suosikki
Suosikki lisätty
Kirjanmerkki lisätty
- Pöytäkonesivusto
- Poista palonkestävyys
- Mobiilisivusto
Lataukset
- Tulosta sivu
Suosikki poistettu
Palonkestävyys poistettu
Yksityisyyden suoja käytössä: %1$s
@@ -76,11 +71,9 @@
Valinnat
Jaa linkki
- Jaa
Kopioi linkin osoite
- Etsi sivulta
Etsi seuraava
Etsi edellinen
Sulje etsi sivulta -näkymä
@@ -256,7 +249,7 @@
Ei ehdotuksia
- Ilmoita viallisesta sivustosta
+
Tämän sivuston suojaukset ovat KÄYTÖSSÄ
Tämän sivuston suojaukset ovat POIS KÄYTÖSTÄ
@@ -279,7 +272,7 @@
Haku ja Duck.ai
- Lisää kotinäytölle
+
Onnistui! %1$s on lisätty aloitusnäytöllesi.
@@ -485,8 +478,6 @@
Suojaamattomat sivustot
- Ota yksityisyyden suoja käyttöön
- Poista yksityisyyden suoja käytöstä
Lisää valintoja suojaamattomalle sivustolle %1$s
Haluatko varmasti poistaa sivuston <b>%1$s</b> suojaamattomista sivustoista?
Yksityisyyden suoja ei paranna näitä sivustoja.
@@ -585,11 +576,9 @@
Voit avata tämän linkin sovelluksessa %1$s.
Voit avata tämän linkin muissa sovelluksissa.
Avaa sovelluksessa:
- Avaa sovelluksessa
Uusi osoite on kopioitu leikepöydälle
- Luo Duck Address
Näytä
@@ -760,10 +749,6 @@
Salasana tallennettu
Salasana päivitetty
-
- Avaa DuckDuckGo:ssa
- Käynnissä DuckDuckGossa
-
Varoitus: Tämä sivusto ei välttämättä ole turvallinen
Tämän sivuston varmenne on virheellinen. Saatat olla yhteydessä palvelimeen, joka teeskentelee olevansa %1$s, mikä voi vaarantaa luottamukselliset tietosi.
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index b9c1ccabf417..a9ff9cc20f91 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -47,17 +47,12 @@
Effectuer une recherche ou saisir l\'URL
Effacer la recherche
Aucune application compatible installée
- Ajouter un signet
- Modifier le signet
+
Ajouter un favori
Supprimer le favori
Favori ajouté
Signet ajouté
- Site en version bureau
- Désactiver le mode coupe-feu
- Version mobile
Téléchargements
- Imprimer la page
Favori supprimé
Mode coupe-feu désactivé
Protection de la confidentialité activée pour %1$s
@@ -76,11 +71,9 @@
Options
Partager le lien
- Partager
Copier l\'adresse du lien
- Rechercher dans la page
Suivant
Précédent
Fermer la recherche en vue de page
@@ -256,7 +249,7 @@
Aucune suggestion
- Signaler un problème de site
+
Les protections sont ACTIVÉES sur ce site
Les protections sont DÉSACTIVÉES sur ce site
@@ -279,7 +272,7 @@
Recherche et Duck.ai
- Ajouter à la page d\'accueil
+
%1$s a bien été ajouté à votre écran d\'accueil.
@@ -485,8 +478,6 @@
Sites non protégés
- Activer la protection de la confidentialité
- Désactiver la protection de la confidentialité
Plus d\'options pour le site non protégé %1$s
Voulez-vous vraiment retirer <b>%1$s</b> des sites non protégés ?
Les sites suivants ne bénéficient pas de la protection de la confidentialité.
@@ -585,11 +576,9 @@
Vous pouvez ouvrir ce lien dans %1$s.
Vous pouvez ouvrir ce lien dans d\'autres applications.
Ouvrir avec
- Ouvrir dans l\'application
Nouvelle adresse copiée dans le presse-papiers
- Générer une Duck Address
Afficher
@@ -760,10 +749,6 @@
Le mot de passe a été enregistré
Le mot de passe a été modifié
-
- Ouvrir dans DuckDuckGo
- S\'exécute dans DuckDuckGo
-
Avertissement : ce site n\'est peut-être pas sécurisé
Le certificat de ce site n\'est pas valide. Vous vous connectez peut-être à un serveur qui se fait passer pour %1$s, ce qui pourrait mettre vos informations confidentielles en danger.
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index a9b9be96f985..bb62ab703bd8 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -47,17 +47,12 @@
Traži ili upiši URL adresu
Obriši unos pretraživanja
Nije instalirana kompatibilna aplikacija
- Dodaj knjižnu oznaku
- Uredi knjižnu oznaku
+
Dodaj omiljenu stavku
Ukloni omiljeno
Dodano u Omiljeno
Knjižna je oznaka dodana
- Mjesto radne površine
- Ukloni oznaku sigurnog web-mjesta
- Mobilno mrežno mjesto
Preuzimanja
- Ispiši stranicu
Omiljena je stavka uklonjena
Oznaka sigurnog web-mjesta je uklonjena
Zaštita privatnosti omogućena za %1$s
@@ -78,11 +73,9 @@
Opcije
Podijeli poveznicu
- Podijeli
Kopiraj adresu poveznice
- Pronađi na stranici
Pronađi sljedeće
Pronađi prethodno
Zatvori prikaz „Pronađi na stranici”
@@ -258,7 +251,7 @@
Nema prijedloga
- Prijavi neispravno web-mjesto
+
Zaštite su UKLJUČENE za ovu web lokaciju
Zaštite su ISKLJUČENE za ovu web lokaciju
@@ -281,7 +274,7 @@
Pretraživanje i Duck.ai
- Dodaj na početni zaslon
+
Uspjeh! %1$s dodan je na vaš početni zaslon.
@@ -487,8 +480,6 @@
Nezaštićena web-mjesta
- Omogući zaštitu privatnosti
- Onemogući zaštitu privatnosti
Dodatne mogućnosti za nezaštićeno mrežno mjesto %1$s
Jesi li siguran/na da želiš ukloniti <b>%1$s</b> iz nezaštićenih web-mjesta?
Zaštita privatnosti neće poboljšati ova mrežna mjesta.
@@ -587,11 +578,9 @@
Ovu poveznicu možeš otvoriti u %1$s.
Ovu poveznicu možeš otvoriti u drugim aplikacijama.
Otvoriti s aplikacijom
- Otvori u aplikaciji
Nova adresa kopirana je u međuspremnik
- Generiraj Duck Address
Pregled
@@ -788,10 +777,6 @@
Lozinka je spremljena
Lozinka je ažurirana
-
- Otvori u DuckDuckGou
- Izvodi se u DuckDuckGou
-
Upozorenje: ova stranica može biti nesigurna
Certifikat za ovu stranicu nije valjan. Možda se povezuješ s poslužiteljem koji se pretvara da je %1$s, što bi moglo ugroziti tvoje povjerljive podatke.
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 92a315ac967d..4cc896648338 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -47,17 +47,12 @@
Keresés vagy URL beírása
Megadott keresés törlése
Nincs telepítve kompatibilis alkalmazás
- Könyvjelző mentése
- Könyvjelző szerkesztése
+
Kedvenc hozzáadása
Kedvenc eltávolítása
Kedvenc hozzáadva
Könyvjelző hozzáadva
- Weboldal asztali nézete
- Tűzállóság eltávolítása
- Weboldal mobil nézete
Letöltések
- Oldal nyomtatása
Kedvenc eltávolítva
Tűzállóság eltávolítva
Adatvédelem engedélyezve a következőhöz: %1$s
@@ -76,11 +71,9 @@
Opciók
Link megosztása
- Megosztás
Link címének másolása
- Keresés az oldalon
Következő keresése
Előző keresése
Keresés az oldalon nézet bezárása
@@ -256,7 +249,7 @@
Nincs javaslat
- Hibás weboldal bejelentése
+
A védelmek BE vannak kapcsolva ezen a webhelyen
A védelmek KI vannak kapcsolva ezen a webhelyen
@@ -279,7 +272,7 @@
Keresés és Duck.ai
- Hozzáadás a kezdőlaphoz
+
Siker! %1$s hozzáadva a kezdőképernyődhöz.
@@ -485,8 +478,6 @@
Védelem nélküli weboldalak
- Adatvédelem engedélyezése
- Adatvédelem letiltása
További lehetőségek az %1$s védelem nélküli weboldalhoz
Biztosan eltávolítod az <b>%1$s</b> elemet a védelem nélküli weboldalak közül?
Ezeket az oldalakat nem erősíti adatvédelem.
@@ -585,11 +576,9 @@
A hivatkozás a következő alkalmazásban nyitható meg: %1$s.
A hivatkozás más alkalmazásokban nyitható meg.
Megnyitás ezzel:
- Megnyitás az alkalmazásban
Új cím a vágólapra másolva
- Duck-cím létrehozása
Megtekintés
@@ -760,10 +749,6 @@
Jelszó mentve
Jelszó frissítve
-
- Megnyitás DuckDuckGo-ban
- Futtatás a DuckDuckGo-ban
-
Figyelmeztetés: Lehet, hogy ez a webhely nem biztonságos
A webhely tanúsítványa érvénytelen. Előfordulhat, hogy olyan szerverhez csatlakozol, amely megpróbál %1$s címűként viselkedni, veszélybe sodorva ezzel bizalmas adataidat.
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index a13780056fa5..40cc5d822f38 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -47,17 +47,12 @@
Cerca o inserisci URL
Elimina input di ricerca
Nessuna app compatibile installata
- Aggiungi ai segnalibri
- Modifica segnalibro
+
Aggiungi preferito
Rimuovi Preferito
Preferito aggiunto
Segnalibro aggiunto
- Sito desktop
- Rimuovi protezione dal fuoco
- Sito per dispositivi mobili
Download
- Stampa pagina
Preferito rimosso
Protezione dal fuoco rimossa
Tutela della privacy attivata per %1$s
@@ -76,11 +71,9 @@
Opzioni
Condividi link
- Condividi
Copia l\'indirizzo del link
- Trova nella pagina
Trova successivo
Trova precedente
Esci dalla vista Trova nella pagina
@@ -256,7 +249,7 @@
Nessun suggerimento
- Segnala sito danneggiato
+
Le protezioni sono ATTIVE per questo sito
Le protezioni sono DISATTIVATE per questo sito
@@ -279,7 +272,7 @@
Cerca e Duck.ai
- Aggiungi alla Schermata Home
+
Azione completa. %1$s è stato aggiunto alla schermata principale.
@@ -485,8 +478,6 @@
Siti non protetti
- Attiva la tutela della privacy
- Disattiva la tutela della privacy
Altre opzioni per il sito non protetto %1$s
Confermi di voler rimuovere <b>%1$s</b> dai siti non protetti?
Questi siti non saranno ottimizzati dalla tutela della privacy.
@@ -585,11 +576,9 @@
Puoi aprire questo link in %1$s.
Puoi aprire questo link in altre app.
Apri con
- Apri nell\'app
Nuovo indirizzo copiato negli appunti
- Genera Duck Address
Visualizza
@@ -760,10 +749,6 @@
Password salvata
Password aggiornata
-
- Apri in DuckDuckGo
- Esecuzione in DuckDuckGo
-
Attenzione: questo sito potrebbe non essere sicuro
Il certificato di questo sito non è valido. Potresti collegarti a un server che finge di essere %1$s e che potrebbe mettere a rischio le tue informazioni riservate.
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 0a6687a240fc..0765ad8fe077 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -47,17 +47,12 @@
Ieškoti arba įvesti URL
Išvalyti paieškos įvestį
Neįdiegta suderinama programa
- Pridėti žymę
- Redaguoti žymę
+
Pridėti mėgstamą
Šalinti mėgstamą
Mėgstamas pridėtas
Žymė pridėta
- Darbalaukio svetainė
- Šalinti apsaugą
- Mobilioji svetainė
Atsisiuntimai
- Spausdinti puslapį
Mėgstamas pašalintas
Apsauga pašalinta
Privatumo apsauga įjungta dėl %1$s
@@ -78,11 +73,9 @@
Parinktys
Bendrinti nuorodą
- Bendrinti
Kopijuoti nuorodos adresą
- Rasti puslapyje
Rasti kitą
Rasti ankstesnį
Uždaryti paiešką puslapio peržiūroje
@@ -258,7 +251,7 @@
Pasiūlymų nėra
- Pranešti apie neveikiančią svetainę
+
Šios svetainės apsaugos priemonės yra ĮJUNGTOS
Šios svetainės apsaugos priemonės yra IŠJUNGTOS
@@ -281,7 +274,7 @@
Paieška ir „Duck.ai“
- Pridėti prie pagrindinio ekrano
+
Pavyko! %1$s pridėtas prie jūsų pagrindinio ekrano.
@@ -487,8 +480,6 @@
Neapsaugotos svetainės
- Įjungti privatumo apsaugą
- Išjungti privatumo apsaugą
Daugiau neapsaugotos svetainės %1$s parinkčių
Ar tikrai norite pašalinti <b>%1$s</b> iš neapsaugotų svetainių sąrašo?
Šių svetainių nepatobulins privatumo apsauga.
@@ -587,11 +578,9 @@
Galite atverti šią nuorodą %1$s.
Galite atidaryti šią nuorodą kitose programėlėse.
Atidaryti
- Atidaryti programėlėje
Naujas adresas nukopijuotas į jūsų iškarpinę
- Sukurkite „Duck“ adresą
Peržiūrėti
@@ -788,10 +777,6 @@
Slaptažodis išsaugotas
Slaptažodis atnaujintas
-
- Atidaryti „DuckDuckGo“
- Veikia sistemoje „DuckDuckGo“
-
Įspėjimas: ši svetainė gali būti nesaugi
Šios svetainės sertifikatas negalioja. Galbūt jungiatės prie serverio, kuris apsimeta %1$s, o tai gali kelti pavojų jūsų konfidencialiai informacijai.
diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml
index a3a896641808..af8bb6ab34a7 100644
--- a/app/src/main/res/values-lv/strings.xml
+++ b/app/src/main/res/values-lv/strings.xml
@@ -47,17 +47,12 @@
Meklē vai ieraksti URL
Notīrīt meklēšanas ievadi
Nav instalēta saderīga lietotne
- Pievienot grāmatzīmi
- Rediģēt grāmatzīmi
+
Pievienot izlases vienumu
Noņemt izlasi
Izlases vienums ir pievienots
Pievienota grāmatzīme
- Darbvirsmas vietne
- Noņemt ugunsdrošību
- Mobilā vietne
Lejupielādes
- Drukāt lapu
Izlase ir noņemta
Ugunsdrošība noņemta
Iespējota %1$s privātuma aizsardzība
@@ -77,11 +72,9 @@
Opcijas
Kopīgot saiti
- Kopīgot
Kopēt saites adresi
- Atrast lapā
Atrast nākamo
Atrast iepriekšējo
Aizvērt atrašanas lapā skatu
@@ -257,7 +250,7 @@
Nav ieteikumu
- Ziņot par bojātu vietni
+
Aizsardzība šai vietnei ir IESLĒGTA
Aizsardzība šai vietnei ir IZSLĒGTA
@@ -280,7 +273,7 @@
Meklēšana un Duck.ai
- Pievienot sākuma ekrānam
+
Izdevās! %1$s ir pievienots tavam sākuma ekrānam.
@@ -486,8 +479,6 @@
Neaizsargātas vietnes
- Iespējot privātuma aizsardzību
- Atspējot privātuma aizsardzību
Citas opcijas neaizsargātai vietnei %1$s
Vai tiešām vēlies noņemt <b>%1$s</b> no neaizsargātām vietnēm?
Šīs vietnes netiks uzlabotas ar privātuma aizsardzību.
@@ -586,11 +577,9 @@
Tu vari atvērt šo saiti ar %1$s.
Tu vari atvērt šo saiti citās lietotnēs.
Atvērt ar
- Atvērt lietotnē
Jaunā adrese tika iekopēta tavā starpliktuvē
- Izveidot Duck adresi
Skatīt
@@ -774,10 +763,6 @@
Parole saglabāta
Parole atjaunināta
-
- Atvērt vietnē DuckDuckGo
- Darbojas programmā DuckDuckGo
-
Brīdinājums: šī vietne var būt nedroša
Šīs vietnes sertifikāts nav derīgs. Tu, iespējams, izveido savienojumu ar serveri, kas izliekas par %1$s un var pakļaut riskam tavu konfidenciālo informāciju.
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 87021c3961d3..51bce0d37b63 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -47,17 +47,12 @@
Søk eller skriv URL
Tøm søkefeltet
Ingen kompatibel app installert
- Legg til bokmerke
- Rediger bokmerke
+
Legg til favoritt
Fjern favoritt
Favoritt lagt til
Bokmerke lagt til
- Skrivebordversjon
- Fjern brannsikring
- Mobilversjon
Nedlastinger
- Skriv ut siden
Favoritt er fjernet
Brannsikring fjernet
Personvern aktivert for %1$s
@@ -76,11 +71,9 @@
Alternativer
Del lenke
- Del
Kopier lenke
- Finn på side
Finn neste
Finn forrige
Lukk finn-på-side-visning
@@ -256,7 +249,7 @@
Ingen forslag
- Rapporter nettstedfeil
+
Beskyttelse er PÅ for dette nettstedet
Beskyttelse er AV for dette nettstedet
@@ -279,7 +272,7 @@
Søk og Duck.ai
- Legg til på startskjermen
+
%1$s er lagt til på startskjermen.
@@ -485,8 +478,6 @@
Ubeskyttede nettsteder
- Aktiver personvernbeskyttelse
- Deaktiver personvernbeskyttelse
Flere alternativer for det ubeskyttede nettstedet %1$s
Er du sikker på at du vil fjerne <b>%1$s</b> fra ubeskyttede nettsteder?
Disse nettstedene blir ikke dekket av personvernbeskyttelse.
@@ -585,11 +576,9 @@
Du kan åpne denne lenken i %1$s.
Du kan åpne denne lenken i andre apper.
Åpne med
- Åpne i appen
Ny adresse kopiert til utklippstavlen
- Generer Duck-adresse
Vis
@@ -760,10 +749,6 @@
Passordet er lagret
Passordet er oppdatert
-
- Åpne i DuckDuckGo
- Kjører i DuckDuckGo
-
Advarsel: Dette nettstedet kan være usikkert
Sertifikatet for dette nettstedet er ugyldig. Det kan være du er koblet til en server som utgir seg for å være %1$s, noe som kan sette konfidensiell informasjon i fare.
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index f31fa603ec74..c28d272b9e9c 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -47,17 +47,12 @@
URL typen of zoeken
Zoekinvoer wissen
Geen compatibele app geïnstalleerd
- Bladwijzer toevoegen
- Bladwijzer bewerken
+
Favoriet toevoegen
Favoriet verwijderen
Favoriet toegevoegd
Bladwijzer toegevoegd
- Desktopsite
- Brandveiligheid uitschakelen
- Mobiele site
Downloads
- Pagina printen
Favoriet verwijderd
Brandveiligheid uitgeschakeld
Privacybescherming ingeschakeld voor %1$s
@@ -76,11 +71,9 @@
Opties
Link delen
- Delen
Adres link kopiëren
- Zoek op pagina
Volgende zoeken
Vorige zoeken
Scherm zoek op pagina sluiten
@@ -256,7 +249,7 @@
Geen suggesties
- Defecte website melden
+
Beveiliging is INGESCHAKELD voor deze website
Beveiliging is UITGESCHAKELD voor deze website
@@ -279,7 +272,7 @@
Zoeken en Duck.ai
- Toevoegen aan Home Screen
+
%1$s is toegevoegd aan je startscherm.
@@ -485,8 +478,6 @@
Onbeschermde sites
- Privacybescherming inschakelen
- Privacybescherming uitschakelen
Meer opties voor onbeschermde site %1$s
Weet je zeker dat je <b>%1$s</b> wilt verwijderen uit onbeschermde sites?
Deze sites worden niet beschermd met Privacybescherming.
@@ -585,11 +576,9 @@
Je kunt deze link openen in %1$s.
Je kunt deze link openen in andere apps.
Openen met
- Openen in de app
Nieuw adres gekopieerd naar je klembord
- Duck Address genereren
Weergeven
@@ -760,10 +749,6 @@
Wachtwoord opgeslagen
Wachtwoord bijgewerkt
-
- Openen in DuckDuckGo
- Uitgevoerd in DuckDuckGo
-
Waarschuwing: Deze website is mogelijk onveilig
Het certificaat voor deze website is ongeldig. Mogelijk maak je verbinding met een server die zich voordoet als %1$s, waardoor je vertrouwelijke informatie in gevaar kan komen.
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index c5f34a8213be..4120d07ce8e3 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -47,17 +47,12 @@
Wyszukaj lub wpisz adres URL
Usuń treść wyszukiwania
Brak kompatybilnej aplikacji
- Dodaj zakładkę
- Edytuj zakładkę
+
Dodaj do Ulubionych
Usuń ulubione
Dodano ulubione
Dodano zakładkę
- Witryna w wersji komputerowej
- Usuń zabezpieczenie
- Witryna mobilna
Pobrane
- Drukuj stronę
Usunięto ulubione
Zabezpieczenie zostało usunięte
Ochrona prywatności włączona dla %1$s
@@ -78,11 +73,9 @@
Opcje
Udostępnij link
- Udostępnij
Skopiuj adres linku
- Znajdź na stronie
Znajdź następny element
Znajdź poprzedni element
Zamknij widok wyszukiwania na stronie
@@ -258,7 +251,7 @@
Brak sugestii
- Zgłoś uszkodzoną witrynę
+
Zabezpieczenia są WŁĄCZONE dla tej witryny
Zabezpieczenia są WYŁĄCZONE dla tej witryny
@@ -281,7 +274,7 @@
Wyszukiwanie i Duck.ai
- Dodaj do ekranu głównego
+
Sukces! %1$s został dodany do Twojego ekranu głównego.
@@ -487,8 +480,6 @@
Niezabezpieczone witryny
- Włącz ochronę prywatności
- Wyłącz ochronę prywatności
Więcej opcji dla niezabezpieczonej witryny %1$s
Na pewno usunąć <b>%1$s</b> z niezabezpieczonych witryn?
Te witryny nie będą ulepszane przez ochronę prywatności.
@@ -587,11 +578,9 @@
Możesz otworzyć ten link w %1$s.
Możesz otworzyć ten link w innych aplikacjach.
Otwórz za pomocą
- Otwórz w aplikacji
Nowy adres skopiowany do schowka
- Wygeneruj Duck Address
Wyświetl
@@ -788,10 +777,6 @@
Hasło zapisane
Zaktualizowano hasło
-
- Otwórz w DuckDuckGo
- Uruchamianie w DuckDuckGo
-
Ostrzeżenie: ta witryna może być niebezpieczna
Certyfikat tej witryny jest nieprawidłowy. Być może łączysz się z serwerem podszywającym się pod %1$s, co może narazić poufne informacje na niebezpieczeństwo.
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index f046bdeaad9e..9fcf62508fdf 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -47,17 +47,12 @@
Pesquisar ou escrever URL
Limpar introdução da pesquisa
Nenhuma aplicação compatível instalada
- Adicionar marcador
- Editar marcador
+
Adicionar favorito
Remover favorito
Favorito adicionado
Favorito adicionado
- Site para computador de secretária
- Remover barreira de segurança
- Site móvel
Transferências
- Imprimir página
Favorito removido
Barreira de segurança removida
Proteção de Privacidade ativada para %1$s
@@ -76,11 +71,9 @@
Opções
Partilhar ligação
- Partilhar
Copiar endereço de ligação
- Encontrar na página
Encontrar seguinte
Encontrar anterior
Fechar a vista de encontrar na página
@@ -256,7 +249,7 @@
Sem sugestões
- Denunciar falha no site
+
As proteções estão ATIVADAS para este site
As proteções estão DESATIVADAS para este site
@@ -279,7 +272,7 @@
Pesquisa e Duck.ai
- Adicionar à Página Inicial
+
Sucesso! %1$s foi adicionado ao seu ecrã inicial.
@@ -485,8 +478,6 @@
Sites desprotegidos
- Ativar Proteção de Privacidade
- Desativar Proteção de Privacidade
Mais opções para o site desprotegido %1$s
Quer mesmo remover <b>%1$s</b> da lista de sites desprotegidos?
Estes sites não serão aprimorados pela Proteção de Privacidade.
@@ -585,11 +576,9 @@
Pode abrir este link em %1$s.
Pode abrir este link noutras aplicações.
Abrir com
- Abrir na app
Novo endereço copiado para a área de transferência
- Gerar Duck Address
Visualizar
@@ -760,10 +749,6 @@
Palavra-passe guardada
Palavra-passe atualizada
-
- Abrir no DuckDuckGo
- Em execução no DuckDuckGo
-
Aviso: este site pode ser inseguro
O certificado deste site é inválido. Podes estar a ligar a um servidor que finge ser %1$s, o que pode colocar as tuas informações confidenciais em risco.
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index c6c537c61401..a7c22ffde5d5 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -47,17 +47,12 @@
Căutare sau tastare URL
Șterge datele introduse pentru căutare
Nicio aplicație compatibilă instalată
- Adaugă marcaj
- Editează marcaj
+
Adaugă favorit
Elimină favoritul
Favorit adăugat
Marcaj adăugat
- Versiune desktop
- Elimină ștergerea activității și istoricului din browser
- Site mobil
Descărcări
- Imprimă pagina
Favorit eliminat
Ștergerea activității și istoricului din browser a fost eliminată
Protecția confidențialității activată pentru %1$s
@@ -77,11 +72,9 @@
Opțiuni
Trimite linkul
- Trimite…
Copiază adresa linkului
- Caută în pagină
Arată rezultatul următor
Arată rezultatul anterior
Închide vizualizarea „caută în pagină”
@@ -257,7 +250,7 @@
Fără sugestii
- Raportează site defect
+
Protecțiile sunt ACTIVATE pentru acest site
Protecțiile sunt DEZACTIVATE pentru acest site
@@ -280,7 +273,7 @@
Caută și pe Duck.ai
- Adaugă pe ecranul de pornire
+
Succes! %1$s a fost adăugat pe ecranul de pornire.
@@ -486,8 +479,6 @@
Site-uri neprotejate
- Activează protecția confidențialității
- Dezactivează protecția confidențialității
Mai multe opțiuni pentru site-ul neprotejat %1$s
Sigur dorești să elimini <b>%1$s</b> din site-urile neprotejate?
Aceste site-uri nu vor fi îmbunătățite de protecția confidențialității.
@@ -586,11 +577,9 @@
Poți deschide acest link în %1$s.
Poți deschide acest link în alte aplicații.
Deschide cu
- Deschide în aplicație
Adresă nouă copiată în clipboard
- Generează Duck Address
Vezi
@@ -774,10 +763,6 @@
Parolă salvată
Parolă actualizată
-
- Deschide în DuckDuckGo
- Redare în DuckDuckGo
-
Avertisment: acest site poate fi nesigur
Certificatul pentru acest site este nevalid. S-ar putea să te conectezi la un server care pretinde a fi %1$s, ceea ce ar putea pune în pericol informațiile tale confidențiale.
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 2f1ed800a8db..e54bb682047a 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -47,17 +47,12 @@
Введите поисковый запрос или адрес сайта
Сбросить поисковый запрос
Совместимое приложение не установлено
- Добавить закладку
- Редактировать закладку
+
Добавить в избранное
Удалить из избранного
Сайт добавлен в избранное
Закладка добавлена
- Полная версия сайта
- Снять огнеупорность
- Мобильная версия
Загрузки
- Печать страницы
Страница удалена из избранного
Огнеупорность снята
Защита конфиденциальности на сайте %1$s включена
@@ -78,11 +73,9 @@
Параметры
Поделиться ссылкой
- Поделиться
Скопировать ссылку
- Найти на странице
Найти следующий
Найти предыдущий
Закрыть окно поиска на странице
@@ -258,7 +251,7 @@
Нет предложений
- Сообщить о неработающем сайте
+
На этом сайте ВКЛЮЧЕНЫ функции защиты
На этом сайте ВЫКЛЮЧЕНЫ функции защиты
@@ -281,7 +274,7 @@
Поиск плюс Duck.ai
- Добавить на домашнюю страницу
+
Готово! Мы добавили %1$s на ваш домашний экран.
@@ -487,8 +480,6 @@
Незащищенные сайты
- Включить защиту конфиденциальности
- Отключить защиту конфиденциальности
Дополнительные параметры для незащищенного сайта %1$s
Вы точно хотите удалить <b>%1$s</b> из списка незащищенных сайтов?
Сайты без защиты конфиденциальности.
@@ -587,11 +578,9 @@
Эту ссылку можно открыть в %1$s.
Эту ссылку можно открыть в других приложениях.
Открыть в
- Открыть в приложении
Новый адрес скопирован в буфер обмена
- Создать адрес Duck
Просмотр
@@ -788,10 +777,6 @@
Пароль сохранен
Пароль обновлен
-
- Открыть в DuckDuckGo
- Выполняется в DuckDuckGo
-
Внимание! Возможно, сайт небезопасен
Сертификат этого сайта недействителен. Возможно, вы пытаетесь подключиться к серверу, который выдает себя за %1$s, что ставит под угрозу вашу конфиденциальную информацию.
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index bb4d5840ac5e..6b27c68ce2a8 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -47,17 +47,12 @@
Vyhľadať alebo zadať webovú adresu
Vymazať hľadaný výraz
Žiadna kompatibilná aplikácia nie je nainštalovaná
- Pridať záložku
- Upraviť záložku
+
Pridať do obľúbených položiek
Odstrániť obľúbenú položku
Obľúbená položka bola pridaná
Záložka je pridaná
- Stránka pre stolové počítače
- Odstrániť zabezpečenie
- Mobilný režim
Stiahnuté
- Tlačiť stranu
Obľúbená položka bola odstránená
Zabezpečenie bolo odstránené
Ochrana súkromia je zapnutá pre %1$s
@@ -78,11 +73,9 @@
Možnosti
Zdieľať odkaz
- Zdieľať
Kopírovať adresu odkazu
- Hľadať na stránke
Hľadať ďalšie
Hľadať predchádzajúce
Zavrieť vyhľadávanie v zobrazení stránky
@@ -258,7 +251,7 @@
Žiadne návrhy
- Nahlásiť nefunkčný web
+
Ochrany pre túto lokalitu sú ZAPNUTÉ
Ochrany pre túto lokalitu sú VYPNUTÉ
@@ -281,7 +274,7 @@
Vyhľadať a Duck.ai
- Pridať na domovskú obrazovku
+
Úspech! Na vašej ploche pribudla položka %1$s.
@@ -487,8 +480,6 @@
Nezabezpečené webové stránky
- Povoliť ochranu súkromia
- Vypnúť ochranu súkromia
Viac možností pre nezabezpečené webové stránky %1$s
Naozaj chcete odstrániť <b>%1$s</b> z nezabezpečených webových stránok?
Tieto webové stránky nebudú rozšírené o ochranu súkromia.
@@ -587,11 +578,9 @@
Tento odkaz môžete otvoriť cez %1$s.
Tento odkaz môžete otvoriť v iných aplikáciách.
Otvoriť cez
- Otvoriť v aplikácii
Nová adresa bola skopírovaná do schránky
- Generovanie adresy Duck
Zobraziť
@@ -788,10 +777,6 @@
Uložené heslo
Aktualizácia hesla
-
- Otvoriť v DuckDuckGo
- Spustené v DuckDuckGo
-
Varovanie: Táto stránka môže byť nezabezpečená
Certifikát pre túto lokalitu je neplatný. Možno sa pripájate k serveru, ktorý predstiera, že je %1$s , čo by mohlo ohroziť vaše dôverné údaje.
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 56ee745ca8e9..1a6c1e23224a 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -47,17 +47,12 @@
Iščite z iskalnikom ali vnesite URL
Počisti vhod iskanja
Ni nameščene združljive aplikacije
- Dodaj zaznamek
- Uredi zaznamek
+
Dodaj priljubljene
Odstrani priljubljene
Priljubljeni dodan
Zaznamek je dodan
- Namizna stran
- Odstrani požarno zaščito
- Mobilna stran
Prenosi
- Natisni stran
Priljubljeni odstranjeni
Požarna zaščita je odstranjena
Zaščita zasebnosti je omogočena za spletno mesto %1$s
@@ -78,11 +73,9 @@
Možnosti
Daj povezavo v skupno rabo
- Deli
Kopiraj naslov povezave
- Najdi na strani
Najdi naslednje
Najdi prejšnje
Zapri iskanje v pogledu strani
@@ -258,7 +251,7 @@
Ni predlogov
- Prijavite poškodovano spletno mesto
+
Zaščite so VKLOPLJENE za to spletno mesto
Zaščite so IZKLOPLJENE za to spletno mesto
@@ -281,7 +274,7 @@
Iskanje in Duck.ai
- Dodaj na Domači Zaslon
+
Uspeh! %1$s je dodan na vaš začetni zaslon.
@@ -487,8 +480,6 @@
Nezaščitene strani
- Omogoči zaščito zasebnosti
- Onemogoči zaščito zasebnosti
Več možnosti za nezaščiteno stran %1$s
Ali ste prepričani, da želite odstraniti <b>%1$s</b> z nezaščitenih spletnih strani?
Varnost teh strani se z zaščito zasebnosti ne bo izboljšala.
@@ -587,11 +578,9 @@
To povezavo lahko odprete v %1$s.
To povezavo lahko odprete v drugih aplikacijah.
Odpri z
- Odpri v aplikaciji
Nov naslov je kopiran v odložišče
- Ustvari naslov Duck Address
Oglejte si
@@ -788,10 +777,6 @@
Geslo je shranjeno
Geslo je posodobljeno
-
- Odpri v DuckDuckGo
- Izvaja se v DuckDuckGo
-
Opozorilo: To spletno mesto je morda nevarno
Certifikat za to stran ni veljaven. Morda se povezujete s strežnikom, ki se pretvarja, da je %1$s, kar bi lahko ogrozilo vaše zaupne podatke.
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index c2c15aab4e57..ecc315a2cfd0 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -47,17 +47,12 @@
Sök eller skriv in URL
Rensa sökfältet
Ingen kompatibel app installerad
- Lägg till bokmärke
- Redigera bokmärke
+
Lägg till favorit
Ta bort favorit
Favorit har lagts till
Bokmärke sparat
- Webbplats för dator
- Ta bort brandsäkring
- Webbplats för mobil
Nerladdningar
- Skriv ut sidan
Favorit borttagen
Brandsäkring har tagits bort
Integritetsskydd aktiverat för %1$s
@@ -76,11 +71,9 @@
Alternativ
Dela länk
- Dela
Kopia länkadress
- Hitta på sidan
Hitta nästa
Hitta föregående
Stäng sökning i sidvy
@@ -256,7 +249,7 @@
Inga förslag
- Rapportera skadad webbplats
+
Skydd är PÅ för den här webbplatsen
Skydd är AV för den här webbplatsen
@@ -279,7 +272,7 @@
Sök och Duck.ai
- Lägg till på hemskärmen
+
Klart! %1$s har lagts till på din startsida.
@@ -485,8 +478,6 @@
Oskyddade webbplatser
- Aktivera integritetsskydd
- Inaktivera integritetsskydd
Fler alternativ för den oskyddade webbplatsen %1$s
Är du säker på att du vill ta bort <b>%1$s</b> från de oskyddade webbplatserna?
Dessa webbplatser kommer inte att förbättras av integritetsskydd.
@@ -585,11 +576,9 @@
Du kan öppna den här länken i %1$s.
Du kan öppna den här länken i andra appar.
Öppna med
- Öppna i appen
Ny adress har kopierats till Urklipp
- Generera en Duck-adress
Visa
@@ -760,10 +749,6 @@
Lösenord sparat
Lösenordet har uppdaterats
-
- Öppna i DuckDuckGo
- Körs i DuckDuckGo
-
Varning: Denna webbplats kan vara osäker
Certifikatet för denna webbplats är ogiltigt. Du kanske ansluter till en server som låtsas vara %1$s. Detta kan utgöra en risk för din konfidentiella information.
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index ab2528b45181..4530378f4058 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -47,17 +47,12 @@
Ara ya da URL girin
Arama girişini temizle
Yüklü uyumlu uygulama yok
- Yer İmi ekle
- Yer İşaretini Düzenle
+
Favori Ekle
Favoriyi Kaldır
Favori eklendi
Yer imi eklendi
- Masaüstü Sitesi
- Korumayı Kaldır
- Mobil Site
İndirilenler
- Sayfayı Yazdır
Favori kaldırıldı
Koruma kaldırıldı
%1$s için Gizlilik Koruması etkin
@@ -76,11 +71,9 @@
Seçenekler
Bağlantıyı paylaş
- Paylaş
Bağlantı Adresini Kopyala
- Sayfada bul
Sonrakini bul
Öncekini bul
Sayfa görünümünde bul özelliğini kapat
@@ -256,7 +249,7 @@
Öneri yok
- Hatalı Siteyi Bildirin
+
Bu site için korumalar AÇIK
Bu site için korumalar KAPALI
@@ -279,7 +272,7 @@
Arama ve Duck.ai
- Ana ekrana ekle
+
Başarılı! %1$s ana ekranınıza eklendi.
@@ -485,8 +478,6 @@
Korumasız Siteler
- Gizlilik Korumasını Etkinleştir
- Gizlilik Korumasını Devre Dışı Bırak
Korumasız %1$s sitesi için diğer seçenekler
<b>%1$s</b> sitesini korumasız sitelerden kaldırmak istediğinizden emin misiniz?
Bu siteler için Gizlilik Koruması uygulanmayacaktır.
@@ -585,11 +576,9 @@
Bu bağlantıyı %1$s uygulamasında açabilirsiniz.
Bu bağlantıyı diğer uygulamalarda açabilirsiniz.
Şununla aç:
- Uygulamada Aç
Yeni adres panoya kopyalandı
- Duck Address Oluştur
Görüntüle
@@ -760,10 +749,6 @@
Şifre kaydedildi
Şifre güncellendi
-
- DuckDuckGo\'da aç
- DuckDuckGo\'da Çalışıyor
-
Uyarı: Bu site güvenli olmayabilir
Bu sitenin sertifikası geçersiz. %1$s gibi görünen ve gizli bilgilerinizi riske atabilecek bir sunucuya bağlanıyor olabilirsiniz.
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 0328e79db49a..b20db578dd31 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -16,7 +16,6 @@
0dp
- 280dp
8dp
76dp
136dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6f762de2c677..23a90293df3d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -46,17 +46,12 @@
Search or type URL
Clear search input
No compatible app installed
- Add Bookmark
- Edit Bookmark
+
Add Favorite
Remove Favorite
Favorite added
Bookmark added
- Desktop Site
- Remove Fireproofing
- Mobile Site
Downloads
- Print Page
Favorite removed
Fireproofing removed
Privacy Protection enabled for %1$s
@@ -75,11 +70,9 @@
Options
Share Link
- Share
Copy Link Address
- Find in Page
Find next
Find previous
Close find in page view
@@ -255,7 +248,7 @@
No Suggestions
- Report Broken Site
+
Protections are ON for this site
Protections are OFF for this site
@@ -278,7 +271,7 @@
Search and Duck.ai
- Add to Home Screen
+
Success! %1$s has been added to your home screen.
@@ -484,8 +477,6 @@
Unprotected Sites
- Enable Privacy Protection
- Disable Privacy Protection
More options for unprotected site %1$s
Are you sure you want to remove <b>%1$s</b> from Unprotected Sites?
These sites will not be enhanced by Privacy Protection.
@@ -584,11 +575,9 @@
You can open this link in %1$s.
You can open this link in other apps.
Open with
- Open in App
New address copied to your clipboard
- Generate Duck Address
View
@@ -759,10 +748,6 @@
Password saved
Password updated
-
- Open in DuckDuckGo
- Running in DuckDuckGo
-
Warning: This site may be insecure
The certificate for this site is invalid. You might be connecting to a server that is pretending to be %1$s which could put your confidential information at risk.
diff --git a/app/src/test/java/com/duckduckgo/app/browser/BrowserTabViewModelVpnMenuTest.kt b/app/src/test/java/com/duckduckgo/app/browser/BrowserTabViewModelVpnMenuTest.kt
index ae77f11894b9..8da0f7e929b7 100644
--- a/app/src/test/java/com/duckduckgo/app/browser/BrowserTabViewModelVpnMenuTest.kt
+++ b/app/src/test/java/com/duckduckgo/app/browser/BrowserTabViewModelVpnMenuTest.kt
@@ -21,7 +21,7 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import app.cash.turbine.test
import com.duckduckgo.app.browser.commands.Command
import com.duckduckgo.app.browser.menu.VpnMenuStateProvider
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import com.duckduckgo.common.test.CoroutineTestRule
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runTest
diff --git a/app/src/test/java/com/duckduckgo/app/browser/menu/BrowserPopupMenuVpnTest.kt b/app/src/test/java/com/duckduckgo/app/browser/menu/BrowserPopupMenuVpnTest.kt
index 0acce41851b6..9156bec466be 100644
--- a/app/src/test/java/com/duckduckgo/app/browser/menu/BrowserPopupMenuVpnTest.kt
+++ b/app/src/test/java/com/duckduckgo/app/browser/menu/BrowserPopupMenuVpnTest.kt
@@ -16,7 +16,7 @@
package com.duckduckgo.app.browser.menu
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import org.junit.Assert.assertEquals
import org.junit.Test
diff --git a/app/src/test/java/com/duckduckgo/app/browser/menu/VpnMenuStateProviderTest.kt b/app/src/test/java/com/duckduckgo/app/browser/menu/VpnMenuStateProviderTest.kt
index 55aa4fb59ef3..4ea419cac6fc 100644
--- a/app/src/test/java/com/duckduckgo/app/browser/menu/VpnMenuStateProviderTest.kt
+++ b/app/src/test/java/com/duckduckgo/app/browser/menu/VpnMenuStateProviderTest.kt
@@ -17,8 +17,8 @@
package com.duckduckgo.app.browser.menu
import app.cash.turbine.test
-import com.duckduckgo.app.browser.viewstate.VpnMenuState
import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature
+import com.duckduckgo.browser.ui.browsermenu.VpnMenuState
import com.duckduckgo.common.test.CoroutineTestRule
import com.duckduckgo.feature.toggles.api.Toggle
import com.duckduckgo.networkprotection.api.NetworkProtectionState
diff --git a/browser/browser-ui/src/main/java/com/duckduckgo/browser/ui/browsermenu/BrowserMenu.kt b/browser/browser-ui/src/main/java/com/duckduckgo/browser/ui/browsermenu/BrowserMenu.kt
new file mode 100644
index 000000000000..eef115711381
--- /dev/null
+++ b/browser/browser-ui/src/main/java/com/duckduckgo/browser/ui/browsermenu/BrowserMenu.kt
@@ -0,0 +1,521 @@
+/*
+ * Copyright (c) 2022 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.browser.ui.browsermenu
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.LinearLayout
+import androidx.core.view.children
+import androidx.core.view.isVisible
+import com.duckduckgo.app.browser.omnibar.OmnibarType
+import com.duckduckgo.browser.ui.R
+import com.duckduckgo.browser.ui.databinding.PopupWindowBrowserMenuBinding
+import com.duckduckgo.browser.ui.databinding.PopupWindowBrowserMenuBottomBinding
+import com.duckduckgo.common.ui.menu.PopupMenu
+import com.duckduckgo.common.ui.view.MenuItemView
+import com.duckduckgo.common.ui.view.StatusIndicatorView
+import com.duckduckgo.common.ui.view.gone
+import com.duckduckgo.mobile.android.R.drawable
+
+class BrowserMenu(
+ private val context: Context,
+ layoutInflater: LayoutInflater,
+ private val omnibarType: OmnibarType,
+) : PopupMenu(
+ layoutInflater,
+ resourceId = if (omnibarType == OmnibarType.SINGLE_BOTTOM) R.layout.popup_window_browser_menu_bottom else R.layout.popup_window_browser_menu,
+ width = context.resources.getDimensionPixelSize(R.dimen.browserPopupMenuWidth),
+) {
+ private val topBinding = PopupWindowBrowserMenuBinding.bind(contentView)
+ private val bottomBinding = PopupWindowBrowserMenuBottomBinding.bind(contentView)
+
+ init {
+ contentView =
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.root
+ else -> topBinding.root
+ }
+ }
+
+ val backMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.backMenuItem
+ else -> topBinding.backMenuItem
+ }
+ }
+
+ val forwardMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.forwardMenuItem
+ else -> topBinding.forwardMenuItem
+ }
+ }
+
+ val refreshMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.refreshMenuItem
+ else -> topBinding.refreshMenuItem
+ }
+ }
+
+ val printPageMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.printPageMenuItem
+ else -> topBinding.printPageMenuItem
+ }
+ }
+
+ val newTabMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.newTabMenuItem
+ else -> topBinding.newTabMenuItem
+ }
+ }
+
+ val defaultBrowserMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.includeDefaultBrowserMenuItem.defaultBrowserMenuItem
+ else -> topBinding.includeDefaultBrowserMenuItem.defaultBrowserMenuItem
+ }
+ }
+
+ val vpnMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.includeVpnMenuItem.vpnMenuItem
+ else -> topBinding.includeVpnMenuItem.vpnMenuItem
+ }
+ }
+
+ val duckChatMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.includeDuckChatMenuItem
+ else -> topBinding.includeDuckChatMenuItem
+ }
+ }
+
+ val sharePageMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.sharePageMenuItem
+ else -> topBinding.sharePageMenuItem
+ }
+ }
+
+ val bookmarksMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.bookmarksMenuItem
+ else -> topBinding.bookmarksMenuItem
+ }
+ }
+
+ val downloadsMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.downloadsMenuItem
+ else -> topBinding.downloadsMenuItem
+ }
+ }
+
+ val settingsMenuItem: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.settingsMenuItem
+ else -> topBinding.settingsMenuItem
+ }
+ }
+
+ val addBookmarksMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.addBookmarksMenuItem
+ else -> topBinding.addBookmarksMenuItem
+ }
+ }
+
+ val fireproofWebsiteMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.fireproofWebsiteMenuItem
+ else -> topBinding.fireproofWebsiteMenuItem
+ }
+ }
+
+ val createAliasMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.createAliasMenuItem
+ else -> topBinding.createAliasMenuItem
+ }
+ }
+
+ val changeBrowserModeMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.changeBrowserModeMenuItem
+ else -> topBinding.changeBrowserModeMenuItem
+ }
+ }
+
+ val openInAppMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.openInAppMenuItem
+ else -> topBinding.openInAppMenuItem
+ }
+ }
+
+ val findInPageMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.findInPageMenuItem
+ else -> topBinding.findInPageMenuItem
+ }
+ }
+
+ val addToHomeMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.addToHomeMenuItem
+ else -> topBinding.addToHomeMenuItem
+ }
+ }
+
+ val privacyProtectionMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.privacyProtectionMenuItem
+ else -> topBinding.privacyProtectionMenuItem
+ }
+ }
+
+ val brokenSiteMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.brokenSiteMenuItem
+ else -> topBinding.brokenSiteMenuItem
+ }
+ }
+
+ val autofillMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.autofillMenuItem
+ else -> topBinding.autofillMenuItem
+ }
+ }
+
+ val runningInDdgBrowserMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.runningInDdgBrowserMenuItem
+ else -> topBinding.runningInDdgBrowserMenuItem
+ }
+ }
+
+ val siteOptionsMenuDivider: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.siteOptionsMenuDivider
+ else -> topBinding.siteOptionsMenuDivider
+ }
+ }
+
+ val browserOptionsMenuDivider: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.browserOptionsMenuDivider
+ else -> topBinding.browserOptionsMenuDivider
+ }
+ }
+
+ val settingsMenuDivider: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.settingsMenuDivider
+ else -> topBinding.settingsMenuDivider
+ }
+ }
+
+ val customTabsMenuDivider: View by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.customTabsMenuDivider
+ else -> topBinding.customTabsMenuDivider
+ }
+ }
+
+ val openInDdgBrowserMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.openInDdgBrowserMenuItem
+ else -> topBinding.openInDdgBrowserMenuItem
+ }
+ }
+
+ private val menuItemsContainer: LinearLayout by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.menuItemsContainer
+ else -> topBinding.menuItemsContainer
+ }
+ }
+
+ val duckNewChatMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.newChatMenuItem
+ else -> topBinding.newChatMenuItem
+ }
+ }
+
+ val duckChatHistoryMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.chatHistoryMenuItem
+ else -> topBinding.chatHistoryMenuItem
+ }
+ }
+
+ val duckChatSettingsMenuItem: MenuItemView by lazy {
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> bottomBinding.chatSettings
+ else -> topBinding.chatSettings
+ }
+ }
+
+ fun render(viewState: BrowserMenuViewState) {
+ hideAllMenuItems()
+ when (viewState) {
+ is BrowserMenuViewState.Browser -> renderBrowserMenu(viewState)
+ is BrowserMenuViewState.CustomTabs -> renderCustomTabsMenu(viewState)
+ is BrowserMenuViewState.NewTabPage -> renderNewTabPageMenu(viewState)
+ is BrowserMenuViewState.DuckAi -> renderDuckAIMenu(viewState)
+ }
+ }
+
+ private fun hideAllMenuItems() {
+ menuItemsContainer.children.forEach { menuItem ->
+ menuItem.gone()
+ }
+ }
+
+ /**
+ * These are items available across all browser types
+ */
+ private fun showCommonItems() {
+ bookmarksMenuItem.isVisible = true
+ downloadsMenuItem.isVisible = true
+ settingsMenuItem.isVisible = true
+ }
+
+ private fun renderBrowserMenu(viewState: BrowserMenuViewState.Browser) {
+ showCommonItems()
+ backMenuItem.isEnabled = viewState.canGoBack
+ forwardMenuItem.isEnabled = viewState.canGoForward
+ refreshMenuItem.isEnabled = true
+ printPageMenuItem.isEnabled = true
+
+ newTabMenuItem.isVisible = true
+ duckChatMenuItem.isVisible = viewState.showDuckChatOption
+ sharePageMenuItem.isVisible = viewState.canSharePage
+
+ defaultBrowserMenuItem.isVisible = viewState.showSelectDefaultBrowserMenuItem
+
+ addBookmarksMenuItem.isVisible = viewState.canSaveSite
+ addBookmarksMenuItem.label {
+ context.getString(if (viewState.isBookmark) R.string.browserMenuEditBookmark else R.string.browserMenuAddBookmark)
+ }
+ addBookmarksMenuItem.setIcon(if (viewState.isBookmark) drawable.ic_bookmark_solid_16 else drawable.ic_bookmark_16)
+
+ fireproofWebsiteMenuItem.isVisible = viewState.canFireproofSite
+ fireproofWebsiteMenuItem.label {
+ context.getString(
+ if (viewState.isFireproofWebsite) {
+ R.string.browserMenuRemoveFireproofing
+ } else {
+ R.string.browserMenuFireproofSite
+ },
+ )
+ }
+ fireproofWebsiteMenuItem.setIcon(if (viewState.isFireproofWebsite) drawable.ic_fire_16 else drawable.ic_fireproof_solid_16)
+
+ createAliasMenuItem.isVisible = viewState.isEmailSignedIn
+
+ changeBrowserModeMenuItem.isVisible = viewState.canChangeBrowsingMode
+ changeBrowserModeMenuItem.label {
+ context.getString(
+ if (viewState.isDesktopBrowsingMode) {
+ R.string.browserMenuMobileSite
+ } else {
+ R.string.browserMenuDesktopSite
+ },
+ )
+ }
+ changeBrowserModeMenuItem.setIcon(
+ if (viewState.isDesktopBrowsingMode) drawable.ic_device_mobile_16 else drawable.ic_device_desktop_16,
+ )
+
+ openInAppMenuItem.isVisible = viewState.hasPreviousAppLink
+ findInPageMenuItem.isVisible = viewState.canFindInPage
+ addToHomeMenuItem.isVisible = viewState.addToHomeVisible && viewState.addToHomeEnabled
+ privacyProtectionMenuItem.isVisible = viewState.canChangePrivacyProtection
+ privacyProtectionMenuItem.label {
+ context
+ .getText(
+ if (viewState.isPrivacyProtectionDisabled) {
+ R.string.browserMenuEnablePrivacyProtection
+ } else {
+ R.string.browserMenuDisablePrivacyProtection
+ },
+ ).toString()
+ }
+ privacyProtectionMenuItem.setIcon(
+ if (viewState.isPrivacyProtectionDisabled) drawable.ic_shield_16 else drawable.ic_shield_disabled_16,
+ )
+ brokenSiteMenuItem.isVisible = viewState.canReportSite
+
+ siteOptionsMenuDivider.isVisible = true
+ browserOptionsMenuDivider.isVisible = true
+ settingsMenuDivider.isVisible = true
+ printPageMenuItem.isVisible = viewState.canPrintPage
+ autofillMenuItem.isVisible = viewState.showAutofill
+
+ vpnMenuItem.isVisible = false
+
+ openInDdgBrowserMenuItem.isVisible = false
+ customTabsMenuDivider.isVisible = false
+ runningInDdgBrowserMenuItem.isVisible = false
+
+ if (viewState.isSSLError) {
+ newTabMenuItem.isVisible = true
+ siteOptionsMenuDivider.isVisible = true
+ }
+ }
+
+ private fun renderCustomTabsMenu(viewState: BrowserMenuViewState.CustomTabs) {
+ backMenuItem.isEnabled = viewState.canGoBack
+ forwardMenuItem.isEnabled = viewState.canGoForward
+
+ refreshMenuItem.isEnabled = true
+ printPageMenuItem.isEnabled = true
+
+ sharePageMenuItem.isVisible = viewState.canSharePage
+ findInPageMenuItem.isVisible = viewState.canFindInPage
+
+ changeBrowserModeMenuItem.isVisible = viewState.canChangeBrowsingMode
+ changeBrowserModeMenuItem.label {
+ context.getString(
+ if (viewState.isDesktopBrowsingMode) {
+ R.string.browserMenuMobileSite
+ } else {
+ R.string.browserMenuDesktopSite
+ },
+ )
+ }
+
+ privacyProtectionMenuItem.isVisible = viewState.canChangePrivacyProtection
+ privacyProtectionMenuItem.label {
+ context
+ .getText(
+ if (viewState.isPrivacyProtectionDisabled) {
+ R.string.browserMenuEnablePrivacyProtection
+ } else {
+ R.string.browserMenuDisablePrivacyProtection
+ },
+ ).toString()
+ }
+ privacyProtectionMenuItem.setIcon(
+ if (viewState.isPrivacyProtectionDisabled) drawable.ic_shield_16 else drawable.ic_shield_disabled_16,
+ )
+
+ openInDdgBrowserMenuItem.isVisible = true
+ customTabsMenuDivider.isVisible = true
+ runningInDdgBrowserMenuItem.isVisible = true
+ }
+
+ private fun renderNewTabPageMenu(viewState: BrowserMenuViewState.NewTabPage) {
+ showCommonItems()
+
+ backMenuItem.isEnabled = false
+ forwardMenuItem.isEnabled = false
+ refreshMenuItem.isEnabled = false
+
+ newTabMenuItem.isVisible = true
+ duckChatMenuItem.isVisible = viewState.showDuckChatOption
+ autofillMenuItem.isVisible = viewState.showAutofill
+
+ when (viewState.vpnMenuState) {
+ VpnMenuState.Hidden -> {
+ vpnMenuItem.isVisible = false
+ }
+ VpnMenuState.NotSubscribed -> {
+ vpnMenuItem.isVisible = true
+ val (tryForFreePill, statusIndicator, menuItemView) = getVpnMenuViews()
+ configureVpnMenuItemForNotSubscribed(tryForFreePill, statusIndicator, menuItemView)
+ }
+ VpnMenuState.NotSubscribedNoPill -> {
+ vpnMenuItem.isVisible = true
+ val (tryForFreePill, statusIndicator, menuItemView) = getVpnMenuViews()
+ configureVpnMenuItemForNotSubscribedNoPill(tryForFreePill, statusIndicator, menuItemView)
+ }
+ is VpnMenuState.Subscribed -> {
+ vpnMenuItem.isVisible = true
+ val (tryForFreePill, statusIndicator, menuItemView) = getVpnMenuViews()
+ configureVpnMenuItemForSubscribed(tryForFreePill, statusIndicator, menuItemView, viewState.vpnMenuState.isVpnEnabled)
+ }
+ }
+ }
+
+ private fun renderDuckAIMenu(viewState: BrowserMenuViewState.DuckAi) {
+ brokenSiteMenuItem.isVisible = viewState.canReportSite
+ printPageMenuItem.isVisible = viewState.canPrintPage
+ duckChatHistoryMenuItem.isVisible = true
+ duckChatSettingsMenuItem.isVisible = true
+ duckNewChatMenuItem.isVisible = true
+ }
+
+ private fun getVpnMenuViews() =
+ when (omnibarType) {
+ OmnibarType.SINGLE_BOTTOM -> {
+ Triple(
+ bottomBinding.includeVpnMenuItem.tryForFreePill,
+ bottomBinding.includeVpnMenuItem.statusIndicator,
+ bottomBinding.includeVpnMenuItem.menuItemView,
+ )
+ }
+
+ else ->
+ Triple(
+ topBinding.includeVpnMenuItem.tryForFreePill,
+ topBinding.includeVpnMenuItem.statusIndicator,
+ topBinding.includeVpnMenuItem.menuItemView,
+ )
+ }
+
+ private fun configureVpnMenuItemForNotSubscribed(
+ tryForFreePill: View,
+ statusIndicator: StatusIndicatorView,
+ menuItemView: MenuItemView,
+ ) {
+ tryForFreePill.isVisible = true
+ statusIndicator.isVisible = false
+ menuItemView.setIcon(drawable.ic_vpn_unlocked_24)
+ }
+
+ private fun configureVpnMenuItemForNotSubscribedNoPill(
+ tryForFreePill: View,
+ statusIndicator: StatusIndicatorView,
+ menuItemView: MenuItemView,
+ ) {
+ tryForFreePill.isVisible = false
+ statusIndicator.isVisible = false
+ menuItemView.setIcon(drawable.ic_vpn_unlocked_24)
+ }
+
+ private fun configureVpnMenuItemForSubscribed(
+ tryForFreePill: View,
+ statusIndicator: StatusIndicatorView,
+ menuItemView: MenuItemView,
+ isVpnEnabled: Boolean,
+ ) {
+ tryForFreePill.isVisible = false
+ statusIndicator.isVisible = true
+ statusIndicator.setStatus(isVpnEnabled)
+
+ val iconRes = if (isVpnEnabled) drawable.ic_vpn_24 else drawable.ic_vpn_unlocked_24
+ menuItemView.setIcon(iconRes)
+ }
+}
diff --git a/browser/browser-ui/src/main/java/com/duckduckgo/browser/ui/browsermenu/BrowserMenuViewState.kt b/browser/browser-ui/src/main/java/com/duckduckgo/browser/ui/browsermenu/BrowserMenuViewState.kt
new file mode 100644
index 000000000000..1f5745940157
--- /dev/null
+++ b/browser/browser-ui/src/main/java/com/duckduckgo/browser/ui/browsermenu/BrowserMenuViewState.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2025 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.browser.ui.browsermenu
+
+sealed class BrowserMenuViewState {
+
+ data class Browser(
+ val canGoBack: Boolean = false,
+ val canGoForward: Boolean = false,
+ val showDuckChatOption: Boolean = false,
+ val canSharePage: Boolean = false,
+ val showSelectDefaultBrowserMenuItem: Boolean = false,
+ val canSaveSite: Boolean = false,
+ val isBookmark: Boolean = false,
+ val canFireproofSite: Boolean = false,
+ val isFireproofWebsite: Boolean = false,
+ val isEmailSignedIn: Boolean = false,
+ val canChangeBrowsingMode: Boolean = false,
+ val isDesktopBrowsingMode: Boolean = false,
+ val hasPreviousAppLink: Boolean = false,
+ val canFindInPage: Boolean = false,
+ val addToHomeVisible: Boolean = false,
+ val addToHomeEnabled: Boolean = false,
+ val canChangePrivacyProtection: Boolean = false,
+ val isPrivacyProtectionDisabled: Boolean = false,
+ val canReportSite: Boolean = false,
+ val showAutofill: Boolean = false,
+ val isSSLError: Boolean = false,
+ val canPrintPage: Boolean = false,
+
+ ) : BrowserMenuViewState()
+ data class CustomTabs(
+ val canGoBack: Boolean = false,
+ val canGoForward: Boolean = false,
+ val canSharePage: Boolean = false,
+ val canChangeBrowsingMode: Boolean = false,
+ val isDesktopBrowsingMode: Boolean = false,
+ val canFindInPage: Boolean = true,
+ val canChangePrivacyProtection: Boolean = false,
+ val isPrivacyProtectionDisabled: Boolean = false,
+ ) : BrowserMenuViewState()
+ data class NewTabPage(
+ val showDuckChatOption: Boolean = false,
+ val vpnMenuState: VpnMenuState = VpnMenuState.Hidden,
+ val showAutofill: Boolean = false,
+ ) : BrowserMenuViewState()
+ data class DuckAi(
+ val canPrintPage: Boolean = false,
+ val canReportSite: Boolean = false,
+ ) : BrowserMenuViewState()
+}
+
+sealed class VpnMenuState {
+ data object Hidden : VpnMenuState()
+
+ data object NotSubscribed : VpnMenuState()
+
+ data object NotSubscribedNoPill : VpnMenuState()
+
+ data class Subscribed(
+ val isVpnEnabled: Boolean,
+ ) : VpnMenuState()
+}
diff --git a/browser/browser-ui/src/main/res/drawable/background_default_browser_menu_item.xml b/browser/browser-ui/src/main/res/drawable/background_default_browser_menu_item.xml
new file mode 100644
index 000000000000..dca46e662950
--- /dev/null
+++ b/browser/browser-ui/src/main/res/drawable/background_default_browser_menu_item.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/drawable/ic_ai_chat_add_16.xml b/browser/browser-ui/src/main/res/drawable/ic_ai_chat_add_16.xml
new file mode 100644
index 000000000000..b3efff21c4e5
--- /dev/null
+++ b/browser/browser-ui/src/main/res/drawable/ic_ai_chat_add_16.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/browser/browser-ui/src/main/res/drawable/ic_history_16.xml b/browser/browser-ui/src/main/res/drawable/ic_history_16.xml
new file mode 100644
index 000000000000..92cf277b9be4
--- /dev/null
+++ b/browser/browser-ui/src/main/res/drawable/ic_history_16.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/browser/browser-ui/src/main/res/drawable/ic_settings_ai_16.xml b/browser/browser-ui/src/main/res/drawable/ic_settings_ai_16.xml
new file mode 100644
index 000000000000..d57f28f83eb2
--- /dev/null
+++ b/browser/browser-ui/src/main/res/drawable/ic_settings_ai_16.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/popup_window_browser_menu.xml b/browser/browser-ui/src/main/res/layout/popup_window_browser_menu.xml
similarity index 78%
rename from app/src/main/res/layout/popup_window_browser_menu.xml
rename to browser/browser-ui/src/main/res/layout/popup_window_browser_menu.xml
index bc7c68f90c9f..ddd8d9b5b401 100644
--- a/app/src/main/res/layout/popup_window_browser_menu.xml
+++ b/browser/browser-ui/src/main/res/layout/popup_window_browser_menu.xml
@@ -38,7 +38,7 @@
android:id="@+id/backMenuItem"
style="@style/Widget.DuckDuckGo.NavigationalIcon"
android:layout_marginStart="@dimen/keyline_4"
- android:contentDescription="@string/back"
+ android:contentDescription="@string/browserMenuBack"
app:srcCompat="@drawable/ic_arrow_left_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -47,7 +47,7 @@
+
+
+
+
+ app:primaryText="@string/browserMenuNewTab" />
-
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:iconDrawable="@drawable/ic_ai_chat_16"
+ app:primaryText="@string/browserMenuDuckChat" />
+ app:primaryText="@string/browserMenuShare" />
+ app:primaryText="@string/browserMenuAddBookmark" />
+ app:primaryText="@string/browserMenuBookmarks" />
+ app:primaryText="@string/browserMenuFireproofSite" />
+ app:primaryText="@string/browserMenuEmailAlias" />
+ app:primaryText="@string/browserMenuDesktopSite" />
+ app:primaryText="@string/browserMenuFindInPage" />
+ app:primaryText="@string/browserMenuPrint" />
+ app:primaryText="@string/browserMenuOpenAppLink" />
+ app:primaryText="@string/browserMenuAddToHome" />
+ app:primaryText="@string/browserMenuEnablePrivacyProtection" />
+ app:primaryText="@string/browserMenuReportBrokenSite" />
+ app:primaryText="@string/browserMenuAutofill" />
+ app:primaryText="@string/browserMenuDownloads" />
+ app:primaryText="@string/browserMenuSettings" />
+
+
+ app:primaryText="@string/browserMenuOpenInDDG" />
+ app:primaryText="@string/browserMenuRunningInDDG" />
diff --git a/app/src/main/res/layout/popup_window_browser_menu_bottom.xml b/browser/browser-ui/src/main/res/layout/popup_window_browser_menu_bottom.xml
similarity index 78%
rename from app/src/main/res/layout/popup_window_browser_menu_bottom.xml
rename to browser/browser-ui/src/main/res/layout/popup_window_browser_menu_bottom.xml
index 006826ca35bd..ee0152d625cf 100644
--- a/app/src/main/res/layout/popup_window_browser_menu_bottom.xml
+++ b/browser/browser-ui/src/main/res/layout/popup_window_browser_menu_bottom.xml
@@ -33,21 +33,41 @@
android:paddingTop="@dimen/keyline_2">
+
+
+
+
+ app:primaryText="@string/browserMenuNewTab" />
-
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:iconDrawable="@drawable/ic_ai_chat_16"
+ app:primaryText="@string/browserMenuDuckChat" />
+ app:primaryText="@string/browserMenuShare" />
+ app:primaryText="@string/browserMenuAddBookmark" />
+ app:primaryText="@string/browserMenuBookmarks" />
+ app:primaryText="@string/browserMenuFireproofSite" />
+ app:primaryText="@string/browserMenuEmailAlias" />
+ app:primaryText="@string/browserMenuDesktopSite" />
+ app:primaryText="@string/browserMenuFindInPage" />
+ app:primaryText="@string/browserMenuPrint" />
+ app:primaryText="@string/browserMenuOpenAppLink" />
+ app:primaryText="@string/browserMenuAddToHome" />
+ app:primaryText="@string/browserMenuEnablePrivacyProtection" />
+ app:primaryText="@string/browserMenuReportBrokenSite" />
+ app:primaryText="@string/browserMenuAutofill" />
+ app:primaryText="@string/browserMenuDownloads" />
+ app:primaryText="@string/browserMenuSettings" />
+
+
+ app:primaryText="@string/browserMenuOpenInDDG" />
+ app:primaryText="@string/browserMenuRunningInDDG" />
@@ -232,7 +260,7 @@
android:id="@+id/backMenuItem"
style="@style/Widget.DuckDuckGo.NavigationalIcon"
android:layout_marginStart="@dimen/keyline_4"
- android:contentDescription="@string/back"
+ android:contentDescription="@string/browserMenuBack"
app:srcCompat="@drawable/ic_arrow_left_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -241,7 +269,7 @@
+
+
+
+
+ Премахване на огнеустойчивост
+ Отметки
+ Добави отметка
+ Редактиране на отметка
+ Направи този сайт огнеустойчив
+ Мобилна версия на сайта
+ Сайт на работния плот
+ Активиране на защита на поверителността
+ Деактивиране на защита на поверителността
+ Нов раздел
+ Duck.ai
+ Споделяне
+ Генериране на Duck Address
+ Намери в страницата
+ Отпечатване на страницата
+ Отваряне в приложението
+ Добавете към Начална Страница
+ Подаване на сигнал за повреден сайт
+ Пароли
+ Изтеглени файлове
+ Настройки
+ Отваряне в DuckDuckGo
+ Работи в DuckDuckGo
+ Задаване като браузър по подразбиране
+ Нов чат
+ История на чата
+ Настройки на Duck.ai
+ VPN
+
+
+ Обратно
+ Напред
+ Опресняване
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-bg/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-bg/strings-input-mode.xml
index f932371f766f..7ee8722df16b 100644
--- a/browser/browser-ui/src/main/res/values-bg/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-bg/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Odstranit ochranu
+ Záložky
+ Přidat záložku
+ Upravit záložku
+ Ochránit tento web
+ Mobilní režim
+ Verze pro počítač
+ Povolit ochranu soukromí
+ Zakázat ochranu soukromí
+ Nová karta
+ Duck.ai
+ Sdílet
+ Vygenerovat adresu Duck
+ Vyhledávání na stránce
+ Vytisknout stránku
+ Otevřít v aplikaci
+ Přidat na domovskou obrazovku
+ Nahlásit nefunkční webové stránky
+ Hesla
+ Stahování
+ Nastavení
+ Otevřít v DuckDuckGo
+ Spuštěno v DuckDuckGo
+ Nastavit jako výchozí prohlížeč
+ Nový chat
+ Historie chatu
+ Nastavení Duck.ai
+ VPN
+
+
+ Zpět
+ Dopředu
+ Obnovit
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-cs/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-cs/strings-input-mode.xml
index a9e06628815f..2dfeffdd2883 100644
--- a/browser/browser-ui/src/main/res/values-cs/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-cs/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Fjern brandsikring
+ Bogmærker
+ Tilføj bogmærke
+ Rediger bogmærke
+ Gør dette websted brandsikkert
+ Mobilwebsted
+ Stationær computer
+ Aktiver Beskyttelse af privatlivet
+ Deaktiver Beskyttelse af privatlivet
+ Ny fane
+ Duck.ai
+ Del
+ Generér Duck-adresse
+ Find på side
+ Udskriv side
+ Åbn i app
+ Tilføj til startskærm
+ Rapporter ødelagt websted
+ Adgangskoder
+ Downloads
+ Indstillinger
+ Åben i DuckDuckGo
+ Kører i DuckDuckGo
+ Angiv som standardbrowser
+ Ny chat
+ Chathistorik
+ Duck.ai-indstillinger
+ VPN
+
+
+ Tilbage
+ Frem
+ Opdater
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-da/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-da/strings-input-mode.xml
index 3bed47900996..efc45f82db95 100644
--- a/browser/browser-ui/src/main/res/values-da/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-da/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Feuerfest-Einstellung deaktivieren
+ Lesezeichen
+ Lesezeichen hinzufügen
+ Lesezeichen bearbeiten
+ Diese Website feuerfest machen
+ Mobile Website
+ Desktop-Seite
+ Datenschutz aktivieren
+ Datenschutz deaktivieren
+ Neuer Tab
+ Duck.ai
+ Teilen
+ Duck-Adresse generieren
+ Auf Seite suchen
+ Seite drucken
+ In App öffnen
+ Zum Startbildschirm hinzufügen
+ Fehlerhafte Seite melden
+ Passwörter
+ Downloads
+ Einstellungen
+ In DuckDuckGo öffnen
+ Laufen in DuckDuckGo
+ Als Standard-Browser festlegen
+ Neuer Chat
+ Chatverlauf
+ Duck.ai-Einstellungen
+ VPN
+
+
+ Zurück
+ Weiter
+ Aktualisieren
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-de/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-de/strings-input-mode.xml
index d14e10ded754..257d92b86158 100644
--- a/browser/browser-ui/src/main/res/values-de/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-de/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Αφαίρεση διαγραφής δραστηριότητας
+ Σελιδοδείκτες
+ Προσθήκη σελιδοδείκτη
+ Επεξεργασία σελιδοδείκτη
+ Διαγράψτε τη δραστηριότητα γι\' αυτόν τον ιστότοπο
+ Ιστότοπος για κινητά
+ Ιστότοπος επιφάνειας εργασίας
+ Ενεργοποίηση Προστασίας προσωπικών δεδομένων
+ Απενεργοποίηση Προστασίας προσωπικών δεδομένων
+ Νέα καρτέλα
+ Duck.ai
+ Κοινή χρήση
+ Δημιουργήστε Duck Address
+ Εύρεση στη σελίδα
+ Εκτύπωση σελίδας
+ Ανοίξτε στην εφαρμογή
+ Προσθήκη στην Αρχική Οθόνη
+ Αναφορά ιστότοπου που δεν λειτουργεί
+ Κωδικοί πρόσβασης
+ Λήψεις
+ Ρυθμίσεις
+ Άνοιγμα στο DuckDuckGo
+ Εκτέλεση στο DuckDuckGo
+ Ορισμός ως προεπιλεγμένο πρόγραμμα περιήγησης
+ Νέα συνομιλία
+ Ιστορικό συνομιλίας
+ Ρυθμίσεις Duck.ai
+ VPN
+
+
+ Πίσω
+ Εμπρός
+ Ανανέωση
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-el/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-el/strings-input-mode.xml
index 81866f86c927..1d688b89b60e 100644
--- a/browser/browser-ui/src/main/res/values-el/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-el/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Desactivar a prueba de fuego
+ Marcadores
+ Añadir marcador
+ Editar marcador
+ Activar a prueba de fuego para este sitio
+ Sitio móvil
+ Versión de escritorio del sitio web
+ Activar la protección de privacidad
+ Desactivar la protección de privacidad
+ Nueva pestaña
+ Duck.ai
+ Compartir
+ Generar Duck Address
+ Buscar en la página
+ Imprimir página
+ Abrir en la aplicación
+ Añadir a la Pantalla de Inicio
+ Informar de sitio web dañado
+ Contraseñas
+ Descargas
+ Ajustes
+ Abrir en DuckDuckGo
+ Ejecutar en DuckDuckGo
+ Definir como navegador predeterminado
+ Nuevo chat
+ Historial de chat
+ Configuración de Duck.ai
+ VPN
+
+
+ Volver
+ Avanzar
+ Actualizar
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-es/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-es/strings-input-mode.xml
index d4d928945666..90bb7c4e201c 100644
--- a/browser/browser-ui/src/main/res/values-es/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-es/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Eemalda tulekindlus
+ Järjehoidjad
+ Lisa järjehoidja
+ Redigeeri järjehoidjat
+ Muuda see sait tulekindlaks
+ Mobiilisait
+ Töölaua sait
+ Luba privaatsuse kaitse
+ Keela privaatsuse kaitse
+ Uus vaheleht
+ Duck.ai
+ Jaga
+ Loo Duck Address
+ Otsi lehel
+ Prindi leht
+ Ava rakenduses
+ Lisa kodukuvale
+ Teata mittetoimivast saidist
+ Paroolid
+ Allalaadimised
+ Sätted
+ Ava saidil DuckDuckGo
+ DuckDuckGo-s käivitamine
+ Määrake vaikebrauseriks
+ Uus vestlus
+ Vestluse ajalugu
+ Duck.ai seaded
+ VPN
+
+
+ Tagasi
+ Edasi
+ Värskenda
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-et/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-et/strings-input-mode.xml
index e84e2b03d054..13a41f56635b 100644
--- a/browser/browser-ui/src/main/res/values-et/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-et/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Poista palonkestävyys
+ Kirjanmerkit
+ Lisää kirjanmerkki
+ Muokkaa kirjanmerkkiä
+ Tee sivustosta palonkestäviä
+ Mobiilisivusto
+ Pöytäkonesivusto
+ Ota yksityisyyden suoja käyttöön
+ Poista yksityisyyden suoja käytöstä
+ Uusi välilehti
+ Duck.ai
+ Jaa
+ Luo Duck Address
+ Etsi sivulta
+ Tulosta sivu
+ Avaa sovelluksessa
+ Lisää kotinäytölle
+ Ilmoita viallisesta sivustosta
+ Salasanat
+ Lataukset
+ Asetukset
+ Avaa DuckDuckGo:ssa
+ Käynnissä DuckDuckGossa
+ Aseta oletusselaimeksi
+ Uusi keskustelu
+ Keskusteluhistoria
+ Duck.ai-asetukset
+ VPN
+
+
+ Takaisin
+ Eteenpäin
+ Päivitä
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-fi/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-fi/strings-input-mode.xml
index 78a8169c0637..52c8907eed1c 100644
--- a/browser/browser-ui/src/main/res/values-fi/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-fi/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Désactiver le mode coupe-feu
+ Signets
+ Ajouter un signet
+ Modifier le signet
+ Activer le mode coupe-feu pour ce site
+ Version mobile
+ Site en version bureau
+ Activer la protection de la confidentialité
+ Désactiver la protection de la confidentialité
+ Nouvel onglet
+ Duck.ai
+ Partager
+ Générer une Duck Address
+ Rechercher dans la page
+ Imprimer la page
+ Ouvrir dans l\'application
+ Ajouter à la page d\'accueil
+ Signaler un problème de site
+ Mots de passe
+ Téléchargements
+ Paramètres
+ Ouvrir dans DuckDuckGo
+ S\'exécute dans DuckDuckGo
+ Définir comme navigateur par défaut
+ Nouvelle discussion
+ Historique des chats
+ Paramètres Duck.ai
+ VPN
+
+
+ Retour
+ Avancer
+ Actualiser
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-fr/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-fr/strings-input-mode.xml
index 7d38129c6380..2ec73632a7ed 100644
--- a/browser/browser-ui/src/main/res/values-fr/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-fr/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Ukloni oznaku sigurnog web-mjesta
+ Knjižne oznake
+ Dodaj knjižnu oznaku
+ Uredi knjižnu oznaku
+ Uključi oznaku da je ovo web-mjesto sigurno
+ Mobilno mrežno mjesto
+ Mjesto radne površine
+ Omogući zaštitu privatnosti
+ Onemogući zaštitu privatnosti
+ Nova kartica
+ Duck.ai
+ Podijeli
+ Generiraj Duck Address
+ Pronađi na stranici
+ Ispiši stranicu
+ Otvori u aplikaciji
+ Dodaj na početni zaslon
+ Prijavi neispravno web-mjesto
+ Lozinke
+ Preuzimanja
+ Postavke
+ Otvori u DuckDuckGou
+ Izvodi se u DuckDuckGou
+ Postavi kao zadani preglednik
+ Novo čavrljanje
+ Povijest čavrljanja
+ Postavke usluge Duck.ai
+ VPN
+
+
+ Natrag
+ Naprijed
+ Osvježi
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-hr/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-hr/strings-input-mode.xml
index d5415d279757..5fd62806028f 100644
--- a/browser/browser-ui/src/main/res/values-hr/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-hr/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Tűzállóság eltávolítása
+ Könyvjelzők
+ Könyvjelző mentése
+ Könyvjelző szerkesztése
+ Weboldal tűzállóvá tétele
+ Weboldal mobil nézete
+ Weboldal asztali nézete
+ Adatvédelem engedélyezése
+ Adatvédelem letiltása
+ Új lap
+ Duck.ai
+ Megosztás
+ Duck-cím létrehozása
+ Keresés az oldalon
+ Oldal nyomtatása
+ Megnyitás az alkalmazásban
+ Hozzáadás a kezdőlaphoz
+ Hibás weboldal jelentése
+ Jelszavak
+ Letöltések
+ Beállítások
+ Megnyitás DuckDuckGo-ban
+ Futtatás a DuckDuckGo-ban
+ Beállítás alapértelmezett böngészőként
+ Új csevegés
+ Csevegési előzmények
+ A Duck.ai beállításai
+ VPN
+
+
+ Vissza
+ Előre
+ Frissítés
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-hu/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-hu/strings-input-mode.xml
index 7512c499798d..97d4e279c4ce 100644
--- a/browser/browser-ui/src/main/res/values-hu/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-hu/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Rimuovi protezione dal fuoco
+ Segnalibri
+ Aggiungi ai segnalibri
+ Modifica segnalibro
+ Proteggi questo sito dal fuoco
+ Sito per dispositivi mobili
+ Sito desktop
+ Attiva la tutela della privacy
+ Disattiva la tutela della privacy
+ Nuova scheda
+ Duck.ai
+ Condividi
+ Genera Duck Address
+ Trova nella pagina
+ Stampa pagina
+ Apri nell\'app
+ Aggiungi alla Schermata Home
+ Segnala sito danneggiato
+ Password
+ Download
+ Impostazioni
+ Apri in DuckDuckGo
+ Esecuzione in DuckDuckGo
+ Imposta come Browser predefinito
+ Nuova Chat
+ Cronologia chat
+ Impostazioni di Duck.ai
+ VPN
+
+
+ Indietro
+ Avanti
+ Aggiorna
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-it/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-it/strings-input-mode.xml
index ade7ee4c8e92..b49884f2e1f1 100644
--- a/browser/browser-ui/src/main/res/values-it/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-it/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Šalinti apsaugą
+ Žymės
+ Pridėti žymę
+ Redaguoti žymę
+ Apsaugoti šią svetainę
+ Mobilioji svetainė
+ Darbalaukio svetainė
+ Įjungti privatumo apsaugą
+ Išjungti privatumo apsaugą
+ Nauja kortelė
+ Duck.ai
+ Bendrinti
+ Sukurkite „Duck“ adresą
+ Rasti puslapyje
+ Spausdinti puslapį
+ Atidaryti programėlėje
+ Pridėti prie pagrindinio ekrano
+ Pranešti apie sugadintą svetainę
+ Slaptažodžiai
+ Atsisiuntimai
+ Nustatymai
+ Atidaryti „DuckDuckGo“
+ Veikia sistemoje „DuckDuckGo“
+ Nustatyti kaip numatytąją naršyklę
+ Naujas pokalbis
+ Pokalbių istorija
+ „Duck.ai“ nustatymai
+ VPN
+
+
+ Atgal
+ Pirmyn
+ Atnaujinti
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-lt/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-lt/strings-input-mode.xml
index f7bc7f128197..c3dcaa44af91 100644
--- a/browser/browser-ui/src/main/res/values-lt/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-lt/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Noņemt ugunsdrošību
+ Grāmatzīmes
+ Pievienot grāmatzīmi
+ Rediģēt grāmatzīmi
+ Padarīt šo vietni ugunsdrošu
+ Mobilā vietne
+ Darbvirsmas vietne
+ Iespējot privātuma aizsardzību
+ Atspējot privātuma aizsardzību
+ Jauna cilne
+ Duck.ai
+ Kopīgot
+ Izveidot Duck adresi
+ Atrast lapā
+ Drukāt lapu
+ Atvērt lietotnē
+ Pievienot sākuma ekrānam
+ Ziņot par bojātu vietni
+ Paroles
+ Lejupielādes
+ Iestatījumi
+ Atvērt vietnē DuckDuckGo
+ Darbojas programmā DuckDuckGo
+ Iestatīt kā noklusējuma pārlūku
+ Jauna tērzēšanas saruna
+ Tērzēšanas sarunu vēsture
+ Duck.ai iestatījumi
+ VPN
+
+
+ Atpakaļ
+ Uz priekšu
+ Atsvaidzināt
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-lv/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-lv/strings-input-mode.xml
index 67d5e1656c7b..1941df82b5f4 100644
--- a/browser/browser-ui/src/main/res/values-lv/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-lv/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Fjern brannsikring
+ Bokmerker
+ Legg til bokmerke
+ Rediger bokmerke
+ Brannsikre denne siden
+ Mobilversjon
+ Skrivebordversjon
+ Aktiver personvernbeskyttelse
+ Deaktiver personvernbeskyttelse
+ Ny fane
+ Duck.ai
+ Del
+ Generer Duck-adresse
+ Finn på side
+ Skriv ut siden
+ Åpne i appen
+ Legg til på startskjermen
+ Rapporter nettstedfeil
+ Passord
+ Nedlastinger
+ Innstillinger
+ Åpne i DuckDuckGo
+ Kjører i DuckDuckGo
+ Gjør til standardnettleser
+ Ny chat
+ Chattehistorikk
+ Innstillinger for Duck.ai
+ VPN
+
+
+ Tilbake
+ Frem
+ Oppdater
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-nb/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-nb/strings-input-mode.xml
index 4f431bab5842..3079d14aa5b1 100644
--- a/browser/browser-ui/src/main/res/values-nb/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-nb/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Brandveiligheid uitschakelen
+ Bladwijzers
+ Bladwijzer toevoegen
+ Bladwijzer bewerken
+ Deze website brandveilig maken
+ Mobiele site
+ Desktopsite
+ Privacybescherming inschakelen
+ Privacybescherming uitschakelen
+ Nieuw tabblad
+ Duck.ai
+ Delen
+ Duck Address genereren
+ Zoek op pagina
+ Pagina printen
+ Openen in de app
+ Toevoegen aan Home Screen
+ Defecte website melden
+ Wachtwoorden
+ Downloads
+ Instellingen
+ Openen in DuckDuckGo
+ Uitgevoerd in DuckDuckGo
+ Instellen als standaard browser
+ Nieuwe chat
+ Chatgeschiedenis
+ Duck.ai-instellingen
+ VPN
+
+
+ Terug
+ Vooruit
+ Vernieuwen
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-nl/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-nl/strings-input-mode.xml
index ae45bae2ea3b..d559ee0e51bf 100644
--- a/browser/browser-ui/src/main/res/values-nl/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-nl/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Usuń zabezpieczenie
+ Zakładki
+ Dodaj zakładkę
+ Edytuj zakładkę
+ Zabezpiecz tę witrynę
+ Witryna mobilna
+ Witryna w wersji komputerowej
+ Włącz ochronę prywatności
+ Wyłącz ochronę prywatności
+ Nowa karta
+ Duck.ai
+ Udostępnij
+ Wygeneruj Duck Address
+ Znajdź na stronie
+ Drukuj stronę
+ Otwórz w aplikacji
+ Dodaj do ekranu głównego
+ Zgłoś uszkodzoną witrynę
+ Hasła
+ Pobrane
+ Ustawienia
+ Otwórz w DuckDuckGo
+ Uruchamianie w DuckDuckGo
+ Ustaw jako domyślną przeglądarkę
+ Nowy czat
+ Historia czatów
+ Ustawienia Duck.ai
+ VPN
+
+
+ Wstecz
+ Dalej
+ Odśwież
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-pl/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-pl/strings-input-mode.xml
index 86e3a108d3f3..84c29f634bd4 100644
--- a/browser/browser-ui/src/main/res/values-pl/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-pl/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Remover barreira de segurança
+ Marcadores
+ Adicionar marcador
+ Editar marcador
+ Coloque uma barreira de segurança neste site
+ Site móvel
+ Site para computador de secretária
+ Ativar Proteção de Privacidade
+ Desativar Proteção de Privacidade
+ Novo separador
+ Duck.ai
+ Partilhar
+ Gerar Duck Address
+ Encontrar na página
+ Imprimir página
+ Abrir na app
+ Adicionar à Página Inicial
+ Denunciar site danificado
+ Palavras-passe
+ Transferências
+ Definições
+ Abrir no DuckDuckGo
+ Em execução no DuckDuckGo
+ Definir como navegador padrão
+ Nova conversa
+ Histórico do chat
+ Definições do Duck.ai
+ VPN
+
+
+ Retroceder
+ Avançar
+ Atualizar
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-pt/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-pt/strings-input-mode.xml
index 9c22d021e355..22712bde8b21 100644
--- a/browser/browser-ui/src/main/res/values-pt/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-pt/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Elimină ștergerea activității și istoricului din browser
+ Marcaje
+ Adaugă marcaj
+ Editează marcaj
+ Șterge activitatea și istoricul din browser pentru acest site
+ Site mobil
+ Versiune desktop
+ Activează protecția confidențialității
+ Dezactivează protecția confidențialității
+ Filă nouă
+ Duck.ai
+ Trimite…
+ Generează Duck Address
+ Caută în pagină
+ Imprimă pagina
+ Deschide în aplicație
+ Adaugă pe ecranul de pornire
+ Raportează Site-ul Defect
+ Parole
+ Descărcări
+ Setări
+ Deschide în DuckDuckGo
+ Redare în DuckDuckGo
+ Setare ca browser implicit
+ Chat nou
+ Istoricul chaturilor
+ Setări Duck.ai
+ VPN
+
+
+ Înapoi
+ Înainte
+ Reîncărcare
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-ro/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-ro/strings-input-mode.xml
index ea0ac8205ec1..db34b7e077aa 100644
--- a/browser/browser-ui/src/main/res/values-ro/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-ro/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Снять огнеупорность
+ Закладки
+ Добавить закладку
+ Редактировать закладку
+ Сделать огнеупорным
+ Мобильная версия
+ Полная версия сайта
+ Включить защиту конфиденциальности
+ Отключить защиту конфиденциальности
+ Новая вкладка
+ Duck.ai
+ Поделиться
+ Создать адрес Duck
+ Найти на странице
+ Печать страницы
+ Открыть в приложении
+ Добавить на домашнюю страницу
+ Сообщить о неработающем сайте
+ Пароли
+ Загрузки
+ Настройки
+ Открыть в DuckDuckGo
+ Выполняется в DuckDuckGo
+ Сделать браузером по умолчанию
+ Запустить чат
+ История чата
+ Настройки Duck.ai
+ VPN
+
+
+ Назад
+ Вперёд
+ Обновить
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-ru/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-ru/strings-input-mode.xml
index 815d0d3077bb..4047f8fdea12 100644
--- a/browser/browser-ui/src/main/res/values-ru/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-ru/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Odstrániť zabezpečenie
+ Záložky
+ Pridať záložku
+ Upraviť záložku
+ Zabezpečiť túto lokalitu
+ Mobilný režim
+ Stránka pre stolové počítače
+ Povoliť ochranu súkromia
+ Vypnúť ochranu súkromia
+ Nová karta
+ Duck.ai
+ Zdieľať
+ Generovanie adresy Duck
+ Hľadať na stránke
+ Tlačiť stranu
+ Otvoriť v aplikácii
+ Pridať na domovskú obrazovku
+ Nahlásiť nefunkčný web
+ Heslá
+ Stiahnuté
+ Nastavenia
+ Otvoriť v DuckDuckGo
+ Spustené v DuckDuckGo
+ Nastaviť ako predvolený prehliadač
+ Nový chat
+ História chatov
+ Nastavenia Duck.ai
+ VPN
+
+
+ Späť
+ Ďalej
+ Obnoviť
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-sk/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-sk/strings-input-mode.xml
index 2470dae67f9b..2e5eb6d1d056 100644
--- a/browser/browser-ui/src/main/res/values-sk/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-sk/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Odstrani požarno zaščito
+ Zaznamki
+ Dodaj zaznamek
+ Uredi zaznamek
+ Ta stran je požarno zaščitena
+ Mobilna stran
+ Namizna stran
+ Omogoči zaščito zasebnosti
+ Onemogoči zaščito zasebnosti
+ Nov zavihek
+ Duck.ai
+ Deli
+ Ustvari naslov Duck Address
+ Najdi na strani
+ Natisni stran
+ Odpri v aplikaciji
+ Dodaj na Domači Zaslon
+ Prijavite poškodovano spletno mesto
+ Gesla
+ Prenosi
+ Nastavitve
+ Odpri v DuckDuckGo
+ Izvaja se v DuckDuckGo
+ Nastavite za privzeti brskalnik
+ Nov klepet
+ Zgodovina klepeta
+ Nastavitve Duck.ai
+ VPN
+
+
+ Nazaj
+ Naprej
+ Osveži
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-sl/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-sl/strings-input-mode.xml
index dac1d7758046..6b2ac3a4829d 100644
--- a/browser/browser-ui/src/main/res/values-sl/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-sl/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Ta bort brandsäkring
+ Bokmärken
+ Lägg till bokmärke
+ Redigera bokmärke
+ Brandsäkra den här webbplatsen
+ Webbplats för mobil
+ Webbplats för dator
+ Aktivera integritetsskydd
+ Inaktivera integritetsskydd
+ Ny flik
+ Duck.ai
+ Dela
+ Generera en Duck-adress
+ Hitta på sidan
+ Skriv ut sidan
+ Öppna i appen
+ Lägg till på hemskärmen
+ Rapportera skadad webbplats
+ Lösenord
+ Nerladdningar
+ Inställningar
+ Öppna i DuckDuckGo
+ Körs i DuckDuckGo
+ Ställ in som standardwebbläsare
+ Ny chatt
+ Chattlogg
+ Duck.ai-inställningar
+ VPN
+
+
+ Tillbaka
+ Framåt
+ Uppdatera
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-sv/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-sv/strings-input-mode.xml
index 2b07f9331194..847df55067b6 100644
--- a/browser/browser-ui/src/main/res/values-sv/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-sv/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+
+
+ Korumayı Kaldır
+ Yer İmleri
+ Yer İmi ekle
+ Yer İşaretini Düzenle
+ Bu Siteyi Korumalı Yap
+ Mobil Site
+ Masaüstü Sitesi
+ Gizlilik Korumasını Etkinleştir
+ Gizlilik Korumasını Devre Dışı Bırak
+ Yeni Sekme
+ Duck.ai
+ Paylaş
+ Duck Address Oluştur
+ Sayfada bul
+ Sayfayı Yazdır
+ Uygulamada Aç
+ Ana ekrana ekle
+ Hatalı Siteyi Bildirin
+ Şifreler
+ İndirilenler
+ Ayarlar
+ DuckDuckGo\'da aç
+ DuckDuckGo\'da Çalışıyor
+ Varsayılan tarayıcı olarak ayarla
+ Yeni Sohbet
+ Sohbet Geçmişi
+ Duck.ai Ayarları
+ VPN
+
+
+ Geri
+ İleri
+ Yenile
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values-tr/strings-input-mode.xml b/browser/browser-ui/src/main/res/values-tr/strings-input-mode.xml
index 77b9f145b6d6..fac9860df8c9 100644
--- a/browser/browser-ui/src/main/res/values-tr/strings-input-mode.xml
+++ b/browser/browser-ui/src/main/res/values-tr/strings-input-mode.xml
@@ -1,4 +1,5 @@
-
+
+
+ 280dp
+
\ No newline at end of file
diff --git a/browser/browser-ui/src/main/res/values/strings-browser-menu.xml b/browser/browser-ui/src/main/res/values/strings-browser-menu.xml
new file mode 100644
index 000000000000..8f4b82b80590
--- /dev/null
+++ b/browser/browser-ui/src/main/res/values/strings-browser-menu.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+ Remove Fireproofing
+ Bookmarks
+ Add Bookmark
+ Edit Bookmark
+ Fireproof This Site
+ Mobile Site
+ Desktop Site
+ Enable Privacy Protection
+ Disable Privacy Protection
+ New Tab
+ Duck.ai
+ Share
+ Generate Duck Address
+ Find in Page
+ Print Page
+ Open in App
+ Add to Home Screen
+ Report Broken Site
+ Passwords
+ Downloads
+ Settings
+ Open in DuckDuckGo
+ Running in DuckDuckGo
+ Set As Default Browser
+ New Chat
+ Chat History
+ Duck.ai Settings
+ VPN
+
+
+ Back
+ Forward
+ Refresh
+
\ No newline at end of file