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