Skip to content

Commit ebc15c6

Browse files
authored
Merge pull request #4794 from owncloud/feature/create_a_link_over_a_space
[FEATURE REQUEST] Create a link over a space
2 parents ff6802d + 3e42b4b commit ebc15c6

45 files changed

Lines changed: 1997 additions & 34 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ ownCloud admins and users.
4747
* Bugfix - Conventional commits' action ignores SBOM automatic commits: [#4808](https://github.com/owncloud/android/pull/4808)
4848
* Change - Migrate tests to the new kotlinx-coroutines-test API: [#4710](https://github.com/owncloud/android/issues/4710)
4949
* Change - Increase rating dialog delay: [#4744](https://github.com/owncloud/android/pull/4744)
50+
* Change - Resource leak in CopyAndUploadContentUrisTask: [#4797](https://github.com/owncloud/android/issues/4797)
5051
* Change - Stream handling and double-close in UploadFileFromContentUriWorker: [#4798](https://github.com/owncloud/android/issues/4798)
5152
* Change - Update actions dependencies to be compliant with Node24 requirements: [#4804](https://github.com/owncloud/android/pull/4804)
5253
* Enhancement - Show members of a space: [#4612](https://github.com/owncloud/android/issues/4612)
@@ -56,6 +57,7 @@ ownCloud admins and users.
5657
* Enhancement - Remove a space member: [#4725](https://github.com/owncloud/android/issues/4725)
5758
* Enhancement - Workflow to build APK: [#4751](https://github.com/owncloud/android/pull/4751)
5859
* Enhancement - List links over a space: [#4752](https://github.com/owncloud/android/issues/4752)
60+
* Enhancement - Add a public link over a space: [#4753](https://github.com/owncloud/android/issues/4753)
5961
* Enhancement - Copy permanent link of a space: [#4758](https://github.com/owncloud/android/issues/4758)
6062
* Enhancement - Workflow to check Conventional Commits: [#4759](https://github.com/owncloud/android/pull/4759)
6163
* Enhancement - QA Content Provider: [#4776](https://github.com/owncloud/android/pull/4776)
@@ -116,6 +118,15 @@ ownCloud admins and users.
116118

117119
https://github.com/owncloud/android/pull/4744
118120

121+
* Change - Resource leak in CopyAndUploadContentUrisTask: [#4797](https://github.com/owncloud/android/issues/4797)
122+
123+
Input and output streams have been closed per URI iteration using
124+
try-with-resources to prevent file descriptor and memory leaks when copying
125+
multiple content URIs.
126+
127+
https://github.com/owncloud/android/issues/4797
128+
https://github.com/owncloud/android/pull/4806
129+
119130
* Change - Stream handling and double-close in UploadFileFromContentUriWorker: [#4798](https://github.com/owncloud/android/issues/4798)
120131

121132
Both the content resolver input stream and the file output stream from
@@ -200,6 +211,14 @@ ownCloud admins and users.
200211
https://github.com/owncloud/android/issues/4752
201212
https://github.com/owncloud/android/pull/4783
202213

214+
* Enhancement - Add a public link over a space: [#4753](https://github.com/owncloud/android/issues/4753)
215+
216+
A new option to add public links over a space has been added. It will be only
217+
visible for users with proper permissions.
218+
219+
https://github.com/owncloud/android/issues/4753
220+
https://github.com/owncloud/android/pull/4794
221+
203222
* Enhancement - Copy permanent link of a space: [#4758](https://github.com/owncloud/android/issues/4758)
204223

205224
A new option to copy and share the permanent link of a space has been added next

changelog/unreleased/4794

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Enhancement: Add a public link over a space
2+
3+
A new option to add public links over a space has been added. It will be only visible for users with proper permissions.
4+
5+
https://github.com/owncloud/android/issues/4753
6+
https://github.com/owncloud/android/pull/4794

owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/RemoteDataSourceModule.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import com.owncloud.android.data.capabilities.datasources.implementation.OCRemot
3333
import com.owncloud.android.data.capabilities.datasources.mapper.RemoteCapabilityMapper
3434
import com.owncloud.android.data.files.datasources.RemoteFileDataSource
3535
import com.owncloud.android.data.files.datasources.implementation.OCRemoteFileDataSource
36+
import com.owncloud.android.data.links.datasources.RemoteLinksDataSource
37+
import com.owncloud.android.data.links.datasources.implementation.OCRemoteLinksDataSource
3638
import com.owncloud.android.data.members.datasources.RemoteMembersDataSource
3739
import com.owncloud.android.data.members.datasources.implementation.OCRemoteMembersDataSource
3840
import com.owncloud.android.data.oauth.datasources.RemoteOAuthDataSource
@@ -78,6 +80,7 @@ val remoteDataSourceModule = module {
7880
singleOf(::OCRemoteAuthenticationDataSource) bind RemoteAuthenticationDataSource::class
7981
singleOf(::OCRemoteCapabilitiesDataSource) bind RemoteCapabilitiesDataSource::class
8082
singleOf(::OCRemoteFileDataSource) bind RemoteFileDataSource::class
83+
singleOf(::OCRemoteLinksDataSource) bind RemoteLinksDataSource::class
8184
singleOf(::OCRemoteMembersDataSource) bind RemoteMembersDataSource::class
8285
singleOf(::OCRemoteOAuthDataSource) bind RemoteOAuthDataSource::class
8386
singleOf(::OCRemoteRolesDataSource) bind RemoteRolesDataSource::class

owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/RepositoryModule.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.owncloud.android.data.authentication.repository.OCAuthenticationRepos
2828
import com.owncloud.android.data.capabilities.repository.OCCapabilityRepository
2929
import com.owncloud.android.data.files.repository.OCFileRepository
3030
import com.owncloud.android.data.folderbackup.repository.OCFolderBackupRepository
31+
import com.owncloud.android.data.links.repository.OCLinksRepository
3132
import com.owncloud.android.data.members.repository.OCMembersRepository
3233
import com.owncloud.android.data.oauth.repository.OCOAuthRepository
3334
import com.owncloud.android.data.roles.repository.OCRolesRepository
@@ -44,6 +45,7 @@ import com.owncloud.android.domain.authentication.oauth.OAuthRepository
4445
import com.owncloud.android.domain.automaticuploads.FolderBackupRepository
4546
import com.owncloud.android.domain.capabilities.CapabilityRepository
4647
import com.owncloud.android.domain.files.FileRepository
48+
import com.owncloud.android.domain.links.LinksRepository
4749
import com.owncloud.android.domain.members.MembersRepository
4850
import com.owncloud.android.domain.roles.RolesRepository
4951
import com.owncloud.android.domain.server.ServerInfoRepository
@@ -63,6 +65,7 @@ val repositoryModule = module {
6365
factoryOf(::OCCapabilityRepository) bind CapabilityRepository::class
6466
factoryOf(::OCFileRepository) bind FileRepository::class
6567
factoryOf(::OCFolderBackupRepository) bind FolderBackupRepository::class
68+
factoryOf(::OCLinksRepository) bind LinksRepository::class
6669
factoryOf(::OCMembersRepository) bind MembersRepository::class
6770
factoryOf(::OCOAuthRepository) bind OAuthRepository::class
6871
factoryOf(::OCRolesRepository) bind RolesRepository::class

owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/UseCaseModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import com.owncloud.android.domain.files.usecases.SetLastUsageFileUseCase
7979
import com.owncloud.android.domain.files.usecases.SortFilesUseCase
8080
import com.owncloud.android.domain.files.usecases.SortFilesWithSyncInfoUseCase
8181
import com.owncloud.android.domain.files.usecases.UpdateAlreadyDownloadedFilesPathUseCase
82+
import com.owncloud.android.domain.links.usecases.AddLinkUseCase
8283
import com.owncloud.android.domain.members.usecases.AddMemberUseCase
8384
import com.owncloud.android.domain.members.usecases.EditMemberUseCase
8485
import com.owncloud.android.domain.members.usecases.RemoveMemberUseCase
@@ -316,4 +317,7 @@ val useCaseModule = module {
316317
factoryOf(::EditMemberUseCase)
317318
factoryOf(::RemoveMemberUseCase)
318319
factoryOf(::SearchMembersUseCase)
320+
321+
// Links
322+
factoryOf(::AddLinkUseCase)
319323
}

owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/ViewModelModule.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @author David Crespo Ríos
88
* @author Jorge Aguado Recio
99
*
10-
* Copyright (C) 2025 ownCloud GmbH.
10+
* Copyright (C) 2026 ownCloud GmbH.
1111
*
1212
* This program is free software: you can redistribute it and/or modify
1313
* it under the terms of the GNU General Public License version 2,
@@ -55,6 +55,7 @@ import com.owncloud.android.presentation.settings.more.SettingsMoreViewModel
5555
import com.owncloud.android.presentation.settings.security.SettingsSecurityViewModel
5656
import com.owncloud.android.presentation.sharing.ShareViewModel
5757
import com.owncloud.android.presentation.spaces.SpacesListViewModel
58+
import com.owncloud.android.presentation.spaces.links.SpaceLinksViewModel
5859
import com.owncloud.android.presentation.spaces.members.SpaceMembersViewModel
5960
import com.owncloud.android.presentation.transfers.TransfersViewModel
6061
import com.owncloud.android.ui.ReceiveExternalFilesViewModel
@@ -85,6 +86,7 @@ val viewModelModule = module {
8586
viewModelOf(::SettingsSecurityViewModel)
8687
viewModelOf(::SettingsVideoUploadsViewModel)
8788
viewModelOf(::SettingsViewModel)
89+
viewModelOf(::SpaceLinksViewModel)
8890
viewModelOf(::SpaceMembersViewModel)
8991
viewModelOf(::FileOperationsViewModel)
9092

owncloudApp/src/main/java/com/owncloud/android/presentation/capabilities/CapabilityViewModel.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ package com.owncloud.android.presentation.capabilities
2525
import androidx.lifecycle.LiveData
2626
import androidx.lifecycle.MediatorLiveData
2727
import androidx.lifecycle.ViewModel
28+
import com.owncloud.android.domain.capabilities.model.CapabilityBooleanType
2829
import com.owncloud.android.domain.capabilities.model.OCCapability
2930
import com.owncloud.android.domain.capabilities.usecases.GetCapabilitiesAsLiveDataUseCase
3031
import com.owncloud.android.domain.capabilities.usecases.GetStoredCapabilitiesUseCase
3132
import com.owncloud.android.domain.capabilities.usecases.RefreshCapabilitiesFromServerAsyncUseCase
33+
import com.owncloud.android.domain.links.model.OCLinkType
3234
import com.owncloud.android.domain.utils.Event
3335
import com.owncloud.android.extensions.ViewModelExt.runUseCaseWithResultAndUseCachedData
3436
import com.owncloud.android.presentation.common.UIResult
@@ -80,4 +82,12 @@ class CapabilityViewModel(
8082
}
8183
capabilities?.spaces?.hasMultiplePersonalSpaces == true
8284
}
85+
86+
fun checkPasswordEnforced(selectedPermission: OCLinkType, capabilities: OCCapability?) =
87+
when(selectedPermission) {
88+
OCLinkType.CAN_VIEW -> capabilities?.filesSharingPublicPasswordEnforcedReadOnly == CapabilityBooleanType.TRUE
89+
OCLinkType.CAN_EDIT -> capabilities?.filesSharingPublicPasswordEnforcedReadWrite == CapabilityBooleanType.TRUE
90+
OCLinkType.CREATE_ONLY -> capabilities?.filesSharingPublicPasswordEnforcedUploadOnly == CapabilityBooleanType.TRUE
91+
else -> true
92+
}
8393
}

0 commit comments

Comments
 (0)