Skip to content

Commit 3c9f0ce

Browse files
committed
implement first setting
1 parent d50ab08 commit 3c9f0ce

4 files changed

Lines changed: 113 additions & 44 deletions

File tree

app/src/main/java/com/caniwebview/android/ui/config/ConfigFragment.kt

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,68 @@
11
package com.caniwebview.android.ui.config
22

3+
import android.content.Context
4+
import android.content.SharedPreferences
35
import android.os.Bundle
46
import android.view.LayoutInflater
57
import android.view.View
68
import android.view.ViewGroup
7-
import android.widget.TextView
89
import androidx.fragment.app.Fragment
9-
import androidx.lifecycle.ViewModelProvider
1010
import com.caniwebview.android.databinding.FragmentConfigBinding
1111

1212
class ConfigFragment : Fragment() {
1313

1414
private var _binding: FragmentConfigBinding? = null
15-
16-
// This property is only valid between onCreateView and
17-
// onDestroyView.
1815
private val binding get() = _binding!!
16+
private lateinit var sharedPreferences: SharedPreferences
1917

2018
override fun onCreateView(
2119
inflater: LayoutInflater,
2220
container: ViewGroup?,
2321
savedInstanceState: Bundle?
2422
): View {
25-
val configViewModel =
26-
ViewModelProvider(this).get(ConfigViewModel::class.java)
27-
2823
_binding = FragmentConfigBinding.inflate(inflater, container, false)
2924
val root: View = binding.root
3025

31-
val textView: TextView = binding.textDashboard
32-
configViewModel.text.observe(viewLifecycleOwner) {
33-
textView.text = it
34-
}
26+
sharedPreferences = requireActivity().getSharedPreferences("WebViewSettings", Context.MODE_PRIVATE)
27+
28+
// Initialize UI elements and load saved settings
29+
setupUI()
30+
loadSettings()
31+
3532
return root
3633
}
3734

35+
private fun setupUI() {
36+
binding.javaScriptEnabledCheckBox.setOnCheckedChangeListener { _, isChecked ->
37+
saveSetting("javaScriptEnabled", isChecked)
38+
}
39+
binding.javaScriptCanOpenWindowsCheckBox.setOnCheckedChangeListener { _, isChecked ->
40+
saveSetting("javaScriptCanOpenWindows", isChecked)
41+
}
42+
binding.domStorageEnabledCheckBox.setOnCheckedChangeListener { _, isChecked ->
43+
saveSetting("domStorageEnabled", isChecked)
44+
}
45+
binding.geolocationEnabledCheckBox.setOnCheckedChangeListener { _, isChecked ->
46+
saveSetting("geolocationEnabled", isChecked)
47+
}
48+
// Add listeners for other settings here...
49+
}
50+
51+
private fun loadSettings() {
52+
binding.javaScriptEnabledCheckBox.isChecked = sharedPreferences.getBoolean("javaScriptEnabled", true)
53+
binding.javaScriptCanOpenWindowsCheckBox.isChecked = sharedPreferences.getBoolean("javaScriptCanOpenWindows", true)
54+
binding.domStorageEnabledCheckBox.isChecked = sharedPreferences.getBoolean("domStorageEnabled", true)
55+
binding.geolocationEnabledCheckBox.isChecked = sharedPreferences.getBoolean("geolocationEnabled", true)
56+
// Load other settings here...
57+
}
58+
59+
private fun saveSetting(key: String, value: Boolean) {
60+
with(sharedPreferences.edit()) {
61+
putBoolean(key, value)
62+
apply()
63+
}
64+
}
65+
3866
override fun onDestroyView() {
3967
super.onDestroyView()
4068
_binding = null

app/src/main/java/com/caniwebview/android/ui/webview/WebViewFragment.kt

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.caniwebview.android.ui.webview
22

33
import android.annotation.SuppressLint
4+
import android.content.Context
5+
import android.content.SharedPreferences
46
import android.os.Bundle
57
import android.view.LayoutInflater
68
import android.view.View
@@ -11,54 +13,77 @@ import android.webkit.WebViewClient
1113
import android.widget.Button
1214
import android.widget.EditText
1315
import androidx.fragment.app.Fragment
14-
import androidx.lifecycle.ViewModelProvider
1516
import com.caniwebview.android.databinding.FragmentWebviewBinding
1617

1718
class 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
Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,34 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
53
android:layout_width="match_parent"
64
android:layout_height="match_parent"
7-
tools:context=".ui.config.ConfigFragment">
5+
android:orientation="vertical"
6+
android:padding="16dp">
87

9-
<TextView
10-
android:id="@+id/text_dashboard"
8+
<CheckBox
9+
android:id="@+id/javaScriptEnabledCheckBox"
1110
android:layout_width="match_parent"
1211
android:layout_height="wrap_content"
13-
android:layout_marginStart="8dp"
14-
android:layout_marginTop="8dp"
15-
android:layout_marginEnd="8dp"
16-
android:textAlignment="center"
17-
android:textSize="20sp"
18-
app:layout_constraintBottom_toBottomOf="parent"
19-
app:layout_constraintEnd_toEndOf="parent"
20-
app:layout_constraintStart_toStartOf="parent"
21-
app:layout_constraintTop_toTopOf="parent" />
22-
</androidx.constraintlayout.widget.ConstraintLayout>
12+
android:text="@string/javascript_enabled" />
13+
14+
<CheckBox
15+
android:id="@+id/javaScriptCanOpenWindowsCheckBox"
16+
android:layout_width="match_parent"
17+
android:layout_height="wrap_content"
18+
android:text="@string/javascript_can_open_windows" />
19+
20+
<CheckBox
21+
android:id="@+id/domStorageEnabledCheckBox"
22+
android:layout_width="match_parent"
23+
android:layout_height="wrap_content"
24+
android:text="@string/dom_storage_enabled" />
25+
26+
<CheckBox
27+
android:id="@+id/geolocationEnabledCheckBox"
28+
android:layout_width="match_parent"
29+
android:layout_height="wrap_content"
30+
android:text="@string/geolocation_enabled" />
31+
32+
<!-- Add more CheckBoxes for other settings here -->
33+
34+
</LinearLayout>

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@
33
<string name="title_webview">WebView</string>
44
<string name="title_config">Config</string>
55
<string name="default_url">https://caniwebview.com</string>
6+
<string name="javascript_enabled">JavaScript Enabled</string>
7+
<string name="javascript_can_open_windows">JavaScript Can Open Windows</string>
8+
<string name="dom_storage_enabled">DOM Storage Enabled</string>
9+
<string name="geolocation_enabled">Geolocation Enabled</string>
610
</resources>

0 commit comments

Comments
 (0)