Skip to content

Commit ea92187

Browse files
committed
add documentation and simplify
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 22bdeb5 commit ea92187

7 files changed

Lines changed: 80 additions & 95 deletions

File tree

app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadBroadcastManager.kt

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,85 @@ import android.content.Context
1111
import android.content.Intent
1212
import androidx.localbroadcastmanager.content.LocalBroadcastManager
1313
import com.owncloud.android.lib.common.operations.RemoteOperationResult
14+
import com.owncloud.android.lib.common.utils.Log_OC
1415
import com.owncloud.android.operations.UploadFileOperation
1516

17+
/**
18+
* Manages local broadcasts related to file upload lifecycle events.
19+
*
20+
* This class is responsible for notifying interested components about
21+
* upload queue changes and upload state transitions (added, started, finished).
22+
*
23+
* All broadcasts are sent via [LocalBroadcastManager].
24+
*/
1625
class FileUploadBroadcastManager(private val broadcastManager: LocalBroadcastManager) {
1726

27+
companion object {
28+
private const val TAG = "📣" + "FileUploadBroadcastManager"
29+
30+
const val UPLOAD_ADDED = "UPLOAD_ADDED"
31+
const val UPLOAD_STARTED = "UPLOAD_START"
32+
const val UPLOAD_FINISHED = "UPLOAD_FINISH"
33+
}
34+
1835
fun sendAdded(context: Context) {
19-
val start = Intent(FileUploadWorker.getUploadsAddedMessage())
20-
start.setPackage(context.packageName)
21-
broadcastManager.sendBroadcast(start)
36+
Log_OC.d(TAG, "upload added broadcast sent")
37+
val intent = Intent(UPLOAD_ADDED).apply {
38+
setPackage(context.packageName)
39+
}
40+
broadcastManager.sendBroadcast(intent)
2241
}
2342

2443
fun sendStarted(
2544
upload: UploadFileOperation,
2645
context: Context,
2746
) {
28-
val start = Intent(FileUploadWorker.getUploadStartMessage())
29-
start.putExtra(FileUploadWorker.EXTRA_REMOTE_PATH, upload.remotePath) // real remote
30-
start.putExtra(FileUploadWorker.EXTRA_OLD_FILE_PATH, upload.originalStoragePath)
31-
start.putExtra(FileUploadWorker.ACCOUNT_NAME, upload.user.accountName)
32-
start.setPackage(context.packageName)
33-
broadcastManager.sendBroadcast(start)
47+
Log_OC.d(TAG, "upload started broadcast sent")
48+
val intent = Intent(UPLOAD_STARTED).apply {
49+
putExtra(FileUploadWorker.EXTRA_REMOTE_PATH, upload.remotePath) // real remote
50+
putExtra(FileUploadWorker.EXTRA_OLD_FILE_PATH, upload.originalStoragePath)
51+
putExtra(FileUploadWorker.ACCOUNT_NAME, upload.user.accountName)
52+
setPackage(context.packageName)
53+
}
54+
broadcastManager.sendBroadcast(intent)
3455
}
3556

57+
/**
58+
* Sends a broadcast indicating that an upload has finished, either
59+
* successfully or with an error.
60+
*
61+
* ### Triggered when
62+
* - [UploadFileOperation] completes execution
63+
*
64+
* ### Observed by
65+
* - [com.owncloud.android.ui.activity.FileDisplayActivity.UploadFinishReceiver]
66+
* - [com.owncloud.android.ui.activity.UploadListActivity.UploadFinishReceiver]
67+
* - [com.owncloud.android.ui.preview.PreviewImageActivity.UploadFinishReceiver]
68+
*
69+
*/
3670
fun sendFinished(
3771
upload: UploadFileOperation,
3872
uploadResult: RemoteOperationResult<*>,
3973
unlinkedFromRemotePath: String?,
4074
context: Context
4175
) {
42-
val end = Intent(FileUploadWorker.getUploadFinishMessage())
43-
// real remote path, after possible automatic renaming
44-
end.putExtra(FileUploadWorker.EXTRA_REMOTE_PATH, upload.remotePath)
45-
if (upload.wasRenamed()) {
46-
end.putExtra(FileUploadWorker.EXTRA_OLD_REMOTE_PATH, upload.oldFile!!.remotePath)
47-
}
48-
end.putExtra(FileUploadWorker.EXTRA_OLD_FILE_PATH, upload.originalStoragePath)
49-
end.putExtra(FileUploadWorker.ACCOUNT_NAME, upload.user.accountName)
50-
end.putExtra(FileUploadWorker.EXTRA_UPLOAD_RESULT, uploadResult.isSuccess)
51-
if (unlinkedFromRemotePath != null) {
52-
end.putExtra(FileUploadWorker.EXTRA_LINKED_TO_PATH, unlinkedFromRemotePath)
76+
Log_OC.d(TAG, "upload finished broadcast sent")
77+
val intent = Intent(UPLOAD_FINISHED).apply {
78+
// real remote path, after possible automatic renaming
79+
putExtra(FileUploadWorker.EXTRA_REMOTE_PATH, upload.remotePath)
80+
if (upload.wasRenamed()) {
81+
upload.oldFile?.let {
82+
putExtra(FileUploadWorker.EXTRA_OLD_REMOTE_PATH, it.remotePath)
83+
}
84+
}
85+
putExtra(FileUploadWorker.EXTRA_OLD_FILE_PATH, upload.originalStoragePath)
86+
putExtra(FileUploadWorker.ACCOUNT_NAME, upload.user.accountName)
87+
putExtra(FileUploadWorker.EXTRA_UPLOAD_RESULT, uploadResult.isSuccess)
88+
if (unlinkedFromRemotePath != null) {
89+
putExtra(FileUploadWorker.EXTRA_LINKED_TO_PATH, unlinkedFromRemotePath)
90+
}
91+
setPackage(context.packageName)
5392
}
54-
end.setPackage(context.packageName)
55-
broadcastManager.sendBroadcast(end)
93+
broadcastManager.sendBroadcast(intent)
5694
}
5795
}

app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import com.nextcloud.client.jobs.BackgroundJobManagerImpl
2222
import com.nextcloud.client.jobs.utils.UploadErrorNotificationManager
2323
import com.nextcloud.client.network.ConnectivityService
2424
import com.nextcloud.client.preferences.AppPreferences
25-
import com.nextcloud.model.WorkerState
26-
import com.nextcloud.model.WorkerStateObserver
2725
import com.nextcloud.utils.ForegroundServiceHelper
2826
import com.nextcloud.utils.extensions.getPercent
2927
import com.nextcloud.utils.extensions.updateStatus
@@ -77,10 +75,6 @@ class FileUploadWorker(
7775

7876
var currentUploadFileOperation: UploadFileOperation? = null
7977

80-
private const val UPLOADS_ADDED_MESSAGE = "UPLOADS_ADDED"
81-
private const val UPLOAD_START_MESSAGE = "UPLOAD_START"
82-
private const val UPLOAD_FINISH_MESSAGE = "UPLOAD_FINISH"
83-
8478
private const val BATCH_SIZE = 100
8579

8680
const val EXTRA_UPLOAD_RESULT = "RESULT"
@@ -96,12 +90,6 @@ class FileUploadWorker(
9690
const val LOCAL_BEHAVIOUR_FORGET = 2
9791
const val LOCAL_BEHAVIOUR_DELETE = 3
9892

99-
fun getUploadsAddedMessage(): String = FileUploadWorker::class.java.name + UPLOADS_ADDED_MESSAGE
100-
101-
fun getUploadStartMessage(): String = FileUploadWorker::class.java.name + UPLOAD_START_MESSAGE
102-
103-
fun getUploadFinishMessage(): String = FileUploadWorker::class.java.name + UPLOAD_FINISH_MESSAGE
104-
10593
fun cancelCurrentUpload(remotePath: String, accountName: String, onCompleted: () -> Unit) {
10694
currentUploadFileOperation?.let {
10795
if (it.remotePath == remotePath && it.user.accountName == accountName) {
@@ -143,9 +131,6 @@ class FileUploadWorker(
143131
val result = uploadFiles()
144132
backgroundJobManager.logEndOfWorker(workerName, result)
145133
notificationManager.dismissNotification()
146-
if (result == Result.success()) {
147-
setIdleWorkerState()
148-
}
149134
result
150135
} catch (t: Throwable) {
151136
Log_OC.e(TAG, "Error caught at FileUploadWorker $t")
@@ -201,15 +186,10 @@ class FileUploadWorker(
201186
private fun cleanup() {
202187
Log_OC.e(TAG, "FileUploadWorker stopped")
203188

204-
setIdleWorkerState()
205189
currentUploadFileOperation?.cancel(null)
206190
notificationManager.dismissNotification()
207191
}
208192

209-
private fun setIdleWorkerState() {
210-
WorkerStateObserver.send(WorkerState.FileUploadCompleted(currentUploadFileOperation?.file))
211-
}
212-
213193
@Suppress("ReturnCount", "LongMethod", "DEPRECATION")
214194
private suspend fun uploadFiles(): Result = withContext(Dispatchers.IO) {
215195
val accountName = inputData.getString(ACCOUNT)
@@ -265,6 +245,7 @@ class FileUploadWorker(
265245
return@withContext Result.failure()
266246
}
267247

248+
fileUploadBroadcastManager.sendAdded(context)
268249
val operation = createUploadFileOperation(upload, user)
269250
currentUploadFileOperation = operation
270251
fileUploadBroadcastManager.sendStarted(operation, context)
@@ -307,7 +288,6 @@ class FileUploadWorker(
307288
(totalUploadSize > BATCH_SIZE && currentUploadIndex > 0) && currentUploadIndex % BATCH_SIZE == 0
308289

309290
if (shouldBroadcast) {
310-
// delay broadcast
311291
fileUploadBroadcastManager.sendFinished(
312292
operation,
313293
result,

app/src/main/java/com/nextcloud/model/WorkerState.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,5 @@ sealed class WorkerState {
1717
data class FileDownloadStarted(var user: User?, var currentDownload: DownloadFileOperation?) : WorkerState()
1818
data class FileDownloadCompleted(var currentFile: OCFile?) : WorkerState()
1919

20-
data class FileUploadStarted(var user: User?) : WorkerState()
21-
data class FileUploadCompleted(var currentFile: OCFile?) : WorkerState()
22-
2320
data object OfflineOperationsCompleted : WorkerState()
2421
}

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

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,16 @@ import com.nextcloud.client.jobs.download.FileDownloadHelper
6464
import com.nextcloud.client.jobs.download.FileDownloadWorker
6565
import com.nextcloud.client.jobs.download.FileDownloadWorker.Companion.getDownloadAddedMessage
6666
import com.nextcloud.client.jobs.download.FileDownloadWorker.Companion.getDownloadFinishMessage
67+
import com.nextcloud.client.jobs.upload.FileUploadBroadcastManager
6768
import com.nextcloud.client.jobs.upload.FileUploadHelper
6869
import com.nextcloud.client.jobs.upload.FileUploadWorker
69-
import com.nextcloud.client.jobs.upload.FileUploadWorker.Companion.getUploadFinishMessage
7070
import com.nextcloud.client.media.PlayerServiceConnection
7171
import com.nextcloud.client.network.ClientFactory.CreationException
7272
import com.nextcloud.client.preferences.AppPreferences
7373
import com.nextcloud.client.utils.IntentUtil
7474
import com.nextcloud.model.WorkerState
7575
import com.nextcloud.model.WorkerState.FileDownloadCompleted
7676
import com.nextcloud.model.WorkerState.FileDownloadStarted
77-
import com.nextcloud.model.WorkerState.FileUploadCompleted
7877
import com.nextcloud.model.WorkerState.OfflineOperationsCompleted
7978
import com.nextcloud.utils.extensions.getParcelableArgument
8079
import com.nextcloud.utils.extensions.isActive
@@ -1409,7 +1408,7 @@ class FileDisplayActivity :
14091408
}
14101409

14111410
private fun registerUploadFinishReceiver() {
1412-
val filter = IntentFilter(getUploadFinishMessage())
1411+
val filter = IntentFilter(FileUploadBroadcastManager.UPLOAD_FINISHED)
14131412
mUploadFinishReceiver = UploadFinishReceiver()
14141413
mUploadFinishReceiver?.let {
14151414
localBroadcastManager.registerReceiver(it, filter)
@@ -1668,13 +1667,11 @@ class FileDisplayActivity :
16681667
* Once the file upload has finished -> update view
16691668
*/
16701669
private inner class UploadFinishReceiver : BroadcastReceiver() {
1671-
/**
1672-
* Once the file upload has finished -> update view
1673-
*
1674-
*
1675-
* [BroadcastReceiver] to enable upload feedback in UI
1676-
*/
1670+
private val tag = "UploadFinishReceiver"
1671+
16771672
override fun onReceive(context: Context?, intent: Intent) {
1673+
Log_OC.d(tag,"upload finish received broadcast")
1674+
16781675
val uploadedRemotePath = intent.getStringExtra(FileUploadWorker.EXTRA_REMOTE_PATH)
16791676
val accountName = intent.getStringExtra(FileUploadWorker.ACCOUNT_NAME)
16801677
val account = getAccount()
@@ -1909,12 +1906,6 @@ class FileDisplayActivity :
19091906
previewFile(state)
19101907
}
19111908

1912-
is FileUploadCompleted -> {
1913-
state.currentFile?.let {
1914-
ocFileListFragment?.adapter?.insertFile(it)
1915-
}
1916-
}
1917-
19181909
is OfflineOperationsCompleted -> {
19191910
refreshCurrentDirectory()
19201911
}

app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import com.nextcloud.client.core.Clock;
2626
import com.nextcloud.client.device.PowerManagementService;
2727
import com.nextcloud.client.jobs.BackgroundJobManager;
28+
import com.nextcloud.client.jobs.upload.FileUploadBroadcastManager;
2829
import com.nextcloud.client.jobs.upload.FileUploadHelper;
29-
import com.nextcloud.client.jobs.upload.FileUploadWorker;
3030
import com.nextcloud.client.utils.Throttler;
3131
import com.owncloud.android.R;
3232
import com.owncloud.android.databinding.UploadListLayoutBinding;
@@ -56,7 +56,7 @@ public class UploadListActivity extends FileActivity {
5656

5757
private static final String TAG = UploadListActivity.class.getSimpleName();
5858

59-
private UploadMessagesReceiver uploadMessagesReceiver;
59+
private UploadFinishReceiver uploadFinishReceiver;
6060

6161
private UploadListAdapter uploadListAdapter;
6262

@@ -182,12 +182,12 @@ protected void onResume() {
182182
super.onResume();
183183

184184
// Listen for upload messages
185-
uploadMessagesReceiver = new UploadMessagesReceiver();
185+
uploadFinishReceiver = new UploadFinishReceiver();
186186
IntentFilter uploadIntentFilter = new IntentFilter();
187-
uploadIntentFilter.addAction(FileUploadWorker.Companion.getUploadsAddedMessage());
188-
uploadIntentFilter.addAction(FileUploadWorker.Companion.getUploadStartMessage());
189-
uploadIntentFilter.addAction(FileUploadWorker.Companion.getUploadFinishMessage());
190-
localBroadcastManager.registerReceiver(uploadMessagesReceiver, uploadIntentFilter);
187+
uploadIntentFilter.addAction(FileUploadBroadcastManager.UPLOAD_ADDED);
188+
uploadIntentFilter.addAction(FileUploadBroadcastManager.UPLOAD_STARTED);
189+
uploadIntentFilter.addAction(FileUploadBroadcastManager.UPLOAD_FINISHED);
190+
localBroadcastManager.registerReceiver(uploadFinishReceiver, uploadIntentFilter);
191191

192192
Log_OC.v(TAG, "onResume() end");
193193

@@ -196,9 +196,9 @@ protected void onResume() {
196196
@Override
197197
protected void onPause() {
198198
Log_OC.v(TAG, "onPause() start");
199-
if (uploadMessagesReceiver != null) {
200-
localBroadcastManager.unregisterReceiver(uploadMessagesReceiver);
201-
uploadMessagesReceiver = null;
199+
if (uploadFinishReceiver != null) {
200+
localBroadcastManager.unregisterReceiver(uploadFinishReceiver);
201+
uploadFinishReceiver = null;
202202
}
203203
super.onPause();
204204
Log_OC.v(TAG, "onPause() end");
@@ -308,13 +308,9 @@ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationRe
308308
/**
309309
* Once the file upload has changed its status -> update uploads list view
310310
*/
311-
private class UploadMessagesReceiver extends BroadcastReceiver {
312-
/**
313-
* {@link BroadcastReceiver} to enable syncing feedback in UI
314-
*/
311+
private class UploadFinishReceiver extends BroadcastReceiver {
315312
@Override
316313
public void onReceive(Context context, Intent intent) {
317-
318314
throttler.run("update_upload_list", () -> uploadListAdapter.loadUploadItemsFromDb());
319315
}
320316
}

app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
231231
}
232232

233233
binding = FileDetailsFragmentBinding.inflate(inflater, container, false);
234-
observeWorkerState();
235234
view = binding.getRoot();
236235

237236
if (getFile() == null || user == null) {
@@ -625,21 +624,6 @@ public void onDownloadProgress(FileDownloadProgressEvent event) {
625624
binding.progressBar.invalidate();
626625
}
627626

628-
private void observeWorkerState() {
629-
ActivityExtensionsKt.observeWorker(requireActivity(), state -> {
630-
if (binding == null) {
631-
return Unit.INSTANCE;
632-
}
633-
634-
if (state instanceof WorkerState.FileUploadStarted) {
635-
binding.progressText.setText(R.string.uploader_upload_in_progress_ticker);
636-
} else {
637-
binding.progressBlock.setVisibility(View.GONE);
638-
}
639-
return Unit.INSTANCE;
640-
});
641-
}
642-
643627
private void setFileModificationTimestamp(OCFile file, boolean showDetailedTimestamp) {
644628
if (showDetailedTimestamp) {
645629
binding.lastModificationTimestamp.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import android.content.BroadcastReceiver
1010
import android.content.Context
1111
import android.content.Intent
1212
import android.content.IntentFilter
13-
import android.graphics.drawable.ColorDrawable
1413
import android.os.Bundle
1514
import android.view.MenuItem
1615
import android.view.View
@@ -27,7 +26,7 @@ import com.nextcloud.client.editimage.EditImageActivity
2726
import com.nextcloud.client.jobs.download.FileDownloadHelper
2827
import com.nextcloud.client.jobs.download.FileDownloadWorker
2928
import com.nextcloud.client.jobs.download.FileDownloadWorker.Companion.getDownloadFinishMessage
30-
import com.nextcloud.client.jobs.upload.FileUploadWorker.Companion.getUploadFinishMessage
29+
import com.nextcloud.client.jobs.upload.FileUploadBroadcastManager
3130
import com.nextcloud.client.preferences.AppPreferences
3231
import com.nextcloud.model.WorkerState
3332
import com.nextcloud.utils.extensions.getParcelableArgument
@@ -388,7 +387,7 @@ class PreviewImageActivity :
388387
localBroadcastManager.registerReceiver(downloadFinishReceiver!!, downloadIntentFilter)
389388

390389
val uploadFinishReceiver = UploadFinishReceiver()
391-
val uploadIntentFilter = IntentFilter(getUploadFinishMessage())
390+
val uploadIntentFilter = IntentFilter(FileUploadBroadcastManager.UPLOAD_FINISHED)
392391
localBroadcastManager.registerReceiver(uploadFinishReceiver, uploadIntentFilter)
393392
}
394393

0 commit comments

Comments
 (0)