Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
be73bfb
Copy custom tab URL on long click
0nko Dec 19, 2025
d882457
Translate strings to values-bg
daxmobile Dec 19, 2025
6c52196
Translate strings to values-hr
daxmobile Dec 19, 2025
6998b05
Refactor: Avoid redundant state access in OmnibarLayoutViewModel
cursoragent Dec 19, 2025
91d64c9
Refactor: Use ClipboardInteractor for copying URL
cursoragent Dec 19, 2025
9e18ea0
Translate strings to values-de
daxmobile Dec 19, 2025
3a0370e
Translate strings to values-da
daxmobile Dec 19, 2025
4ce84f6
Translate strings to values-es
daxmobile Dec 19, 2025
7d643ea
Translate strings to values-et
daxmobile Dec 19, 2025
59efbdb
Translate strings to values-sk
daxmobile Dec 19, 2025
9f3a58f
Translate strings to values-fr
daxmobile Dec 20, 2025
537aa8a
Translate strings to values-nb
daxmobile Dec 20, 2025
ed7f75f
Translate strings to values-pl
daxmobile Dec 20, 2025
68af43c
Translate strings to values-fi
daxmobile Dec 21, 2025
83900e2
Translate strings to values-nl
daxmobile Dec 21, 2025
255b2c4
Translate strings to values-lv
daxmobile Dec 21, 2025
3bd5e16
Translate strings to values-sl
daxmobile Dec 22, 2025
cf65382
Translate strings to values-lt
daxmobile Dec 22, 2025
19f513f
Translate strings to values-hu
daxmobile Dec 22, 2025
c58ae62
Translate strings to values-pt
daxmobile Dec 22, 2025
b9cab47
Translate strings to values-ro
daxmobile Dec 22, 2025
9b6a315
Translate strings to values-el
daxmobile Dec 22, 2025
644e7d9
Translate strings to values-sv
daxmobile Dec 23, 2025
5a24224
Translate strings to values-it
daxmobile Dec 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
Expand Down Expand Up @@ -75,6 +76,7 @@ import com.duckduckgo.app.browser.omnibar.Omnibar.TextListener
import com.duckduckgo.app.browser.omnibar.Omnibar.ViewMode
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.LaunchInputScreen
import com.duckduckgo.app.clipboard.ClipboardInteractor
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.MoveCaretToFront
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.StartCookiesAnimation
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.StartTrackersAnimation
Expand Down Expand Up @@ -202,6 +204,9 @@ class OmnibarLayout @JvmOverloads constructor(
@Inject
lateinit var omnibarRepository: OmnibarRepository

@Inject
lateinit var clipboardInteractor: ClipboardInteractor

private var previousTransitionState: TransitionState? = null

private val lifecycleOwner: LifecycleOwner by lazy {
Expand Down Expand Up @@ -586,6 +591,10 @@ class OmnibarLayout @JvmOverloads constructor(
duckAISidebar.setOnClickListener {
omnibarItemPressedListener?.onDuckAISidebarButtonPressed()
}
newCustomTabToolbarContainer.customTabInnerContainer.setOnLongClickListener {
viewModel.onCustomTabUrlLongClicked()
true
}
}

override fun setLogoClickListener(logoClickListener: LogoClickListener) {
Expand Down Expand Up @@ -722,6 +731,17 @@ class OmnibarLayout @JvmOverloads constructor(
200,
)
}

is Command.CopyUrlToClipboard -> {
copyUrlToClipboardAndShowToast(command)
}
}
}

