From 3dc4ed1764f5bde3735536cc31e36c48b685faff Mon Sep 17 00:00:00 2001 From: Peyman-hme Date: Sun, 16 May 2021 16:32:49 +0430 Subject: [PATCH] Add "Open website" button in webview in license fragment, issue #6296 --- .../schabi/newpipe/about/LicenseFragment.kt | 30 +----------------- .../newpipe/about/LicenseFragmentHelper.kt | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 29 deletions(-) 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 d72ecf894..249955968 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.kt @@ -1,10 +1,7 @@ package org.schabi.newpipe.about import android.os.Bundle -import android.view.ContextMenu -import android.view.ContextMenu.ContextMenuInfo import android.view.LayoutInflater -import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.core.os.bundleOf @@ -14,7 +11,6 @@ import org.schabi.newpipe.R import org.schabi.newpipe.about.LicenseFragmentHelper.showLicense import org.schabi.newpipe.databinding.FragmentLicensesBinding import org.schabi.newpipe.databinding.ItemSoftwareComponentBinding -import org.schabi.newpipe.util.ShareUtils import java.util.Arrays import java.util.Objects @@ -73,7 +69,7 @@ class LicenseFragment : Fragment() { root.setOnClickListener { activeLicense = component.license compositeDisposable.add( - showLicense(activity, component.license) + showLicense(activity, component) ) } binding.licensesSoftwareComponents.addView(root) @@ -87,30 +83,6 @@ class LicenseFragment : Fragment() { return binding.root } - override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenuInfo?) { - val inflater = requireActivity().menuInflater - val component = v.tag as SoftwareComponent - menu.setHeaderTitle(component.name) - inflater.inflate(R.menu.software_component, menu) - super.onCreateContextMenu(menu, v, menuInfo) - componentForContextMenu = component - } - - override fun onContextItemSelected(item: MenuItem): Boolean { - // item.getMenuInfo() is null so we use the tag of the view - val component = componentForContextMenu ?: return false - when (item.itemId) { - R.id.menu_software_website -> { - ShareUtils.openUrlInBrowser(activity, component.link) - return true - } - R.id.menu_software_show_license -> compositeDisposable.add( - showLicense(activity, component.license) - ) - } - return false - } - override fun onSaveInstanceState(savedInstanceState: Bundle) { super.onSaveInstanceState(savedInstanceState) if (activeLicense != null) { 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 bdb3edabd..0532bf2be 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt @@ -10,6 +10,7 @@ import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.schedulers.Schedulers import org.schabi.newpipe.R import org.schabi.newpipe.util.Localization +import org.schabi.newpipe.util.ShareUtils import org.schabi.newpipe.util.ThemeHelper import java.io.BufferedReader import java.io.IOException @@ -113,4 +114,34 @@ object LicenseFragmentHelper { } } } + @JvmStatic + fun showLicense(context: Context?, component: SoftwareComponent): Disposable { + return if (context == null) { + Disposable.empty() + } else { + Observable.fromCallable { getFormattedLicense(context, component.license) } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { formattedLicense: String -> + val webViewData = Base64.encodeToString( + formattedLicense + .toByteArray(StandardCharsets.UTF_8), + Base64.NO_PADDING + ) + val webView = WebView(context) + webView.loadData(webViewData, "text/html; charset=UTF-8", "base64") + val alert = AlertDialog.Builder(context) + alert.setTitle(component.license.name) + alert.setView(webView) + Localization.assureCorrectAppLanguage(context) + alert.setNegativeButton( + context.getString(R.string.finish) + ) { dialog, _ -> dialog.dismiss() } + alert.setPositiveButton("Open website") { _, _ -> + ShareUtils.openUrlInBrowser(context, component.link) + } + alert.show() + } + } + } }