From f728cdaf053e0e879b4125c9dd3604c1d0c43441 Mon Sep 17 00:00:00 2001 From: David Walsh Date: Thu, 30 Jan 2020 20:24:53 +0100 Subject: [PATCH] Bug 7189 - Provide page title in website information dialog (#7255) * Bug 7189 - Provide page title in website information dialog * Update QSFS test * Fix Tiger's nits --- .../org/mozilla/fenix/browser/BrowserFragment.kt | 1 + .../customtabs/ExternalAppBrowserFragment.kt | 1 + .../quicksettings/QuickSettingsFragmentStore.kt | 9 +++++++-- .../QuickSettingsSheetDialogFragment.kt | 1 + .../settings/quicksettings/WebsiteInfoView.kt | 5 +++++ .../res/layout/quicksettings_website_info.xml | 15 +++++++++------ app/src/main/res/navigation/nav_graph.xml | 3 +++ .../QuickSettingsFragmentStoreTest.kt | 10 +++++++--- 8 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 1aa5c5a6e..09aa67a5f 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -155,6 +155,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { BrowserFragmentDirections.actionBrowserFragmentToQuickSettingsSheetDialogFragment( sessionId = session.id, url = session.url, + title = session.title, isSecured = session.securityInfo.secure, sitePermissions = sitePermissions, gravity = getAppropriateLayoutGravity() diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt index f7c81714b..a3e234e77 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt @@ -161,6 +161,7 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler .actionExternalAppBrowserFragmentToQuickSettingsSheetDialogFragment( sessionId = session.id, url = session.url, + title = session.title, isSecured = session.securityInfo.secure, sitePermissions = sitePermissions, gravity = getAppropriateLayoutGravity() diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStore.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStore.kt index 5ced2fde5..fb0923002 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStore.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStore.kt @@ -67,6 +67,7 @@ class QuickSettingsFragmentStore( * * @param context [Context] used for access to various Android resources. * @param websiteUrl [String] the URL of the current web page. + * @param websiteTitle [String] the title of the current web page. * @param isSecured [Boolean] whether the connection is secured (TLS) or not. * @param permissions [SitePermissions]? list of website permissions and their status. * @param settings [Settings] application settings. @@ -75,12 +76,13 @@ class QuickSettingsFragmentStore( fun createStore( context: Context, websiteUrl: String, + websiteTitle: String, isSecured: Boolean, permissions: SitePermissions?, settings: Settings ) = QuickSettingsFragmentStore( QuickSettingsFragmentState( - webInfoState = createWebsiteInfoState(websiteUrl, isSecured), + webInfoState = createWebsiteInfoState(websiteUrl, websiteTitle, isSecured), websitePermissionsState = createWebsitePermissionState( context, permissions, @@ -101,13 +103,14 @@ class QuickSettingsFragmentStore( @VisibleForTesting fun createWebsiteInfoState( websiteUrl: String, + websiteTitle: String, isSecured: Boolean ): WebsiteInfoState { val (stringRes, iconRes, colorRes) = when (isSecured) { true -> getSecuredWebsiteUiValues false -> getInsecureWebsiteUiValues } - return WebsiteInfoState(websiteUrl, stringRes, iconRes, colorRes) + return WebsiteInfoState(websiteUrl, websiteTitle, stringRes, iconRes, colorRes) } /** @@ -217,12 +220,14 @@ data class QuickSettingsFragmentState( * [State] to be rendered by [WebsiteInfoView] indicating whether the connection is secure or not. * * @param websiteUrl [String] the URL of the current web page. + * @param websiteTitle [String] the title of the current web page. * @param securityInfoRes [StringRes] for the connection description. * @param iconRes [DrawableRes] image indicating the connection status. * @param iconTintRes [ColorRes] icon color. */ data class WebsiteInfoState( val websiteUrl: String, + val websiteTitle: String, @StringRes val securityInfoRes: Int, @DrawableRes val iconRes: Int, @ColorRes val iconTintRes: Int diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt index 148ca4f0b..f30c5d899 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt @@ -67,6 +67,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() { quickSettingsStore = QuickSettingsFragmentStore.createStore( context = context, websiteUrl = args.url, + websiteTitle = args.title, isSecured = args.isSecured, permissions = args.sitePermissions, settings = Settings.getInstance(context) diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt index 914933659..4190f29f7 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt @@ -37,6 +37,7 @@ class WebsiteInfoView( */ fun update(state: WebsiteInfoState) { bindUrl(state.websiteUrl) + bindTitle(state.websiteTitle) bindSecurityInfo(state.securityInfoRes, state.iconRes, state.iconTintRes) } @@ -44,6 +45,10 @@ class WebsiteInfoView( view.url.text = url } + private fun bindTitle(title: String) { + view.title.text = title + } + private fun bindSecurityInfo( @StringRes securityInfoRes: Int, @DrawableRes iconRes: Int, diff --git a/app/src/main/res/layout/quicksettings_website_info.xml b/app/src/main/res/layout/quicksettings_website_info.xml index a1f5eef58..1c1976a3d 100644 --- a/app/src/main/res/layout/quicksettings_website_info.xml +++ b/app/src/main/res/layout/quicksettings_website_info.xml @@ -12,15 +12,21 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 4d798eec2..71447aaf2 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -582,6 +582,9 @@ + diff --git a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStoreTest.kt b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStoreTest.kt index 47ad85d9c..003acc020 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStoreTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsFragmentStoreTest.kt @@ -57,7 +57,7 @@ class QuickSettingsFragmentStoreTest { val permissions = mockk(relaxed = true) val store = QuickSettingsFragmentStore.createStore( - context, "url", true, permissions, settings + context, "url", "Hello", true, permissions, settings ) assertAll { @@ -71,13 +71,15 @@ class QuickSettingsFragmentStoreTest { @Test fun `createWebsiteInfoState constructs a WebsiteInfoState with the right values for a secure connection`() { val websiteUrl = "https://host.com/page1" + val websiteTitle = "Hello" val securedStatus = true - val state = QuickSettingsFragmentStore.createWebsiteInfoState(websiteUrl, securedStatus) + val state = QuickSettingsFragmentStore.createWebsiteInfoState(websiteUrl, websiteTitle, securedStatus) assertAll { assertThat(state).isNotNull() assertThat(state.websiteUrl).isSameAs(websiteUrl) + assertThat(state.websiteTitle).isSameAs(websiteTitle) assertThat(state.securityInfoRes).isEqualTo(secureStringRes) assertThat(state.iconRes).isEqualTo(secureDrawableRes) assertThat(state.iconTintRes).isEqualTo(secureColorRes) @@ -87,13 +89,15 @@ class QuickSettingsFragmentStoreTest { @Test fun `createWebsiteInfoState constructs a WebsiteInfoState with the right values for an insecure connection`() { val websiteUrl = "https://host.com/page1" + val websiteTitle = "Hello" val securedStatus = false - val state = QuickSettingsFragmentStore.createWebsiteInfoState(websiteUrl, securedStatus) + val state = QuickSettingsFragmentStore.createWebsiteInfoState(websiteUrl, websiteTitle, securedStatus) assertAll { assertThat(state).isNotNull() assertThat(state.websiteUrl).isSameAs(websiteUrl) + assertThat(state.websiteTitle).isSameAs(websiteTitle) assertThat(state.securityInfoRes).isEqualTo(insecureStringRes) assertThat(state.iconRes).isEqualTo(insecureDrawableRes) assertThat(state.iconTintRes).isEqualTo(insecureColorRes)