private fun copyUrlToClipboardAndShowToast(command: Command.CopyUrlToClipboard) {
val notificationShownAutomatically = clipboardInteractor.copyToClipboard(toCopy = command.url, isSensitive = false)
if (!notificationShownAutomatically) {
Toast.makeText(context, R.string.urlCopiedToClipboard, Toast.LENGTH_SHORT).show()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ class OmnibarLayoutViewModel @Inject constructor(
data class LaunchInputScreen(val query: String) : Command()
data class EasterEggLogoClicked(val url: String) : Command()
data object FocusInputField : Command()
data class CopyUrlToClipboard(val url: String) : Command()
}

sealed class LeadingIconState {
Expand Down Expand Up @@ -1076,6 +1077,15 @@ class OmnibarLayoutViewModel @Inject constructor(
}
}

fun onCustomTabUrlLongClicked() {
viewModelScope.launch {
val url = _viewState.value.url
if (url.isNotEmpty()) {
command.send(Command.CopyUrlToClipboard(url))
}
}
}

private data class NewTabPixelParams(
val isNtp: Boolean,
val isFocused: Boolean,
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-bg/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Опции</string>
<string name="shareLink">Споделяне на връзка</string>
<string name="copyUrl">Копиране на адреса на връзката</string>
<string name="urlCopiedToClipboard">URL адресът е копиран в клипборда</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Намери следващ</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-cs/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<string name="options">Možnosti</string>
<string name="shareLink">Sdílet odkaz</string>
<string name="copyUrl">Kopírovat adresu odkazu</string>
<string name="urlCopiedToClipboard">Adresa URL se zkopírovala do schránky</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Najít další</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-da/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Valgmuligheder</string>
<string name="shareLink">Del link</string>
<string name="copyUrl">Kopiér linkadresse</string>
<string name="urlCopiedToClipboard">URL kopieret til udklipsholder</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Find næste</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Optionen</string>
<string name="shareLink">Link teilen</string>
<string name="copyUrl">Link-Adresse kopieren</string>
<string name="urlCopiedToClipboard">URL in Zwischenablage kopiert</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Nächstes Ergebnis</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-el/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Επιλογές</string>
<string name="shareLink">Κοινή χρήση συνδέσμου</string>
<string name="copyUrl">Αντιγραφή διεύθυνσης συνδέσμου</string>
<string name="urlCopiedToClipboard">Έγινε αντιγραφή της διεύθυνσης URL στο πρόχειρο</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Εύρεση επόμενου</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Opciones</string>
<string name="shareLink">Compartir enlace</string>
<string name="copyUrl">Copiar dirección de enlace</string>
<string name="urlCopiedToClipboard">URL copiada en el portapapeles</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Buscar siguiente</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-et/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Valikud</string>
<string name="shareLink">Jaga linki</string>
<string name="copyUrl">Kopeeri lingi aadress</string>
<string name="urlCopiedToClipboard">URL kopeeriti lõikelauale</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Otsi järgmine</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-fi/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Valinnat</string>
<string name="shareLink">Jaa linkki</string>
<string name="copyUrl">Kopioi linkin osoite</string>
<string name="urlCopiedToClipboard">URL kopioitu leikepöydälle</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Etsi seuraava</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Options</string>
<string name="shareLink">Partager le lien</string>
<string name="copyUrl">Copier l\'adresse du lien</string>
<string name="urlCopiedToClipboard">URL copiée dans le presse-papiers</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Suivant</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-hr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<string name="options">Opcije</string>
<string name="shareLink">Podijeli poveznicu</string>
<string name="copyUrl">Kopiraj adresu poveznice</string>
<string name="urlCopiedToClipboard">URL je kopiran u međuspremnik</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Pronađi sljedeće</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-hu/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Opciók</string>
<string name="shareLink">Link megosztása</string>
<string name="copyUrl">Link címének másolása</string>
<string name="urlCopiedToClipboard">URL a vágólapra másolva</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Következő keresése</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Opzioni</string>
<string name="shareLink">Condividi link</string>
<string name="copyUrl">Copia l\'indirizzo del link</string>
<string name="urlCopiedToClipboard">URL copiato negli appunti</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Trova successivo</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-lt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<string name="options">Parinktys</string>
<string name="shareLink">Bendrinti nuorodą</string>
<string name="copyUrl">Kopijuoti nuorodos adresą</string>
<string name="urlCopiedToClipboard">URL nukopijuotas į iškarpinę</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Rasti kitą</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-lv/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
<string name="options">Opcijas</string>
<string name="shareLink">Kopīgot saiti</string>
<string name="copyUrl">Kopēt saites adresi</string>
<string name="urlCopiedToClipboard">URL ir nokopēts starpliktuvē</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Atrast nākamo</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-nb/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Alternativer</string>
<string name="shareLink">Del lenke</string>
<string name="copyUrl">Kopier lenke</string>
<string name="urlCopiedToClipboard">URL-adressen er kopiert til utklippstavlen</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Finn neste</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-nl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Opties</string>
<string name="shareLink">Link delen</string>
<string name="copyUrl">Adres link kopiëren</string>
<string name="urlCopiedToClipboard">URL gekopieerd naar klembord</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Volgende zoeken</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<string name="options">Opcje</string>
<string name="shareLink">Udostępnij link</string>
<string name="copyUrl">Skopiuj adres linku</string>
<string name="urlCopiedToClipboard">URL skopiowany do schowka</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Znajdź następny element</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-pt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Opções</string>
<string name="shareLink">Partilhar ligação</string>
<string name="copyUrl">Copiar endereço de ligação</string>
<string name="urlCopiedToClipboard">URL copiado para a área de transferência</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Encontrar seguinte</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-ro/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
<string name="options">Opțiuni</string>
<string name="shareLink">Trimite linkul</string>
<string name="copyUrl">Copiază adresa linkului</string>
<string name="urlCopiedToClipboard">Adresa URL a fost copiată în clipboard</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Arată rezultatul următor</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<string name="options">Параметры</string>
<string name="shareLink">Поделиться ссылкой</string>
<string name="copyUrl">Скопировать ссылку</string>
<string name="urlCopiedToClipboard">URL скопирован в буфер обмена</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Найти следующий</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-sk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<string name="options">Možnosti</string>
<string name="shareLink">Zdieľať odkaz</string>
<string name="copyUrl">Kopírovať adresu odkazu</string>
<string name="urlCopiedToClipboard">URL adresa bola skopírovaná do schránky</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Hľadať ďalšie</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-sl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<string name="options">Možnosti</string>
<string name="shareLink">Daj povezavo v skupno rabo</string>
<string name="copyUrl">Kopiraj naslov povezave</string>
<string name="urlCopiedToClipboard">URL je kopiran v odložišče</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Najdi naslednje</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-sv/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Alternativ</string>
<string name="shareLink">Dela länk</string>
<string name="copyUrl">Kopia länkadress</string>
<string name="urlCopiedToClipboard">URL har kopierats till urklipp</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Hitta nästa</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="options">Seçenekler</string>
<string name="shareLink">Bağlantıyı paylaş</string>
<string name="copyUrl">Bağlantı Adresini Kopyala</string>
<string name="urlCopiedToClipboard">URL panoya kopyalandı</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Sonrakini bul</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
<string name="options">Options</string>
<string name="shareLink">Share Link</string>
<string name="copyUrl">Copy Link Address</string>
<string name="urlCopiedToClipboard">URL copied to clipboard</string>

<!-- Find in page -->
<string name="nextSearchTermDescription">Find next</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.duckduckgo.app.browser.DuckDuckGoUrlDetectorImpl
import com.duckduckgo.app.browser.defaultbrowsing.prompts.AdditionalDefaultBrowserPrompts
import com.duckduckgo.app.browser.omnibar.Omnibar.ViewMode
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.CopyUrlToClipboard
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command.LaunchInputScreen
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.LeadingIconState
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.LeadingIconState.Search
Expand Down Expand Up @@ -2466,4 +2467,44 @@ class OmnibarLayoutViewModelTest {
assertTrue(viewState.updateOmnibarText)
}
}

@Test
fun whenCustomTabUrlLongClickedWithValidUrlThenCopyUrlToClipboardCommandSent() = runTest {
givenSiteLoaded(RANDOM_URL)

testee.onCustomTabUrlLongClicked()

testee.commands().test {
val command = awaitItem()
assertTrue(command is Command.CopyUrlToClipboard)
assertEquals(RANDOM_URL, (command as Command.CopyUrlToClipboard).url)
cancelAndIgnoreRemainingEvents()
}
}

@Test
fun whenCustomTabUrlLongClickedWithEmptyUrlThenNoCommandSent() = runTest {
givenSiteLoaded(EMPTY_URL)

testee.onCustomTabUrlLongClicked()

testee.commands().test {
expectNoEvents()
}
}

@Test
fun whenCustomTabUrlLongClickedThenCommandContainsCurrentViewStateUrl() = runTest {
val expectedUrl = "https://example.com/test"
givenSiteLoaded(expectedUrl)

testee.onCustomTabUrlLongClicked()

testee.commands().test {
val command = awaitItem()
assertTrue(command is Command.CopyUrlToClipboard)
assertEquals(expectedUrl, (command as Command.CopyUrlToClipboard).url)
cancelAndIgnoreRemainingEvents()
}
}
}
Loading