Skip to content

Commit 5f2f42c

Browse files
authored
Remove retainInstance from WebViewFragment (#320)
1 parent fe30fd1 commit 5f2f42c

File tree

1 file changed

+25
-54
lines changed

1 file changed

+25
-54
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,24 @@
11
package de.xikolo.controllers.webview
22

33
import android.content.Intent
4-
import android.content.MutableContextWrapper
54
import android.net.Uri
65
import android.os.Bundle
7-
import android.view.LayoutInflater
86
import android.view.MenuItem
97
import android.view.View
10-
import android.view.ViewGroup
11-
import android.view.ViewStub
12-
import com.google.firebase.crashlytics.FirebaseCrashlytics
138
import com.yatatsu.autobundle.AutoBundleField
14-
import de.xikolo.App
159
import de.xikolo.R
1610
import de.xikolo.controllers.base.NetworkStateFragment
1711
import de.xikolo.controllers.helper.WebViewHelper
1812
import de.xikolo.controllers.login.LoginActivityAutoBundle
1913
import de.xikolo.utils.extensions.includeAuthToken
2014
import de.xikolo.utils.extensions.isOnline
2115
import de.xikolo.utils.extensions.showToast
16+
import de.xikolo.views.NestedScrollWebView
2217

2318
class WebViewFragment : NetworkStateFragment() {
2419

2520
companion object {
26-
val TAG = WebViewFragment::class.java.simpleName
21+
val TAG: String = WebViewFragment::class.java.simpleName
2722
}
2823

2924
@AutoBundleField
@@ -38,77 +33,53 @@ class WebViewFragment : NetworkStateFragment() {
3833
@AutoBundleField(required = false)
3934
var allowBack: Boolean = false
4035

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
4537

4638
override val layoutResource: Int
4739
get() = R.layout.fragment_webview
4840

41+
override fun onSaveInstanceState(outState: Bundle) {
42+
super.onSaveInstanceState(outState)
43+
webViewHelper?.webView?.saveState(outState)
44+
}
45+
4946
override fun onCreate(savedInstanceState: Bundle?) {
5047
super.onCreate(savedInstanceState)
5148
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
7149
}
7250

7351
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
7452
super.onViewCreated(view, savedInstanceState)
7553

54+
val contentView = view.findViewById<NestedScrollWebView>(R.id.content_view)
55+
56+
webViewHelper = WebViewHelper(contentView!!, this)
57+
7658
if (!context.isOnline) {
7759
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)
9665
}
66+
} else {
67+
webViewHelper?.showWebView()
9768
}
9869
}
9970

10071
fun onBack(): Boolean {
101-
val canGoBack = allowBack && webViewHelper.webView.canGoBack()
72+
val canGoBack = allowBack && webViewHelper?.webView?.canGoBack() == true
10273
if (canGoBack) {
103-
webViewHelper.webView.goBack()
74+
webViewHelper?.webView?.goBack()
10475
}
10576
return canGoBack
10677
}
10778

10879
override fun onOptionsItemSelected(item: MenuItem): Boolean {
10980
when (item.itemId) {
11081
R.id.action_refresh -> {
111-
webViewHelper.refresh()
82+
webViewHelper?.refresh()
11283
return true
11384
}
11485
}
@@ -141,10 +112,10 @@ class WebViewFragment : NetworkStateFragment() {
141112
}
142113

143114
override fun onRefresh() {
144-
if (webViewHelper.requestedUrl() != null) {
145-
webViewHelper.refresh()
115+
if (webViewHelper?.requestedUrl() != null) {
116+
webViewHelper?.refresh()
146117
} else {
147-
webViewHelper.request(url)
118+
webViewHelper?.request(url)
148119
}
149120
}
150121
}

0 commit comments

Comments
 (0)