mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 16:18:55 +01:00 
			
		
		
		
	@@ -1,13 +1,29 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.base.activity
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.util.LocaleHelper
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
abstract class BaseActivity : AppCompatActivity() {
 | 
			
		||||
 | 
			
		||||
    val preferences: PreferencesHelper by injectLazy()
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        @Suppress("LeakingThis")
 | 
			
		||||
        LocaleHelper.updateConfiguration(this)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        setTheme(when (preferences.theme()) {
 | 
			
		||||
            2 -> R.style.Theme_Tachiyomi_Dark
 | 
			
		||||
            3 -> R.style.Theme_Tachiyomi_Amoled
 | 
			
		||||
            4 -> R.style.Theme_Tachiyomi_DarkBlue
 | 
			
		||||
            else -> R.style.Theme_Tachiyomi
 | 
			
		||||
        })
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ import eu.kanade.tachiyomi.ui.base.controller.SecondaryDrawerController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 | 
			
		||||
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
 | 
			
		||||
import eu.kanade.tachiyomi.ui.manga.MangaController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.manga.info.MangaWebViewController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
 | 
			
		||||
import eu.kanade.tachiyomi.util.*
 | 
			
		||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
 | 
			
		||||
import kotlinx.android.synthetic.main.catalogue_controller.*
 | 
			
		||||
@@ -295,8 +295,9 @@ open class BrowseCatalogueController(bundle: Bundle) :
 | 
			
