Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/twidere/fragment/BaseWebViewFragment.kt

105 lines
3.2 KiB
Kotlin
Raw Normal View History

2016-07-06 15:21:34 +02:00
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import org.mariotaku.twidere.util.support.WebSettingsSupport
import org.mariotaku.twidere.util.webkit.DefaultWebViewClient
@SuppressLint("SetJavaScriptEnabled")
2017-01-12 17:26:44 +01:00
open class BaseWebViewFragment : BaseFragment() {
2016-07-06 15:21:34 +02:00
private var internalWebView: WebView? = null
private var webViewAvailable: Boolean = false
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
2017-08-27 16:28:44 +02:00
val view = webView!!
view.webViewClient = createWebViewClient()
view.settings.apply {
builtInZoomControls = true
javaScriptEnabled = true
WebSettingsSupport.setAllowUniversalAccessFromFileURLs(this, true)
}
2016-07-06 15:21:34 +02:00
}
protected fun createWebViewClient(): WebViewClient {
return DefaultWebViewClient(requireActivity())
2016-07-06 15:21:34 +02:00
}
/**
* Called to instantiate the view. Creates and returns the WebView.
*/
2017-04-12 10:17:20 +02:00
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
2017-04-10 12:09:16 +02:00
savedInstanceState: Bundle?): View? {
2016-07-06 15:21:34 +02:00
internalWebView?.destroy()
internalWebView = activity?.let { WebView(it) }
2016-07-06 15:21:34 +02:00
webViewAvailable = true
return internalWebView
}
/**
* Called when the fragment is visible to the user and actively running. Resumes the WebView.
*/
override fun onPause() {
super.onPause()
internalWebView!!.onPause()
}
/**
* Called when the fragment is no longer resumed. Pauses the WebView.
*/
override fun onResume() {
internalWebView!!.onResume()
super.onResume()
}
/**
* Called when the WebView has been detached from the fragment.
* The WebView is no longer available after this time.
*/
override fun onDestroyView() {
webViewAvailable = false
super.onDestroyView()
}
/**
* Called when the fragment is no longer in use. Destroys the internal state of the WebView.
*/
override fun onDestroy() {
2016-07-14 14:00:27 +02:00
internalWebView?.destroy()
internalWebView = null
2016-07-06 15:21:34 +02:00
super.onDestroy()
}
/**
* Gets the WebView.
*/
val webView: WebView?
get() = if (webViewAvailable) internalWebView else null
}