diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.kt b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.kt
index c816d78be..f19ecd74a 100644
--- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.kt
+++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.kt
@@ -8,7 +8,6 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import io.reactivex.rxjava3.disposables.CompositeDisposable
import org.schabi.newpipe.R
-import org.schabi.newpipe.about.LicenseFragmentHelper.showLicense
import org.schabi.newpipe.databinding.FragmentLicensesBinding
import org.schabi.newpipe.databinding.ItemSoftwareComponentBinding
diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt
index 3acb50cb9..6e3aa4be8 100644
--- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt
+++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt
@@ -14,100 +14,90 @@ import org.schabi.newpipe.util.ThemeHelper
import org.schabi.newpipe.util.external_communication.ShareUtils
import java.io.IOException
-object LicenseFragmentHelper {
- /**
- * @param context the context to use
- * @param license the license
- * @return String which contains a HTML formatted license page
- * styled according to the context's theme
- */
- private fun getFormattedLicense(context: Context, license: License): String {
- try {
- return context.assets.open(license.filename).bufferedReader().use { it.readText() }
- // split the HTML file and insert the stylesheet into the HEAD of the file
- .replace("", "")
- } catch (e: IOException) {
- throw IllegalArgumentException("Could not get license file: ${license.filename}", e)
+/**
+ * @param context the context to use
+ * @param license the license
+ * @return String which contains a HTML formatted license page
+ * styled according to the context's theme
+ */
+private fun getFormattedLicense(context: Context, license: License): String {
+ try {
+ return context.assets.open(license.filename).bufferedReader().use { it.readText() }
+ // split the HTML file and insert the stylesheet into the HEAD of the file
+ .replace("", "")
+ } catch (e: IOException) {
+ throw IllegalArgumentException("Could not get license file: ${license.filename}", e)
+ }
+}
+
+/**
+ * @param context the Android context
+ * @return String which is a CSS stylesheet according to the context's theme
+ */
+private fun getLicenseStylesheet(context: Context): String {
+ val isLightTheme = ThemeHelper.isLightThemeSelected(context)
+ val licenseBackgroundColor = getHexRGBColor(
+ context, if (isLightTheme) R.color.light_license_background_color else R.color.dark_license_background_color
+ )
+ val licenseTextColor = getHexRGBColor(
+ context, if (isLightTheme) R.color.light_license_text_color else R.color.dark_license_text_color
+ )
+ val youtubePrimaryColor = getHexRGBColor(
+ context, if (isLightTheme) R.color.light_youtube_primary_color else R.color.dark_youtube_primary_color
+ )
+ return "body{padding:12px 15px;margin:0;background:#$licenseBackgroundColor;color:#$licenseTextColor}" +
+ "a[href]{color:#$youtubePrimaryColor}pre{white-space:pre-wrap}"
+}
+
+/**
+ * Cast R.color to a hexadecimal color value.
+ *
+ * @param context the context to use
+ * @param color the color number from R.color
+ * @return a six characters long String with hexadecimal RGB values
+ */
+private fun getHexRGBColor(context: Context, color: Int): String {
+ return context.getString(color).substring(3)
+}
+
+fun showLicense(context: Context?, component: SoftwareComponent): Disposable {
+ return showLicense(context, component.license) {
+ setPositiveButton(R.string.dismiss) { dialog, _ ->
+ dialog.dismiss()
}
- }
-
- /**
- * @param context the Android context
- * @return String which is a CSS stylesheet according to the context's theme
- */
- private fun getLicenseStylesheet(context: Context): String {
- val isLightTheme = ThemeHelper.isLightThemeSelected(context)
- return (
- "body{padding:12px 15px;margin:0;" + "background:#" + getHexRGBColor(
- context,
- if (isLightTheme) R.color.light_license_background_color
- else R.color.dark_license_background_color
- ) + ";" + "color:#" + getHexRGBColor(
- context,
- if (isLightTheme) R.color.light_license_text_color
- else R.color.dark_license_text_color
- ) + "}" + "a[href]{color:#" + getHexRGBColor(
- context,
- if (isLightTheme) R.color.light_youtube_primary_color
- else R.color.dark_youtube_primary_color
- ) + "}" + "pre{white-space:pre-wrap}"
- )
- }
-
- /**
- * Cast R.color to a hexadecimal color value.
- *
- * @param context the context to use
- * @param color the color number from R.color
- * @return a six characters long String with hexadecimal RGB values
- */
- private fun getHexRGBColor(context: Context, color: Int): String {
- return context.getString(color).substring(3)
- }
-
- fun showLicense(context: Context?, license: License): Disposable {
- return showLicense(context, license) { alertDialog ->
- alertDialog.setPositiveButton(R.string.ok) { dialog, _ ->
- dialog.dismiss()
- }
- }
- }
-
- fun showLicense(context: Context?, component: SoftwareComponent): Disposable {
- return showLicense(context, component.license) { alertDialog ->
- alertDialog.setPositiveButton(R.string.dismiss) { dialog, _ ->
- dialog.dismiss()
- }
- alertDialog.setNeutralButton(R.string.open_website_license) { _, _ ->
- ShareUtils.openUrlInBrowser(context!!, component.link)
- }
- }
- }
-
- private fun showLicense(
- context: Context?,
- license: License,
- block: (AlertDialog.Builder) -> Unit
- ): Disposable {
- return if (context == null) {
- Disposable.empty()
- } else {
- Observable.fromCallable { getFormattedLicense(context, license) }
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe { formattedLicense ->
- val webViewData = Base64.encodeToString(formattedLicense.toByteArray(), Base64.NO_PADDING)
- val webView = WebView(context)
- webView.loadData(webViewData, "text/html; charset=UTF-8", "base64")
-
- AlertDialog.Builder(context).apply {
- setTitle(license.name)
- setView(webView)
- Localization.assureCorrectAppLanguage(context)
- block(this)
- show()
- }
- }
+ setNeutralButton(R.string.open_website_license) { _, _ ->
+ ShareUtils.openUrlInBrowser(context!!, component.link)
}
}
}
+
+fun showLicense(context: Context?, license: License) = showLicense(context, license) {
+ setPositiveButton(R.string.ok) { dialog, _ -> dialog.dismiss() }
+}
+
+private fun showLicense(
+ context: Context?,
+ license: License,
+ block: AlertDialog.Builder.() -> AlertDialog.Builder
+): Disposable {
+ return if (context == null) {
+ Disposable.empty()
+ } else {
+ Observable.fromCallable { getFormattedLicense(context, license) }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe { formattedLicense ->
+ val webViewData =
+ Base64.encodeToString(formattedLicense.toByteArray(), Base64.NO_PADDING)
+ val webView = WebView(context)
+ webView.loadData(webViewData, "text/html; charset=UTF-8", "base64")
+
+ Localization.assureCorrectAppLanguage(context)
+ AlertDialog.Builder(context)
+ .setTitle(license.name)
+ .setView(webView)
+ .block()
+ .show()
+ }
+ }
+}