Skip to content

Commit e97e300

Browse files
surinder-tsysalperozturk96
authored andcommitted
upload files to album, hide video overlay icon, minor ui and bug fixes
Signed-off-by: Surinder Kumar <surinder.kumar@t-systems.com>
1 parent 3e15e51 commit e97e300

33 files changed

Lines changed: 1657 additions & 242 deletions

app/src/main/java/com/nextcloud/client/jobs/BackgroundJobFactory.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Nextcloud - Android Client
33
*
44
* SPDX-FileCopyrightText: 2020 Chris Narkiewicz <hello@ezaquarii.com>
5+
* SPDX-FileCopyrightText: 2026 TSI-mc <surinder.kumar@t-systems.com>
56
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
67
*/
78
package com.nextcloud.client.jobs
@@ -27,6 +28,7 @@ import com.nextcloud.client.jobs.autoUpload.FileSystemRepository
2728
import com.nextcloud.client.jobs.download.FileDownloadWorker
2829
import com.nextcloud.client.jobs.metadata.MetadataWorker
2930
import com.nextcloud.client.jobs.offlineOperations.OfflineOperationsWorker
31+
import com.nextcloud.client.jobs.upload.AlbumFileUploadWorker
3032
import com.nextcloud.client.jobs.folderDownload.FolderDownloadWorker
3133
import com.nextcloud.client.jobs.upload.FileUploadWorker
3234
import com.nextcloud.client.logger.Logger
@@ -96,6 +98,7 @@ class BackgroundJobFactory @Inject constructor(
9698
CalendarImportWork::class -> createCalendarImportWork(context, workerParameters)
9799
FilesExportWork::class -> createFilesExportWork(context, workerParameters)
98100
FileUploadWorker::class -> createFilesUploadWorker(context, workerParameters)
101+
AlbumFileUploadWorker::class -> createAlbumsFilesUploadWorker(context, workerParameters)
99102
FileDownloadWorker::class -> createFilesDownloadWorker(context, workerParameters)
100103
GeneratePdfFromImagesWork::class -> createPDFGenerateWork(context, workerParameters)
101104
HealthStatusWork::class -> createHealthStatusWork(context, workerParameters)
@@ -250,6 +253,20 @@ class BackgroundJobFactory @Inject constructor(
250253
params
251254
)
252255

256+
private fun createAlbumsFilesUploadWorker(context: Context, params: WorkerParameters): AlbumFileUploadWorker =
257+
AlbumFileUploadWorker(
258+
uploadsStorageManager,
259+
connectivityService,
260+
powerManagementService,
261+
accountManager,
262+
viewThemeUtils.get(),
263+
localBroadcastManager.get(),
264+
backgroundJobManager.get(),
265+
preferences,
266+
context,
267+
params
268+
)
269+
253270
private fun createPDFGenerateWork(context: Context, params: WorkerParameters): GeneratePdfFromImagesWork =
254271
GeneratePdfFromImagesWork(
255272
appContext = context,

app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Nextcloud - Android Client
33
*
44
* SPDX-FileCopyrightText: 2020 Chris Narkiewicz <hello@ezaquarii.com>
5+
* SPDX-FileCopyrightText: 2026 TSI-mc <surinder.kumar@t-systems.com>
56
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
67
*/
78
package com.nextcloud.client.jobs
@@ -138,6 +139,12 @@ interface BackgroundJobManager {
138139
fun startNotificationJob(subject: String, signature: String)
139140
fun startAccountRemovalJob(accountName: String, remoteWipe: Boolean)
140141
fun startFilesUploadJob(user: User, uploadIds: LongArray, showSameFileAlreadyExistsNotification: Boolean)
142+
fun startAlbumFilesUploadJob(
143+
user: User,
144+
uploadIds: LongArray,
145+
albumName: String,
146+
showSameFileAlreadyExistsNotification: Boolean
147+
)
141148
fun getFileUploads(user: User): LiveData<List<JobInfo>>
142149
fun cancelFilesUploadJob(user: User)
143150
fun isStartFileUploadJobScheduled(accountName: String): Boolean

app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Nextcloud - Android Client
33
*
44
* SPDX-FileCopyrightText: 2020 Chris Narkiewicz <hello@ezaquarii.com>
5+
* SPDX-FileCopyrightText: 2026 TSI-mc <surinder.kumar@t-systems.com>
56
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
67
*/
78
package com.nextcloud.client.jobs
@@ -32,6 +33,7 @@ import com.nextcloud.client.jobs.download.FileDownloadWorker
3233
import com.nextcloud.client.jobs.folderDownload.FolderDownloadWorker
3334
import com.nextcloud.client.jobs.metadata.MetadataWorker
3435
import com.nextcloud.client.jobs.offlineOperations.OfflineOperationsWorker
36+
import com.nextcloud.client.jobs.upload.AlbumFileUploadWorker
3537
import com.nextcloud.client.jobs.upload.FileUploadHelper
3638
import com.nextcloud.client.jobs.upload.FileUploadWorker
3739
import com.nextcloud.client.preferences.AppPreferences
@@ -86,6 +88,7 @@ internal class BackgroundJobManagerImpl(
8688
const val JOB_NOTIFICATION = "notification"
8789
const val JOB_ACCOUNT_REMOVAL = "account_removal"
8890
const val JOB_FILES_UPLOAD = "files_upload"
91+
const val ALBUM_JOB_FILES_UPLOAD = "album_files_upload"
8992
const val JOB_FOLDER_DOWNLOAD = "folder_download"
9093
const val JOB_FILES_DOWNLOAD = "files_download"
9194
const val JOB_PDF_GENERATION = "pdf_generation"
@@ -640,6 +643,8 @@ internal class BackgroundJobManagerImpl(
640643

641644
private fun startFileUploadJobTag(accountName: String): String = JOB_FILES_UPLOAD + accountName
642645

646+
private fun startAlbumsFileUploadJobTag(accountName: String): String = ALBUM_JOB_FILES_UPLOAD + accountName
647+
643648
override fun isStartFileUploadJobScheduled(accountName: String): Boolean =
644649
workManager.isWorkScheduled(startFileUploadJobTag(accountName))
645650

@@ -703,6 +708,68 @@ internal class BackgroundJobManagerImpl(
703708
}
704709
}
705710

711+
/**
712+
* This method supports uploading and copying selected files to Album
713+
*
714+
* @param user The user for whom the upload job is being created.
715+
* @param uploadIds Array of upload IDs to be processed. These IDs originate from multiple sources
716+
* and cannot be determined directly from the account name or a single function
717+
* within the worker.
718+
* @param albumName Album on which selected files should be copy after upload
719+
*/
720+
override fun startAlbumFilesUploadJob(
721+
user: User,
722+
uploadIds: LongArray,
723+
albumName: String,
724+
showSameFileAlreadyExistsNotification: Boolean
725+
) {
726+
defaultDispatcherScope.launch {
727+
val batchSize = FileUploadHelper.MAX_FILE_COUNT
728+
val batches = uploadIds.toList().chunked(batchSize)
729+
val tag = startAlbumsFileUploadJobTag(user.accountName)
730+
731+
val constraints = Constraints.Builder()
732+
.setRequiredNetworkType(NetworkType.CONNECTED)
733+
.build()
734+
735+
val dataBuilder = Data.Builder()
736+
.putBoolean(
737+
FileUploadWorker.SHOW_SAME_FILE_ALREADY_EXISTS_NOTIFICATION,
738+
showSameFileAlreadyExistsNotification
739+
)
740+
.putString(FileUploadWorker.ACCOUNT, user.accountName)
741+
.putInt(FileUploadWorker.TOTAL_UPLOAD_SIZE, uploadIds.size)
742+
.putString(AlbumFileUploadWorker.ALBUM_NAME, albumName)
743+
744+
val workRequests = batches.mapIndexed { index, batch ->
745+
dataBuilder
746+
.putLongArray(FileUploadWorker.UPLOAD_IDS, batch.toLongArray())
747+
.putInt(FileUploadWorker.CURRENT_BATCH_INDEX, index)
748+
749+
oneTimeRequestBuilder(AlbumFileUploadWorker::class, ALBUM_JOB_FILES_UPLOAD, user)
750+
.addTag(tag)
751+
.setInputData(dataBuilder.build())
752+
.setConstraints(constraints)
753+
.build()
754+
}
755+
756+
// Chain the work requests sequentially
757+
if (workRequests.isNotEmpty()) {
758+
var workChain = workManager.beginUniqueWork(
759+
tag,
760+
ExistingWorkPolicy.APPEND_OR_REPLACE,
761+
workRequests.first()
762+
)
763+
764+
workRequests.drop(1).forEach { request ->
765+
workChain = workChain.then(request)
766+
}
767+
768+
workChain.enqueue()
769+
}
770+
}
771+
}
772+
706773
private fun startFileDownloadJobTag(user: User, fileId: Long): String =
707774
JOB_FOLDER_DOWNLOAD + user.accountName + fileId
708775

0 commit comments

Comments
 (0)