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:
parent
22713446ab
commit
ebef167d7b
5 changed files with 48 additions and 20 deletions
|
@ -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
|
||||
|
|
|
@ -115,6 +115,7 @@ class ProfileSettingsFragment : BaseBottomSheetComposeFragment() {
|
|||
}
|
||||
),
|
||||
membershipStatus = vm.membershipStatusState.collectAsStateWithLifecycle().value,
|
||||
showMembership = vm.showMembershipState.collectAsStateWithLifecycle().value,
|
||||
onSpacesClicked = throttledClick(
|
||||
onClick = {
|
||||
runCatching {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue