mirror of
https://github.com/LiveFastEatTrashRaccoon/RaccoonForLemmy.git
synced 2025-02-08 16:48:38 +01:00
refactor: remove listing type bottom sheet (#44)
* remove ListingTypeBottomSheet * update usages
This commit is contained in:
parent
05bee093bb
commit
5fcf303a50
@ -1,110 +0,0 @@
|
||||
package com.livefast.eattrash.raccoonforlemmy.core.commonui.modals
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.navigationBars
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import cafe.adriel.voyager.core.screen.Screen
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.CornerSize
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.BottomSheetHeader
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.compose.onClick
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
|
||||
|
||||
class ListingTypeBottomSheet(
|
||||
private val isLogged: Boolean = false,
|
||||
private val screenKey: String? = null,
|
||||
) : Screen {
|
||||
@Composable
|
||||
override fun Content() {
|
||||
val navigationCoordinator = remember { getNavigationCoordinator() }
|
||||
val notificationCenter = remember { getNotificationCenter() }
|
||||
|
||||
Surface {
|
||||
Column(
|
||||
modifier =
|
||||
Modifier
|
||||
.windowInsetsPadding(WindowInsets.navigationBars)
|
||||
.padding(
|
||||
top = Spacing.s,
|
||||
start = Spacing.s,
|
||||
end = Spacing.s,
|
||||
bottom = Spacing.m,
|
||||
),
|
||||
verticalArrangement = Arrangement.spacedBy(Spacing.s),
|
||||
) {
|
||||
BottomSheetHeader(LocalStrings.current.homeListingTitle)
|
||||
val values =
|
||||
buildList {
|
||||
if (isLogged) {
|
||||
this += ListingType.Subscribed
|
||||
}
|
||||
this += ListingType.All
|
||||
this += ListingType.Local
|
||||
}
|
||||
Column(
|
||||
modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState()),
|
||||
verticalArrangement = Arrangement.spacedBy(Spacing.xxs),
|
||||
) {
|
||||
for (value in values) {
|
||||
Row(
|
||||
modifier =
|
||||
Modifier
|
||||
.clip(RoundedCornerShape(CornerSize.xxl))
|
||||
.onClick(
|
||||
onClick = {
|
||||
notificationCenter.send(
|
||||
NotificationCenterEvent.ChangeFeedType(
|
||||
value = value,
|
||||
screenKey = screenKey,
|
||||
),
|
||||
)
|
||||
navigationCoordinator.hideBottomSheet()
|
||||
},
|
||||
).padding(
|
||||
horizontal = Spacing.s,
|
||||
vertical = Spacing.s,
|
||||
).fillMaxWidth(),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Text(
|
||||
text = value.toReadableName(),
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
Icon(
|
||||
imageVector = value.toIcon(),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -54,7 +54,6 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsRow
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsSwitchRow
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ResultTypeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SelectLanguageDialog
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SelectNumberBottomSheet
|
||||
@ -71,6 +70,8 @@ import com.livefast.eattrash.raccoonforlemmy.core.utils.appicon.toReadableName
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.datetime.getPrettyDuration
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.fs.getFileSystemManager
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.toLocalDp
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
|
||||
import com.livefast.eattrash.raccoonforlemmy.unit.configurenavbar.ConfigureNavBarScreen
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
@ -110,6 +111,7 @@ class AdvancedSettingsScreen : Screen {
|
||||
var zombieModeDurationBottomSheetOpened by remember { mutableStateOf(false) }
|
||||
var inboxCheckDurationBottomSheetOpened by remember { mutableStateOf(false) }
|
||||
var inboxTypeBottomSheetOpened by remember { mutableStateOf(false) }
|
||||
var exploreListingTypeBottomSheet by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(model) {
|
||||
model.effects
|
||||
@ -279,12 +281,7 @@ class AdvancedSettingsScreen : Screen {
|
||||
title = LocalStrings.current.settingsDefaultExploreType,
|
||||
value = uiState.defaultExploreType.toReadableName(),
|
||||
onTap = {
|
||||
val sheet =
|
||||
ListingTypeBottomSheet(
|
||||
isLogged = uiState.isLogged,
|
||||
screenKey = "advancedSettings",
|
||||
)
|
||||
navigationCoordinator.showBottomSheet(sheet)
|
||||
exploreListingTypeBottomSheet = true
|
||||
},
|
||||
)
|
||||
if (uiState.isLogged) {
|
||||
@ -793,6 +790,45 @@ class AdvancedSettingsScreen : Screen {
|
||||
)
|
||||
}
|
||||
|
||||
if (exploreListingTypeBottomSheet) {
|
||||
val values =
|
||||
buildList {
|
||||
if (uiState.isLogged) {
|
||||
this += ListingType.Subscribed
|
||||
}
|
||||
this += ListingType.All
|
||||
this += ListingType.Local
|
||||
}
|
||||
CustomModalBottomSheet(
|
||||
title = LocalStrings.current.inboxListingTypeTitle,
|
||||
items =
|
||||
values.map { value ->
|
||||
CustomModalBottomSheetItem(
|
||||
label = value.toReadableName(),
|
||||
trailingContent = {
|
||||
Icon(
|
||||
modifier = Modifier.size(IconSize.m),
|
||||
imageVector = value.toIcon(),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
onSelected = { index ->
|
||||
exploreListingTypeBottomSheet = false
|
||||
if (index != null) {
|
||||
notificationCenter.send(
|
||||
NotificationCenterEvent.ChangeFeedType(
|
||||
value = values[index],
|
||||
screenKey = "advancedSettings",
|
||||
),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
settingsContent?.also { content ->
|
||||
fileSystemManager.writeToFile(
|
||||
mimeType = SETTINGS_MIME_TYPE,
|
||||
|
@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.navigationBarsPadding
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
@ -41,12 +42,14 @@ import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import cafe.adriel.voyager.core.screen.Screen
|
||||
import cafe.adriel.voyager.koin.getScreenModel
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.IconSize
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsHeader
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsRow
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsSwitchRow
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.LanguageBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.UrlOpeningModeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
|
||||
@ -58,6 +61,8 @@ import com.livefast.eattrash.raccoonforlemmy.core.utils.toLanguageFlag
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.toLanguageName
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.url.UrlOpeningMode
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.url.toReadableName
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
|
||||
import com.livefast.eattrash.raccoonforlemmy.feature.settings.advanced.AdvancedSettingsScreen
|
||||
@ -90,6 +95,7 @@ class SettingsScreen : Screen {
|
||||
var infoDialogOpened by remember { mutableStateOf(false) }
|
||||
val scope = rememberCoroutineScope()
|
||||
val uriHandler = LocalUriHandler.current
|
||||
var defaultListingTypeBottomSheetOpened by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(notificationCenter) {
|
||||
notificationCenter
|
||||
@ -202,12 +208,7 @@ class SettingsScreen : Screen {
|
||||
title = LocalStrings.current.settingsDefaultListingType,
|
||||
value = uiState.defaultListingType.toReadableName(),
|
||||
onTap = {
|
||||
val sheet =
|
||||
ListingTypeBottomSheet(
|
||||
isLogged = uiState.isLogged,
|
||||
screenKey = "settings",
|
||||
)
|
||||
navigationCoordinator.showBottomSheet(sheet)
|
||||
defaultListingTypeBottomSheetOpened = true
|
||||
},
|
||||
)
|
||||
|
||||
@ -407,5 +408,44 @@ class SettingsScreen : Screen {
|
||||
if (infoDialogOpened) {
|
||||
AboutDialog().Content()
|
||||
}
|
||||
|
||||
if (defaultListingTypeBottomSheetOpened) {
|
||||
val values =
|
||||
buildList {
|
||||
if (uiState.isLogged) {
|
||||
this += ListingType.Subscribed
|
||||
}
|
||||
this += ListingType.All
|
||||
this += ListingType.Local
|
||||
}
|
||||
CustomModalBottomSheet(
|
||||
title = LocalStrings.current.inboxListingTypeTitle,
|
||||
items =
|
||||
values.map { value ->
|
||||
CustomModalBottomSheetItem(
|
||||
label = value.toReadableName(),
|
||||
trailingContent = {
|
||||
Icon(
|
||||
modifier = Modifier.size(IconSize.m),
|
||||
imageVector = value.toIcon(),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
onSelected = { index ->
|
||||
defaultListingTypeBottomSheetOpened = false
|
||||
if (index != null) {
|
||||
notificationCenter.send(
|
||||
NotificationCenterEvent.ChangeFeedType(
|
||||
value = values[index],
|
||||
screenKey = "settings",
|
||||
),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -66,14 +66,19 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsImage
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsRow
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsSwitchRow
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsTextualInfo
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.EditFormattedInfoDialog
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.EditTextualInfoDialog
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.persistence.di.getSettingsRepository
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.gallery.getGalleryHelper
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
@ -102,9 +107,11 @@ class AccountSettingsScreen : Screen {
|
||||
val errorMessage = LocalStrings.current.messageGenericError
|
||||
val snackbarHostState = remember { SnackbarHostState() }
|
||||
val galleryHelper = remember { getGalleryHelper() }
|
||||
val notificationCenter = remember { getNotificationCenter() }
|
||||
var openAvatarPicker by remember { mutableStateOf(false) }
|
||||
var openBannerPicker by remember { mutableStateOf(false) }
|
||||
var confirmBackWithUnsavedChangesDialog by remember { mutableStateOf(false) }
|
||||
var defaultListingTypeBottomSheetOpened by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(model) {
|
||||
model.effects
|
||||
@ -314,12 +321,7 @@ class AccountSettingsScreen : Screen {
|
||||
title = LocalStrings.current.settingsDefaultListingType,
|
||||
value = uiState.defaultListingType.toReadableName(),
|
||||
onTap = {
|
||||
val sheet =
|
||||
ListingTypeBottomSheet(
|
||||
isLogged = true,
|
||||
screenKey = "accountSettings",
|
||||
)
|
||||
navigationCoordinator.showBottomSheet(sheet)
|
||||
defaultListingTypeBottomSheetOpened = true
|
||||
},
|
||||
)
|
||||
|
||||
@ -548,5 +550,42 @@ class AccountSettingsScreen : Screen {
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
if (defaultListingTypeBottomSheetOpened) {
|
||||
val values =
|
||||
buildList {
|
||||
this += ListingType.Subscribed
|
||||
this += ListingType.All
|
||||
this += ListingType.Local
|
||||
}
|
||||
CustomModalBottomSheet(
|
||||
title = LocalStrings.current.inboxListingTypeTitle,
|
||||
items =
|
||||
values.map { value ->
|
||||
CustomModalBottomSheetItem(
|
||||
label = value.toReadableName(),
|
||||
trailingContent = {
|
||||
Icon(
|
||||
modifier = Modifier.size(IconSize.m),
|
||||
imageVector = value.toIcon(),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
onSelected = { index ->
|
||||
defaultListingTypeBottomSheetOpened = false
|
||||
if (index != null) {
|
||||
notificationCenter.send(
|
||||
NotificationCenterEvent.ChangeFeedType(
|
||||
value = values[index],
|
||||
screenKey = "accountSettings",
|
||||
),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,8 +35,10 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
@ -52,6 +54,7 @@ import androidx.compose.ui.unit.dp
|
||||
import cafe.adriel.voyager.core.screen.Screen
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.data.PostLayout
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.di.getThemeRepository
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.IconSize
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.SearchField
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.SwipeAction
|
||||
@ -62,7 +65,8 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.CommunityItem
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCard
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCardPlaceholder
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.UserItem
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ResultTypeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
|
||||
@ -70,13 +74,18 @@ import com.livefast.eattrash.raccoonforlemmy.core.navigation.TabNavigationSectio
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getDrawerCoordinator
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.getScreenModel
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.persistence.data.ActionOnSwipe
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.persistence.di.getSettingsRepository
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.compose.onClick
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.PostModel
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.SearchResult
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.readableHandle
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.uniqueIdentifier
|
||||
import com.livefast.eattrash.raccoonforlemmy.unit.explore.components.ExploreTopBar
|
||||
import com.livefast.eattrash.raccoonforlemmy.unit.zoomableimage.ZoomableImageScreen
|
||||
@ -129,6 +138,7 @@ class ExploreScreen(
|
||||
val detailOpener = remember { getDetailOpener() }
|
||||
val connection = navigationCoordinator.getBottomBarScrollConnection()
|
||||
val scope = rememberCoroutineScope()
|
||||
val notificationCenter = remember { getNotificationCenter() }
|
||||
val isOnOtherInstance = remember { otherInstance.isNotEmpty() }
|
||||
val otherInstanceName = remember { otherInstance }
|
||||
val snackbarHostState = remember { SnackbarHostState() }
|
||||
@ -142,6 +152,7 @@ class ExploreScreen(
|
||||
}
|
||||
}
|
||||
val searchFocusRequester = remember { FocusRequester() }
|
||||
var listingTypeBottomSheetOpened by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(navigationCoordinator) {
|
||||
navigationCoordinator.onDoubleTabSelection
|
||||
@ -190,12 +201,7 @@ class ExploreScreen(
|
||||
edgeToEdge = settings.edgeToEdge,
|
||||
onSelectListingType = {
|
||||
focusManager.clearFocus()
|
||||
val sheet =
|
||||
ListingTypeBottomSheet(
|
||||
isLogged = uiState.isLogged,
|
||||
screenKey = notificationEventKey,
|
||||
)
|
||||
navigationCoordinator.showBottomSheet(sheet)
|
||||
listingTypeBottomSheetOpened = true
|
||||
},
|
||||
onSelectSortType = {
|
||||
focusManager.clearFocus()
|
||||
@ -757,5 +763,44 @@ class ExploreScreen(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (listingTypeBottomSheetOpened) {
|
||||
val values =
|
||||
buildList {
|
||||
if (uiState.isLogged) {
|
||||
this += ListingType.Subscribed
|
||||
}
|
||||
this += ListingType.All
|
||||
this += ListingType.Local
|
||||
}
|
||||
CustomModalBottomSheet(
|
||||
title = LocalStrings.current.inboxListingTypeTitle,
|
||||
items =
|
||||
values.map { value ->
|
||||
CustomModalBottomSheetItem(
|
||||
label = value.toReadableName(),
|
||||
trailingContent = {
|
||||
Icon(
|
||||
modifier = Modifier.size(IconSize.m),
|
||||
imageVector = value.toIcon(),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
onSelected = { index ->
|
||||
listingTypeBottomSheetOpened = false
|
||||
if (index != null) {
|
||||
notificationCenter.send(
|
||||
NotificationCenterEvent.ChangeFeedType(
|
||||
value = values[index],
|
||||
screenKey = notificationEventKey,
|
||||
),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ import cafe.adriel.voyager.core.screen.Screen
|
||||
import cafe.adriel.voyager.koin.getScreenModel
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.data.PostLayout
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.di.getThemeRepository
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.IconSize
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.FloatingActionButtonMenu
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.FloatingActionButtonMenuItem
|
||||
@ -78,20 +79,26 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCardPlace
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.di.getFabNestedScrollConnection
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.BlockBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CopyPostBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ShareBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.TabNavigationSection
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getDrawerCoordinator
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.persistence.data.ActionOnSwipe
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.persistence.di.getSettingsRepository
|
||||
import com.livefast.eattrash.raccoonforlemmy.core.utils.keepscreenon.rememberKeepScreenOn
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.PostModel
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.readableHandle
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.readableName
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
|
||||
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
|
||||
import com.livefast.eattrash.raccoonforlemmy.unit.moderatewithreason.ModerateWithReasonAction
|
||||
import com.livefast.eattrash.raccoonforlemmy.unit.moderatewithreason.ModerateWithReasonScreen
|
||||
import com.livefast.eattrash.raccoonforlemmy.unit.moderatewithreason.toInt
|
||||
@ -126,6 +133,7 @@ class PostListScreen : Screen {
|
||||
val lazyListState = rememberLazyListState()
|
||||
val drawerCoordinator = remember { getDrawerCoordinator() }
|
||||
val scope = rememberCoroutineScope()
|
||||
val notificationCenter = remember { getNotificationCenter() }
|
||||
var rawContent by remember { mutableStateOf<Any?>(null) }
|
||||
val settingsRepository = remember { getSettingsRepository() }
|
||||
val settings by settingsRepository.currentSettings.collectAsState()
|
||||
@ -138,6 +146,7 @@ class PostListScreen : Screen {
|
||||
}
|
||||
val clipboardManager = LocalClipboardManager.current
|
||||
var itemIdToDelete by remember { mutableStateOf<Long?>(null) }
|
||||
var listingTypeBottomSheetOpened by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(navigationCoordinator) {
|
||||
navigationCoordinator.onDoubleTabSelection
|
||||
@ -204,17 +213,12 @@ class PostListScreen : Screen {
|
||||
}
|
||||
},
|
||||
onSelectListingType = {
|
||||
val sheet =
|
||||
ListingTypeBottomSheet(
|
||||
isLogged = uiState.isLogged,
|
||||
screenKey = "postList",
|
||||
)
|
||||
navigationCoordinator.showBottomSheet(sheet)
|
||||
listingTypeBottomSheetOpened = true
|
||||
},
|
||||
onSelectInstance =
|
||||
{
|
||||
navigationCoordinator.showBottomSheet(SelectInstanceBottomSheet())
|
||||
}.takeIf { uiState.isLogged },
|
||||
}.takeIf { !uiState.isLogged },
|
||||
onSelectSortType = {
|
||||
val sheet =
|
||||
SortBottomSheet(
|
||||
@ -858,5 +862,44 @@ class PostListScreen : Screen {
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
if (listingTypeBottomSheetOpened) {
|
||||
val values =
|
||||
buildList {
|
||||
if (uiState.isLogged) {
|
||||
this += ListingType.Subscribed
|
||||
}
|
||||
this += ListingType.All
|
||||
this += ListingType.Local
|
||||
}
|
||||
CustomModalBottomSheet(
|
||||
title = LocalStrings.current.inboxListingTypeTitle,
|
||||
items =
|
||||
values.map { value ->
|
||||
CustomModalBottomSheetItem(
|
||||
label = value.toReadableName(),
|
||||
trailingContent = {
|
||||
Icon(
|
||||
modifier = Modifier.size(IconSize.m),
|
||||
imageVector = value.toIcon(),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onBackground,
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
onSelected = { index ->
|
||||
listingTypeBottomSheetOpened = false
|
||||
if (index != null) {
|
||||
notificationCenter.send(
|
||||
NotificationCenterEvent.ChangeFeedType(
|
||||
value = values[index],
|
||||
screenKey = "postList",
|
||||
),
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -110,15 +110,15 @@ internal fun PostsTopBar(
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(horizontal = Spacing.s)
|
||||
.onClick(
|
||||
.padding(horizontal = Spacing.s),
|
||||
) {
|
||||
Text(
|
||||
modifier =
|
||||
Modifier.fillMaxWidth().onClick(
|
||||
onClick = {
|
||||
onSelectListingType?.invoke()
|
||||
},
|
||||
),
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
text = listingType?.toReadableName().orEmpty(),
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
color = MaterialTheme.colorScheme.onBackground,
|
||||
@ -126,15 +126,15 @@ internal fun PostsTopBar(
|
||||
Text(
|
||||
modifier =
|
||||
Modifier.fillMaxWidth().then(
|
||||
if (onSelectInstance != null) {
|
||||
Modifier.onClick(
|
||||
onClick = {
|
||||
if (onSelectInstance != null) {
|
||||
onSelectInstance.invoke()
|
||||
},
|
||||
)
|
||||
} else {
|
||||
Modifier
|
||||
},
|
||||
} else {
|
||||
onSelectListingType?.invoke()
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
text =
|
||||
buildString {
|
||||
|
Loading…
x
Reference in New Issue
Block a user