Skip to content

Commit 5637e8a

Browse files
committed
feat: implement the new OCIS sharing UI
Signed-off-by: Jorge Aguado Recio <jaguado@izertis.com>
1 parent 80da748 commit 5637e8a

2 files changed

Lines changed: 59 additions & 22 deletions

File tree

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

Lines changed: 6 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) 2024 ownCloud GmbH.
9+
* Copyright (C) 2026 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,
@@ -74,6 +75,10 @@ class CapabilityViewModel(
7475
)
7576
)
7677

78+
fun isOcisServer(): Boolean = runBlocking(coroutineDispatcherProvider.io) {
79+
getStoredCapabilitiesUseCase(GetStoredCapabilitiesUseCase.Params(accountName))?.isSpacesAllowed() == true
80+
}
81+
7782
fun checkMultiPersonal(): Boolean = runBlocking(CoroutinesDispatcherProvider().io) {
7883
val capabilities = withContext(CoroutinesDispatcherProvider().io) {
7984
getStoredCapabilitiesUseCase(GetStoredCapabilitiesUseCase.Params(accountName))

‎owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/ShareActivity.kt‎

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,28 @@ import android.view.KeyEvent
3434
import android.view.Menu
3535
import android.view.MenuItem
3636
import android.view.View
37+
import androidx.core.view.isVisible
3738
import androidx.fragment.app.transaction
3839
import com.owncloud.android.R
40+
import com.owncloud.android.databinding.MembersActivityBinding
41+
import com.owncloud.android.datamodel.ThumbnailsCacheManager
3942
import com.owncloud.android.domain.files.model.OCFile
4043
import com.owncloud.android.domain.sharing.shares.model.OCShare
4144
import com.owncloud.android.domain.sharing.shares.model.ShareType
4245
import com.owncloud.android.domain.utils.Event.EventObserver
4346
import com.owncloud.android.extensions.adaptInfiniteEdges
4447
import com.owncloud.android.extensions.showErrorInSnackbar
4548
import com.owncloud.android.lib.resources.shares.RemoteShare
49+
import com.owncloud.android.presentation.capabilities.CapabilityViewModel
4650
import com.owncloud.android.presentation.common.UIResult
4751
import com.owncloud.android.presentation.sharing.sharees.EditPrivateShareFragment
4852
import com.owncloud.android.presentation.sharing.sharees.SearchShareesFragment
4953
import com.owncloud.android.presentation.sharing.sharees.UsersAndGroupsSearchProvider
5054
import com.owncloud.android.presentation.sharing.shares.PublicShareDialogFragment
5155
import com.owncloud.android.ui.activity.FileActivity
5256
import com.owncloud.android.extensions.showDialogFragment
57+
import com.owncloud.android.utils.DisplayUtils
58+
import com.owncloud.android.utils.MimetypeIconUtil
5359
import org.koin.androidx.viewmodel.ext.android.viewModel
5460
import org.koin.core.parameter.parametersOf
5561
import timber.log.Timber
@@ -64,37 +70,63 @@ class ShareActivity : FileActivity(), ShareFragmentListener {
6470
account?.name
6571
)
6672
}
73+
private val capabilityViewModel: CapabilityViewModel by viewModel {
74+
parametersOf(account?.name)
75+
}
6776

6877
override fun onCreate(savedInstanceState: Bundle?) {
6978
super.onCreate(savedInstanceState)
7079

71-
setContentView(R.layout.share_activity)
80+
if (capabilityViewModel.isOcisServer()) {
81+
setupOcisLayout()
82+
} else {
83+
setupLegacyLayout(savedInstanceState)
84+
}
7285

73-
val shareRoot = findViewById<View>(R.id.share_activity_layout)
74-
adaptInfiniteEdges(shareRoot)
86+
observePrivateShareCreation()
87+
observePrivateShareEdition()
88+
observeShareDeletion()
89+
}
7590

76-
setupStandardToolbar(
77-
title = null,
78-
displayHomeAsUpEnabled = true,
79-
homeButtonEnabled = true,
80-
displayShowTitleEnabled = true,
81-
)
82-
supportActionBar?.setHomeActionContentDescription(R.string.common_back)
91+
private fun setupOcisLayout() {
92+
val binding = MembersActivityBinding.inflate(layoutInflater)
93+
setContentView(binding.root)
94+
setupToolbar(binding.root)
95+
setupFileHeader(binding)
96+
}
8397

84-
supportFragmentManager.transaction {
85-
if (savedInstanceState == null && file != null && account != null) {
86-
// Add Share fragment on first creation
87-
val fragment = ShareFileFragment.newInstance(file, account!!)
88-
replace(
89-
R.id.share_fragment_container, fragment,
90-
TAG_SHARE_FRAGMENT
91-
)
98+
private fun setupLegacyLayout(savedInstanceState: Bundle?) {
99+
setContentView(R.layout.share_activity)
100+
setupToolbar(findViewById(R.id.share_activity_layout))
101+
if (savedInstanceState == null && file != null && account != null) {
102+
supportFragmentManager.transaction {
103+
replace(R.id.share_fragment_container, ShareFileFragment.newInstance(file, account!!), TAG_SHARE_FRAGMENT)
92104
}
93105
}
106+
}
94107

95-
observePrivateShareCreation()
96-
observePrivateShareEdition()
97-
observeShareDeletion()
108+
private fun setupToolbar(root: View) {
109+
adaptInfiniteEdges(root)
110+
setupStandardToolbar(title = null, displayHomeAsUpEnabled = true, homeButtonEnabled = true, displayShowTitleEnabled = true)
111+
supportActionBar?.setHomeActionContentDescription(R.string.common_back)
112+
}
113+
114+
private fun setupFileHeader(binding: MembersActivityBinding) {
115+
binding.itemIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(file.mimeType, file.fileName))
116+
if (file.isImage) {
117+
val thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(file.remoteId.toString())
118+
if (thumbnail != null) { binding.itemIcon.setImageBitmap(thumbnail) }
119+
}
120+
121+
binding.itemName.text = file.fileName
122+
123+
if (file.isFolder) {
124+
binding.itemSize.isVisible = false
125+
} else {
126+
binding.itemSize.text = DisplayUtils.bytesToHumanReadable(file.length, this, true)
127+
}
128+
129+
binding.permanentLinkButton.isVisible = false
98130
}
99131

100132
/**************************************************************************************************************

0 commit comments

Comments
 (0)