		||||
    private fun openInWebView() {
 | 
			
		||||
        val source = presenter.source as? HttpSource ?: return
 | 
			
		||||
 | 
			
		||||
        router.pushController(MangaWebViewController(source.id, source.baseUrl)
 | 
			
		||||
                .withFadeTransaction())
 | 
			
		||||
        val activity = activity ?: return
 | 
			
		||||
        val intent = WebViewActivity.newIntent(activity, source.id, source.baseUrl, presenter.source.name)
 | 
			
		||||
        startActivity(intent)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -5,14 +5,13 @@ import android.app.SearchManager
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.graphics.Color
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import androidx.appcompat.graphics.drawable.DrawerArrowDrawable
 | 
			
		||||
import androidx.core.view.GravityCompat
 | 
			
		||||
import androidx.drawerlayout.widget.DrawerLayout
 | 
			
		||||
import androidx.appcompat.graphics.drawable.DrawerArrowDrawable
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import com.bluelinelabs.conductor.*
 | 
			
		||||
import eu.kanade.tachiyomi.Migrations
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.controller.*
 | 
			
		||||
import eu.kanade.tachiyomi.ui.catalogue.CatalogueController
 | 
			
		||||
@@ -26,15 +25,12 @@ import eu.kanade.tachiyomi.ui.recently_read.RecentlyReadController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.setting.SettingsMainController
 | 
			
		||||
import eu.kanade.tachiyomi.util.openInBrowser
 | 
			
		||||
import kotlinx.android.synthetic.main.main_activity.*
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MainActivity : BaseActivity() {
 | 
			
		||||
 | 
			
		||||
    private lateinit var router: Router
 | 
			
		||||
 | 
			
		||||
    val preferences: PreferencesHelper by injectLazy()
 | 
			
		||||
 | 
			
		||||
    private var drawerArrow: DrawerArrowDrawable? = null
 | 
			
		||||
 | 
			
		||||
    private var secondaryDrawer: ViewGroup? = null
 | 
			
		||||
@@ -50,12 +46,6 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
    lateinit var tabAnimator: TabsAnimator
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        setTheme(when (preferences.theme()) {
 | 
			
		||||
            2 -> R.style.Theme_Tachiyomi_Dark
 | 
			
		||||
            3 -> R.style.Theme_Tachiyomi_Amoled
 | 
			
		||||
            4 -> R.style.Theme_Tachiyomi_DarkBlue
 | 
			
		||||
            else -> R.style.Theme_Tachiyomi
 | 
			
		||||
        })
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
 | 
			
		||||
        // Do not let the launcher create a new activity http://stackoverflow.com/questions/16283079
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,7 @@ import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
 | 
			
		||||
import eu.kanade.tachiyomi.ui.main.MainActivity
 | 
			
		||||
import eu.kanade.tachiyomi.ui.manga.MangaController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
 | 
			
		||||
import eu.kanade.tachiyomi.util.openInBrowser
 | 
			
		||||
import eu.kanade.tachiyomi.util.snack
 | 
			
		||||
import eu.kanade.tachiyomi.util.toast
 | 
			
		||||
@@ -297,8 +298,9 @@ class MangaInfoController : NucleusController<MangaInfoPresenter>(),
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        parentController?.router?.pushController(MangaWebViewController(source.id, url)
 | 
			
		||||
            .withFadeTransaction())
 | 
			
		||||
        val activity = activity ?: return
 | 
			
		||||
        val intent = WebViewActivity.newIntent(activity, source.id, url, presenter.manga.title)
 | 
			
		||||
        startActivity(intent)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,94 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.manga.info
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.*
 | 
			
		||||
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 eu.kanade.tachiyomi.util.WebViewClientCompat
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
class MangaWebViewController(bundle: Bundle? = null) : BaseController(bundle) {
 | 
			
		||||
 | 
			
		||||
    private val sourceManager by injectLazy<SourceManager>()
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        setHasOptionsMenu(true)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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.webViewClient = object : WebViewClientCompat() {
 | 
			
		||||
            override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
 | 
			
		||||
                view.loadUrl(url)
 | 
			
		||||
                return true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        web.settings.javaScriptEnabled = true
 | 
			
		||||
        web.settings.userAgentString = source.headers["User-Agent"]
 | 
			
		||||
        web.loadUrl(url, headers)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
 | 
			
		||||
        inflater.inflate(R.menu.web_view, menu)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onPrepareOptionsMenu(menu: Menu) {
 | 
			
		||||
        val web = view as WebView
 | 
			
		||||
        menu.findItem(R.id.action_forward).isVisible = web.canGoForward()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
 | 
			
		||||
        when (item.itemId) {
 | 
			
		||||
            R.id.action_forward -> {
 | 
			
		||||
                val web = view as WebView
 | 
			
		||||
                if (web.canGoForward()) web.goForward()
 | 
			
		||||
            }
 | 
			
		||||
            R.id.action_refresh -> {
 | 
			
		||||
                val web = view as WebView
 | 
			
		||||
                web.reload()
 | 
			
		||||
            }
 | 
			
		||||
            R.id.action_close -> router.popController(this)
 | 
			
		||||
            else -> return super.onOptionsItemSelected(item)
 | 
			
		||||
        }
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun handleBack(): Boolean {
 | 
			
		||||
        val web = view as WebView
 | 
			
		||||
        if (web.canGoBack()) {
 | 
			
		||||
            web.goBack()
 | 
			
		||||
            return true
 | 
			
		||||
        }
 | 
			
		||||
        return super.handleBack()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,115 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.webview
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.graphics.Bitmap
 | 
			
		||||
import android.graphics.Color
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.Menu
 | 
			
		||||
import android.view.MenuItem
 | 
			
		||||
import android.webkit.WebView
 | 
			
		||||
import androidx.core.graphics.ColorUtils
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.source.SourceManager
 | 
			
		||||
import eu.kanade.tachiyomi.source.online.HttpSource
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
 | 
			
		||||
import eu.kanade.tachiyomi.util.WebViewClientCompat
 | 
			
		||||
import kotlinx.android.synthetic.main.webview_activity.toolbar
 | 
			
		||||
import kotlinx.android.synthetic.main.webview_activity.webview
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class WebViewActivity : BaseActivity() {
 | 
			
		||||
 | 
			
		||||
    private val sourceManager by injectLazy<SourceManager>()
 | 
			
		||||
 | 
			
		||||
    private var bundle: Bundle? = null
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
        setContentView(R.layout.webview_activity)
 | 
			
		||||
 | 
			
		||||
        title = intent.extras?.getString(TITLE_KEY)
 | 
			
		||||
        setSupportActionBar(toolbar)
 | 
			
		||||
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
 | 
			
		||||
        toolbar.setNavigationOnClickListener {
 | 
			
		||||
            super.onBackPressed()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (bundle == null) {
 | 
			
		||||
            val source = sourceManager.get(intent.extras!!.getLong(SOURCE_KEY)) as? HttpSource ?: return
 | 
			
		||||
            val url = intent.extras!!.getString(URL_KEY) ?: return
 | 
			
		||||
            val headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }
 | 
			
		||||
 | 
			
		||||
            webview.webViewClient = object : WebViewClientCompat() {
 | 
			
		||||
                override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
 | 
			
		||||
                    view.loadUrl(url)
 | 
			
		||||
                    return true
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onPageFinished(view: WebView?, url: String?) {
 | 
			
		||||
                    super.onPageFinished(view, url)
 | 
			
		||||
                    invalidateOptionsMenu()
 | 
			
		||||
                    title = view?.title
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
 | 
			
		||||
                    super.onPageStarted(view, url, favicon)
 | 
			
		||||
                    invalidateOptionsMenu()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            webview.settings.javaScriptEnabled = true
 | 
			
		||||
            webview.settings.userAgentString = source.headers["User-Agent"]
 | 
			
		||||
            webview.loadUrl(url, headers)
 | 
			
		||||
        } else {
 | 
			
		||||
            webview.restoreState(bundle)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
 | 
			
		||||
        menuInflater.inflate(R.menu.webview, menu)
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
 | 
			
		||||
        val backItem = toolbar.menu.findItem(R.id.action_web_back)
 | 
			
		||||
        val forwardItem = toolbar.menu.findItem(R.id.action_web_forward)
 | 
			
		||||
        backItem?.isEnabled = webview.canGoBack()
 | 
			
		||||
        forwardItem?.isEnabled = webview.canGoForward()
 | 
			
		||||
 | 
			
		||||
        val translucentWhite = ColorUtils.setAlphaComponent(Color.WHITE, 127)
 | 
			
		||||
        backItem.icon?.setTint(if (webview.canGoBack()) Color.WHITE else translucentWhite)
 | 
			
		||||
        forwardItem?.icon?.setTint(if (webview.canGoForward()) Color.WHITE else translucentWhite)
 | 
			
		||||
 | 
			
		||||
        return super.onPrepareOptionsMenu(menu)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onBackPressed() {
 | 
			
		||||
        if (webview.canGoBack()) webview.goBack()
 | 
			
		||||
        else super.onBackPressed()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
 | 
			
		||||
        when (item.itemId) {
 | 
			
		||||
            R.id.action_web_back -> webview.goBack()
 | 
			
		||||
            R.id.action_web_forward -> webview.goForward()
 | 
			
		||||
            R.id.action_web_refresh -> webview.reload()
 | 
			
		||||
        }
 | 
			
		||||
        return super.onOptionsItemSelected(item)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        private const val SOURCE_KEY = "source_key"
 | 
			
		||||
        private const val URL_KEY = "url_key"
 | 
			
		||||
        private const val TITLE_KEY = "title_key"
 | 
			
		||||
 | 
			
		||||
        fun newIntent(context: Context, sourceId: Long, url: String, title: String?): Intent {
 | 
			
		||||
            val intent = Intent(context, WebViewActivity::class.java)
 | 
			
		||||
            intent.putExtra(SOURCE_KEY, sourceId)
 | 
			
		||||
            intent.putExtra(URL_KEY, url)
 | 
			
		||||
            intent.putExtra(TITLE_KEY, title)
 | 
			
		||||
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
 | 
			
		||||
            return intent
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user