diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 9f352ee61..c27e7dd8b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -217,7 +217,9 @@ class HomeFragment : Fragment() { scrollToTheTop = ::scrollToTheTop, showDeleteCollectionPrompt = ::showDeleteCollectionPrompt, openSettingsScreen = ::openSettingsScreen, - openSearchScreen = ::navigateToSearch + openSearchScreen = ::navigateToSearch, + openWhatsNewLink = { openCustomTab(SupportUtils.getWhatsNewUrl(view.context)) }, + openPrivacyNotice = { openCustomTab(SupportUtils.getPrivacyNoticeUrl()) } ) ) updateLayout(view) @@ -592,6 +594,13 @@ class HomeFragment : Fragment() { nav(R.id.homeFragment, directions) } + private fun openCustomTab(url: String) { + context?.let { context -> + val intent = SupportUtils.createCustomTabIntent(context, url) + startActivity(intent) + } + } + @SuppressWarnings("ComplexMethod", "LongMethod") private fun createHomeMenu(context: Context, menuButtonView: WeakReference) = HomeMenu( this, diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt index 8b61acd2d..7891fce97 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt @@ -182,9 +182,9 @@ class SessionControlAdapter( OnboardingThemePickerViewHolder.LAYOUT_ID -> OnboardingThemePickerViewHolder(view) OnboardingTrackingProtectionViewHolder.LAYOUT_ID -> OnboardingTrackingProtectionViewHolder(view) OnboardingPrivateBrowsingViewHolder.LAYOUT_ID -> OnboardingPrivateBrowsingViewHolder(view, interactor) - OnboardingPrivacyNoticeViewHolder.LAYOUT_ID -> OnboardingPrivacyNoticeViewHolder(view) + OnboardingPrivacyNoticeViewHolder.LAYOUT_ID -> OnboardingPrivacyNoticeViewHolder(view, interactor) OnboardingFinishViewHolder.LAYOUT_ID -> OnboardingFinishViewHolder(view, interactor) - OnboardingWhatsNewViewHolder.LAYOUT_ID -> OnboardingWhatsNewViewHolder(view) + OnboardingWhatsNewViewHolder.LAYOUT_ID -> OnboardingWhatsNewViewHolder(view, interactor) OnboardingToolbarPositionPickerViewHolder.LAYOUT_ID -> OnboardingToolbarPositionPickerViewHolder(view) else -> throw IllegalStateException() } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt index 940e80899..74c89da65 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt @@ -144,6 +144,16 @@ interface SessionControlController { */ fun handleOpenSettingsClicked() + /** + * @see [OnboardingInteractor.onWhatsNewGetAnswersClicked] + */ + fun handleWhatsNewGetAnswersClicked() + + /** + * @see [OnboardingInteractor.onReadPrivacyNoticeClicked] + */ + fun handleReadPrivacyNoticeClicked() + /** * @see [CollectionInteractor.onToggleCollectionExpanded] */ @@ -172,7 +182,9 @@ class DefaultSessionControlController( private val scrollToTheTop: () -> Unit, private val showDeleteCollectionPrompt: (tabCollection: TabCollection) -> Unit, private val openSettingsScreen: () -> Unit, - private val openSearchScreen: () -> Unit + private val openSearchScreen: () -> Unit, + private val openWhatsNewLink: () -> Unit, + private val openPrivacyNotice: () -> Unit ) : SessionControlController { private val metrics: MetricController get() = activity.components.analytics.metrics @@ -358,6 +370,14 @@ class DefaultSessionControlController( openSettingsScreen() } + override fun handleWhatsNewGetAnswersClicked() { + openWhatsNewLink() + } + + override fun handleReadPrivacyNoticeClicked() { + openPrivacyNotice() + } + override fun handleToggleCollectionExpanded(collection: TabCollection, expand: Boolean) { fragmentStore.dispatch(HomeFragmentAction.CollectionExpanded(collection, expand)) } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt index 6cc5731c3..c6725b934 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt @@ -92,6 +92,16 @@ interface OnboardingInteractor { * Hides the onboarding and navigates to Settings. Called when a user clicks on the "Open settings" button. */ fun onOpenSettingsClicked() + + /** + * Opens a custom tab to what's new url. Called when a user clicks on the "Get answers here" link. + */ + fun onWhatsNewGetAnswersClicked() + + /** + * Opens a custom tab to privacy notice url. Called when a user clicks on the "read our privacy notice" button. + */ + fun onReadPrivacyNoticeClicked() } /** @@ -276,6 +286,14 @@ class SessionControlInteractor( controller.handleOpenSettingsClicked() } + override fun onWhatsNewGetAnswersClicked() { + controller.handleWhatsNewGetAnswersClicked() + } + + override fun onReadPrivacyNoticeClicked() { + controller.handleReadPrivacyNoticeClicked() + } + override fun onToggleCollectionExpanded(collection: TabCollection, expand: Boolean) { controller.handleToggleCollectionExpanded(collection, expand) } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt index 24ab3e656..adb4f7bf8 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolder.kt @@ -8,9 +8,12 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.onboarding_privacy_notice.view.* import org.mozilla.fenix.R -import org.mozilla.fenix.settings.SupportUtils +import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor -class OnboardingPrivacyNoticeViewHolder(view: View) : RecyclerView.ViewHolder(view) { +class OnboardingPrivacyNoticeViewHolder( + view: View, + private val interactor: OnboardingInteractor +) : RecyclerView.ViewHolder(view) { init { view.header_text.setOnboardingIcon(R.drawable.ic_onboarding_privacy_notice) @@ -19,8 +22,7 @@ class OnboardingPrivacyNoticeViewHolder(view: View) : RecyclerView.ViewHolder(vi view.description_text.text = view.context.getString(R.string.onboarding_privacy_notice_description, appName) view.read_button.setOnClickListener { - val intent = SupportUtils.createCustomTabIntent(view.context, SupportUtils.getPrivacyNoticeUrl()) - view.context.startActivity(intent) + interactor.onReadPrivacyNoticeClicked() } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingWhatsNewViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingWhatsNewViewHolder.kt index 29d147b3d..93ec8ba14 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingWhatsNewViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingWhatsNewViewHolder.kt @@ -10,9 +10,12 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.onboarding_whats_new.view.* import org.mozilla.fenix.R -import org.mozilla.fenix.settings.SupportUtils +import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor -class OnboardingWhatsNewViewHolder(view: View) : RecyclerView.ViewHolder(view) { +class OnboardingWhatsNewViewHolder( + view: View, + private val interactor: OnboardingInteractor +) : RecyclerView.ViewHolder(view) { init { view.header_text.setOnboardingIcon(R.drawable.ic_whats_new) @@ -27,8 +30,7 @@ class OnboardingWhatsNewViewHolder(view: View) : RecyclerView.ViewHolder(view) { view.get_answers.text = textWithLink view.get_answers.setOnClickListener { - val intent = SupportUtils.createCustomTabIntent(view.context, SupportUtils.getWhatsNewUrl(view.context)) - view.context.startActivity(intent) + interactor.onWhatsNewGetAnswersClicked() } } diff --git a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt index 21419794c..1ba0c840d 100644 --- a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt @@ -50,6 +50,8 @@ class DefaultSessionControlControllerTest { private val hideOnboarding: () -> Unit = mockk(relaxed = true) private val openSettingsScreen: () -> Unit = mockk(relaxed = true) private val openSearchScreen: () -> Unit = mockk(relaxed = true) + private val openWhatsNewLink: () -> Unit = mockk(relaxed = true) + private val openPrivacyNotice: () -> Unit = mockk(relaxed = true) private val invokePendingDeleteJobs: () -> Unit = mockk(relaxed = true) private val registerCollectionStorageObserver: () -> Unit = mockk(relaxed = true) private val scrollToTheTop: () -> Unit = mockk(relaxed = true) @@ -96,7 +98,9 @@ class DefaultSessionControlControllerTest { scrollToTheTop = scrollToTheTop, showDeleteCollectionPrompt = showDeleteCollectionPrompt, openSettingsScreen = openSettingsScreen, - openSearchScreen = openSearchScreen + openSearchScreen = openSearchScreen, + openWhatsNewLink = openWhatsNewLink, + openPrivacyNotice = openPrivacyNotice ) }