Merge pull request #6314 from Peyman-hme/Add-Open-website-button-to-webview-in-license-fragment-issue-#6296
Add "Open website" button to WebView in license fragment
This commit is contained in:
commit
63cff25616
|
@ -1,10 +1,7 @@
|
||||||
package org.schabi.newpipe.about
|
package org.schabi.newpipe.about
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.ContextMenu
|
|
||||||
import android.view.ContextMenu.ContextMenuInfo
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.MenuItem
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.os.bundleOf
|
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.about.LicenseFragmentHelper.showLicense
|
||||||
import org.schabi.newpipe.databinding.FragmentLicensesBinding
|
import org.schabi.newpipe.databinding.FragmentLicensesBinding
|
||||||
import org.schabi.newpipe.databinding.ItemSoftwareComponentBinding
|
import org.schabi.newpipe.databinding.ItemSoftwareComponentBinding
|
||||||
import org.schabi.newpipe.util.ShareUtils
|
|
||||||
import java.util.Arrays
|
import java.util.Arrays
|
||||||
import java.util.Objects
|
import java.util.Objects
|
||||||
|
|
||||||
|
@ -73,7 +69,7 @@ class LicenseFragment : Fragment() {
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
activeLicense = component.license
|
activeLicense = component.license
|
||||||
compositeDisposable.add(
|
compositeDisposable.add(
|
||||||
showLicense(activity, component.license)
|
showLicense(activity, component)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
binding.licensesSoftwareComponents.addView(root)
|
binding.licensesSoftwareComponents.addView(root)
|
||||||
|
@ -87,30 +83,6 @@ class LicenseFragment : Fragment() {
|
||||||
return binding.root
|
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) {
|
override fun onSaveInstanceState(savedInstanceState: Bundle) {
|
||||||
super.onSaveInstanceState(savedInstanceState)
|
super.onSaveInstanceState(savedInstanceState)
|
||||||
if (activeLicense != null) {
|
if (activeLicense != null) {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
import org.schabi.newpipe.R
|
import org.schabi.newpipe.R
|
||||||
import org.schabi.newpipe.util.Localization
|
import org.schabi.newpipe.util.Localization
|
||||||
|
import org.schabi.newpipe.util.ShareUtils
|
||||||
import org.schabi.newpipe.util.ThemeHelper
|
import org.schabi.newpipe.util.ThemeHelper
|
||||||
import java.io.BufferedReader
|
import java.io.BufferedReader
|
||||||
import java.io.IOException
|
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.setPositiveButton(
|
||||||
|
R.string.dismiss
|
||||||
|
) { dialog, _ -> dialog.dismiss() }
|
||||||
|
alert.setNeutralButton(R.string.open_website_license) { _, _ ->
|
||||||
|
ShareUtils.openUrlInBrowser(context, component.link)
|
||||||
|
}
|
||||||
|
alert.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -742,4 +742,5 @@
|
||||||
<string name="metadata_privacy_unlisted">Unlisted</string>
|
<string name="metadata_privacy_unlisted">Unlisted</string>
|
||||||
<string name="metadata_privacy_private">Private</string>
|
<string name="metadata_privacy_private">Private</string>
|
||||||
<string name="metadata_privacy_internal">Internal</string>
|
<string name="metadata_privacy_internal">Internal</string>
|
||||||
|
<string name="open_website_license">Open Website</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue