From 094409a9c85ac562792413856415f2591017bc44 Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Wed, 8 May 2019 11:49:09 +0100 Subject: [PATCH 01/24] Remove unused activity --- app/src/main/AndroidManifest.xml | 3 - .../DefaultBrowserInfoActivity.kt | 99 ------------------- .../app/browser/di/BrowserModule.kt | 2 +- .../duckduckgo/app/di/AndroidBindingModule.kt | 5 - 4 files changed, 1 insertion(+), 108 deletions(-) delete mode 100644 app/src/main/java/com/duckduckgo/app/browser/defaultbrowsing/DefaultBrowserInfoActivity.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d045c6bfb9e9..a2a7c1493696 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -132,9 +132,6 @@ - diff --git a/app/src/main/java/com/duckduckgo/app/browser/defaultbrowsing/DefaultBrowserInfoActivity.kt b/app/src/main/java/com/duckduckgo/app/browser/defaultbrowsing/DefaultBrowserInfoActivity.kt deleted file mode 100644 index 448a388c5ce5..000000000000 --- a/app/src/main/java/com/duckduckgo/app/browser/defaultbrowsing/DefaultBrowserInfoActivity.kt +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2018 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.defaultbrowsing - -import android.annotation.TargetApi -import android.content.ActivityNotFoundException -import android.content.Context -import android.content.Intent -import android.os.Build -import android.os.Bundle -import android.provider.Settings -import android.widget.Toast -import androidx.annotation.RequiresApi -import com.duckduckgo.app.browser.R -import com.duckduckgo.app.global.DuckDuckGoActivity -import kotlinx.android.synthetic.main.activity_default_browser_info.* -import timber.log.Timber -import javax.inject.Inject - -class DefaultBrowserInfoActivity : DuckDuckGoActivity() { - - @Inject - lateinit var defaultBrowserDetector: DefaultBrowserDetector - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_default_browser_info) - configureUiEventHandlers() - } - - @TargetApi(Build.VERSION_CODES.N) - private fun configureUiEventHandlers() { - dismissButton.setOnClickListener { exitActivity() } - launchSettingsButton.setOnClickListener { launchDefaultAppActivityForResult() } - defaultBrowserIllustration.setOnClickListener { launchDefaultAppActivityForResult() } - } - - @RequiresApi(Build.VERSION_CODES.N) - private fun launchDefaultAppActivityForResult() { - try { - val intent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) - startActivityForResult(intent, DEFAULT_BROWSER_REQUEST_CODE) - } catch (e: ActivityNotFoundException) { - val errorMessage = getString(R.string.cannotLaunchDefaultAppSettings) - Timber.w(e, errorMessage) - Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show() - } - } - - override fun onResume() { - super.onResume() - - if (defaultBrowserDetector.isDefaultBrowser()) { - finish() - } - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - when (requestCode) { - DEFAULT_BROWSER_REQUEST_CODE -> { - val wasSet = if (defaultBrowserDetector.isDefaultBrowser()) "was" else "was not" - Timber.i("User returned from default settings; DDG $wasSet set as the default") - } - else -> super.onActivityResult(requestCode, resultCode, data) - } - } - - override fun onBackPressed() { - exitActivity() - } - - private fun exitActivity() { - launchSettingsButton.text = "" - finishAfterTransition() - } - - companion object { - - private const val DEFAULT_BROWSER_REQUEST_CODE = 100 - - fun intent(context: Context): Intent { - return Intent(context, DefaultBrowserInfoActivity::class.java) - } - } -} diff --git a/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt b/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt index 4d076e3dd80e..4bdc402bad7d 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt @@ -22,9 +22,9 @@ import android.webkit.CookieManager import com.duckduckgo.app.browser.* import com.duckduckgo.app.browser.addtohome.AddToHomeCapabilityDetector import com.duckduckgo.app.browser.addtohome.AddToHomeSystemCapabilityDetector -import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserObserver import com.duckduckgo.app.browser.defaultbrowsing.AndroidDefaultBrowserDetector import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector +import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserObserver import com.duckduckgo.app.browser.session.WebViewSessionInMemoryStorage import com.duckduckgo.app.browser.session.WebViewSessionStorage import com.duckduckgo.app.fire.DuckDuckGoCookieManager diff --git a/app/src/main/java/com/duckduckgo/app/di/AndroidBindingModule.kt b/app/src/main/java/com/duckduckgo/app/di/AndroidBindingModule.kt index 6f6f33a650f4..8238a491ba30 100644 --- a/app/src/main/java/com/duckduckgo/app/di/AndroidBindingModule.kt +++ b/app/src/main/java/com/duckduckgo/app/di/AndroidBindingModule.kt @@ -21,7 +21,6 @@ import com.duckduckgo.app.bookmarks.ui.BookmarksActivity import com.duckduckgo.app.brokensite.BrokenSiteActivity import com.duckduckgo.app.browser.BrowserActivity import com.duckduckgo.app.browser.BrowserTabFragment -import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserInfoActivity import com.duckduckgo.app.browser.rating.ui.AppEnjoymentDialogFragment import com.duckduckgo.app.browser.rating.ui.GiveFeedbackDialogFragment import com.duckduckgo.app.browser.rating.ui.RateAppDialogFragment @@ -111,10 +110,6 @@ abstract class AndroidBindingModule { @ContributesAndroidInjector abstract fun bookmarksActivity(): BookmarksActivity - @ActivityScoped - @ContributesAndroidInjector - abstract fun defaultBrowserInfoActivity(): DefaultBrowserInfoActivity - @ActivityScoped @ContributesAndroidInjector abstract fun fireActivity(): FireActivity From 453675c2eb4764b0895e60920e562961df7f9b5c Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Wed, 8 May 2019 11:49:28 +0100 Subject: [PATCH 02/24] Suppress lint warning --- .../java/com/duckduckgo/app/onboarding/ui/OnboardingActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingActivity.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingActivity.kt index 23a93fb9263c..ee768f8baec3 100644 --- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingActivity.kt +++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingActivity.kt @@ -50,6 +50,7 @@ class OnboardingActivity : DuckDuckGoActivity() { super.onResume() } + @Suppress("UNUSED_PARAMETER") fun onContinueClicked(view: View) { val next = viewPager.currentItem + 1 if (next < viewPager.adapter!!.count) { From 2ecd2a6497177638bf1d432ba1d740c8b7a63386 Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Wed, 8 May 2019 11:52:24 +0100 Subject: [PATCH 03/24] Add new onboarding page implementation --- .../onboarding/ui/OnboardingPageFragment.kt | 7 +- .../app/onboarding/ui/OnboardingViewModel.kt | 7 +- .../drawable/ic_icon_block_trackers_alt.xml | 31 ++++ .../main/res/drawable/ic_icon_customize.xml | 35 ++++ app/src/main/res/drawable/ic_icon_flame.xml | 29 ++++ .../res/drawable/ic_icon_search_privately.xml | 35 ++++ .../main/res/layout/activity_onboarding.xml | 2 - ...onboarding_unified_browsing_protection.xml | 61 +++++++ ...ntent_onboarding_unified_customization.xml | 61 +++++++ ...ntent_onboarding_unified_data_clearing.xml | 62 +++++++ ...tent_onboarding_unified_private_search.xml | 61 +++++++ .../content_onboarding_unified_welcome.xml | 156 ++++++++++++++++++ .../layout/onboarding_browser_protection.xml | 71 ++++++++ app/src/main/res/values-land/dimens.xml | 1 + app/src/main/res/values/dimens.xml | 3 +- app/src/main/res/values/strings.xml | 13 ++ app/src/main/res/values/styles.xml | 40 +++-- 17 files changed, 654 insertions(+), 21 deletions(-) create mode 100644 app/src/main/res/drawable/ic_icon_block_trackers_alt.xml create mode 100644 app/src/main/res/drawable/ic_icon_customize.xml create mode 100644 app/src/main/res/drawable/ic_icon_flame.xml create mode 100644 app/src/main/res/drawable/ic_icon_search_privately.xml create mode 100644 app/src/main/res/layout/content_onboarding_unified_browsing_protection.xml create mode 100644 app/src/main/res/layout/content_onboarding_unified_customization.xml create mode 100644 app/src/main/res/layout/content_onboarding_unified_data_clearing.xml create mode 100644 app/src/main/res/layout/content_onboarding_unified_private_search.xml create mode 100644 app/src/main/res/layout/content_onboarding_unified_welcome.xml create mode 100644 app/src/main/res/layout/onboarding_browser_protection.xml diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt index 0f600b63831a..281663769e5f 100644 --- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt @@ -32,7 +32,7 @@ import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserSystemSettings import com.duckduckgo.app.global.install.AppInstallStore import com.duckduckgo.app.statistics.pixels.Pixel -import com.duckduckgo.app.statistics.pixels.Pixel.PixelName.* +import com.duckduckgo.app.statistics.pixels.Pixel.PixelName.DEFAULT_BROWSER_SET import dagger.android.support.AndroidSupportInjection import kotlinx.android.synthetic.main.content_onboarding_default_browser.* import timber.log.Timber @@ -52,6 +52,11 @@ sealed class OnboardingPageFragment : Fragment() { savedInstanceState: Bundle? ): View? = inflater.inflate(layoutResource(), container, false) + class UnifiedWelcomePage : OnboardingPageFragment() { + override fun layoutResource(): Int = R.layout.content_onboarding_unified_welcome + override fun backgroundColor(): Int = R.color.white + } + class ProtectDataPage : OnboardingPageFragment() { override fun layoutResource(): Int = R.layout.content_onboarding_protect_data override fun backgroundColor(): Int = R.color.lightOliveGreen diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt index 110797a6b6ea..45b5b3957825 100644 --- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt @@ -26,7 +26,7 @@ class OnboardingViewModel( ) : ViewModel() { fun pageCount(): Int { - return if (shouldShowDefaultBrowserPage()) 3 else 2 + return if (shouldShowDefaultBrowserPage()) 2 else 1 } fun onOnboardingDone() { @@ -35,9 +35,8 @@ class OnboardingViewModel( fun getItem(position: Int): OnboardingPageFragment? { return when (position) { - 0 -> OnboardingPageFragment.ProtectDataPage() - 1 -> OnboardingPageFragment.NoTracePage() - 2 -> { + 0 -> OnboardingPageFragment.UnifiedWelcomePage() + 1 -> { return if (shouldShowDefaultBrowserPage()) { OnboardingPageFragment.DefaultBrowserPage() } else null diff --git a/app/src/main/res/drawable/ic_icon_block_trackers_alt.xml b/app/src/main/res/drawable/ic_icon_block_trackers_alt.xml new file mode 100644 index 000000000000..a9c11ee73edb --- /dev/null +++ b/app/src/main/res/drawable/ic_icon_block_trackers_alt.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_icon_customize.xml b/app/src/main/res/drawable/ic_icon_customize.xml new file mode 100644 index 000000000000..b5b67ad3b7f0 --- /dev/null +++ b/app/src/main/res/drawable/ic_icon_customize.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_icon_flame.xml b/app/src/main/res/drawable/ic_icon_flame.xml new file mode 100644 index 000000000000..ba0da506210e --- /dev/null +++ b/app/src/main/res/drawable/ic_icon_flame.xml @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_icon_search_privately.xml b/app/src/main/res/drawable/ic_icon_search_privately.xml new file mode 100644 index 000000000000..02144073e475 --- /dev/null +++ b/app/src/main/res/drawable/ic_icon_search_privately.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_onboarding.xml b/app/src/main/res/layout/activity_onboarding.xml index 59367e9b099d..1c05de759b01 100644 --- a/app/src/main/res/layout/activity_onboarding.xml +++ b/app/src/main/res/layout/activity_onboarding.xml @@ -18,14 +18,12 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true" tools:context="com.duckduckgo.app.onboarding.ui.OnboardingActivity"> diff --git a/app/src/main/res/layout/content_onboarding_unified_browsing_protection.xml b/app/src/main/res/layout/content_onboarding_unified_browsing_protection.xml new file mode 100644 index 000000000000..46e81d8193d5 --- /dev/null +++ b/app/src/main/res/layout/content_onboarding_unified_browsing_protection.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_onboarding_unified_customization.xml b/app/src/main/res/layout/content_onboarding_unified_customization.xml new file mode 100644 index 000000000000..5f4d9ceba162 --- /dev/null +++ b/app/src/main/res/layout/content_onboarding_unified_customization.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_onboarding_unified_data_clearing.xml b/app/src/main/res/layout/content_onboarding_unified_data_clearing.xml new file mode 100644 index 000000000000..494e9279acbb --- /dev/null +++ b/app/src/main/res/layout/content_onboarding_unified_data_clearing.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_onboarding_unified_private_search.xml b/app/src/main/res/layout/content_onboarding_unified_private_search.xml new file mode 100644 index 000000000000..37c92e12217b --- /dev/null +++ b/app/src/main/res/layout/content_onboarding_unified_private_search.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_onboarding_unified_welcome.xml b/app/src/main/res/layout/content_onboarding_unified_welcome.xml new file mode 100644 index 000000000000..5a0beb9ac7a1 --- /dev/null +++ b/app/src/main/res/layout/content_onboarding_unified_welcome.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/onboarding_browser_protection.xml b/app/src/main/res/layout/onboarding_browser_protection.xml new file mode 100644 index 000000000000..116a0be7a57b --- /dev/null +++ b/app/src/main/res/layout/onboarding_browser_protection.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml index b1b71df71b2a..347c1f20b412 100644 --- a/app/src/main/res/values-land/dimens.xml +++ b/app/src/main/res/values-land/dimens.xml @@ -17,4 +17,5 @@ 20dp + 8dp \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 0ca636776876..dc79f27e13ab 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -20,7 +20,7 @@ 14sp 10dp 21sp - 16sp + 17sp 20sp 14sp @@ -34,5 +34,6 @@ 30dp 20dp + 20dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b0967f7830e..8aa6db02de48 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,6 +14,18 @@ Go to Settings Continue + + Welcome to DuckDuckGo! + Protecting your data has never been this easy. + Browsing Protection + Block trackers and browse securely by default. + Private Search + With DuckDuckGo, your searches are always private. + Data Clearing + Erase your browsing data with the tap of a button. + Customization + Pick a theme and customize privacy features. + Can\'t launch default app settings screen Make Us Your Default Browser @@ -280,4 +292,5 @@ Username Password + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index bf9f6ba67772..4de2281d6086 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -183,6 +183,10 @@ @null + + @@ -201,26 +205,36 @@ + + + + + + - From d24391b0e15981bb78611fb2ddf61fe6f2dfd617 Mon Sep 17 00:00:00 2001 From: Craig Russell Date: Wed, 8 May 2019 14:33:33 +0100 Subject: [PATCH 07/24] Update set default screen to match new designs --- app/build.gradle | 4 +- .../app/browser/BrowserTabFragment.kt | 11 +-- .../onboarding/ui/OnboardingPageFragment.kt | 21 +++-- .../app/onboarding/ui/OnboardingViewModel.kt | 11 +++ .../app/onboarding/ui/PagerAdapter.kt | 8 +- .../content_onboarding_default_browser.xml | 87 ++++++++++++------- .../layout/content_onboarding_no_trace.xml | 74 ---------------- .../content_onboarding_protect_data.xml | 69 --------------- .../content_onboarding_unified_welcome.xml | 2 + app/src/main/res/values/strings.xml | 5 +- app/src/main/res/values/styles.xml | 49 ++++------- app/src/main/res/values/themes.xml | 2 +- 12 files changed, 114 insertions(+), 229 deletions(-) delete mode 100644 app/src/main/res/layout/content_onboarding_no_trace.xml delete mode 100644 app/src/main/res/layout/content_onboarding_protect_data.xml diff --git a/app/build.gradle b/app/build.gradle index ce7198ec2070..bdf8a96be5ab 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,12 +78,12 @@ android { ext { androidX = "1.0.2" - materialDesign = "1.0.0" + materialDesign = "1.1.0-alpha06" architectureComponents = "1.1.1" architectureComponentsExtensions = "1.1.1" androidKtx = "1.0.1" fragmentKtx = "1.0.0" - constraintLayout = "2.0.0-alpha3" + constraintLayout = "2.0.0-alpha4" lifecycle = "2.1.0-alpha04" room = "2.1.0-alpha05" workManager = "2.0.0" 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 ba75e618721f..c329b0d28c77 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -503,11 +503,12 @@ class BrowserTabFragment : Fragment(), FindListener, CoroutineScope { } private fun showAuthenticationDialog(request: BasicAuthenticationRequest) { - val dialog = HttpAuthenticationDialogFragment.createHttpAuthenticationDialog(request.site) - - dialog.show(activity?.supportFragmentManager, AUTHENTICATION_DIALOG_TAG) - dialog.listener = viewModel - dialog.request = request + activity?.supportFragmentManager?.let { fragmentManager -> + val dialog = HttpAuthenticationDialogFragment.createHttpAuthenticationDialog(request.site) + dialog.show(fragmentManager, AUTHENTICATION_DIALOG_TAG) + dialog.listener = viewModel + dialog.request = request + } } private fun saveBasicAuthCredentials(request: BasicAuthenticationRequest, credentials: BasicAuthenticationCredentials) { diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt index 281663769e5f..17f4d3928510 100644 --- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingPageFragment.kt @@ -26,6 +26,7 @@ import android.view.View import android.view.ViewGroup import androidx.annotation.ColorRes import androidx.annotation.LayoutRes +import androidx.annotation.StringRes import androidx.fragment.app.Fragment import com.duckduckgo.app.browser.R import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector @@ -46,30 +47,28 @@ sealed class OnboardingPageFragment : Fragment() { @LayoutRes abstract fun layoutResource(): Int + @StringRes + var continueButtonTextResId: Int = R.string.onboardingContinue + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? = inflater.inflate(layoutResource(), container, false) + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + continueButton.setText(continueButtonTextResId) + } + class UnifiedWelcomePage : OnboardingPageFragment() { override fun layoutResource(): Int = R.layout.content_onboarding_unified_welcome override fun backgroundColor(): Int = R.color.white } - class ProtectDataPage : OnboardingPageFragment() { - override fun layoutResource(): Int = R.layout.content_onboarding_protect_data - override fun backgroundColor(): Int = R.color.lightOliveGreen - } - - class NoTracePage : OnboardingPageFragment() { - override fun layoutResource(): Int = R.layout.content_onboarding_no_trace - override fun backgroundColor(): Int = R.color.cornflowerBlue - } - class DefaultBrowserPage : OnboardingPageFragment() { override fun layoutResource(): Int = R.layout.content_onboarding_default_browser - override fun backgroundColor(): Int = R.color.eastBay + override fun backgroundColor(): Int = R.color.white @Inject lateinit var pixel: Pixel diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt index 45b5b3957825..7db8c2356a0d 100644 --- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt @@ -16,7 +16,9 @@ package com.duckduckgo.app.onboarding.ui +import androidx.annotation.StringRes import androidx.lifecycle.ViewModel +import com.duckduckgo.app.browser.R import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector import com.duckduckgo.app.onboarding.store.OnboardingStore @@ -45,6 +47,15 @@ class OnboardingViewModel( } } + @StringRes + fun getContinueButtonTextResourceId(position: Int): Int { + return if (position == pageCount() - 1) { + R.string.onboardingContinueLastPage + } else { + R.string.onboardingContinue + } + } + private fun shouldShowDefaultBrowserPage(): Boolean { return defaultWebBrowserCapability.deviceSupportsDefaultBrowserConfiguration() } diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/PagerAdapter.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/PagerAdapter.kt index 14f20e423b2c..17581cb9449e 100644 --- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/PagerAdapter.kt +++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/PagerAdapter.kt @@ -29,7 +29,13 @@ class PagerAdapter(fragmentManager: FragmentManager, private val viewModel: Onbo } override fun getItem(position: Int): OnboardingPageFragment { - return viewModel.getItem(position) ?: throw IllegalArgumentException("No items exists at position $position") + val item = viewModel.getItem(position) + item?.continueButtonTextResId = continueButtonTextId(position) + return item ?: throw IllegalArgumentException("No items exists at position $position") + } + + private fun continueButtonTextId(position: Int): Int { + return viewModel.getContinueButtonTextResourceId(position) } @ColorInt diff --git a/app/src/main/res/layout/content_onboarding_default_browser.xml b/app/src/main/res/layout/content_onboarding_default_browser.xml index 249298001e97..9882117091ae 100644 --- a/app/src/main/res/layout/content_onboarding_default_browser.xml +++ b/app/src/main/res/layout/content_onboarding_default_browser.xml @@ -20,59 +20,82 @@ android:id="@+id/longDescriptionContainer" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingStart="44dp" - android:paddingEnd="44dp" android:tag="onboardingDefaultBrowser" - tools:background="@color/eastBay" + tools:background="@color/white" tools:context="com.duckduckgo.app.onboarding.ui.OnboardingActivity"> - - - - + android:layout_marginTop="8dp" + android:fontFamily="sans-serif" + android:lineSpacingExtra="3sp" + android:text="@string/onboardingDefaultBrowserTitle" + android:textAlignment="center" + android:textColor="@color/almostBlack" + android:textSize="17sp" + android:textStyle="bold" + app:layout_constraintBottom_toTopOf="@id/privateSearchSubtitle" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> - + - + -