Skip to content

Commit 5604b0d

Browse files
committed
fix(slideshow): Use EventBus to notify activities of file deletion
Reduces the coupling, using an already existing EventBus pattern. During registration, we need to first check if it is already registered. Otherwise, the app crashed directly at first start with the error org.greenrobot.eventbus.EventBusException: Subscriber class com.owncloud.android.ui.activity.FileDisplayActivity already registered to event class com.owncloud.android.ui.events.FilesRefreshEvent Signed-off-by: Philipp Hasper <vcs@hasper.info>
1 parent d7154a4 commit 5604b0d

File tree

4 files changed

+65
-13
lines changed

4 files changed

+65
-13
lines changed

app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Nextcloud - Android Client
33
*
4+
* SPDX-FileCopyrightText: 2026 Philipp Hasper <vcs@hasper.info>
45
* SPDX-FileCopyrightText: 2025 Alper Ozturk <alper.ozturk@nextcloud.com>
56
* SPDX-FileCopyrightText: 2023-2024 TSI-mc <surinder.kumar@t-systems.com>
67
* SPDX-FileCopyrightText: 2023 Archontis E. Kostis <arxontisk02@gmail.com>
@@ -120,6 +121,7 @@ import com.owncloud.android.ui.dialog.SendShareDialog.SendShareDialogDownloader
120121
import com.owncloud.android.ui.dialog.SortingOrderDialogFragment.OnSortingOrderListener
121122
import com.owncloud.android.ui.dialog.StoragePermissionDialogFragment
122123
import com.owncloud.android.ui.dialog.TermsOfServiceDialog
124+
import com.owncloud.android.ui.events.FilesRefreshEvent
123125
import com.owncloud.android.ui.events.SearchEvent
124126
import com.owncloud.android.ui.events.SyncEventFinished
125127
import com.owncloud.android.ui.events.TokenPushEvent
@@ -1450,12 +1452,6 @@ class FileDisplayActivity :
14501452
}
14511453
// endregion
14521454

1453-
override fun onStop() {
1454-
Log_OC.v(TAG, "onStop()")
1455-
unregisterReceivers()
1456-
super.onStop()
1457-
}
1458-
14591455
override fun onSortingOrderChosen(selection: FileSortOrder?) {
14601456
val ocFileListFragment = this.listOfFilesFragment
14611457
ocFileListFragment?.sortFiles(selection)
@@ -2779,6 +2775,11 @@ class FileDisplayActivity :
27792775

27802776
registerReceivers()
27812777

2778+
// Register for the FilesRefreshEvent, only if not already registered
2779+
if (!EventBus.getDefault().isRegistered(this)) {
2780+
EventBus.getDefault().register(this)
2781+
}
2782+
27822783
if (SettingsActivity.isBackPressed) {
27832784
Log_OC.d(TAG, "User returned from settings activity, skipping reset content logic")
27842785
return
@@ -2787,6 +2788,15 @@ class FileDisplayActivity :
27872788
initFile()
27882789
}
27892790

2791+
public override fun onStop() {
2792+
Log_OC.v(TAG, "onStop()")
2793+
if (EventBus.getDefault().isRegistered(this)) {
2794+
EventBus.getDefault().unregister(this)
2795+
}
2796+
unregisterReceivers()
2797+
super.onStop()
2798+
}
2799+
27902800
private fun initFile() {
27912801
val userOpt = user
27922802
if (userOpt.isEmpty) {
@@ -3040,6 +3050,14 @@ class FileDisplayActivity :
30403050
})
30413051
}
30423052

