Skip to content

Commit eaef4a2

Browse files
authored
Merge pull request #4728 from owncloud/feature/show_members_of_a_space
[FEATURE REQUEST] Show members of a space
2 parents 5389d24 + 9c06876 commit eaef4a2

File tree

47 files changed

+1427
-39
lines changed

Some content is hidden

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

47 files changed

+1427
-39
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ ownCloud admins and users.
4141
## Summary
4242

4343
* Change - Migrate tests to the new kotlinx-coroutines-test API: [#4710](https://github.com/owncloud/android/issues/4710)
44+
* Enhancement - Show members of a space: [#4612](https://github.com/owncloud/android/issues/4612)
4445
* Enhancement - Set emoji as space image: [#4707](https://github.com/owncloud/android/issues/4707)
4546

4647
## Details
@@ -53,6 +54,16 @@ ownCloud admins and users.
5354
https://github.com/owncloud/android/issues/4710
5455
https://github.com/owncloud/android/pull/4722
5556

57+
* Enhancement - Show members of a space: [#4612](https://github.com/owncloud/android/issues/4612)
58+
59+
A new option to view all members of a space has been added to the bottom sheet,
60+
available when the three-dot menu button is tapped. This new option opens a new
61+
view that shows information like member names, roles, and expiration dates (if
62+
available).
63+
64+
https://github.com/owncloud/android/issues/4612
65+
https://github.com/owncloud/android/pull/4728
66+
5667
* Enhancement - Set emoji as space image: [#4707](https://github.com/owncloud/android/issues/4707)
5768

5869
A new option to set an emoji as space image has been added to the bottom sheet,

changelog/unreleased/4728

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Enhancement: Show members of a space
2+
3+
A new option to view all members of a space has been added to the bottom sheet, available when the three-dot menu button is tapped.
4+
This new option opens a new view that shows information like member names, roles, and expiration dates (if available).
5+
6+
https://github.com/owncloud/android/issues/4612
7+
https://github.com/owncloud/android/pull/4728

owncloudApp/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,12 @@
226226
android:name="android.app.searchable"
227227
android:resource="@xml/users_and_groups_searchable" />
228228
</activity>
229+
<activity
230+
android:name=".presentation.spaces.members.SpaceMembersActivity"
231+
android:exported="false"
232+
android:label="@string/space_members_label"
233+
android:launchMode="singleTop"
234+
android:theme="@style/Theme.ownCloud.Toolbar"/>
229235
<activity
230236
android:name=".presentation.security.pattern.PatternActivity"
231237
android:screenOrientation="portrait"

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
* ownCloud Android client application
33
*
44
* @author David González Verdugo
5-
* Copyright (C) 2020 ownCloud GmbH.
5+
* @author Jorge Aguado Recio
6+
*
7+
* Copyright (C) 2025 ownCloud GmbH.
68
*
79
* This program is free software: you can redistribute it and/or modify
810
* it under the terms of the GNU General Public License version 2,
@@ -33,6 +35,8 @@ import com.owncloud.android.data.files.datasources.RemoteFileDataSource
3335
import com.owncloud.android.data.files.datasources.implementation.OCRemoteFileDataSource
3436
import com.owncloud.android.data.oauth.datasources.RemoteOAuthDataSource
3537
import com.owncloud.android.data.oauth.datasources.implementation.OCRemoteOAuthDataSource
38+
import com.owncloud.android.data.roles.datasources.RemoteRolesDataSource
39+
import com.owncloud.android.data.roles.datasources.implementation.OCRemoteRolesDataSource
3640
import com.owncloud.android.data.server.datasources.RemoteServerInfoDataSource
3741
import com.owncloud.android.data.server.datasources.implementation.OCRemoteServerInfoDataSource
3842
import com.owncloud.android.data.sharing.sharees.datasources.RemoteShareeDataSource
@@ -73,6 +77,7 @@ val remoteDataSourceModule = module {
7377
singleOf(::OCRemoteCapabilitiesDataSource) bind RemoteCapabilitiesDataSource::class
7478
singleOf(::OCRemoteFileDataSource) bind RemoteFileDataSource::class
7579
singleOf(::OCRemoteOAuthDataSource) bind RemoteOAuthDataSource::class
80+
singleOf(::OCRemoteRolesDataSource) bind RemoteRolesDataSource::class
7681
singleOf(::OCRemoteServerInfoDataSource) bind RemoteServerInfoDataSource::class
7782
singleOf(::OCRemoteShareDataSource) bind RemoteShareDataSource::class
7883
singleOf(::OCRemoteShareeDataSource) bind RemoteShareeDataSource::class

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
* @author David González Verdugo
55
* @author Abel García de Prada
66
* @author Juan Carlos Garrote Gascón
7+
* @author Jorge Aguado Recio
78
*
8-
* Copyright (C) 2022 ownCloud GmbH.
9+
* Copyright (C) 2025 ownCloud GmbH.
910
*
1011
* This program is free software: you can redistribute it and/or modify
1112
* it under the terms of the GNU General Public License version 2,
@@ -28,6 +29,7 @@ import com.owncloud.android.data.capabilities.repository.OCCapabilityRepository
2829
import com.owncloud.android.data.files.repository.OCFileRepository
2930
import com.owncloud.android.data.folderbackup.repository.OCFolderBackupRepository
3031
import com.owncloud.android.data.oauth.repository.OCOAuthRepository
32+
import com.owncloud.android.data.roles.repository.OCRolesRepository
3133
import com.owncloud.android.data.server.repository.OCServerInfoRepository
3234
import com.owncloud.android.data.sharing.sharees.repository.OCShareeRepository
3335
import com.owncloud.android.data.sharing.shares.repository.OCShareRepository
@@ -41,6 +43,7 @@ import com.owncloud.android.domain.authentication.oauth.OAuthRepository
4143
import com.owncloud.android.domain.automaticuploads.FolderBackupRepository
4244
import com.owncloud.android.domain.capabilities.CapabilityRepository
4345
import com.owncloud.android.domain.files.FileRepository
46+
import com.owncloud.android.domain.roles.RolesRepository
4447
import com.owncloud.android.domain.server.ServerInfoRepository
4548
import com.owncloud.android.domain.sharing.sharees.ShareeRepository
4649
import com.owncloud.android.domain.sharing.shares.ShareRepository
@@ -59,6 +62,7 @@ val repositoryModule = module {
5962
factoryOf(::OCFileRepository) bind FileRepository::class
6063
factoryOf(::OCFolderBackupRepository) bind FolderBackupRepository::class
6164
factoryOf(::OCOAuthRepository) bind OAuthRepository::class
65+
factoryOf(::OCRolesRepository) bind RolesRepository::class
6266
factoryOf(::OCServerInfoRepository) bind ServerInfoRepository::class
6367
factoryOf(::OCShareRepository) bind ShareRepository::class
6468
factoryOf(::OCShareeRepository) bind ShareeRepository::class

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

Lines changed: 6 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.roles.usecases.GetRolesAsyncUseCase
8283
import com.owncloud.android.domain.server.usecases.GetServerInfoAsyncUseCase
8384
import com.owncloud.android.domain.sharing.sharees.GetShareesAsyncUseCase
8485
import com.owncloud.android.domain.sharing.shares.usecases.CreatePrivateShareAsyncUseCase
@@ -105,6 +106,7 @@ import com.owncloud.android.domain.spaces.usecases.GetSpacePermissionsAsyncUseCa
105106
import com.owncloud.android.domain.spaces.usecases.GetSpaceWithSpecialsByIdForAccountUseCase
106107
import com.owncloud.android.domain.spaces.usecases.GetSpacesFromEveryAccountUseCaseAsStream
107108
import com.owncloud.android.domain.spaces.usecases.RefreshSpacesFromServerAsyncUseCase
109+
import com.owncloud.android.domain.spaces.usecases.GetSpaceMembersUseCase
108110
import com.owncloud.android.domain.transfers.usecases.ClearSuccessfulTransferByIdUseCase
109111
import com.owncloud.android.domain.transfers.usecases.ClearSuccessfulTransfersUseCase
110112
import com.owncloud.android.domain.transfers.usecases.GetAllTransfersAsStreamUseCase
@@ -241,6 +243,7 @@ val useCaseModule = module {
241243
factoryOf(::GetPersonalSpacesWithSpecialsForAccountAsStreamUseCase)
242244
factoryOf(::GetProjectSpacesWithSpecialsForAccountAsStreamUseCase)
243245
factoryOf(::GetSpaceByIdForAccountUseCase)
246+
factoryOf(::GetSpaceMembersUseCase)
244247
factoryOf(::GetSpacePermissionsAsyncUseCase)
245248
factoryOf(::GetSpaceWithSpecialsByIdForAccountUseCase)
246249
factoryOf(::GetSpacesFromEveryAccountUseCaseAsStream)
@@ -300,4 +303,7 @@ val useCaseModule = module {
300303

301304
// Accounts
302305
factoryOf(::RemoveAccountUseCase)
306+
307+
// Roles
308+
factoryOf(::GetRolesAsyncUseCase)
303309
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.members.SpaceMembersViewModel
5859
import com.owncloud.android.presentation.transfers.TransfersViewModel
5960
import com.owncloud.android.ui.ReceiveExternalFilesViewModel
6061
import com.owncloud.android.ui.preview.PreviewImageViewModel
@@ -84,6 +85,7 @@ val viewModelModule = module {
8485
viewModelOf(::SettingsSecurityViewModel)
8586
viewModelOf(::SettingsVideoUploadsViewModel)
8687
viewModelOf(::SettingsViewModel)
88+
viewModelOf(::SpaceMembersViewModel)
8789
viewModelOf(::FileOperationsViewModel)
8890

8991
viewModel { (accountName: String) -> CapabilityViewModel(accountName, get(), get(), get(), get()) }

owncloudApp/src/main/java/com/owncloud/android/extensions/SpaceMenuOptionExt.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ fun SpaceMenuOption.toStringResId() =
3131
SpaceMenuOption.ENABLE -> R.string.enable_space
3232
SpaceMenuOption.DELETE -> R.string.delete_space
3333
SpaceMenuOption.SET_ICON -> R.string.set_space_icon
34+
SpaceMenuOption.MEMBERS -> R.string.space_members
3435
}
3536

3637
fun SpaceMenuOption.toDrawableResId() =
@@ -41,4 +42,5 @@ fun SpaceMenuOption.toDrawableResId() =
4142
SpaceMenuOption.ENABLE -> R.drawable.ic_enable_space
4243
SpaceMenuOption.DELETE -> R.drawable.ic_action_delete_white
4344
SpaceMenuOption.SET_ICON -> R.drawable.ic_set_space_icon
45+
SpaceMenuOption.MEMBERS -> R.drawable.ic_share_generic_white
4446
}

owncloudApp/src/main/java/com/owncloud/android/presentation/releasenotes/ReleaseNotesViewModel.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ class ReleaseNotesViewModel(
4343

4444
companion object {
4545
val releaseNotesList = listOf(
46+
ReleaseNote(
47+
title = R.string.release_notes_4_8_0_title_space_membership,
48+
subtitle = R.string.release_notes_4_8_0_subtitle_space_membership,
49+
type = ReleaseNoteType.ENHANCEMENT
50+
),
4651
ReleaseNote(
4752
title = R.string.release_notes_4_8_0_title_set_emoji_as_space_image,
4853
subtitle = R.string.release_notes_4_8_0_subtitle_set_emoji_as_space_image,

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/SpacesListFragment.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ import com.owncloud.android.presentation.common.BottomSheetFragmentItemView
7272
import com.owncloud.android.utils.DisplayUtils
7373
import com.owncloud.android.presentation.common.UIResult
7474
import com.owncloud.android.presentation.spaces.createspace.CreateSpaceDialogFragment
75+
import com.owncloud.android.presentation.spaces.members.SpaceMembersActivity
7576
import com.owncloud.android.presentation.transfers.TransfersViewModel
7677
import com.owncloud.android.presentation.spaces.setspaceicon.SetSpaceIconDialogFragment
7778
import kotlinx.coroutines.flow.SharedFlow
@@ -461,6 +462,11 @@ class SpacesListFragment :
461462
val setIconDialog = SetSpaceIconDialogFragment.newInstance(listener = this@SpacesListFragment)
462463
setIconDialog.show(requireActivity().supportFragmentManager, DIALOG_SET_ICON)
463464
}
465+
SpaceMenuOption.MEMBERS -> {
466+
val intent = Intent(requireActivity(), SpaceMembersActivity::class.java)
467+
intent.putExtra(SpaceMembersActivity.EXTRA_SPACE, currentSpace)
468+
startActivity(intent)
469+
}
464470
}
465471
}
466472
}

0 commit comments

Comments
 (0)