Skip to content

Commit 545f06e

Browse files
committed
refactor: move capabilities handling to SpaceLinksViewModel
1 parent 5f916a6 commit 545f06e

3 files changed

Lines changed: 20 additions & 32 deletions

File tree

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@ 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
2928
import com.owncloud.android.domain.capabilities.model.OCCapability
3029
import com.owncloud.android.domain.capabilities.usecases.GetCapabilitiesAsLiveDataUseCase
3130
import com.owncloud.android.domain.capabilities.usecases.GetStoredCapabilitiesUseCase
3231
import com.owncloud.android.domain.capabilities.usecases.RefreshCapabilitiesFromServerAsyncUseCase
33-
import com.owncloud.android.domain.links.model.OCLinkType
3432
import com.owncloud.android.domain.utils.Event
3533
import com.owncloud.android.extensions.ViewModelExt.runUseCaseWithResultAndUseCachedData
3634
import com.owncloud.android.presentation.common.UIResult
@@ -83,11 +81,4 @@ class CapabilityViewModel(
8381
capabilities?.spaces?.hasMultiplePersonalSpaces == true
8482
}
8583

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-
}
9384
}

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

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,15 @@ import androidx.core.view.isVisible
3131
import androidx.fragment.app.Fragment
3232
import com.owncloud.android.R
3333
import com.owncloud.android.databinding.AddPublicLinkFragmentBinding
34-
import com.owncloud.android.domain.capabilities.model.OCCapability
3534
import com.owncloud.android.domain.links.model.OCLinkType
3635
import com.owncloud.android.domain.spaces.model.OCSpace
3736
import com.owncloud.android.extensions.collectLatestLifecycleFlow
3837
import com.owncloud.android.extensions.hideSoftKeyboard
3938
import com.owncloud.android.extensions.showErrorInSnackbar
40-
import com.owncloud.android.presentation.capabilities.CapabilityViewModel
4139
import com.owncloud.android.presentation.common.UIResult
4240
import com.owncloud.android.utils.DisplayUtils
4341
import org.koin.androidx.viewmodel.ext.android.activityViewModel
44-
import org.koin.androidx.viewmodel.ext.android.viewModel
4542
import org.koin.core.parameter.parametersOf
46-
import timber.log.Timber
4743
import java.text.SimpleDateFormat
4844
import java.util.Locale
4945
import java.util.TimeZone
@@ -60,13 +56,7 @@ class AddPublicLinkFragment: Fragment(), SetPasswordDialogFragment.SetPasswordLi
6056
requireArguments().getParcelable(ARG_CURRENT_SPACE)
6157
)
6258
}
63-
private val capabilityViewModel: CapabilityViewModel by viewModel {
64-
parametersOf(
65-
accountName
66-
)
67-
}
6859

69-
private var capabilities: OCCapability? = null
7060
private var isPasswordEnforced = true
7161
private var hasPassword = false
7262

@@ -130,18 +120,6 @@ class AddPublicLinkFragment: Fragment(), SetPasswordDialogFragment.SetPasswordLi
130120
}
131121
}
132122

133-
capabilityViewModel.capabilities.observe(viewLifecycleOwner) { event->
134-
when (val uiResult = event.peekContent()) {
135-
is UIResult.Success -> {
136-
capabilities = uiResult.data
137-
}
138-
is UIResult.Loading -> { }
139-
is UIResult.Error -> {
140-
Timber.e(uiResult.error, "Failed to retrieve server capabilities")
141-
}
142-
}
143-
}
144-
145123
collectLatestLifecycleFlow(spaceLinksViewModel.addLinkResultFlow) { event ->
146124
event?.peekContent()?.let { uiResult ->
147125
when (uiResult) {
@@ -203,7 +181,7 @@ class AddPublicLinkFragment: Fragment(), SetPasswordDialogFragment.SetPasswordLi
203181
selectedRadioButton.isChecked = true
204182
}
205183
val selectedPermission = selectedRadioButton.tag as OCLinkType
206-
isPasswordEnforced = capabilityViewModel.checkPasswordEnforced(selectedPermission, capabilities)
184+
isPasswordEnforced = spaceLinksViewModel.checkPasswordEnforced(selectedPermission)
207185
spaceLinksViewModel.onPermissionSelected(selectedPermission)
208186
}
209187

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
package com.owncloud.android.presentation.spaces.links
2222

2323
import androidx.lifecycle.ViewModel
24+
import androidx.lifecycle.viewModelScope
25+
import com.owncloud.android.domain.capabilities.model.CapabilityBooleanType
26+
import com.owncloud.android.domain.capabilities.model.OCCapability
27+
import com.owncloud.android.domain.capabilities.usecases.GetStoredCapabilitiesUseCase
2428
import com.owncloud.android.domain.links.model.OCLinkType
2529
import com.owncloud.android.domain.links.usecases.AddLinkUseCase
2630
import com.owncloud.android.domain.links.usecases.RemoveLinkUseCase
@@ -34,9 +38,11 @@ import kotlinx.coroutines.flow.MutableStateFlow
3438
import kotlinx.coroutines.flow.SharedFlow
3539
import kotlinx.coroutines.flow.StateFlow
3640
import kotlinx.coroutines.flow.update
41+
import kotlinx.coroutines.launch
3742

3843
class SpaceLinksViewModel(
3944
private val addLinkUseCase: AddLinkUseCase,
45+
private val getStoredCapabilitiesUseCase: GetStoredCapabilitiesUseCase,
4046
private val removeLinkUseCase: RemoveLinkUseCase,
4147
private val accountName: String,
4248
private val space: OCSpace,
@@ -52,8 +58,13 @@ class SpaceLinksViewModel(
5258
private val _removeLinkResultFlow = MutableSharedFlow<UIResult<Unit>>()
5359
val removeLinkResultFlow: SharedFlow<UIResult<Unit>> = _removeLinkResultFlow
5460

61+
private var capabilities: OCCapability? = null
62+
5563
init {
5664
_addPublicLinkUIState.value = AddPublicLinkUIState()
65+
viewModelScope.launch(coroutineDispatcherProvider.io) {
66+
capabilities = getStoredCapabilitiesUseCase(GetStoredCapabilitiesUseCase.Params(accountName))
67+
}
5768
}
5869

5970
fun onPermissionSelected(permission: OCLinkType) {
@@ -99,6 +110,14 @@ class SpaceLinksViewModel(
99110
)
100111
}
101112

113+
fun checkPasswordEnforced(selectedPermission: OCLinkType) =
114+
when(selectedPermission) {
115+
OCLinkType.CAN_VIEW -> capabilities?.filesSharingPublicPasswordEnforcedReadOnly == CapabilityBooleanType.TRUE
116+
OCLinkType.CAN_EDIT -> capabilities?.filesSharingPublicPasswordEnforcedReadWrite == CapabilityBooleanType.TRUE
117+
OCLinkType.CREATE_ONLY -> capabilities?.filesSharingPublicPasswordEnforcedUploadOnly == CapabilityBooleanType.TRUE
118+
else -> true
119+
}
120+
102121
fun resetViewModel() {
103122
_addLinkResultFlow.value = null
104123
_addPublicLinkUIState.value = AddPublicLinkUIState()

0 commit comments

Comments
 (0)