From feae7fff2fd525ab37fbc1105b691e1f3578977e Mon Sep 17 00:00:00 2001 From: Elise Richards Date: Thu, 20 Aug 2020 11:05:11 -0500 Subject: [PATCH] =?UTF-8?q?FNX-14498=20=E2=81=83=20For=20#9487:=20improve?= =?UTF-8?q?=20fxa=20onboarding=20manual=20sign=20in=20card=20(#13317)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Replace strings, add learn more, hook up button * Constrain learn more and icon to the text * View holder tests * Lint * Update homescreen ui test --- .../fenix/ui/robots/HomeScreenRobot.kt | 4 +- .../OnboardingAutomaticSignInViewHolder.kt | 4 +- .../OnboardingManualSignInViewHolder.kt | 24 +++++------ .../fenix/onboarding/OnboardingController.kt | 22 ++++++++++ .../fenix/onboarding/OnboardingInteractor.kt | 14 +++++++ .../mozilla/fenix/settings/SupportUtils.kt | 4 ++ .../ic_onboarding_avatar_anonymous_large.xml | 16 +++++++ .../layout/onboarding_automatic_signin.xml | 2 +- .../res/layout/onboarding_manual_signin.xml | 42 ++++++++++++++++--- app/src/main/res/values/strings.xml | 7 ++-- ...OnboardingAutomaticSignInViewHolderTest.kt | 14 +++---- .../OnboardingManualSignInViewHolderTest.kt | 17 +++++++- 12 files changed, 135 insertions(+), 35 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/onboarding/OnboardingController.kt create mode 100644 app/src/main/java/org/mozilla/fenix/onboarding/OnboardingInteractor.kt create mode 100644 app/src/main/res/drawable/ic_onboarding_avatar_anonymous_large.xml diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index f1e24be71..8540e2a0a 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -553,11 +553,11 @@ private fun assertWelcomeHeader() = .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) private fun assertGetTheMostHeader() = - onView(allOf(withText("Get the most out of Firefox Preview."))) + onView(allOf(withText("Start syncing bookmarks, passwords, and more with your Firefox account."))) .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) private fun assertAccountsSignInButton() = - onView(ViewMatchers.withResourceName("turn_on_sync_button")) + onView(ViewMatchers.withResourceName("fxa_sign_in_button")) .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) private fun assertGetToKnowHeader() = diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingAutomaticSignInViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingAutomaticSignInViewHolder.kt index 39c49a414..c09fb31d2 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingAutomaticSignInViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingAutomaticSignInViewHolder.kt @@ -31,9 +31,9 @@ class OnboardingAutomaticSignInViewHolder( private val headerText = view.header_text init { - view.turn_on_sync_button.setOnClickListener { + view.fxa_sign_in_button.setOnClickListener { scope.launch { - onClick(it.turn_on_sync_button) + onClick(it.fxa_sign_in_button) } } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolder.kt index e4fa6d5a3..f7b04965a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolder.kt @@ -5,40 +5,40 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding import android.view.View -import androidx.core.content.ContextCompat import androidx.navigation.Navigation import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.onboarding_manual_signin.view.* -import mozilla.components.support.ktx.android.content.getDrawableWithTint -import mozilla.components.support.ktx.android.view.putCompoundDrawablesRelativeWithIntrinsicBounds import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.ext.addUnderline import org.mozilla.fenix.ext.components import org.mozilla.fenix.home.HomeFragmentDirections +import org.mozilla.fenix.onboarding.OnboardingController +import org.mozilla.fenix.onboarding.OnboardingInteractor class OnboardingManualSignInViewHolder(view: View) : RecyclerView.ViewHolder(view) { private val headerText = view.header_text init { - view.turn_on_sync_button.setOnClickListener { + val interactor = OnboardingInteractor(OnboardingController(itemView.context)) + + view.fxa_sign_in_button.setOnClickListener { it.context.components.analytics.metrics.track(Event.OnboardingManualSignIn) val directions = HomeFragmentDirections.actionGlobalTurnOnSync() Navigation.findNavController(view).navigate(directions) } + + view.learn_more.addUnderline() + view.learn_more.setOnClickListener { + interactor.onLearnMoreClicked() + } } fun bind() { val context = itemView.context - - val appName = context.getString(R.string.app_name) - headerText.text = context.getString(R.string.onboarding_firefox_account_header, appName) - val icon = context.getDrawableWithTint( - R.drawable.ic_onboarding_firefox_accounts, - ContextCompat.getColor(context, R.color.white_color) - ) - headerText.putCompoundDrawablesRelativeWithIntrinsicBounds(start = icon) + headerText.text = context.getString(R.string.onboarding_firefox_account_header) } companion object { diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingController.kt b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingController.kt new file mode 100644 index 000000000..3e1945103 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingController.kt @@ -0,0 +1,22 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.onboarding + +import android.content.Context +import org.mozilla.fenix.BrowserDirection +import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.settings.SupportUtils + +class OnboardingController( + private val context: Context +) { + fun handleLearnMoreClicked() { + (context as HomeActivity).openToBrowserAndLoad( + searchTermOrURL = SupportUtils.getFirefoxAccountSumoUrl(), + newTab = true, + from = BrowserDirection.FromHome + ) + } +} diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingInteractor.kt b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingInteractor.kt new file mode 100644 index 000000000..ad11d459c --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingInteractor.kt @@ -0,0 +1,14 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.onboarding + +class OnboardingInteractor(private val onboardingController: OnboardingController) { + + /** + * Called when the user clicks the learn more link + * @param url the url the suggestion was providing + */ + fun onLearnMoreClicked() = onboardingController.handleLearnMoreClicked() +} diff --git a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt index a1a613cc1..3e1bae04a 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt @@ -74,6 +74,10 @@ object SupportUtils { return "https://support.mozilla.org/$langTag/kb/$escapedTopic" } + fun getFirefoxAccountSumoUrl(): String { + return "https://support.mozilla.org/kb/access-mozilla-services-firefox-account" + } + fun getMozillaPageUrl(page: MozillaPage, locale: Locale = Locale.getDefault()): String { val path = page.path val langTag = getLanguageTag(locale) diff --git a/app/src/main/res/drawable/ic_onboarding_avatar_anonymous_large.xml b/app/src/main/res/drawable/ic_onboarding_avatar_anonymous_large.xml new file mode 100644 index 000000000..422897fd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_onboarding_avatar_anonymous_large.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/layout/onboarding_automatic_signin.xml b/app/src/main/res/layout/onboarding_automatic_signin.xml index d96855dcc..2b88fd85d 100644 --- a/app/src/main/res/layout/onboarding_automatic_signin.xml +++ b/app/src/main/res/layout/onboarding_automatic_signin.xml @@ -22,7 +22,7 @@ tools:text="@string/onboarding_firefox_account_auto_signin_header_2" />