1
1
package de.xikolo.controllers.webview
2
2
3
3
import android.content.Intent
4
- import android.content.MutableContextWrapper
5
4
import android.net.Uri
6
5
import android.os.Bundle
7
- import android.view.LayoutInflater
8
6
import android.view.MenuItem
9
7
import android.view.View
10
- import android.view.ViewGroup
11
- import android.view.ViewStub
12
- import com.google.firebase.crashlytics.FirebaseCrashlytics
13
8
import com.yatatsu.autobundle.AutoBundleField
14
- import de.xikolo.App
15
9
import de.xikolo.R
16
10
import de.xikolo.controllers.base.NetworkStateFragment
17
11
import de.xikolo.controllers.helper.WebViewHelper
18
12
import de.xikolo.controllers.login.LoginActivityAutoBundle
19
13
import de.xikolo.utils.extensions.includeAuthToken
20
14
import de.xikolo.utils.extensions.isOnline
21
15
import de.xikolo.utils.extensions.showToast
16
+ import de.xikolo.views.NestedScrollWebView
22
17
23
18
class WebViewFragment : NetworkStateFragment () {
24
19
25
20
companion object {
26
- val TAG = WebViewFragment ::class .java.simpleName
21
+ val TAG : String = WebViewFragment ::class .java.simpleName
27
22
}
28
23
29
24
@AutoBundleField
@@ -38,77 +33,53 @@ class WebViewFragment : NetworkStateFragment() {
38
33
@AutoBundleField(required = false )
39
34
var allowBack: Boolean = false
40
35
41
- private var contentView: View ? = null
42
-
43
- private lateinit var webViewHelper: WebViewHelper
44
- private var mutableContextWrapper: MutableContextWrapper ? = null
36
+ private var webViewHelper: WebViewHelper ? = null
45
37
46
38
override val layoutResource: Int
47
39
get() = R .layout.fragment_webview
48
40
41
+ override fun onSaveInstanceState (outState : Bundle ) {
42
+ super .onSaveInstanceState(outState)
43
+ webViewHelper?.webView?.saveState(outState)
44
+ }
45
+
49
46
override fun onCreate (savedInstanceState : Bundle ? ) {
50
47
super .onCreate(savedInstanceState)
51
48
setHasOptionsMenu(true )
52
- retainInstance = true
53
- }
54
-
55
- override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View ? {
56
- if (contentView == null ) {
57
- mutableContextWrapper = MutableContextWrapper (activity)
58
-
59
- contentView = LayoutInflater .from(mutableContextWrapper).inflate(R .layout.fragment_loading_state, container, false )
60
- // inflate content contentView inside
61
- val contentView = contentView?.findViewById<ViewStub >(R .id.content_view)
62
- contentView?.layoutResource = layoutResource
63
- contentView?.inflate()
64
-
65
- webViewHelper = WebViewHelper (this .contentView!! , this )
66
- } else {
67
- mutableContextWrapper?.baseContext = activity
68
- }
69
-
70
- return contentView
71
49
}
72
50
73
51
override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
74
52
super .onViewCreated(view, savedInstanceState)
75
53
54
+ val contentView = view.findViewById<NestedScrollWebView >(R .id.content_view)
55
+
56
+ webViewHelper = WebViewHelper (contentView!! , this )
57
+
76
58
if (! context.isOnline) {
77
59
showNetworkRequired()
78
- } else if (webViewHelper.requestedUrl() == null ) {
79
- webViewHelper.request(url)
80
- } else {
81
- webViewHelper.showWebView()
82
- }
83
- }
84
-
85
- override fun onDestroyView () {
86
- super .onDestroyView()
87
-
88
- if (retainInstance && contentView?.parent is ViewGroup ) {
89
- try {
90
- (contentView?.parent as ViewGroup ).removeView(contentView)
91
- mutableContextWrapper?.baseContext = App .instance
92
- } catch (e: Exception ) {
93
- FirebaseCrashlytics .getInstance().recordException(e)
94
- contentView = null
95
- mutableContextWrapper = null
60
+ } else if (webViewHelper?.requestedUrl() == null ) {
61
+ if (savedInstanceState == null ) {
62
+ webViewHelper?.request(url)
63
+ } else {
64
+ webViewHelper?.webView?.restoreState(savedInstanceState)
96
65
}
66
+ } else {
67
+ webViewHelper?.showWebView()
97
68
}
98
69
}
99
70
100
71
fun onBack (): Boolean {
101
- val canGoBack = allowBack && webViewHelper.webView.canGoBack()
72
+ val canGoBack = allowBack && webViewHelper? .webView? .canGoBack() == true
102
73
if (canGoBack) {
103
- webViewHelper.webView.goBack()
74
+ webViewHelper? .webView? .goBack()
104
75
}
105
76
return canGoBack
106
77
}
107
78
108
79
override fun onOptionsItemSelected (item : MenuItem ): Boolean {
109
80
when (item.itemId) {
110
81
R .id.action_refresh -> {
111
- webViewHelper.refresh()
82
+ webViewHelper? .refresh()
112
83
return true
113
84
}
114
85
}
@@ -141,10 +112,10 @@ class WebViewFragment : NetworkStateFragment() {
141
112
}
142
113
143
114
override fun onRefresh () {
144
- if (webViewHelper.requestedUrl() != null ) {
145
- webViewHelper.refresh()
115
+ if (webViewHelper? .requestedUrl() != null ) {
116
+ webViewHelper? .refresh()
146
117
} else {
147
- webViewHelper.request(url)
118
+ webViewHelper? .request(url)
148
119
}
149
120
}
150
121
}
0 commit comments