Skip to content

Commit 41a9e85

Browse files
alperozturk96backportbot[bot]
authored andcommitted
binding npe
Signed-off-by: alperozturk <[email protected]>
1 parent 5c3de59 commit 41a9e85

File tree

1 file changed

+59
-49
lines changed

1 file changed

+59
-49
lines changed

app/src/main/java/it/niedermann/owncloud/notes/edit/NoteDirectEditFragment.kt

Lines changed: 59 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ import java.util.concurrent.TimeUnit
5050

5151
class NoteDirectEditFragment : BaseNoteFragment(), Branded {
5252
private var _binding: FragmentNoteDirectEditBinding? = null
53-
private val binding: FragmentNoteDirectEditBinding
54-
get() = _binding!!
53+
private val binding: FragmentNoteDirectEditBinding?
54+
get() = _binding
5555

5656
private val disposables: DisposableSet = DisposableSet()
5757
private var switchToEditPending = false
@@ -81,41 +81,44 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
8181
inflater: LayoutInflater,
8282
container: ViewGroup?,
8383
savedInstanceState: Bundle?,
84-
): View {
84+
): View? {
8585
Log.d(TAG, "onCreateView() called")
8686
_binding = FragmentNoteDirectEditBinding.inflate(inflater, container, false)
8787
setupFab()
8888
prepareWebView()
89-
return binding.root
89+
return binding?.root
9090
}
9191

