mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add option to open manga details in a WebView
This commit is contained in:
		| @@ -15,12 +15,7 @@ import android.support.customtabs.CustomTabsIntent | ||||
| import android.support.v4.content.pm.ShortcutInfoCompat | ||||
| import android.support.v4.content.pm.ShortcutManagerCompat | ||||
| import android.support.v4.graphics.drawable.IconCompat | ||||
| import android.view.LayoutInflater | ||||
| import android.view.Menu | ||||
| import android.view.MenuInflater | ||||
| import android.view.MenuItem | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import android.view.* | ||||
| import android.widget.Toast | ||||
| import com.afollestad.materialdialogs.MaterialDialog | ||||
| import com.bumptech.glide.load.engine.DiskCacheStrategy | ||||
| @@ -138,6 +133,7 @@ class MangaInfoController : NucleusController<MangaInfoPresenter>(), | ||||
|     override fun onOptionsItemSelected(item: MenuItem): Boolean { | ||||
|         when (item.itemId) { | ||||
|             R.id.action_open_in_browser -> openInBrowser() | ||||
|             R.id.action_open_in_web_view -> openInWebView() | ||||
|             R.id.action_share -> shareManga() | ||||
|             R.id.action_add_to_home_screen -> addToHomeScreen() | ||||
|             else -> return super.onOptionsItemSelected(item) | ||||
| @@ -302,6 +298,19 @@ class MangaInfoController : NucleusController<MangaInfoPresenter>(), | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun openInWebView() { | ||||
|         val source = presenter.source as? HttpSource ?: return | ||||
|  | ||||
|         val url = try { | ||||
|             source.mangaDetailsRequest(presenter.manga).url().toString() | ||||
|         } catch (e: Exception) { | ||||
|             return | ||||
|         } | ||||
|  | ||||
|         parentController?.router?.pushController(MangaWebViewController(source.id, url) | ||||
|             .withFadeTransaction()) | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Called to run Intent with [Intent.ACTION_SEND], which show share dialog. | ||||
|      */ | ||||
|   | ||||
| @@ -0,0 +1,51 @@ | ||||
| package eu.kanade.tachiyomi.ui.manga.info | ||||
|  | ||||
| import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import android.view.View | ||||
| import android.view.ViewGroup | ||||
| import android.webkit.WebView | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.source.SourceManager | ||||
| import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.base.controller.BaseController | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|  | ||||
| class MangaWebViewController(bundle: Bundle? = null) : BaseController(bundle) { | ||||
|  | ||||
|     private val sourceManager by injectLazy<SourceManager>() | ||||
|  | ||||
|     constructor(sourceId: Long, url: String) : this(Bundle().apply { | ||||
|         putLong(SOURCE_KEY, sourceId) | ||||
|         putString(URL_KEY, url) | ||||
|     }) | ||||
|  | ||||
|     override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View { | ||||
|         return inflater.inflate(R.layout.manga_info_web_controller, container, false) | ||||
|     } | ||||
|  | ||||
|     override fun onViewCreated(view: View) { | ||||
|         super.onViewCreated(view) | ||||
|         val source = sourceManager.get(args.getLong(SOURCE_KEY)) as? HttpSource ?: return | ||||
|         val url = args.getString(URL_KEY) ?: return | ||||
|         val headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" } | ||||
|  | ||||
|         val web = view as WebView | ||||
|         web.settings.javaScriptEnabled = true | ||||
|         web.settings.userAgentString = source.headers["User-Agent"] | ||||
|         web.loadUrl(url, headers) | ||||
|     } | ||||
|  | ||||
|     override fun onDestroyView(view: View) { | ||||
|         val web = view as WebView | ||||
|         web.stopLoading() | ||||
|         web.destroy() | ||||
|         super.onDestroyView(view) | ||||
|     } | ||||
|  | ||||
|     private companion object { | ||||
|         const val SOURCE_KEY = "source_key" | ||||
|         const val URL_KEY = "url_key" | ||||
|     } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user