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)))
.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()
}

@ -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) {

@ -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<ListView>(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()

@ -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/. -->
<RelativeLayout
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/about_libraries"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
tools:context="org.mozilla.fenix.settings.about.AboutLibrariesActivity">
<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" />
android:orientation="vertical"
tools:context="org.mozilla.fenix.settings.about.AboutLibrariesFragment">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/about_libraries_listview" />
</RelativeLayout>
</LinearLayout>

@ -587,7 +587,16 @@
<fragment
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
android:id="@+id/secretSettingsPreference"
android:name="org.mozilla.fenix.settings.SecretSettingsFragment"
@ -599,6 +608,10 @@
android:name="crashIntent"
app:argType="android.content.Intent" />
</fragment>
<fragment
android:id="@+id/aboutLibrariesFragment"
android:name="org.mozilla.fenix.settings.about.AboutLibrariesFragment"
tools:layout="@layout/fragment_about_libraries" />
<fragment
android:id="@+id/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.TextView
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.R
import org.mozilla.fenix.createAddedTestFragmentInNavHostActivity
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.robolectric.Robolectric
import org.robolectric.Shadows.shadowOf
import org.robolectric.shadows.ShadowAlertDialog
@RunWith(FenixRobolectricTestRunner::class)
class AboutLibrariesActivityTest {
@Test
fun `activity should display licenses`() {
val activity = Robolectric.buildActivity(AboutLibrariesActivity::class.java).create().get()
val listView = activity.findViewById<ListView>(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<ListView>(R.id.about_libraries_listview)
val listViewShadow = shadowOf(listView)
val listViewShadow = shadowOf(librariesListView)
listViewShadow.clickFirstItemContainingText("org.mozilla.geckoview:geckoview")
val alertDialogShadow = ShadowAlertDialog.getLatestDialog()
Loading…
Cancel
Save