9292
@SuppressLint("ClickableViewAccessibility") // touch listener only for UI purposes, no need to handle click
9393
private fun setupFab() {
94-
binding.plainEditingFab.isExtended = false
95-
ExtendedFabUtil.toggleExtendedOnLongClick(binding.plainEditingFab)
96-
// manually detect scroll as we can't get it from the webview (maybe with custom JS?)
97-
binding.noteWebview.setOnTouchListener { _, event ->
98-
when (event.action) {
99-
MotionEvent.ACTION_DOWN -> {
100-
scrollStart = event.y.toInt()
101-
}
102-
MotionEvent.ACTION_UP -> {
103-
val scrollEnd = event.y.toInt()
104-
ExtendedFabUtil.toggleVisibilityOnScroll(
105-
binding.plainEditingFab,
106-
scrollStart,
107-
scrollEnd,
108-
)
94+
binding?.run {
95+
plainEditingFab.isExtended = false
96+
ExtendedFabUtil.toggleExtendedOnLongClick(plainEditingFab)
97+
98+
// manually detect scroll as we can't get it from the webview (maybe with custom JS?)
99+
noteWebview.setOnTouchListener { _, event ->
100+
when (event.action) {
101+
MotionEvent.ACTION_DOWN -> {
102+
scrollStart = event.y.toInt()
103+
}
104+
MotionEvent.ACTION_UP -> {
105+
val scrollEnd = event.y.toInt()
106+
ExtendedFabUtil.toggleVisibilityOnScroll(
107+
plainEditingFab,
108+
scrollStart,
109+
scrollEnd,
110+
)
111+
}
109112
}
113+
return@setOnTouchListener false
110114
}
111-
return@setOnTouchListener false
115+
plainEditingFab.setOnClickListener { switchToPlainEdit() }
112116
}
113-
binding.plainEditingFab.setOnClickListener { switchToPlainEdit() }
114117
}
115118

116119
private fun switchToPlainEdit() {
117120
switchToEditPending = true
118-
binding.noteWebview.evaluateJavascript(JS_CLOSE) { result ->
121+
binding?.noteWebview?.evaluateJavascript(JS_CLOSE) { result ->
119122
val resultWithoutQuotes = result.replace("\"", "")
120123
if (resultWithoutQuotes != JS_RESULT_OK) {
121124
Log.w(TAG, "Closing via JS failed: $resultWithoutQuotes")
@@ -128,7 +131,7 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
128131
override fun onDestroyView() {
129132
super.onDestroyView()
130133
disposables.dispose()
131-
binding.noteWebview.destroy()
134+
binding?.noteWebview?.destroy()
132135
_binding = null
133136
}
134137

@@ -137,7 +140,7 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
137140
val timeoutDisposable = Single.just(Unit)
138141
.delay(LOAD_TIMEOUT_SECONDS, TimeUnit.SECONDS)
139142
.map {
140-
if (!binding.noteWebview.isVisible) {
143+
if (binding?.noteWebview?.isVisible == false) {
141144
Log.w(TAG, "Editor not loaded after $LOAD_TIMEOUT_SECONDS seconds")
142145
handleLoadError()
143146
}
@@ -197,7 +200,7 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
197200
if (BuildConfig.DEBUG) {
198201
Log.d(TAG, "loadNoteInWebView: url = $url")
199202
}
200-
binding.noteWebview.loadUrl(url)
203+
binding?.noteWebview?.loadUrl(url)
201204
}
202205
}, { throwable ->
203206
handleLoadError()
@@ -208,30 +211,32 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
208211
}
209212

210213
private fun handleLoadError() {
211-
val snackbar = BrandedSnackbar.make(
212-
binding.plainEditingFab,
213-
getString(R.string.direct_editing_error),
214-
Snackbar.LENGTH_INDEFINITE,
215-
)
216-
217-
if (note != null) {
218-
snackbar.setAction(R.string.switch_to_plain_editing) {
219-
changeToEditMode()
220-
}
221-
} else {
222-
snackbar.setAction(R.string.action_back) {
223-
close()
214+
binding?.run {
215+
val snackbar = BrandedSnackbar.make(
216+
plainEditingFab,
217+
getString(R.string.direct_editing_error),
218+
Snackbar.LENGTH_INDEFINITE,
219+
)
220+
221+
if (note != null) {
222+
snackbar.setAction(R.string.switch_to_plain_editing) {
223+
changeToEditMode()
224+
}
225+
} else {
226+
snackbar.setAction(R.string.action_back) {
227+
close()
228+
}
224229
}
225-
}
226230

227-
snackbar.show()
231+
snackbar.show()
232+
}
228233
}
229234

230235
override fun shouldShowToolbar(): Boolean = false
231236

232237
@SuppressLint("SetJavaScriptEnabled")
233238
private fun prepareWebView() {
234-
binding.noteWebview.settings.run {
239+
binding?.noteWebview?.settings?.run {
235240
// enable zoom
236241
setSupportZoom(true)
237242
builtInZoomControls = true
@@ -260,15 +265,15 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
260265

261266
if (BuildConfig.DEBUG) {
262267
// caching disabled in debug mode
263-
binding.noteWebview.settings.cacheMode = WebSettings.LOAD_NO_CACHE
268+
binding?.noteWebview?.settings?.cacheMode = WebSettings.LOAD_NO_CACHE
264269
}
265270

266-
binding.noteWebview.addJavascriptInterface(
271+
binding?.noteWebview?.addJavascriptInterface(
267272
DirectEditingMobileInterface(this),
268273
JS_INTERFACE_NAME,
269274
)
270275

271-
binding.noteWebview.webViewClient = object : WebViewClient() {
276+
binding?.noteWebview?.webViewClient = object : WebViewClient() {
272277
override fun onReceivedError(
273278
view: WebView?,
274279
request: WebResourceRequest?,
@@ -316,8 +321,11 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
316321

317322
override fun applyBrand(color: Int) {
318323
val util = BrandingUtil.of(color, requireContext())
319-
util.material.themeExtendedFAB(binding.plainEditingFab)
320-
util.platform.colorCircularProgressBar(binding.progress, ColorRole.PRIMARY)
324+
325+
binding?.run {
326+
util.material.themeExtendedFAB(plainEditingFab)
327+
util.platform.colorCircularProgressBar(progress, ColorRole.PRIMARY)
328+
}
321329
}
322330

323331
private class DirectEditingMobileInterface(val noteDirectEditFragment: NoteDirectEditFragment) {
@@ -382,9 +390,11 @@ class NoteDirectEditFragment : BaseNoteFragment(), Branded {
382390

383391
private fun toggleLoadingUI(loading: Boolean) {
384392
activity?.runOnUiThread {
385-
binding.progress.isVisible = loading
386-
binding.noteWebview.isVisible = !loading
387-
binding.plainEditingFab.isVisible = !loading
393+
binding?.run {
394+
progress.isVisible = loading
395+
noteWebview.isVisible = !loading
396+
plainEditingFab.isVisible = !loading
397+
}
388398
}
389399
}
390400

0 commit comments

Comments
 (0)