mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +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