diff --git a/app/src/main/java/com/jerboa/Utils.kt b/app/src/main/java/com/jerboa/Utils.kt index f3c6ae313..f7a1c50be 100644 --- a/app/src/main/java/com/jerboa/Utils.kt +++ b/app/src/main/java/com/jerboa/Utils.kt @@ -1041,69 +1041,6 @@ fun convertSpToPx(sp: TextUnit, ctx: Context): Int { return (sp.value * ctx.resources.displayMetrics.scaledDensity).toInt() } -/** - * Returns localized Strings for SortingType Enum - */ - -fun getLocalizedSortingTypeShortName(ctx: Context, sortingType: SortType): String { - return ctx.getString( - MAP_SORT_TYPE_SHORT_FORM[sortingType] - ?: throw IllegalStateException("Someone forgot to update the MAP_SORT_TYPE_SHORT_FORM"), - ) -} - -// ORDER MUST BE THE SAME AS THE ENUM -val MAP_SORT_TYPE_SHORT_FORM = mapOf( - SortType.Active to R.string.sorttype_active, - SortType.Hot to R.string.sorttype_hot, - SortType.New to R.string.sorttype_new, - SortType.Old to R.string.sorttype_old, - SortType.TopDay to R.string.sorttype_topday, - SortType.TopWeek to R.string.sorttype_topweek, - SortType.TopMonth to R.string.sorttype_topmonth, - SortType.TopYear to R.string.sorttype_topyear, - SortType.TopAll to R.string.sorttype_topall, - SortType.MostComments to R.string.sorttype_mostcomments, - SortType.NewComments to R.string.sorttype_newcomments, - SortType.TopHour to R.string.sorttype_tophour, - SortType.TopSixHour to R.string.sorttype_topsixhour, - SortType.TopTwelveHour to R.string.sorttype_toptwelvehour, - SortType.TopThreeMonths to R.string.sorttype_topthreemonths, - SortType.TopSixMonths to R.string.sorttype_topsixmonths, - SortType.TopNineMonths to R.string.sorttype_topninemonths, -) - -/** - * Returns localized Strings for SortingType Enum - */ - -fun getLocalizedSortingTypeLongName(ctx: Context, sortingType: SortType): String { - return ctx.getString( - MAP_SORT_TYPE_LONG_FORM[sortingType] - ?: throw IllegalStateException("Someone forgot to update the MAP_SORT_TYPE_LONG_FORM"), - ) -} - -val MAP_SORT_TYPE_LONG_FORM = mapOf( - SortType.Active to R.string.sorttype_active, - SortType.Hot to R.string.sorttype_hot, - SortType.New to R.string.sorttype_new, - SortType.Old to R.string.sorttype_old, - SortType.TopDay to R.string.dialogs_top_day, - SortType.TopWeek to R.string.dialogs_top_week, - SortType.TopMonth to R.string.dialogs_top_month, - SortType.TopYear to R.string.dialogs_top_year, - SortType.TopAll to R.string.dialogs_top_all, - SortType.MostComments to R.string.dialogs_most_comments, - SortType.NewComments to R.string.dialogs_new_comments, - SortType.TopHour to R.string.dialogs_top_hour, - SortType.TopSixHour to R.string.dialogs_top_six_hour, - SortType.TopTwelveHour to R.string.dialogs_top_twelve_hour, - SortType.TopThreeMonths to R.string.dialogs_top_three_month, - SortType.TopSixMonths to R.string.dialogs_top_six_month, - SortType.TopNineMonths to R.string.dialogs_top_nine_month, -) - /** * Returns localized Strings for UserTab Enum */ @@ -1137,6 +1074,7 @@ fun getLocalizedCommentSortTypeName(ctx: Context, commentSortType: CommentSortTy CommentSortType.New -> ctx.getString(R.string.sorttype_new) CommentSortType.Old -> ctx.getString(R.string.sorttype_old) CommentSortType.Top -> ctx.getString(R.string.dialogs_top) + CommentSortType.Controversial -> ctx.getString(R.string.sorttype_controversial) } return returnString } diff --git a/app/src/main/java/com/jerboa/datatypes/types/Others.kt b/app/src/main/java/com/jerboa/datatypes/types/Others.kt index 50252ee49..e448c154e 100644 --- a/app/src/main/java/com/jerboa/datatypes/types/Others.kt +++ b/app/src/main/java/com/jerboa/datatypes/types/Others.kt @@ -1,10 +1,27 @@ package com.jerboa.datatypes.types import android.os.Parcelable +import androidx.annotation.StringRes +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.BarChart +import androidx.compose.material.icons.outlined.BrightnessLow +import androidx.compose.material.icons.outlined.FormatListNumbered +import androidx.compose.material.icons.outlined.History +import androidx.compose.material.icons.outlined.LocalFireDepartment +import androidx.compose.material.icons.outlined.Moving +import androidx.compose.material.icons.outlined.NewReleases +import androidx.compose.material.icons.outlined.ThumbsUpDown import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.vector.ImageVector import com.google.gson.annotations.SerializedName +import com.jerboa.R +import com.jerboa.api.MINIMUM_API_VERSION +import com.jerboa.compareVersions import kotlinx.parcelize.Parcelize +const val MINIMUM_CONTROVERSIAL_SORT_API_VERSION: String = "0.19" +const val MINIMUM_TOP_X_MONTHLY_SORT_API_VERSION: String = "0.18.1" + enum class RegistrationMode { @SerializedName("Closed") Closed, @@ -19,135 +36,237 @@ enum class RegistrationMode { /** * Different sort types used in lemmy. */ -enum class SortType { +enum class SortType( + @StringRes val shortForm: Int, + @StringRes val longForm: Int, + val icon: ImageVector? = null, + val version: String = MINIMUM_API_VERSION, +) { /** * Posts sorted by the most recent comment. */ @SerializedName("Active") - Active, + Active( + R.string.sorttype_active, + R.string.sorttype_active, + Icons.Outlined.Moving, + ), /** * Posts sorted by the published time. */ @SerializedName("Hot") - Hot, + Hot( + R.string.sorttype_hot, + R.string.sorttype_hot, + Icons.Outlined.LocalFireDepartment, + ), @SerializedName("New") - New, + New( + R.string.sorttype_new, + R.string.sorttype_new, + Icons.Outlined.BrightnessLow, + ), /** * Posts sorted by the published time ascending */ @SerializedName("Old") - Old, + Old( + R.string.sorttype_old, + R.string.sorttype_old, + Icons.Outlined.History, + ), + + /** + * Posts sorted by controversy rank. + */ + @SerializedName("Controversial") + Controversial( + R.string.sorttype_controversial, + R.string.sorttype_controversial, + Icons.Outlined.ThumbsUpDown, + MINIMUM_CONTROVERSIAL_SORT_API_VERSION, + ), /** * The top posts for this last day. */ @SerializedName("TopDay") - TopDay, + TopDay( + R.string.sorttype_topday, + R.string.dialogs_top_day, + Icons.Outlined.BarChart, + ), /** * The top posts for this last week. */ @SerializedName("TopWeek") - TopWeek, + TopWeek( + R.string.sorttype_topweek, + R.string.dialogs_top_week, + Icons.Outlined.BarChart, + ), /** * The top posts for this last month. */ @SerializedName("TopMonth") - TopMonth, + TopMonth( + R.string.sorttype_topmonth, + R.string.dialogs_top_month, + Icons.Outlined.BarChart, + ), /** * The top posts for this last year. */ @SerializedName("TopYear") - TopYear, + TopYear( + R.string.sorttype_topyear, + R.string.dialogs_top_year, + Icons.Outlined.BarChart, + ), /** * The top posts of all time. */ @SerializedName("TopAll") - TopAll, + TopAll( + R.string.sorttype_topall, + R.string.dialogs_top_all, + Icons.Outlined.BarChart, + ), /** * Posts sorted by the most comments. */ @SerializedName("MostComments") - MostComments, + MostComments( + R.string.sorttype_mostcomments, + R.string.sorttype_mostcomments, + Icons.Outlined.FormatListNumbered, + ), /** * Posts sorted by the newest comments, with no necrobumping. IE a forum sort. */ @SerializedName("NewComments") - NewComments, + NewComments( + R.string.sorttype_newcomments, + R.string.sorttype_newcomments, + Icons.Outlined.NewReleases, + ), /** * Posts sorted by the top hour. */ @SerializedName("TopHour") - TopHour, + TopHour( + R.string.sorttype_tophour, + R.string.dialogs_top_hour, + Icons.Outlined.BarChart, + ), /** * Posts sorted by the top six hour. */ @SerializedName("TopSixHour") - TopSixHour, + TopSixHour( + R.string.sorttype_topsixhour, + R.string.dialogs_top_six_hour, + Icons.Outlined.BarChart, + ), /** * Posts sorted by the top twelve hour. */ @SerializedName("TopTwelveHour") - TopTwelveHour, + TopTwelveHour( + R.string.sorttype_toptwelvehour, + R.string.dialogs_top_twelve_hour, + Icons.Outlined.BarChart, + ), /** * Posts sorted by the top three months. */ @SerializedName("TopThreeMonths") - TopThreeMonths, + TopThreeMonths( + R.string.sorttype_topthreemonths, + R.string.dialogs_top_three_month, + Icons.Outlined.BarChart, + MINIMUM_TOP_X_MONTHLY_SORT_API_VERSION, + ), /** * Posts sorted by the top six months. */ @SerializedName("TopSixMonths") - TopSixMonths, + TopSixMonths( + R.string.sorttype_topsixmonths, + R.string.dialogs_top_six_month, + Icons.Outlined.BarChart, + MINIMUM_TOP_X_MONTHLY_SORT_API_VERSION, + ), /** * Posts sorted by the top nine months. */ @SerializedName("TopNineMonths") - TopNineMonths, + TopNineMonths( + R.string.sorttype_topninemonths, + R.string.dialogs_top_nine_month, + Icons.Outlined.BarChart, + MINIMUM_TOP_X_MONTHLY_SORT_API_VERSION, + ), + ; + + companion object { + val getSupportedSortTypes = { siteVersion: String -> values().filter { compareVersions(siteVersion, it.version) >= 0 } } + } } -// When updating this enum, don't forget to update MAP_SORT_TYPE_SHORT_FORM and MAP_SORT_TYPE_LONG_FORM /** * Different comment sort types used in lemmy. */ -enum class CommentSortType { +enum class CommentSortType(val text: Int, val icon: ImageVector? = null, val version: String = MINIMUM_API_VERSION) { /** * Comments sorted by a decaying rank. */ @SerializedName("Hot") - Hot, + Hot(R.string.dialogs_hot, Icons.Outlined.LocalFireDepartment), /** * Comments sorted by top score. */ @SerializedName("Top") - Top, + Top(R.string.dialogs_top, Icons.Outlined.BarChart), /** * Comments sorted by new. */ @SerializedName("New") - New, + New(R.string.dialogs_new, Icons.Outlined.BrightnessLow), /** * Comments sorted by old. */ @SerializedName("Old") - Old, + Old(R.string.dialogs_old, Icons.Outlined.History), + + /** + * Posts sorted by controversy rank. + */ + @SerializedName("Controversial") + Controversial(R.string.sorttype_controversial, Icons.Outlined.ThumbsUpDown, MINIMUM_CONTROVERSIAL_SORT_API_VERSION), + ; + + companion object { + val getSupportedSortTypes = { siteVersion: String -> values().filter { compareVersions(siteVersion, it.version) >= 0 } } + } } /** diff --git a/app/src/main/java/com/jerboa/model/SiteViewModel.kt b/app/src/main/java/com/jerboa/model/SiteViewModel.kt index 433278167..0ae3b56b8 100644 --- a/app/src/main/java/com/jerboa/model/SiteViewModel.kt +++ b/app/src/main/java/com/jerboa/model/SiteViewModel.kt @@ -13,6 +13,7 @@ import androidx.lifecycle.viewmodel.viewModelFactory import com.jerboa.api.API import com.jerboa.api.ApiState import com.jerboa.api.DEFAULT_INSTANCE +import com.jerboa.api.MINIMUM_API_VERSION import com.jerboa.api.apiWrapper import com.jerboa.datatypes.types.GetSite import com.jerboa.datatypes.types.GetSiteResponse @@ -150,6 +151,13 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode } } + fun siteVersion(): String { + return when (val res = siteRes) { + is ApiState.Success -> res.data.version + else -> MINIMUM_API_VERSION + } + } + companion object { val Factory = viewModelFactory { initializer { diff --git a/app/src/main/java/com/jerboa/ui/components/common/Dialogs.kt b/app/src/main/java/com/jerboa/ui/components/common/Dialogs.kt index b97d1d440..ae7bb2e29 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/Dialogs.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/Dialogs.kt @@ -7,12 +7,6 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.BarChart -import androidx.compose.material.icons.outlined.BrightnessLow -import androidx.compose.material.icons.outlined.FormatListNumbered -import androidx.compose.material.icons.outlined.History -import androidx.compose.material.icons.outlined.LocalFireDepartment -import androidx.compose.material.icons.outlined.Moving -import androidx.compose.material.icons.outlined.NewReleases import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.Text @@ -37,7 +31,6 @@ import com.jerboa.R import com.jerboa.api.MINIMUM_API_VERSION import com.jerboa.datatypes.types.CommentSortType import com.jerboa.datatypes.types.SortType -import com.jerboa.getLocalizedSortingTypeLongName import com.jerboa.model.AppSettingsViewModel val DONATION_MARKDOWN = """ @@ -52,22 +45,23 @@ val DONATION_MARKDOWN = """ """.trimIndent() -val topSortTypes = SortType.entries.filter { it.name.startsWith("Top") } +val isTopSort = { sort: SortType -> sort.name.startsWith("Top") } @Composable fun SortTopOptionsDialog( onDismissRequest: () -> Unit, onClickSortType: (SortType) -> Unit, selectedSortType: SortType, + siteVersion: String, ) { val ctx = LocalContext.current AlertDialog( onDismissRequest = onDismissRequest, text = { Column { - topSortTypes.forEach { + SortType.getSupportedSortTypes(siteVersion).filter(isTopSort).forEach { IconAndTextDrawerItem( - text = getLocalizedSortingTypeLongName(ctx, it), + text = ctx.getString(it.longForm), onClick = { onClickSortType(it) }, highlight = (selectedSortType == it), ) @@ -86,6 +80,7 @@ fun SortOptionsDialogPreview() { onDismissRequest = {}, onClickSortTopOptions = {}, onClickSortType = {}, + siteVersion = MINIMUM_API_VERSION, ) } @@ -96,55 +91,27 @@ fun SortOptionsDialog( onClickSortType: (SortType) -> Unit, onClickSortTopOptions: () -> Unit, selectedSortType: SortType, + siteVersion: String, ) { AlertDialog( modifier = Modifier.semantics { testTagsAsResourceId = true }, onDismissRequest = onDismissRequest, text = { Column { - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_active), - icon = Icons.Outlined.Moving, - onClick = { onClickSortType(SortType.Active) }, - highlight = (selectedSortType == SortType.Active), - ) - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_hot), - icon = Icons.Outlined.LocalFireDepartment, - onClick = { onClickSortType(SortType.Hot) }, - highlight = (selectedSortType == SortType.Hot), - ) - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_new), - icon = Icons.Outlined.BrightnessLow, - onClick = { onClickSortType(SortType.New) }, - highlight = (selectedSortType == SortType.New), - ) - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_old), - icon = Icons.Outlined.History, - onClick = { onClickSortType(SortType.Old) }, - highlight = (selectedSortType == SortType.Old), - ) - IconAndTextDrawerItem( - modifier = Modifier.testTag("jerboa:sortoption_mostcomments"), - text = stringResource(R.string.dialogs_most_comments), - icon = Icons.Outlined.FormatListNumbered, - onClick = { onClickSortType(SortType.MostComments) }, - highlight = (selectedSortType == SortType.MostComments), - ) - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_new_comments), - icon = Icons.Outlined.NewReleases, - onClick = { onClickSortType(SortType.NewComments) }, - highlight = (selectedSortType == SortType.NewComments), - ) + SortType.getSupportedSortTypes(siteVersion).filter { !isTopSort(it) }.forEach { + IconAndTextDrawerItem( + text = stringResource(it.longForm), + icon = it.icon, + onClick = { onClickSortType(it) }, + highlight = (selectedSortType == it), + ) + } IconAndTextDrawerItem( text = stringResource(R.string.dialogs_top), icon = Icons.Outlined.BarChart, onClick = onClickSortTopOptions, more = true, - highlight = (topSortTypes.contains(selectedSortType)), + highlight = (isTopSort(selectedSortType)), ) } }, @@ -159,6 +126,7 @@ fun CommentSortOptionsDialogPreview() { selectedSortType = CommentSortType.Hot, onDismissRequest = {}, onClickSortType = {}, + siteVersion = MINIMUM_API_VERSION, ) } @@ -167,35 +135,20 @@ fun CommentSortOptionsDialog( onDismissRequest: () -> Unit, onClickSortType: (CommentSortType) -> Unit, selectedSortType: CommentSortType, + siteVersion: String, ) { AlertDialog( onDismissRequest = onDismissRequest, text = { Column { - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_hot), - icon = Icons.Outlined.LocalFireDepartment, - onClick = { onClickSortType(CommentSortType.Hot) }, - highlight = (selectedSortType == CommentSortType.Hot), - ) - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_top), - icon = Icons.Outlined.BarChart, - onClick = { onClickSortType(CommentSortType.Top) }, - highlight = (selectedSortType == CommentSortType.Top), - ) - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_new), - icon = Icons.Outlined.NewReleases, - onClick = { onClickSortType(CommentSortType.New) }, - highlight = (selectedSortType == CommentSortType.New), - ) - IconAndTextDrawerItem( - text = stringResource(R.string.dialogs_old), - icon = Icons.Outlined.History, - onClick = { onClickSortType(CommentSortType.Old) }, - highlight = (selectedSortType == CommentSortType.Old), - ) + CommentSortType.getSupportedSortTypes(siteVersion).forEach { + IconAndTextDrawerItem( + text = stringResource(it.text), + icon = it.icon, + onClick = { onClickSortType(it) }, + highlight = (selectedSortType == it), + ) + } } }, confirmButton = {}, diff --git a/app/src/main/java/com/jerboa/ui/components/community/Community.kt b/app/src/main/java/com/jerboa/ui/components/community/Community.kt index 8e3337ff8..970b80b6f 100644 --- a/app/src/main/java/com/jerboa/ui/components/community/Community.kt +++ b/app/src/main/java/com/jerboa/ui/components/community/Community.kt @@ -18,7 +18,6 @@ import com.jerboa.datatypes.sampleCommunityView import com.jerboa.datatypes.types.CommunityView import com.jerboa.datatypes.types.SortType import com.jerboa.datatypes.types.SubscribedType -import com.jerboa.getLocalizedSortingTypeShortName import com.jerboa.ui.components.common.LargerCircularIcon import com.jerboa.ui.components.common.MenuItem import com.jerboa.ui.components.common.PictrsBannerImage @@ -137,6 +136,7 @@ fun CommunityHeader( onClickCommunityInfo: () -> Unit, onClickBack: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, + siteVersion: String, isBlocked: Boolean, ) { var showSortOptions by remember { mutableStateOf(false) } @@ -156,6 +156,7 @@ fun CommunityHeader( showSortOptions = false showTopOptions = !showTopOptions }, + siteVersion = siteVersion, ) } @@ -167,6 +168,7 @@ fun CommunityHeader( showTopOptions = false onClickSortType(it) }, + siteVersion = siteVersion, ) } @@ -250,7 +252,7 @@ fun CommunityHeaderTitle( modifier = Modifier.basicMarquee(), ) Text( - text = getLocalizedSortingTypeShortName(ctx, selectedSortType), + text = ctx.getString(selectedSortType.shortForm), style = MaterialTheme.typography.titleMedium, ) } diff --git a/app/src/main/java/com/jerboa/ui/components/community/CommunityActivity.kt b/app/src/main/java/com/jerboa/ui/components/community/CommunityActivity.kt index c92302b83..af01f9c7c 100644 --- a/app/src/main/java/com/jerboa/ui/components/community/CommunityActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/community/CommunityActivity.kt @@ -241,6 +241,7 @@ fun CommunityActivity( onClickBack = appState::navigateUp, selectedPostViewMode = getPostViewMode(appSettingsViewModel), isBlocked = communityRes.data.community_view.blocked, + siteVersion = siteViewModel.siteVersion(), ) } else -> {} diff --git a/app/src/main/java/com/jerboa/ui/components/home/Home.kt b/app/src/main/java/com/jerboa/ui/components/home/Home.kt index caf253f26..646acf743 100644 --- a/app/src/main/java/com/jerboa/ui/components/home/Home.kt +++ b/app/src/main/java/com/jerboa/ui/components/home/Home.kt @@ -38,11 +38,11 @@ import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.tooling.preview.Preview import com.jerboa.PostViewMode import com.jerboa.R +import com.jerboa.api.MINIMUM_API_VERSION import com.jerboa.datatypes.types.ListingType import com.jerboa.datatypes.types.SortType import com.jerboa.datatypes.types.Tagline import com.jerboa.getLocalizedListingTypeName -import com.jerboa.getLocalizedSortingTypeShortName import com.jerboa.ui.components.common.MenuItem import com.jerboa.ui.components.common.MyMarkdownText import com.jerboa.ui.components.common.PostViewModeDialog @@ -63,7 +63,7 @@ fun HomeHeaderTitle( style = MaterialTheme.typography.titleLarge, ) Text( - text = getLocalizedSortingTypeShortName(ctx, selectedSortType), + text = ctx.getString(selectedSortType.shortForm), style = MaterialTheme.typography.titleSmall, ) } @@ -82,6 +82,7 @@ fun HomeHeader( selectedPostViewMode: PostViewMode, onClickSiteInfo: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, + siteVersion: String, ) { var showSortOptions by remember { mutableStateOf(false) } var showTopOptions by remember { mutableStateOf(false) } @@ -101,6 +102,7 @@ fun HomeHeader( showSortOptions = false showTopOptions = !showTopOptions }, + siteVersion = siteVersion, ) } @@ -112,6 +114,7 @@ fun HomeHeader( showTopOptions = false onClickSortType(it) }, + siteVersion = siteVersion, ) } @@ -211,6 +214,7 @@ fun HomeHeaderPreview() { selectedListingType = ListingType.All, selectedPostViewMode = PostViewMode.Card, scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(), + siteVersion = MINIMUM_API_VERSION, ) } diff --git a/app/src/main/java/com/jerboa/ui/components/home/HomeActivity.kt b/app/src/main/java/com/jerboa/ui/components/home/HomeActivity.kt index 2ee71680b..46ec90ae1 100644 --- a/app/src/main/java/com/jerboa/ui/components/home/HomeActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/home/HomeActivity.kt @@ -141,6 +141,7 @@ fun HomeActivity( account = account, scrollBehavior = scrollBehavior, onClickSiteInfo = appState::toSiteSideBar, + siteVersion = siteViewModel.siteVersion(), ) }, content = { padding -> @@ -438,6 +439,7 @@ fun MainTopBar( account: Account, onClickSiteInfo: () -> Unit, scrollBehavior: TopAppBarScrollBehavior, + siteVersion: String, ) { Column { HomeHeader( @@ -464,6 +466,7 @@ fun MainTopBar( homeViewModel.resetPosts(account) }, onClickSiteInfo = onClickSiteInfo, + siteVersion = siteVersion, ) } } diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt index 308f8435c..33ccfacea 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfile.kt @@ -33,7 +33,6 @@ import com.jerboa.R import com.jerboa.datatypes.samplePersonView import com.jerboa.datatypes.types.PersonView import com.jerboa.datatypes.types.SortType -import com.jerboa.getLocalizedSortingTypeShortName import com.jerboa.personNameShown import com.jerboa.ui.components.common.DotSpacer import com.jerboa.ui.components.common.LargerCircularIcon @@ -155,6 +154,7 @@ fun PersonProfileHeader( scrollBehavior: TopAppBarScrollBehavior, onBack: (() -> Unit)? = null, isLoggedIn: () -> Boolean, + siteVersion: String, ) { var showSortOptions by remember { mutableStateOf(false) } var showTopOptions by remember { mutableStateOf(false) } @@ -172,6 +172,7 @@ fun PersonProfileHeader( showSortOptions = false showTopOptions = !showTopOptions }, + siteVersion = siteVersion, ) } @@ -183,6 +184,7 @@ fun PersonProfileHeader( showTopOptions = false onClickSortType(it) }, + siteVersion = siteVersion, ) } @@ -263,7 +265,7 @@ fun PersonProfileHeaderTitle( style = MaterialTheme.typography.titleLarge, ) Text( - text = getLocalizedSortingTypeShortName(LocalContext.current, selectedSortType), + text = LocalContext.current.getString(selectedSortType.shortForm), style = MaterialTheme.typography.titleMedium, ) } diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt index 89cf9743e..b4f883ab1 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt @@ -201,6 +201,7 @@ fun PersonProfileActivity( openDrawer = ::openDrawer, onBack = onBack, isLoggedIn = { false }, + siteVersion = siteViewModel.siteVersion(), ) } is ApiState.Holder -> { @@ -265,6 +266,7 @@ fun PersonProfileActivity( openDrawer = ::openDrawer, onBack = onBack, isLoggedIn = { !account.isAnon() }, + siteVersion = siteViewModel.siteVersion(), ) } else -> {} diff --git a/app/src/main/java/com/jerboa/ui/components/post/PostActivity.kt b/app/src/main/java/com/jerboa/ui/components/post/PostActivity.kt index 3333e429f..da3117af2 100644 --- a/app/src/main/java/com/jerboa/ui/components/post/PostActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/post/PostActivity.kt @@ -216,6 +216,7 @@ fun PostActivity( showSortOptions = false onClickSortType(it) }, + siteVersion = siteViewModel.siteVersion(), ) } diff --git a/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt b/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt index cfc4d72ae..94d580ab2 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt @@ -23,7 +23,6 @@ import com.alorma.compose.settings.storage.base.rememberBooleanSettingState import com.alorma.compose.settings.storage.base.rememberIntSettingState import com.alorma.compose.settings.ui.SettingsCheckbox import com.alorma.compose.settings.ui.SettingsListDropdown -import com.jerboa.MAP_SORT_TYPE_SHORT_FORM import com.jerboa.R import com.jerboa.api.ApiState import com.jerboa.api.uploadPictrsImage @@ -123,7 +122,9 @@ fun SettingsForm( } var avatar by rememberSaveable { mutableStateOf(luv?.person?.avatar.orEmpty()) } var banner by rememberSaveable { mutableStateOf(luv?.person?.banner.orEmpty()) } - val defaultSortType = rememberIntSettingState(luv?.local_user?.default_sort_type?.ordinal ?: 0) + val supportedSortTypes = remember { SortType.getSupportedSortTypes(siteViewModel.siteVersion()) } + val defaultSortTypeInitial = luv?.local_user?.default_sort_type ?: SortType.Active + val defaultSortType = rememberIntSettingState(supportedSortTypes.indexOf(defaultSortTypeInitial)) val defaultListingType = rememberIntSettingState(luv?.local_user?.default_listing_type?.ordinal ?: 0) val showAvatars = rememberBooleanSettingState(luv?.local_user?.show_avatars ?: false) @@ -138,10 +139,7 @@ fun SettingsForm( rememberBooleanSettingState(luv?.local_user?.send_notifications_to_email ?: false) val curr2FAEnabled = luv?.local_user?.totp_2fa_url != null val enable2FA = rememberBooleanSettingState(curr2FAEnabled) - - val sortTypeNames = remember { - MAP_SORT_TYPE_SHORT_FORM.values.map { ctx.getString(it) } - } + val sortTypeNames = remember { supportedSortTypes.map { ctx.getString(it.shortForm) } } val form = SaveUserSettings( display_name = displayName, bio = bio.text, @@ -152,7 +150,7 @@ fun SettingsForm( matrix_user_id = matrixUserId, interface_language = interfaceLang, bot_account = botAccount.value, - default_sort_type = SortType.entries[defaultSortType.value], + default_sort_type = supportedSortTypes[defaultSortType.value], send_notifications_to_email = sendNotificationsToEmail.value, show_avatars = showAvatars.value, show_bot_accounts = showBotAccount.value, diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index f95e3a1e5..af5ed1ab9 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -327,4 +327,5 @@ Κορυφαία Εννέα Μηνών Προβολή πηγής Προβολή πρωτότυπου + Αμφιλεγόμενα diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9a3de17b2..8d5578e23 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -301,6 +301,7 @@ New NewComments Old + Controversial TopAll TopDay TopMonth