for #7584 - fix about libraries toolbar theme

fixes #7584 #13970
pull/35/head
Gilbert Gilb's 4 years ago committed by liuche
parent 433a20db50
commit 9430546d12

@ -222,7 +222,7 @@ private fun assertLibrariesUsed() {
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
.perform(click()) .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() Espresso.pressBack()
} }

@ -12,6 +12,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.pm.PackageInfoCompat import androidx.core.content.pm.PackageInfoCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
import kotlinx.android.synthetic.main.fragment_about.* import kotlinx.android.synthetic.main.fragment_about.*
import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BrowserDirection
@ -167,8 +168,8 @@ class AboutFragment : Fragment(), AboutPageListener {
} }
private fun openLibrariesPage() { private fun openLibrariesPage() {
val intent = Intent(requireContext(), AboutLibrariesActivity::class.java) val navController = findNavController()
startActivity(intent) navController.navigate(R.id.action_aboutFragment_to_aboutLibrariesFragment)
} }
override fun onAboutItemClicked(item: AboutItem) { override fun onAboutItemClicked(item: AboutItem) {

@ -7,12 +7,15 @@ package org.mozilla.fenix.settings.about
import android.graphics.Typeface import android.graphics.Typeface
import android.os.Bundle import android.os.Bundle
import android.text.util.Linkify import android.text.util.Linkify
import android.view.View
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.ListView import android.widget.ListView
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog 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.R
import org.mozilla.fenix.ext.showToolbar
import java.nio.charset.Charset import java.nio.charset.Charset
import java.util.Locale import java.util.Locale
@ -27,33 +30,24 @@ import java.util.Locale
* such as AboutLibraries (https://github.com/mikepenz/AboutLibraries) * such as AboutLibraries (https://github.com/mikepenz/AboutLibraries)
* but we considered the risk of introducing such third-party dependency * but we considered the risk of introducing such third-party dependency
* to Fenix too high. Therefore, we use Google's gradle plugin to * 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. * to show the extracted licenses to the end-user.
*/ */
class AboutLibrariesActivity : AppCompatActivity() { class AboutLibrariesFragment : Fragment(R.layout.fragment_about_libraries) {
override fun onCreate(savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val appName = getString(R.string.app_name) val appName = getString(R.string.app_name)
title = getString(R.string.open_source_licenses_title, appName) showToolbar(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()
}
override fun onSupportNavigateUp(): Boolean { setupLibrariesListView(view.about_libraries_listview)
onBackPressed()
return true
} }
private fun setupLibrariesListView() { private fun setupLibrariesListView(listView: ListView) {
val libraries = parseLibraries() val libraries = parseLibraries()
val listView = findViewById<ListView>(R.id.about_libraries_listview) listView.adapter = ArrayAdapter(
listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, libraries) listView.context,
android.R.layout.simple_list_item_1,
libraries
)
listView.setOnItemClickListener { _, _, position, _ -> listView.setOnItemClickListener { _, _, position, _ ->
showLicenseDialog(libraries[position]) showLicenseDialog(libraries[position])
} }
@ -95,7 +89,7 @@ class AboutLibrariesActivity : AppCompatActivity() {
} }
private fun showLicenseDialog(libraryItem: LibraryItem) { private fun showLicenseDialog(libraryItem: LibraryItem) {
val dialog = AlertDialog.Builder(this) val dialog = AlertDialog.Builder(requireContext())
.setTitle(libraryItem.name) .setTitle(libraryItem.name)
.setMessage(libraryItem.license) .setMessage(libraryItem.license)
.create() .create()

@ -3,23 +3,16 @@
- License, v. 2.0. If a copy of the MPL was not distributed with this - 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/. --> - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<RelativeLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/about_libraries" android:id="@+id/about_libraries"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="true" android:orientation="vertical"
tools:context="org.mozilla.fenix.settings.about.AboutLibrariesActivity"> tools:context="org.mozilla.fenix.settings.about.AboutLibrariesFragment">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
<ListView <ListView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/about_libraries_listview" /> android:id="@+id/about_libraries_listview" />
</RelativeLayout> </LinearLayout>

@ -587,7 +587,16 @@
<fragment <fragment
android:id="@+id/aboutFragment" android:id="@+id/aboutFragment"
android:name="org.mozilla.fenix.settings.about.AboutFragment" /> android:name="org.mozilla.fenix.settings.about.AboutFragment"
tools:layout="@layout/fragment_about">
<action
android:id="@+id/action_aboutFragment_to_aboutLibrariesFragment"
app:destination="@id/aboutLibrariesFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" />
</fragment>
<fragment <fragment
android:id="@+id/secretSettingsPreference" android:id="@+id/secretSettingsPreference"
android:name="org.mozilla.fenix.settings.SecretSettingsFragment" android:name="org.mozilla.fenix.settings.SecretSettingsFragment"
@ -599,6 +608,10 @@
android:name="crashIntent" android:name="crashIntent"
app:argType="android.content.Intent" /> app:argType="android.content.Intent" />
</fragment> </fragment>
<fragment
android:id="@+id/aboutLibrariesFragment"
android:name="org.mozilla.fenix.settings.about.AboutLibrariesFragment"
tools:layout="@layout/fragment_about_libraries" />
<fragment <fragment
android:id="@+id/customizationFragment" android:id="@+id/customizationFragment"
android:name="org.mozilla.fenix.settings.CustomizationFragment" android:name="org.mozilla.fenix.settings.CustomizationFragment"

@ -7,30 +7,34 @@ package org.mozilla.fenix.settings.about
import android.widget.ListView import android.widget.ListView
import android.widget.TextView import android.widget.TextView
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.createAddedTestFragmentInNavHostActivity
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.robolectric.Robolectric
import org.robolectric.Shadows.shadowOf import org.robolectric.Shadows.shadowOf
import org.robolectric.shadows.ShadowAlertDialog import org.robolectric.shadows.ShadowAlertDialog
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class AboutLibrariesActivityTest { class AboutLibrariesFragmentTest {
@Test private lateinit var fragment: AboutLibrariesFragment
fun `activity should display licenses`() { private lateinit var librariesListView: ListView
val activity = Robolectric.buildActivity(AboutLibrariesActivity::class.java).create().get()
val listView = activity.findViewById<ListView>(R.id.about_libraries_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 @Test
fun `item click should open license dialog`() { fun `item click should open license dialog`() {
val activity = Robolectric.buildActivity(AboutLibrariesActivity::class.java).create().get() val listViewShadow = shadowOf(librariesListView)
val listView = activity.findViewById<ListView>(R.id.about_libraries_listview)
val listViewShadow = shadowOf(listView)
listViewShadow.clickFirstItemContainingText("org.mozilla.geckoview:geckoview") listViewShadow.clickFirstItemContainingText("org.mozilla.geckoview:geckoview")
val alertDialogShadow = ShadowAlertDialog.getLatestDialog() val alertDialogShadow = ShadowAlertDialog.getLatestDialog()
Loading…
Cancel
Save