1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-2525 Membership | Hide the membership menu in local only mode (#1259)

This commit is contained in:
Konstantin Ivanov 2024-06-04 16:12:44 +02:00 committed by GitHub
parent 22713446ab
commit ebef167d7b
Signed by: github
GPG key ID: B5690EEEBB952194
5 changed files with 48 additions and 20 deletions

View file

@ -14,6 +14,7 @@ import com.anytypeio.anytype.domain.debugging.DebugSpace
import com.anytypeio.anytype.domain.icon.SetDocumentImageIcon
import com.anytypeio.anytype.domain.library.StorelessSubscriptionContainer
import com.anytypeio.anytype.domain.misc.UrlBuilder
import com.anytypeio.anytype.domain.networkmode.GetNetworkMode
import com.anytypeio.anytype.domain.`object`.SetObjectDetails
import com.anytypeio.anytype.domain.workspace.SpaceManager
import com.anytypeio.anytype.presentation.membership.provider.MembershipProvider
@ -51,7 +52,8 @@ object ProfileModule {
configStorage: ConfigStorage,
urlBuilder: UrlBuilder,
setDocumentImageIcon: SetDocumentImageIcon,
membershipProvider: MembershipProvider
membershipProvider: MembershipProvider,
getNetworkMode: GetNetworkMode
): ProfileSettingsViewModel.Factory = ProfileSettingsViewModel.Factory(
deleteAccount = deleteAccount,
analytics = analytics,
@ -60,7 +62,8 @@ object ProfileModule {
configStorage = configStorage,
urlBuilder = urlBuilder,
setDocumentImageIcon = setDocumentImageIcon,
membershipProvider = membershipProvider
membershipProvider = membershipProvider,
getNetworkMode = getNetworkMode
)
@Provides

View file

@ -115,6 +115,7 @@ class ProfileSettingsFragment : BaseBottomSheetComposeFragment() {
}
),
membershipStatus = vm.membershipStatusState.collectAsStateWithLifecycle().value,
showMembership = vm.showMembershipState.collectAsStateWithLifecycle().value,
onSpacesClicked = throttledClick(
onClick = {
runCatching {

View file

@ -324,7 +324,7 @@ fun BottomText(
.fillMaxWidth()
.padding(horizontal = 20.dp)
.wrapContentHeight()
.clickable { tierAction(TierAction.OpenEmail) },
.noRippleThrottledClickable { tierAction(TierAction.OpenEmail) },
text = buildString,
style = Caption1Regular,
color = colorResource(id = R.color.text_primary)

View file

@ -49,6 +49,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.rememberAsyncImagePainter
import com.anytypeio.anytype.core_models.NetworkMode
import com.anytypeio.anytype.core_ui.foundation.Arrow
import com.anytypeio.anytype.core_ui.foundation.Divider
import com.anytypeio.anytype.core_ui.foundation.Dragger
@ -60,7 +61,6 @@ import com.anytypeio.anytype.core_ui.views.Caption1Regular
import com.anytypeio.anytype.core_ui.views.Title1
import com.anytypeio.anytype.presentation.membership.models.MembershipStatus
import com.anytypeio.anytype.presentation.profile.ProfileIconView
import com.anytypeio.anytype.ui_settings.BuildConfig
import com.anytypeio.anytype.ui_settings.R
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.debounce
@ -80,7 +80,8 @@ fun ProfileSettingsScreen(
onAboutClicked: () -> Unit,
onSpacesClicked: () -> Unit,
onMembershipClicked: () -> Unit,
membershipStatus: MembershipStatus?
membershipStatus: MembershipStatus?,
showMembership: ShowMembership?
) {
LazyColumn(
modifier = Modifier
@ -125,16 +126,18 @@ fun ProfileSettingsScreen(
onClick = onDataManagementClicked
)
}
item {
Divider(paddingStart = 60.dp)
}
item {
OptionMembership(
image = R.drawable.ic_membership,
text = stringResource(R.string.settings_membership),
onClick = onMembershipClicked,
membershipStatus = membershipStatus
)
if (showMembership?.isShowing == true) {
item {
Divider(paddingStart = 60.dp)
}
item {
OptionMembership(
image = R.drawable.ic_membership,
text = stringResource(R.string.settings_membership),
onClick = onMembershipClicked,
membershipStatus = membershipStatus
)
}
}
item {
Divider(paddingStart = 60.dp)
@ -499,7 +502,8 @@ private fun ProfileSettingPreview() {
onAboutClicked = {},
onSpacesClicked = {},
onMembershipClicked = {},
membershipStatus = null
membershipStatus = null,
showMembership = ShowMembership(true)
)
}

View file

@ -8,6 +8,7 @@ import com.anytypeio.anytype.analytics.base.Analytics
import com.anytypeio.anytype.analytics.base.EventsDictionary
import com.anytypeio.anytype.analytics.base.sendEvent
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.NetworkMode
import com.anytypeio.anytype.core_models.Relations
import com.anytypeio.anytype.core_models.primitives.SpaceId
import com.anytypeio.anytype.domain.account.DeleteAccount
@ -19,6 +20,7 @@ import com.anytypeio.anytype.domain.icon.SetImageIcon
import com.anytypeio.anytype.domain.library.StoreSearchByIdsParams
import com.anytypeio.anytype.domain.library.StorelessSubscriptionContainer
import com.anytypeio.anytype.domain.misc.UrlBuilder
import com.anytypeio.anytype.domain.networkmode.GetNetworkMode
import com.anytypeio.anytype.domain.`object`.SetObjectDetails
import com.anytypeio.anytype.domain.search.PROFILE_SUBSCRIPTION_ID
import com.anytypeio.anytype.presentation.common.BaseViewModel
@ -43,7 +45,8 @@ class ProfileSettingsViewModel(
private val configStorage: ConfigStorage,
private val urlBuilder: UrlBuilder,
private val setImageIcon: SetDocumentImageIcon,
private val membershipProvider: MembershipProvider
private val membershipProvider: MembershipProvider,
private val getNetworkMode: GetNetworkMode
) : BaseViewModel() {
private val jobs = mutableListOf<Job>()
@ -51,6 +54,7 @@ class ProfileSettingsViewModel(
val isLoggingOut = MutableStateFlow(false)
val debugSyncReportUri = MutableStateFlow<Uri?>(null)
val membershipStatusState = MutableStateFlow<MembershipStatus?>(null)
val showMembershipState = MutableStateFlow<ShowMembership?>(null)
private val profileId = configStorage.get().profile
@ -84,6 +88,18 @@ class ProfileSettingsViewModel(
eventName = EventsDictionary.screenSettingsAccount
)
}
viewModelScope.launch {
getNetworkMode.async(Unit).fold(
onSuccess = { result ->
showMembershipState.value = when (result.networkMode) {
NetworkMode.DEFAULT -> ShowMembership(true)
NetworkMode.LOCAL -> ShowMembership(false)
NetworkMode.CUSTOM -> ShowMembership(true)
}
},
onFailure = { Timber.e(it, "Error while getting network mode") }
)
}
viewModelScope.launch {
membershipProvider.status().collect { status ->
membershipStatusState.value = status
@ -189,7 +205,8 @@ class ProfileSettingsViewModel(
private val configStorage: ConfigStorage,
private val urlBuilder: UrlBuilder,
private val setDocumentImageIcon: SetDocumentImageIcon,
private val membershipProvider: MembershipProvider
private val membershipProvider: MembershipProvider,
private val getNetworkMode: GetNetworkMode
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
@ -201,10 +218,13 @@ class ProfileSettingsViewModel(
configStorage = configStorage,
urlBuilder = urlBuilder,
setImageIcon = setDocumentImageIcon,
membershipProvider = membershipProvider
membershipProvider = membershipProvider,
getNetworkMode = getNetworkMode
) as T
}
}
}
private const val STOP_SUBSCRIPTION_TIMEOUT = 1_000L
private const val STOP_SUBSCRIPTION_TIMEOUT = 1_000L
data class ShowMembership(val isShowing: Boolean)