You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
6.2 KiB
Kotlin
169 lines
6.2 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* 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/. */
|
|
|
|
package org.mozilla.fenix.settings.about
|
|
|
|
import android.content.Intent
|
|
import android.content.pm.PackageManager
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import androidx.core.content.pm.PackageInfoCompat
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.recyclerview.widget.DividerItemDecoration
|
|
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
|
|
import kotlinx.android.synthetic.main.fragment_about.*
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
import org.mozilla.fenix.BuildConfig
|
|
import org.mozilla.fenix.R
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
import org.mozilla.fenix.ext.requireComponents
|
|
import org.mozilla.fenix.lib.Do
|
|
import org.mozilla.fenix.settings.SupportUtils
|
|
import org.mozilla.fenix.settings.about.AboutItemType.LICENSING_INFO
|
|
import org.mozilla.fenix.settings.about.AboutItemType.PRIVACY_NOTICE
|
|
import org.mozilla.fenix.settings.about.AboutItemType.RIGHTS
|
|
import org.mozilla.fenix.settings.about.AboutItemType.SUPPORT
|
|
import org.mozilla.fenix.settings.about.AboutItemType.WHATS_NEW
|
|
import org.mozilla.fenix.whatsnew.WhatsNew
|
|
import org.mozilla.geckoview.BuildConfig as GeckoViewBuildConfig
|
|
|
|
/**
|
|
* Displays the logo and information about the app, including library versions.
|
|
*/
|
|
class AboutFragment : Fragment(), AboutPageListener {
|
|
private lateinit var appName: String
|
|
private val aboutPageAdapter: AboutPageAdapter = AboutPageAdapter(this)
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater,
|
|
container: ViewGroup?,
|
|
savedInstanceState: Bundle?
|
|
): View? {
|
|
val rootView = inflater.inflate(R.layout.fragment_about, container, false)
|
|
appName = getString(R.string.app_name)
|
|
activity?.title = getString(R.string.preferences_about, appName)
|
|
|
|
return rootView
|
|
}
|
|
|
|
@ExperimentalCoroutinesApi
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
about_list.run {
|
|
adapter = aboutPageAdapter
|
|
addItemDecoration(
|
|
DividerItemDecoration(
|
|
context,
|
|
DividerItemDecoration.VERTICAL
|
|
)
|
|
)
|
|
}
|
|
|
|
populateAboutHeader()
|
|
aboutPageAdapter.updateData(populateAboutList())
|
|
}
|
|
|
|
private fun populateAboutHeader() {
|
|
val aboutText = try {
|
|
val packageInfo = requireContext().packageManager.getPackageInfo(requireContext().packageName, 0)
|
|
val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo).toString()
|
|
val componentsVersion = mozilla.components.Build.version + ", " + mozilla.components.Build.gitHash
|
|
val maybeGecko = getString(R.string.gecko_view_abbreviation)
|
|
val geckoVersion = GeckoViewBuildConfig.MOZ_APP_VERSION + "-" + GeckoViewBuildConfig.MOZ_APP_BUILDID
|
|
|
|
String.format(
|
|
"%s (Build #%s)\n%s\n%s: %s",
|
|
packageInfo.versionName,
|
|
versionCode,
|
|
componentsVersion,
|
|
maybeGecko,
|
|
geckoVersion
|
|
)
|
|
} catch (e: PackageManager.NameNotFoundException) {
|
|
""
|
|
}
|
|
|
|
val content = getString(R.string.about_content, appName)
|
|
val buildDate = BuildConfig.BUILD_DATE
|
|
|
|
about_text.text = aboutText
|
|
about_content.text = content
|
|
build_date.text = buildDate
|
|
}
|
|
|
|
private fun populateAboutList(): List<AboutPageItem> {
|
|
val context = requireContext()
|
|
|
|
return listOf(
|
|
AboutPageItem.Item(
|
|
AboutItem.ExternalLink(
|
|
WHATS_NEW,
|
|
SupportUtils.getSumoURLForTopic(context, SupportUtils.SumoTopic.WHATS_NEW)
|
|
), getString(R.string.about_whats_new, getString(R.string.app_name))
|
|
),
|
|
AboutPageItem.Item(
|
|
AboutItem.ExternalLink(
|
|
SUPPORT,
|
|
SupportUtils.getSumoURLForTopic(context, SupportUtils.SumoTopic.HELP)
|
|
), getString(R.string.about_support)
|
|
),
|
|
AboutPageItem.Item(
|
|
AboutItem.ExternalLink(
|
|
PRIVACY_NOTICE,
|
|
SupportUtils.getPrivacyNoticeUrl()
|
|
), getString(R.string.about_privacy_notice)
|
|
),
|
|
AboutPageItem.Item(
|
|
AboutItem.ExternalLink(
|
|
RIGHTS,
|
|
SupportUtils.getSumoURLForTopic(context, SupportUtils.SumoTopic.YOUR_RIGHTS)
|
|
), getString(R.string.about_know_your_rights)
|
|
),
|
|
AboutPageItem.Item(
|
|
AboutItem.ExternalLink(LICENSING_INFO, ABOUT_LICENSE_URL),
|
|
getString(R.string.about_licensing_information)
|
|
),
|
|
AboutPageItem.Item(
|
|
AboutItem.Libraries,
|
|
getString(R.string.about_other_open_source_libraries)
|
|
)
|
|
)
|
|
}
|
|
|
|
private fun openLinkInCustomTab(url: String) {
|
|
context?.let { context ->
|
|
val intent = SupportUtils.createCustomTabIntent(context, url)
|
|
startActivity(intent)
|
|
}
|
|
}
|
|
|
|
private fun openLibrariesPage() {
|
|
startActivity(Intent(context, OssLicensesMenuActivity::class.java))
|
|
OssLicensesMenuActivity.setActivityTitle(getString(R.string.open_source_licenses_title, appName))
|
|
}
|
|
|
|
override fun onAboutItemClicked(item: AboutItem) {
|
|
Do exhaustive when (item) {
|
|
is AboutItem.ExternalLink -> {
|
|
if (item.type == WHATS_NEW) {
|
|
WhatsNew.userViewedWhatsNew(requireContext())
|
|
requireComponents.analytics.metrics.track(Event.WhatsNewTapped)
|
|
}
|
|
|
|
openLinkInCustomTab(item.url)
|
|
}
|
|
is AboutItem.Libraries -> {
|
|
openLibrariesPage()
|
|
}
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
private const val ABOUT_LICENSE_URL = "about:license"
|
|
}
|
|
}
|