Skip to content

Commit ebb344c

Browse files
PhilLabalperozturk96
authored andcommitted
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 549c25b commit ebb344c

4 files changed

Lines changed: 65 additions & 13 deletions

File tree

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>
@@ -121,6 +122,7 @@ import com.owncloud.android.ui.dialog.SendShareDialog.SendShareDialogDownloader
121122
import com.owncloud.android.ui.dialog.SortingOrderDialogFragment.OnSortingOrderListener
122123
import com.owncloud.android.ui.dialog.StoragePermissionDialogFragment
123124
import com.owncloud.android.ui.dialog.TermsOfServiceDialog
125+
import com.owncloud.android.ui.events.FilesRefreshEvent
124126
import com.owncloud.android.ui.events.SearchEvent
125127
import com.owncloud.android.ui.events.SyncEventFinished
126128
import com.owncloud.android.ui.events.TokenPushEvent
@@ -1454,12 +1456,6 @@ class FileDisplayActivity :
14541456
}
14551457
// endregion
14561458

1457-
override fun onStop() {
1458-
Log_OC.v(TAG, "onStop()")
1459-
unregisterReceivers()
1460-
super.onStop()
1461-
}
1462-
14631459
override fun onSortingOrderChosen(selection: FileSortOrder?) {
14641460
val ocFileListFragment = this.listOfFilesFragment
14651461
ocFileListFragment?.sortFiles(selection)
@@ -2768,6 +2764,11 @@ class FileDisplayActivity :
27682764

27692765
registerReceivers()
27702766

2767+
// Register for the FilesRefreshEvent, only if not already registered
2768+
if (!EventBus.getDefault().isRegistered(this)) {
2769+
EventBus.getDefault().register(this)
2770+
}
2771+
27712772
if (SettingsActivity.isBackPressed) {
27722773
Log_OC.d(TAG, "User returned from settings activity, skipping reset content logic")
27732774
return
@@ -2776,6 +2777,15 @@ class FileDisplayActivity :
27762777
initFile()
27772778
}
27782779

2780+
public override fun onStop() {
2781+
Log_OC.v(TAG, "onStop()")
2782+
if (EventBus.getDefault().isRegistered(this)) {
2783+
EventBus.getDefault().unregister(this)
2784+
}
2785+
unregisterReceivers()
2786+
super.onStop()
2787+
}
2788+
27792789
private fun initFile() {
27802790
val userOpt = user
27812791
if (userOpt.isEmpty) {
@@ -3026,6 +3036,14 @@ class FileDisplayActivity :
30263036
})
30273037
}
30283038

3039+
// region EventBus
3040+
@Suppress("unused")
3041+
@Subscribe(threadMode = ThreadMode.MAIN)
3042+
fun onFilesRefreshNeeded(event: FilesRefreshEvent) {
3043+
refreshCurrentDirectory()
3044+
}
3045+
// endregion
3046+
30293047
private fun handleEcosystemIntent(intent: Intent?) {
30303048
ecosystemManager.receiveAccount(
30313049
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
@@ -208,6 +213,14 @@ class PreviewImageActivity :
208213
}
209214
}
210215

216+
// region EventBus
217+
@Suppress("unused")
218+
@Subscribe(threadMode = ThreadMode.MAIN)
219+
fun onFilesRefreshNeeded(event: FilesRefreshEvent) {
220+
initViewPager()
221+
}
222+
// endregion
223+
211224
fun initViewPager() {
212225
if (user.isPresent) {
213226
initViewPager(user.get())
@@ -259,6 +272,12 @@ class PreviewImageActivity :
259272
public override fun onStart() {
260273
super.onStart()
261274
registerReceivers()
275+
276+
// Register for the FilesRefreshEvent, only if not already registered
277+
if (!EventBus.getDefault().isRegistered(this)) {
278+
EventBus.getDefault().register(this)
279+
}
280+
262281
val optionalUser = user
263282
if (optionalUser.isPresent) {
264283
var file: OCFile? = file ?: throw IllegalStateException("Instanced with a NULL OCFile")
@@ -399,6 +418,10 @@ class PreviewImageActivity :
399418
downloadFinishReceiver = null
400419
}
401420

421+
if (EventBus.getDefault().isRegistered(this)) {
422+
EventBus.getDefault().unregister(this)
423+
}
424+
402425
super.onStop()
403426
}
404427

0 commit comments

Comments
 (0)