diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt index 54ae398c4..fe6986fe4 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt @@ -222,7 +222,7 @@ private fun assertLibrariesUsed() { .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) .perform(click()) - onView(withId(R.id.toolbar)).check(matches(hasDescendant(withText(containsString("Firefox Preview | OSS Libraries"))))) + onView(withId(R.id.navigationToolbar)).check(matches(hasDescendant(withText(containsString("Firefox Preview | OSS Libraries"))))) Espresso.pressBack() } diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt index 3fd152943..06a7e81ff 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt @@ -12,6 +12,7 @@ import android.view.View import android.view.ViewGroup import androidx.core.content.pm.PackageInfoCompat import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration import kotlinx.android.synthetic.main.fragment_about.* import org.mozilla.fenix.BrowserDirection @@ -167,8 +168,8 @@ class AboutFragment : Fragment(), AboutPageListener { } private fun openLibrariesPage() { - val intent = Intent(requireContext(), AboutLibrariesActivity::class.java) - startActivity(intent) + val navController = findNavController() + navController.navigate(R.id.action_aboutFragment_to_aboutLibrariesFragment) } override fun onAboutItemClicked(item: AboutItem) { diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesActivity.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt similarity index 80% rename from app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesActivity.kt rename to app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt index bf69fb2f3..bf2e2b6a8 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt @@ -7,12 +7,15 @@ package org.mozilla.fenix.settings.about import android.graphics.Typeface import android.os.Bundle import android.text.util.Linkify +import android.view.View import android.widget.ArrayAdapter import android.widget.ListView import android.widget.TextView import androidx.appcompat.app.AlertDialog -import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import kotlinx.android.synthetic.main.fragment_about_libraries.view.* import org.mozilla.fenix.R +import org.mozilla.fenix.ext.showToolbar import java.nio.charset.Charset import java.util.Locale @@ -27,33 +30,24 @@ import java.util.Locale * such as AboutLibraries (https://github.com/mikepenz/AboutLibraries) * but we considered the risk of introducing such third-party dependency * to Fenix too high. Therefore, we use Google's gradle plugin to - * extract the dependencies and their licenses, and this activity + * extract the dependencies and their licenses, and this fragment * to show the extracted licenses to the end-user. */ -class AboutLibrariesActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - +class AboutLibrariesFragment : Fragment(R.layout.fragment_about_libraries) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val appName = getString(R.string.app_name) - title = getString(R.string.open_source_licenses_title, appName) - setContentView(R.layout.about_libraries_activity) - - setSupportActionBar(findViewById(R.id.toolbar)) - supportActionBar?.setDisplayHomeAsUpEnabled(true) - supportActionBar?.setDisplayShowHomeEnabled(true) - - setupLibrariesListView() - } + showToolbar(getString(R.string.open_source_licenses_title, appName)) - override fun onSupportNavigateUp(): Boolean { - onBackPressed() - return true + setupLibrariesListView(view.about_libraries_listview) } - private fun setupLibrariesListView() { + private fun setupLibrariesListView(listView: ListView) { val libraries = parseLibraries() - val listView = findViewById(R.id.about_libraries_listview) - listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, libraries) + listView.adapter = ArrayAdapter( + listView.context, + android.R.layout.simple_list_item_1, + libraries + ) listView.setOnItemClickListener { _, _, position, _ -> showLicenseDialog(libraries[position]) } @@ -95,7 +89,7 @@ class AboutLibrariesActivity : AppCompatActivity() { } private fun showLicenseDialog(libraryItem: LibraryItem) { - val dialog = AlertDialog.Builder(this) + val dialog = AlertDialog.Builder(requireContext()) .setTitle(libraryItem.name) .setMessage(libraryItem.license) .create() diff --git a/app/src/main/res/layout/about_libraries_activity.xml b/app/src/main/res/layout/fragment_about_libraries.xml similarity index 64% rename from app/src/main/res/layout/about_libraries_activity.xml rename to app/src/main/res/layout/fragment_about_libraries.xml index bf23bb437..58cea5d9d 100644 --- a/app/src/main/res/layout/about_libraries_activity.xml +++ b/app/src/main/res/layout/fragment_about_libraries.xml @@ -3,23 +3,16 @@ - 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/. --> - - + android:orientation="vertical" + tools:context="org.mozilla.fenix.settings.about.AboutLibrariesFragment"> - + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index d8f6cef7d..823149431 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -587,7 +587,16 @@ + android:name="org.mozilla.fenix.settings.about.AboutFragment" + tools:layout="@layout/fragment_about"> + + + (R.id.about_libraries_listview) +class AboutLibrariesFragmentTest { + private lateinit var fragment: AboutLibrariesFragment + private lateinit var librariesListView: ListView + + @Before + fun setup() { + fragment = createAddedTestFragmentInNavHostActivity { AboutLibrariesFragment() } + librariesListView = fragment.requireView().findViewById(R.id.about_libraries_listview) + } - assertTrue(0 < listView.count) + @Test + fun `fragment should display licenses`() { + assertTrue(0 < librariesListView.count) } @Test fun `item click should open license dialog`() { - val activity = Robolectric.buildActivity(AboutLibrariesActivity::class.java).create().get() - - val listView = activity.findViewById(R.id.about_libraries_listview) - val listViewShadow = shadowOf(listView) + val listViewShadow = shadowOf(librariesListView) listViewShadow.clickFirstItemContainingText("org.mozilla.geckoview:geckoview") val alertDialogShadow = ShadowAlertDialog.getLatestDialog()