mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Add "Open website" button in webview in license fragment, issue #6296
This commit is contained in:
		| @@ -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) { | ||||
|   | ||||
| @@ -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() | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Peyman-hme
					Peyman-hme