11package com.caniwebview.android.ui.webview
22
33import android.annotation.SuppressLint
4+ import android.content.Context
5+ import android.content.SharedPreferences
46import android.os.Bundle
57import android.view.LayoutInflater
68import android.view.View
@@ -11,54 +13,77 @@ import android.webkit.WebViewClient
1113import android.widget.Button
1214import android.widget.EditText
1315import androidx.fragment.app.Fragment
14- import androidx.lifecycle.ViewModelProvider
1516import com.caniwebview.android.databinding.FragmentWebviewBinding
1617
1718class WebViewFragment : Fragment () {
1819
1920 private var _binding : FragmentWebviewBinding ? = null
2021 private val binding get() = _binding !!
22+ private lateinit var sharedPreferences: SharedPreferences
23+ private lateinit var webView: WebView
2124
2225 @SuppressLint(" SetJavaScriptEnabled" )
2326 override fun onCreateView (
2427 inflater : LayoutInflater ,
2528 container : ViewGroup ? ,
2629 savedInstanceState : Bundle ?
2730 ): View {
28- val webViewViewModel =
29- ViewModelProvider (this ).get(WebViewViewModel ::class .java)
30-
3131 _binding = FragmentWebviewBinding .inflate(inflater, container, false )
3232 val root: View = binding.root
3333
34- val webView: WebView = binding.webView
34+ sharedPreferences =
35+ requireActivity().getSharedPreferences(" WebViewSettings" , Context .MODE_PRIVATE )
36+
37+ webView = binding.webView
3538 val urlEditText: EditText = binding.urlEditText
3639 val loadButton: Button = binding.loadButton
3740
3841 webView.webViewClient = WebViewClient ()
3942
40- // That's how Apache Cordova is configured by default
41- // https://github.com/apache/cordova-android/blob/a78fad17835f37e55b232427348d02c0c81bf491/framework/src/org/apache/cordova/engine/SystemWebViewEngine.java
42- webView.settings.javaScriptEnabled = true
43- webView.settings.javaScriptCanOpenWindowsAutomatically = true
44- webView.settings.layoutAlgorithm = WebSettings .LayoutAlgorithm .NORMAL
45- webView.settings.saveFormData = false
46- webView.settings.mediaPlaybackRequiresUserGesture = false
47- webView.settings.domStorageEnabled = true
48- webView.settings.setGeolocationEnabled(true )
49-
50- // TODO make settings configurable
43+ // Load url in field if saved
44+ val savedUrl = sharedPreferences.getString(" url" , " https://caniwebview.com" )
45+ if (savedUrl != null ) {
46+ urlEditText.setText(savedUrl)
47+ webView.loadUrl(savedUrl)
48+ }
5149
5250 loadButton.setOnClickListener {
5351 val url = urlEditText.text.toString()
5452 if (url.isNotEmpty()) {
53+ // Save to preferences
54+ with (sharedPreferences.edit()) {
55+ putString(" url" , url)
56+ apply ()
57+ }
5558 webView.loadUrl(url)
5659 }
5760 }
5861
5962 return root
6063 }
6164
65+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
66+ super .onViewCreated(view, savedInstanceState)
67+ applyWebViewSettings(webView.settings)
68+ }
69+
70+ override fun onResume () {
71+ super .onResume()
72+ applyWebViewSettings(webView.settings)
73+ }
74+
75+ private fun applyWebViewSettings (settings : WebSettings ) {
76+ settings.javaScriptEnabled = sharedPreferences.getBoolean(" javaScriptEnabled" , true )
77+ settings.javaScriptCanOpenWindowsAutomatically =
78+ sharedPreferences.getBoolean(" javaScriptCanOpenWindows" , true )
79+ settings.domStorageEnabled = sharedPreferences.getBoolean(" domStorageEnabled" , true )
80+ settings.setGeolocationEnabled(sharedPreferences.getBoolean(" geolocationEnabled" , true ))
81+ // Apply other settings here...
82+ settings.layoutAlgorithm = WebSettings .LayoutAlgorithm .NORMAL
83+ settings.saveFormData = false
84+ settings.mediaPlaybackRequiresUserGesture = false
85+ }
86+
6287 override fun onDestroyView () {
6388 super .onDestroyView()
6489 _binding = null
0 commit comments