3053+
// region EventBus
3054+
@Suppress("unused")
3055+
@Subscribe(threadMode = ThreadMode.MAIN)
3056+
fun onFilesRefreshNeeded(event: FilesRefreshEvent) {
3057+
refreshCurrentDirectory()
3058+
}
3059+
// endregion
3060+
30433061
private fun handleEcosystemIntent(intent: Intent?) {
30443062
ecosystemManager.receiveAccount(
30453063
intent,

app/src/main/java/com/owncloud/android/ui/dialog/RemoveFilesDialogFragment.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Nextcloud - Android Client
33
*
4+
* SPDX-FileCopyrightText: 2026 Philipp Hasper <vcs@hasper.info>
45
* SPDX-FileCopyrightText: 2023 Alper Ozturk <alper.ozturk@nextcloud.com>
56
* SPDX-FileCopyrightText: 2018 Andy Scherzinger <info@andy-scherzinger.de>
67
* SPDX-FileCopyrightText: 2018 Jessie Chatham Spencer <jessie@teainspace.com>
@@ -25,7 +26,8 @@ import com.owncloud.android.datamodel.OCFile
2526
import com.owncloud.android.ui.activity.FileActivity
2627
import com.owncloud.android.ui.activity.FileDisplayActivity
2728
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener
28-
import com.owncloud.android.ui.preview.PreviewImageActivity
29+
import com.owncloud.android.ui.events.FilesRefreshEvent
30+
import org.greenrobot.eventbus.EventBus
2931
import javax.inject.Inject
3032

3133
/**
@@ -100,7 +102,6 @@ class RemoveFilesDialogFragment :
100102

101103
val fileActivity = getTypedActivity(FileActivity::class.java)
102104
val fda = getTypedActivity(FileDisplayActivity::class.java)
103-
val pia = getTypedActivity(PreviewImageActivity::class.java)
104105
connectivityService.isNetworkAndServerAvailable { isAvailable ->
105106
if (isAvailable) {
106107
fileActivity?.showLoadingDialog(fileActivity.getString(R.string.wait_a_moment))
@@ -114,8 +115,7 @@ class RemoveFilesDialogFragment :
114115
}
115116

116117
if (offlineFiles.isNotEmpty()) {
117-
fda?.refreshCurrentDirectory()
118-
pia?.initViewPager()
118+
EventBus.getDefault().post(FilesRefreshEvent())
119119
}
120120

121121
fileActivity?.dismissLoadingDialog()
@@ -127,9 +127,7 @@ class RemoveFilesDialogFragment :
127127
fileDataStorageManager.addRemoveFileOfflineOperation(file)
128128
}
129129
}
130-
131-
fda?.refreshCurrentDirectory()
132-
pia?.initViewPager()
130+
EventBus.getDefault().post(FilesRefreshEvent())
133131
}
134132

135133
finishActionMode()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
8+
package com.owncloud.android.ui.events
9+
10+
/**
11+
* Event denoting the need to refresh the files displayed in the current view
12+
*/
13+
class FilesRefreshEvent

app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Nextcloud - Android Client
33
*
4+
* SPDX-FileCopyrightText: 2026 Philipp Hasper <vcs@hasper.info>
45
* SPDX-FileCopyrightText: 2024 Alper Ozturk <alper.ozturk@nextcloud.com>
56
* SPDX-License-Identifier: AGPL-3.0-or-later
67
*/
@@ -45,13 +46,17 @@ import com.owncloud.android.operations.RemoveFileOperation
4546
import com.owncloud.android.operations.SynchronizeFileOperation
4647
import com.owncloud.android.ui.activity.FileActivity
4748
import com.owncloud.android.ui.activity.FileDisplayActivity
49+
import com.owncloud.android.ui.events.FilesRefreshEvent
4850
import com.owncloud.android.ui.fragment.FileFragment
4951
import com.owncloud.android.ui.fragment.GalleryFragment
5052
import com.owncloud.android.ui.fragment.OCFileListFragment
5153
import com.owncloud.android.ui.preview.model.PreviewImageActivityState
5254
import com.owncloud.android.utils.DisplayUtils
5355
import com.owncloud.android.utils.MimeTypeUtil
5456
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
57+
import org.greenrobot.eventbus.EventBus
58+
import org.greenrobot.eventbus.Subscribe
59+
import org.greenrobot.eventbus.ThreadMode
5560
import java.io.Serializable
5661
import javax.inject.Inject
5762
import kotlin.math.max
@@ -213,6 +218,14 @@ class PreviewImageActivity :
213218
}
214219
}
215220

221+
// region EventBus
222+
@Suppress("unused")
223+
@Subscribe(threadMode = ThreadMode.MAIN)
224+
fun onFilesRefreshNeeded(event: FilesRefreshEvent) {
225+
initViewPager()
226+
}
227+
// endregion
228+
216229
fun initViewPager() {
217230
if (user.isPresent) {
218231
initViewPager(user.get())
@@ -264,6 +277,12 @@ class PreviewImageActivity :
264277
public override fun onStart() {
265278
super.onStart()
266279
registerReceivers()
280+
281+
// Register for the FilesRefreshEvent, only if not already registered
282+
if (!EventBus.getDefault().isRegistered(this)) {
283+
EventBus.getDefault().register(this)
284+
}
285+
267286
val optionalUser = user
268287
if (optionalUser.isPresent) {
269288
var file: OCFile? = file ?: throw IllegalStateException("Instanced with a NULL OCFile")
@@ -404,6 +423,10 @@ class PreviewImageActivity :
404423
downloadFinishReceiver = null
405424
}
406425

426+
if (EventBus.getDefault().isRegistered(this)) {
427+
EventBus.getDefault().unregister(this)
428+
}
429+
407430
super.onStop()
408431
}
409432

0 commit comments

Comments
 (0)