Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update DDG Tagline new version #5556

Draft
wants to merge 21 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -34,6 +34,14 @@ import androidx.lifecycle.lifecycleScope
import com.duckduckgo.anvil.annotations.ContributeToActivityStarter
import com.duckduckgo.anvil.annotations.InjectWith
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchBrowserWithLearnMoreUrl
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchBrowserWithPrivacyProtectionsUrl
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchFeedback
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchPproUnifiedFeedback
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchWebViewWithComparisonChartUrl
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchWebViewWithPPROUrl
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchWebViewWithPrivacyPolicyUrl
import com.duckduckgo.app.about.AboutDuckDuckGoViewModel.Command.LaunchWebViewWithVPNUrl
import com.duckduckgo.app.browser.BrowserActivity
import com.duckduckgo.app.browser.R
import com.duckduckgo.app.browser.databinding.ActivityAboutDuckDuckGoBinding
Expand Down Expand Up @@ -116,52 +124,61 @@ class AboutDuckDuckGoActivity : DuckDuckGoActivity() {
private fun addClickableLinks(): SpannableString {
val fullText = getText(
if (settingsPageFeature.newSettingsPage().isEnabled()) {
R.string.aboutDescriptionNew
R.string.aboutDescriptionBrandUpdate2025
} else {
R.string.aboutDescription
R.string.aboutDescriptionBrandUpdate2025
},
) as SpannedString

val spannableString = SpannableString(fullText)
val annotations = fullText.getSpans(0, fullText.length, Annotation::class.java)

annotations?.find { it.value == COMPARISON_CHART_ANNOTATION }?.let {
addSpannable(spannableString, fullText, it) {
viewModel.onComparisonChartLinkClicked()
}
}

annotations?.find { it.value == PPRO_ANNOTATION }?.let {
addSpannable(spannableString, fullText, it) {
viewModel.onPProHelpPageLinkClicked()
}
}

annotations?.find { it.value == VPN_ANNOTATION }?.let {
addSpannable(spannableString, fullText, it) {
viewModel.onVPNHelpPageLinkClicked()
}
}

annotations?.find { it.value == PRIVACY_PROTECTION_ANNOTATION }?.let {
addSpannable(
spannableString,
object : ClickableSpan() {
override fun onClick(widget: View) {
viewModel.onPrivacyProtectionsLinkClicked()
}
},
fullText,
it,
)
addSpannable(spannableString, fullText, it) {
viewModel.onPrivacyProtectionsLinkClicked()
}
}

annotations?.find { it.value == LEARN_MORE_ANNOTATION }?.let {
addSpannable(
spannableString,
object : ClickableSpan() {
override fun onClick(widget: View) {
viewModel.onLearnMoreLinkClicked()
}
},
fullText,
it,
)
addSpannable(spannableString, fullText, it) {
viewModel.onLearnMoreLinkClicked()
}
}

return spannableString
}

private fun addSpannable(
spannableString: SpannableString,
clickableSpan: ClickableSpan,
fullText: SpannedString,
it: Annotation,
onClick: (widget: View) -> Unit,
) {
spannableString.apply {
setSpan(
clickableSpan,
object : ClickableSpan() {
override fun onClick(widget: View) {
onClick(widget)
}
},
fullText.getSpanStart(it),
fullText.getSpanEnd(it),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,
Expand Down Expand Up @@ -214,11 +231,14 @@ class AboutDuckDuckGoActivity : DuckDuckGoActivity() {

private fun processCommand(it: Command) {
when (it) {
is Command.LaunchBrowserWithLearnMoreUrl -> launchBrowserScreen()
is Command.LaunchWebViewWithPrivacyPolicyUrl -> launchWebViewScreen()
is Command.LaunchBrowserWithPrivacyProtectionsUrl -> launchPrivacyProtectionsScreen()
is Command.LaunchFeedback -> launchFeedback()
is Command.LaunchPproUnifiedFeedback -> launchPproUnifiedFeedback()
LaunchBrowserWithLearnMoreUrl -> launchBrowserScreen()
LaunchWebViewWithPrivacyPolicyUrl -> launchWebViewScreen(PRIVACY_POLICY_WEB_LINK, getString(R.string.settingsPrivacyPolicyDuckduckgo))
LaunchBrowserWithPrivacyProtectionsUrl -> launchPrivacyProtectionsScreen()
LaunchFeedback -> launchFeedback()
LaunchPproUnifiedFeedback -> launchPproUnifiedFeedback()
LaunchWebViewWithComparisonChartUrl -> launchWebViewScreen(COMPARISON_CHART_URL, getString(R.string.settingsAboutDuckduckgo))
LaunchWebViewWithPPROUrl -> launchWebViewScreen(PPRO_URL, getString(R.string.settingsAboutDuckduckgo))
LaunchWebViewWithVPNUrl -> launchWebViewScreen(VPN_URL, getString(R.string.settingsAboutDuckduckgo))
}
}

Expand All @@ -227,12 +247,12 @@ class AboutDuckDuckGoActivity : DuckDuckGoActivity() {
finish()
}

private fun launchWebViewScreen() {
private fun launchWebViewScreen(url: String, screenTitle: String) {
globalActivityStarter.start(
this,
WebViewActivityWithParams(
url = PRIVACY_POLICY_WEB_LINK,
screenTitle = getString(R.string.settingsPrivacyPolicyDuckduckgo),
url = url,
screenTitle = screenTitle,
),
)
}
Expand Down Expand Up @@ -263,5 +283,11 @@ class AboutDuckDuckGoActivity : DuckDuckGoActivity() {
private const val LEARN_MORE_ANNOTATION = "learn_more_link"
private const val PRIVACY_POLICY_WEB_LINK = "https://duckduckgo.com/privacy"
private const val PRIVACY_PROTECTIONS_WEB_LINK = "https://duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/"
private const val COMPARISON_CHART_ANNOTATION = "chart_comparison"
private const val COMPARISON_CHART_URL = "https://duckduckgo.com/compare-privacy"
private const val PPRO_ANNOTATION = "ppro_help_page"
private const val PPRO_URL = "https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/"
private const val VPN_ANNOTATION = "vpn_help_page"
private const val VPN_URL = "https://duckduckgo.com/duckduckgo-help-pages/privacy-pro/vpn/"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,14 @@ class AboutDuckDuckGoViewModel @Inject constructor(
)

sealed class Command {
object LaunchBrowserWithLearnMoreUrl : Command()
object LaunchBrowserWithPrivacyProtectionsUrl : Command()
object LaunchWebViewWithPrivacyPolicyUrl : Command()
object LaunchFeedback : Command()
object LaunchPproUnifiedFeedback : Command()
data object LaunchBrowserWithLearnMoreUrl : Command()
data object LaunchBrowserWithPrivacyProtectionsUrl : Command()
data object LaunchWebViewWithPrivacyPolicyUrl : Command()
data object LaunchFeedback : Command()
data object LaunchPproUnifiedFeedback : Command()
data object LaunchWebViewWithComparisonChartUrl : Command()
data object LaunchWebViewWithPPROUrl : Command()
data object LaunchWebViewWithVPNUrl : Command()
}

private val viewState = MutableStateFlow(ViewState())
Expand All @@ -74,6 +77,18 @@ class AboutDuckDuckGoViewModel @Inject constructor(
return command.receiveAsFlow()
}

fun onComparisonChartLinkClicked() {
viewModelScope.launch { command.send(Command.LaunchWebViewWithComparisonChartUrl) }
}

fun onPProHelpPageLinkClicked() {
viewModelScope.launch { command.send(Command.LaunchWebViewWithPPROUrl) }
}

fun onVPNHelpPageLinkClicked() {
viewModelScope.launch { command.send(Command.LaunchWebViewWithVPNUrl) }
}

fun onLearnMoreLinkClicked() {
viewModelScope.launch { command.send(Command.LaunchBrowserWithLearnMoreUrl) }
pixel.fire(SETTINGS_ABOUT_DDG_LEARN_MORE_PRESSED)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
android:layout_marginEnd="16dp"
android:layout_marginBottom="12dp"
android:gravity="center"
android:text="@string/duckDuckGoTagline"
android:text="@string/duckDuckGoProtectionPrivacyPeaceTagLine"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/onboardingIcon"
Expand Down
5 changes: 3 additions & 2 deletions app/src/main/res/values-bg/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<string name="appName" translatable="false">DuckDuckGo</string>
<string name="appDescription" translatable="false">DuckDuckGo</string>
<string name="duckDuckGoLogoDescription">Лого на DuckDuckGo</string>
<string name="duckDuckGoTagline">Вашата защита е наш приоритет.</string>
<string name="duckDuckGoProtectionPrivacyPeaceTagLine">Защита. Поверителност. Спокойствие.</string>
<string name="yes">Да</string>
<string name="no">Не</string>
<string name="open">Отваряне</string>
Expand Down Expand Up @@ -236,6 +236,7 @@
<string name="aboutHeader">Добре дошли на наша страна!</string>
<string name="aboutDescription">DuckDuckGo е независима компания, основана през 2008 г., за защита на личните данни в интернет за всеки, на когото му е омръзнало да бъде проследяван онлайн и иска лесно решение на проблема. Ние сме доказателство, че можете да получите реална и безкомпромисна защита на личните данни онлайн.\n\nБраузърът DuckDuckGo притежава функциите, които очаквате от един основен браузър, като отметки, раздели, пароли и много други, както и <annotation type="privacy_protection_link">редица мощни защити на поверителността</annotation>, които повечето популярни браузъри не предлагат по подразбиране. Този уникален и комплексен набор от защити на поверителността предлага сигурност при онлайн дейностите – търсене, сърфиране, изпращане на имейли и др.\n\nЗа да работят, нашите защити на поверителността не изискват да имате технически познания или да се извършвате сложни настройки. Необходимо е да използвате браузъра DuckDuckGo на всички Ваши устройства и ще получите поверителност по подразбиране.\n\nНо ако искате да надникнете зад кулисите и да разберете как работят защитите на поверителността на DuckDuckGo, можете да намерите повече информация на нашите <annotation type="learn_more_link">страници за помощ</annotation>.</string>
<string name="aboutDescriptionNew">DuckDuckGo е независима компания за защита на личните данни в интернет, основана през 2008 г., предлагаща продукт, подходящ за всеки, на когото му е омръзнало да бъде проследяван онлайн и иска лесно решение. Ние сме доказателство, че можеш да получиш реална защита на личните данни онлайн без компромиси.\n\nБраузърът DuckDuckGo притежава функциите, които очаквате от един основен браузър, като отметки, раздели, пароли и много други, както и <annotation type="privacy_protection_link">редица мощни защити на поверителността</annotation>, които повечето популярни браузъри не предлагат по подразбиране. Този уникален и комплексен набор от защити на поверителността предлага сигурност при онлайн дейностите – търсене, сърфиране, изпращане на имейли и др.\n\nЗа да работят, нашите защити на поверителността не изискват да имате технически познания или да се извършвате сложни настройки. Необходимо е само да използвате браузъра DuckDuckGo на всички свои устройства и ще получите поверителност по подразбиране.\n\nНо ако искате да надникнете зад кулисите и да разберете как работят защитите на поверителността на DuckDuckGo, можете да намерите повече информация на нашите <annotation type="learn_more_link">страници за помощ</annotation>.</string>
<string name="aboutDescriptionBrandUpdate2025">DuckDuckGo е независима компания за онлайн защита за всеки, който иска да си върне контрола върху личната информация.\n\nНие вярваме, че най-добрият начин за защита на личната информация от хакери, измамници и компании, които не зачитат поверителността, е тя изобщо да не бъде събирана. Ето защо милиони хора <annotation type="chart_comparison">избират DuckDuckGo пред Chrome и други браузъри</annotation> за търсене и сърфиране онлайн. Нашата вградена търсачка е като Google, но никога не следи какво търсите. А нашите защити при сърфиране, като блокиране на рекламни тракери и блокиране на бисквитки, помагат да спрем събирането на Вашите данни от други компании. Освен това нашият браузър е безплатен — ние печелим от <annotation type="privacy_respecting_ads">зачитащи поверителността реклами при търсене</annotation>, а не като използваме Вашите данни. В допълнение към това предлагаме и <annotation type="ppro_help_page">Privacy Pro</annotation>, абонаментна услуга „три в едно“, интегрирана в нашия браузър. Абонатите на Privacy Pro получават още по-добра защита на личните данни с бърза и лесна <annotation type="vpn_help_page">VPN</annotation> услуга, която помага да защитите дейността си онлайн; услуга, която намира и премахва личната Ви информация от сайтове за търсене на хора; и услуга, която възстановява самоличността Ви, ако бъде открадната.\n\nВърнете си контрола върху личната информация с браузъра, предназначен за защита на данните, а не за събиране на данните.</string>
<string name="no_suggestions">Няма предложения</string>

<!-- Broken Site Activity -->
Expand Down Expand Up @@ -696,7 +697,7 @@
<string name="sslErrorLeaveCTA">Напускане на този сайт</string>
<string name="sslErrorAdvancedCTA">Разширени</string>
<string name="sslErrorExpandedHeadline">DuckDuckGo Ви предупреждава, когато сертификатът на даден уебсайт е невалиден.</string>
<string name="sslErrorExpandedCTA"><![CDATA[<u>Поемане на риска и отваряне на сайта<u/>]]></string>
<string name="sslErrorExpandedCTA"><![CDATA[<u>Поемане на риска и отваряне на сайта</u>]]></string>
<string name="sslErrorExpiredMessage" instruction="Placeholder is domain with certificate issues">Сертификатът за сигурност за %1$s е изтекъл. Възможно е уебсайтът да е конфигуриран грешно, хакер да е компрометирал връзката Ви или системният Ви часовник да е неправилно настроен.</string>
<string name="sslErrorWrongHostMessage" instruction="Placeholder is domain with certificate issues">Сертификатът за сигурност за %1$s не съответства на *.%2$s. Възможно е уебсайтът да е конфигуриран грешно, хакер да е компрометирал връзката Ви или системният Ви часовник да е неправилно настроен.</string>
<string name="sslErrorUntrustedMessage" instruction="Placeholder is domain with certificate issues">Операционната система на Вашето устройство не се доверява на сертификата за сигурност за %1$s. Възможно е уебсайтът да е конфигуриран грешно, хакер да е компрометирал връзката Ви или системният Ви часовник да е неправилно настроен.</string>
Expand Down
Loading