From 05bb0f3d32378e98c7a106a5a6cf756ab553e5ba Mon Sep 17 00:00:00 2001 From: Dessalines Date: Tue, 20 Dec 2022 12:16:47 -0500 Subject: [PATCH 1/3] Adding light and dark theme options. Fixes #254 --- app/src/main/java/com/jerboa/MainActivity.kt | 4 +- app/src/main/java/com/jerboa/Utils.kt | 13 ++- app/src/main/java/com/jerboa/db/AppDB.kt | 30 ++++-- .../jerboa/ui/components/common/AppBars.kt | 22 +++-- .../jerboa/ui/components/common/TimeAgo.kt | 9 +- .../ui/components/community/CommunityLink.kt | 5 +- .../ui/components/person/PersonProfile.kt | 2 +- .../ui/components/person/PersonProfileLink.kt | 2 +- .../jerboa/ui/components/post/PostListing.kt | 18 ++-- .../lookandfeel/LookAndFeelActivity.kt | 98 ++++++++++++++++--- .../main/java/com/jerboa/ui/theme/Color.kt | 2 + .../main/java/com/jerboa/ui/theme/Theme.kt | 60 ++++++++---- app/src/main/java/com/jerboa/ui/theme/Type.kt | 5 +- 13 files changed, 203 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/com/jerboa/MainActivity.kt b/app/src/main/java/com/jerboa/MainActivity.kt index 0167e226f..d8f3c7f82 100644 --- a/app/src/main/java/com/jerboa/MainActivity.kt +++ b/app/src/main/java/com/jerboa/MainActivity.kt @@ -13,7 +13,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.unit.sp import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -102,8 +101,7 @@ class MainActivity : ComponentActivity() { val appSettings by appSettingsViewModel.appSettings.observeAsState() JerboaTheme( - themeMode = ThemeMode.values()[appSettings?.theme ?: 0], - fontSize = (appSettings?.fontSize ?: 13).sp + appSettings = appSettings ) { val navController = rememberNavController() val ctx = LocalContext.current diff --git a/app/src/main/java/com/jerboa/Utils.kt b/app/src/main/java/com/jerboa/Utils.kt index 52b351936..aac452c9b 100644 --- a/app/src/main/java/com/jerboa/Utils.kt +++ b/app/src/main/java/com/jerboa/Utils.kt @@ -584,7 +584,16 @@ fun Context.findActivity(): Activity? = when (this) { enum class ThemeMode { System, Light, - Dark, - DarkBlue, + Dark +} + +enum class LightTheme { + Green, + Pink +} + +enum class DarkTheme { + Gray, + Blue, Black } diff --git a/app/src/main/java/com/jerboa/db/AppDB.kt b/app/src/main/java/com/jerboa/db/AppDB.kt index 4d49219f0..04d3e292d 100644 --- a/app/src/main/java/com/jerboa/db/AppDB.kt +++ b/app/src/main/java/com/jerboa/db/AppDB.kt @@ -14,6 +14,8 @@ import androidx.sqlite.db.SupportSQLiteDatabase import kotlinx.coroutines.launch import java.util.concurrent.Executors +const val DEFAULT_FONT_SIZE = 14 + @Entity data class Account( @PrimaryKey val id: Int, @@ -38,14 +40,24 @@ data class AppSettings( @PrimaryKey(autoGenerate = true) val id: Int, @ColumnInfo( name = "font_size", - defaultValue = "13" + defaultValue = DEFAULT_FONT_SIZE.toString() ) val fontSize: Int, @ColumnInfo( name = "theme", defaultValue = "0" ) - val theme: Int + val theme: Int, + @ColumnInfo( + name = "light_theme", + defaultValue = "0" + ) + val lightTheme: Int, + @ColumnInfo( + name = "dark_theme", + defaultValue = "0" + ) + val darkTheme: Int ) @Dao @@ -145,9 +157,13 @@ val MIGRATION_2_3 = object : Migration(2, 3) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL( """ - CREATE TABLE IF NOT EXISTS AppSettings (id INTEGER PRIMARY KEY - AUTOINCREMENT NOT NULL, font_size INTEGER NOT NULL DEFAULT 13, theme INTEGER - NOT NULL DEFAULT 0) + CREATE TABLE IF NOT EXISTS AppSettings ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + font_size INTEGER NOT NULL DEFAULT $DEFAULT_FONT_SIZE, + theme INTEGER NOT NULL DEFAULT 0, + light_theme INTEGER NOT NULL DEFAULT 0, + dark_theme INTEGER NOT NULL DEFAULT 0 + ) """ ) } @@ -189,8 +205,10 @@ abstract class AppDB : RoomDatabase() { CONFLICT_IGNORE, // Ensures it won't overwrite the existing data ContentValues(2).apply { put("id", 1) - put("font_size", 13) + put("font_size", DEFAULT_FONT_SIZE) put("theme", 0) + put("light_theme", 0) + put("dark_theme", 0) } ) } diff --git a/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt b/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt index 2cad53987..7b7c4538b 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.TextStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -207,7 +208,7 @@ fun CommentOrPostNodeHeader( contentDescription = "TODO", tint = MaterialTheme.colors.error ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) } PersonProfileLink( @@ -229,7 +230,7 @@ fun CommentOrPostNodeHeader( color = scoreColor(myVote = myVote), fontSize = MaterialTheme.typography.body1.fontSize.times(1.1) ) - DotSpacer(0.dp) + DotSpacer(0.dp, MaterialTheme.typography.body2) TimeAgo(published = published, updated = updated) } } @@ -292,9 +293,14 @@ fun ActionBarButton( } @Composable -fun DotSpacer(padding: Dp = SMALL_PADDING) { +fun DotSpacer( + padding: Dp = SMALL_PADDING, + style: TextStyle = MaterialTheme.typography.body2 +) { Text( text = "ยท", + style = style, + color = MaterialTheme.colors.onBackground.muted, modifier = Modifier.padding(horizontal = padding) ) } @@ -443,27 +449,27 @@ fun CommentsAndPosts( text = "${siFormat(usersActiveDay)} users / day", color = MaterialTheme.colors.onBackground.muted ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) Text( text = "${siFormat(usersActiveWeek)} users / week", color = MaterialTheme.colors.onBackground.muted ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) Text( text = "${siFormat(usersActiveMonth)} users / month", color = MaterialTheme.colors.onBackground.muted ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) Text( text = "${siFormat(usersActiveHalfYear)} users / 6 months", color = MaterialTheme.colors.onBackground.muted ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) Text( text = "${siFormat(postCount)} posts", color = MaterialTheme.colors.onBackground.muted ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) Text( text = "${siFormat(commentCount)} comments", color = MaterialTheme.colors.onBackground.muted diff --git a/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt b/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt index 66414c3cc..bc3cdced0 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt @@ -30,15 +30,20 @@ fun TimeAgo( Row { Text( text = afterPreceding, - color = MaterialTheme.colors.onBackground.muted + color = MaterialTheme.colors.onBackground.muted, + style = MaterialTheme.typography.body2 ) updated?.also { val updatedPretty = dateStringToPretty(it, includeAgo) - DotSpacer(SMALL_PADDING) + DotSpacer( + padding = SMALL_PADDING, + style = MaterialTheme.typography.body2 + ) Text( text = "($updatedPretty)", + style = MaterialTheme.typography.body2, color = MaterialTheme.colors.onBackground.muted, fontStyle = FontStyle.Italic ) diff --git a/app/src/main/java/com/jerboa/ui/components/community/CommunityLink.kt b/app/src/main/java/com/jerboa/ui/components/community/CommunityLink.kt index 7ed8238ab..e5e9875b1 100644 --- a/app/src/main/java/com/jerboa/ui/components/community/CommunityLink.kt +++ b/app/src/main/java/com/jerboa/ui/components/community/CommunityLink.kt @@ -33,7 +33,7 @@ import com.jerboa.ui.theme.SMALL_PADDING fun CommunityName( community: CommunitySafe, color: Color = MaterialTheme.colors.primary, - style: TextStyle = MaterialTheme.typography.body1 + style: TextStyle = MaterialTheme.typography.body2 ) { Text( text = communityNameShown(community), @@ -57,7 +57,7 @@ fun CommunityLink( spacing: Dp = SMALL_PADDING, size: Dp = ICON_SIZE, thumbnailSize: Int = ICON_THUMBNAIL_SIZE, - style: TextStyle = MaterialTheme.typography.body1, + style: TextStyle = MaterialTheme.typography.body2, onClick: (community: CommunitySafe) -> Unit ) { Row( @@ -92,6 +92,7 @@ fun CommunityLinkLarger( CommunityLink( community = community, color = MaterialTheme.colors.onSurface, + style = MaterialTheme.typography.h6, size = LINK_ICON_SIZE, thumbnailSize = LARGER_ICON_THUMBNAIL_SIZE, spacing = DRAWER_ITEM_SPACING, 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 89b39a57c..1584d2cb7 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 @@ -110,7 +110,7 @@ fun CommentsAndPosts(personView: PersonViewSafe) { text = "${personView.counts.post_count} posts", color = MaterialTheme.colors.onBackground.muted ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) Text( text = "${personView.counts.comment_count} comments", color = MaterialTheme.colors.onBackground.muted diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt index 2eaffc455..afcfa5266 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt @@ -28,7 +28,7 @@ fun PersonName( isPostCreator: Boolean = false ) { val name = person?.let { personNameShown(it) } ?: run { "Anonymous" } - val style = MaterialTheme.typography.body1 + val style = MaterialTheme.typography.body2 if (isPostCreator) { Badge( diff --git a/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt b/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt index 83a872220..4f0fc439f 100644 --- a/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt +++ b/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt @@ -102,7 +102,7 @@ fun PostHeaderLine( contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) } if (postView.post.locked) { Icon( @@ -110,7 +110,7 @@ fun PostHeaderLine( contentDescription = "TODO", tint = MaterialTheme.colors.error ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) } if (postView.post.deleted) { Icon( @@ -118,14 +118,14 @@ fun PostHeaderLine( contentDescription = "TODO", tint = MaterialTheme.colors.error ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) } if (showCommunityName) { CommunityLink( community = postView.community, onClick = onCommunityClick ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) } PersonProfileLink( person = postView.creator, @@ -136,11 +136,15 @@ fun PostHeaderLine( isCommunityBanned = postView.creator_banned_from_community ) - DotSpacer() + DotSpacer(style = MaterialTheme.typography.body2) if (!isSameInstance) { postView.post.url?.also { - Text(text = hostName(it), color = MaterialTheme.colors.onBackground.muted) - DotSpacer() + Text( + text = hostName(it), + color = MaterialTheme.colors.onBackground.muted, + style = MaterialTheme.typography.body2 + ) + DotSpacer(style = MaterialTheme.typography.body2) } } diff --git a/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt b/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt index 8b62ad3fa..6075bb85f 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt @@ -9,20 +9,26 @@ import androidx.compose.material.Scaffold import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.FlashlightOn import androidx.compose.material.icons.filled.FormatSize import androidx.compose.material.icons.filled.Palette +import androidx.compose.material.icons.filled.ShieldMoon import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.alorma.compose.settings.storage.base.SettingValueState import com.alorma.compose.settings.storage.base.rememberFloatSettingState import com.alorma.compose.settings.storage.base.rememberIntSettingState import com.alorma.compose.settings.ui.SettingsList import com.alorma.compose.settings.ui.SettingsSlider +import com.jerboa.DarkTheme +import com.jerboa.LightTheme import com.jerboa.ThemeMode import com.jerboa.db.AppSettings import com.jerboa.db.AppSettingsViewModel +import com.jerboa.db.DEFAULT_FONT_SIZE import com.jerboa.ui.components.common.SimpleTopAppBar @Composable @@ -36,7 +42,12 @@ fun LookAndFeelActivity( val settings = appSettingsViewModel.appSettings.value val themeState = rememberIntSettingState(settings?.theme ?: 0) - val fontSizeState = rememberFloatSettingState(settings?.fontSize?.toFloat() ?: 13f) + val lightThemeState = rememberIntSettingState(settings?.lightTheme ?: 0) + val darkThemeState = rememberIntSettingState(settings?.darkTheme ?: 0) + val fontSizeState = rememberFloatSettingState( + settings?.fontSize?.toFloat() + ?: DEFAULT_FONT_SIZE.toFloat() + ) Surface(color = MaterialTheme.colors.background) { Scaffold( @@ -46,6 +57,29 @@ fun LookAndFeelActivity( }, content = { padding -> Column(modifier = Modifier.padding(padding)) { + SettingsSlider( + modifier = Modifier.padding(top = 10.dp), + valueRange = 8f..48f, + state = fontSizeState, + icon = { + Icon( + imageVector = Icons.Default.FormatSize, + contentDescription = "TODO" + ) + }, + title = { + Text(text = "Font size: ${fontSizeState.value.toInt()}") + }, + onValueChangeFinished = { + updateAppSettings( + appSettingsViewModel, + fontSizeState, + themeState, + lightThemeState, + darkThemeState + ) + } + ) SettingsList( state = themeState, items = ThemeMode.values().map { it.name }, @@ -59,23 +93,57 @@ fun LookAndFeelActivity( Text(text = "Theme") }, action = { - updateAppSettings(appSettingsViewModel, fontSizeState, themeState) + updateAppSettings( + appSettingsViewModel, + fontSizeState, + themeState, + lightThemeState, + darkThemeState + ) } ) - SettingsSlider( - valueRange = 8f..48f, - state = fontSizeState, + SettingsList( + state = lightThemeState, + items = LightTheme.values().map { it.name }, icon = { Icon( - imageVector = Icons.Default.FormatSize, + imageVector = Icons.Default.FlashlightOn, contentDescription = "TODO" ) }, title = { - Text(text = "Font size: ${fontSizeState.value.toInt()}") + Text(text = "Light theme") }, - onValueChangeFinished = { - updateAppSettings(appSettingsViewModel, fontSizeState, themeState) + action = { + updateAppSettings( + appSettingsViewModel, + fontSizeState, + themeState, + lightThemeState, + darkThemeState + ) + } + ) + SettingsList( + state = darkThemeState, + items = DarkTheme.values().map { it.name }, + icon = { + Icon( + imageVector = Icons.Default.ShieldMoon, + contentDescription = "TODO" + ) + }, + title = { + Text(text = "Dark theme") + }, + action = { + updateAppSettings( + appSettingsViewModel, + fontSizeState, + themeState, + lightThemeState, + darkThemeState + ) } ) } @@ -87,13 +155,17 @@ fun LookAndFeelActivity( private fun updateAppSettings( appSettingsViewModel: AppSettingsViewModel, fontSizeState: SettingValueState, - themeState: SettingValueState + themeState: SettingValueState, + lightThemeState: SettingValueState, + darkThemeState: SettingValueState ) { appSettingsViewModel.update( AppSettings( - 1, - fontSizeState.value.toInt(), - themeState.value + id = 1, + fontSize = fontSizeState.value.toInt(), + theme = themeState.value, + lightTheme = lightThemeState.value, + darkTheme = darkThemeState.value ) ) } diff --git a/app/src/main/java/com/jerboa/ui/theme/Color.kt b/app/src/main/java/com/jerboa/ui/theme/Color.kt index 2d6f9965a..0380ce033 100644 --- a/app/src/main/java/com/jerboa/ui/theme/Color.kt +++ b/app/src/main/java/com/jerboa/ui/theme/Color.kt @@ -11,6 +11,8 @@ val Green200 = Color(0xFF00bc8c) val Green500 = Color(0xFF018564) val Green700 = Color(0xFF004634) val Yellow40 = Color(0xff7d5700) +val Pink200 = Color(0xffFF00FF) +val Pink700 = Color(0xFFAF0AAF) val DarkSurfaceBlue = Color(0xFF0e1d29) val BlackSurface = Color(0xFF000000) diff --git a/app/src/main/java/com/jerboa/ui/theme/Theme.kt b/app/src/main/java/com/jerboa/ui/theme/Theme.kt index 987232456..772a5478b 100644 --- a/app/src/main/java/com/jerboa/ui/theme/Theme.kt +++ b/app/src/main/java/com/jerboa/ui/theme/Theme.kt @@ -6,11 +6,15 @@ import androidx.compose.material.darkColors import androidx.compose.material.lightColors import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.sp import androidx.core.graphics.ColorUtils +import com.jerboa.DarkTheme +import com.jerboa.LightTheme import com.jerboa.ThemeMode +import com.jerboa.db.AppSettings +import com.jerboa.db.DEFAULT_FONT_SIZE -private val DarkColorPalette = darkColors( +private val DarkGrayColorPalette = darkColors( primary = Green200, primaryVariant = Green700, secondary = Blue200 @@ -32,39 +36,57 @@ private val BlackColorPalette = darkColors( surface = BlackSurface ) -private val LightColorPalette = lightColors( +private val LightGreenPalette = lightColors( primary = Green200, primaryVariant = Green700, secondary = Blue200 +) - /* Other default colors to override - background = Color.White, - surface = Color.White, - onPrimary = Color.White, - onSecondary = Color.Black, - onBackground = Color.Black, - onSurface = Color.Black, - */ +private val LightPinkPalette = lightColors( + primary = Pink200, + primaryVariant = Pink700, + secondary = Blue200 ) +/* Other default colors to override + background = Color.White, + surface = Color.White, + onPrimary = Color.White, + onSecondary = Color.Black, + onBackground = Color.Black, + onSurface = Color.Black, + */ + @Composable fun JerboaTheme( - themeMode: ThemeMode, - fontSize: TextUnit, + appSettings: AppSettings?, content: @Composable () -> Unit ) { + val themeMode = ThemeMode.values()[appSettings?.theme ?: 0] + val lightTheme = LightTheme.values()[appSettings?.lightTheme ?: 0] + val darkTheme = DarkTheme.values()[appSettings?.darkTheme ?: 0] + val fontSize = (appSettings?.fontSize ?: DEFAULT_FONT_SIZE).sp + + val darkThemeColors = when (darkTheme) { + DarkTheme.Gray -> DarkGrayColorPalette + DarkTheme.Blue -> DarkBlueColorPalette + DarkTheme.Black -> BlackColorPalette + } + val lightThemeColors = when (lightTheme) { + LightTheme.Green -> LightGreenPalette + LightTheme.Pink -> LightPinkPalette + } + val systemTheme = if (isSystemInDarkTheme()) { - DarkColorPalette + darkThemeColors } else { - LightColorPalette + lightThemeColors } val colors = when (themeMode) { ThemeMode.System -> systemTheme - ThemeMode.Light -> LightColorPalette - ThemeMode.Dark -> DarkColorPalette - ThemeMode.DarkBlue -> DarkBlueColorPalette - ThemeMode.Black -> BlackColorPalette + ThemeMode.Light -> lightThemeColors + ThemeMode.Dark -> darkThemeColors } val typography = generateTypography(fontSize) diff --git a/app/src/main/java/com/jerboa/ui/theme/Type.kt b/app/src/main/java/com/jerboa/ui/theme/Type.kt index 69deb1d76..17282a421 100644 --- a/app/src/main/java/com/jerboa/ui/theme/Type.kt +++ b/app/src/main/java/com/jerboa/ui/theme/Type.kt @@ -17,8 +17,7 @@ fun generateTypography(baseFontSize: TextUnit): Typography { ), body2 = TextStyle( fontWeight = FontWeight.Normal, - letterSpacing = 0.25.sp, - fontSize = baseFontSize.times(.875), + fontSize = baseFontSize.times(.8), lineHeight = 1.3.em ), subtitle1 = TextStyle( @@ -28,7 +27,7 @@ fun generateTypography(baseFontSize: TextUnit): Typography { ), h6 = TextStyle( fontWeight = FontWeight.Medium, - fontSize = baseFontSize.times(1.25), + fontSize = baseFontSize, letterSpacing = 0.15.sp ) ) From 580f9dee73ee431d85a325a30a376addf3db4f1b Mon Sep 17 00:00:00 2001 From: Dessalines Date: Tue, 20 Dec 2022 16:37:46 -0500 Subject: [PATCH 2/3] Adding an about page. Fixes #250 --- app/src/main/java/com/jerboa/MainActivity.kt | 11 ++ app/src/main/java/com/jerboa/db/AppDB.kt | 43 +++- .../jerboa/ui/components/common/Dialogs.kt | 90 ++++++++- .../components/settings/SettingsActivity.kt | 11 ++ .../settings/about/AboutActivity.kt | 185 ++++++++++++++++++ .../lookandfeel/LookAndFeelActivity.kt | 3 +- 6 files changed, 334 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt diff --git a/app/src/main/java/com/jerboa/MainActivity.kt b/app/src/main/java/com/jerboa/MainActivity.kt index d8f3c7f82..212d807d8 100644 --- a/app/src/main/java/com/jerboa/MainActivity.kt +++ b/app/src/main/java/com/jerboa/MainActivity.kt @@ -31,6 +31,7 @@ import com.jerboa.ui.components.comment.edit.CommentEditActivity import com.jerboa.ui.components.comment.edit.CommentEditViewModel import com.jerboa.ui.components.comment.reply.CommentReplyActivity import com.jerboa.ui.components.comment.reply.CommentReplyViewModel +import com.jerboa.ui.components.common.ShowChangelog import com.jerboa.ui.components.common.getCurrentAccount import com.jerboa.ui.components.common.getCurrentAccountSync import com.jerboa.ui.components.community.CommunityActivity @@ -56,6 +57,7 @@ import com.jerboa.ui.components.report.CreateReportViewModel import com.jerboa.ui.components.report.comment.CreateCommentReportActivity import com.jerboa.ui.components.report.post.CreatePostReportActivity import com.jerboa.ui.components.settings.SettingsActivity +import com.jerboa.ui.components.settings.about.AboutActivity import com.jerboa.ui.components.settings.account.AccountSettingsActivity import com.jerboa.ui.components.settings.account.AccountSettingsViewModel import com.jerboa.ui.components.settings.lookandfeel.LookAndFeelActivity @@ -106,6 +108,8 @@ class MainActivity : ComponentActivity() { val navController = rememberNavController() val ctx = LocalContext.current + ShowChangelog(appSettingsViewModel = appSettingsViewModel) + NavHost( navController = navController, startDestination = "splashScreen" @@ -528,6 +532,13 @@ class MainActivity : ComponentActivity() { accountSettingsViewModel = accountSettingsViewModel ) } + composable( + route = "about" + ) { + AboutActivity( + navController = navController + ) + } } } } diff --git a/app/src/main/java/com/jerboa/db/AppDB.kt b/app/src/main/java/com/jerboa/db/AppDB.kt index 04d3e292d..8a285bdd5 100644 --- a/app/src/main/java/com/jerboa/db/AppDB.kt +++ b/app/src/main/java/com/jerboa/db/AppDB.kt @@ -57,7 +57,12 @@ data class AppSettings( name = "dark_theme", defaultValue = "0" ) - val darkTheme: Int + val darkTheme: Int, + @ColumnInfo( + name = "viewed_changelog", + defaultValue = "0" + ) + val viewedChangelog: Int ) @Dao @@ -88,6 +93,9 @@ interface AppSettingsDao { @Update suspend fun updateAppSettings(appSettings: AppSettings) + + @Query("UPDATE AppSettings set viewed_changelog = 1") + suspend fun markChangelogViewed() } // Declares the DAO as a private property in the constructor. Pass in the DAO @@ -138,6 +146,11 @@ class AppSettingsRepository(private val appSettingsDao: AppSettingsDao) { suspend fun update(appSettings: AppSettings) { appSettingsDao.updateAppSettings(appSettings) } + + @WorkerThread + suspend fun markChangelogViewed() { + appSettingsDao.markChangelogViewed() + } } val MIGRATION_1_2 = object : Migration(1, 2) { @@ -169,8 +182,19 @@ val MIGRATION_2_3 = object : Migration(2, 3) { } } +val MIGRATION_3_4 = object : Migration(3, 4) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL( + """ + alter table AppSettings add column viewed_changelog INTEGER NOT NULL + default 0 + """ + ) + } +} + @Database( - version = 3, + version = 4, entities = [Account::class, AppSettings::class], exportSchema = true ) @@ -194,7 +218,7 @@ abstract class AppDB : RoomDatabase() { "jerboa" ) .allowMainThreadQueries() - .addMigrations(MIGRATION_1_2, MIGRATION_2_3) + .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4) // Necessary because it can't insert data on creation .addCallback(object : Callback() { override fun onOpen(db: SupportSQLiteDatabase) { @@ -205,10 +229,11 @@ abstract class AppDB : RoomDatabase() { CONFLICT_IGNORE, // Ensures it won't overwrite the existing data ContentValues(2).apply { put("id", 1) - put("font_size", DEFAULT_FONT_SIZE) - put("theme", 0) - put("light_theme", 0) - put("dark_theme", 0) +// put("font_size", DEFAULT_FONT_SIZE) +// put("theme", 0) +// put("light_theme", 0) +// put("dark_theme", 0) +// put("") } ) } @@ -263,6 +288,10 @@ class AppSettingsViewModel(private val repository: AppSettingsRepository) : View fun update(appSettings: AppSettings) = viewModelScope.launch { repository.update(appSettings) } + + fun markChangelogViewed() = viewModelScope.launch { + repository.markChangelogViewed() + } } class AppSettingsViewModelFactory(private val repository: AppSettingsRepository) : 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 b106ef381..12eec6917 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 @@ -1,14 +1,46 @@ package com.jerboa.ui.components.common +import android.util.Log +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.AlertDialog +import androidx.compose.material.Button +import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* +import androidx.compose.material.icons.filled.BarChart +import androidx.compose.material.icons.filled.Bookmarks +import androidx.compose.material.icons.filled.BrightnessLow +import androidx.compose.material.icons.filled.FormatListNumbered +import androidx.compose.material.icons.filled.List +import androidx.compose.material.icons.filled.LocalFireDepartment +import androidx.compose.material.icons.filled.LocationCity +import androidx.compose.material.icons.filled.MarkunreadMailbox +import androidx.compose.material.icons.filled.Moving +import androidx.compose.material.icons.filled.NewReleases +import androidx.compose.material.icons.filled.Public import androidx.compose.runtime.Composable +import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import com.jerboa.UnreadOrAll import com.jerboa.datatypes.ListingType import com.jerboa.datatypes.SortType +import com.jerboa.db.AppSettingsViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.OkHttpClient +import okhttp3.Request val topSortTypes = listOf( SortType.TopDay, @@ -197,3 +229,59 @@ fun ListingTypeOptionsDialogPreview() { onDismissRequest = {} ) } + +@Composable +fun ShowChangelog(appSettingsViewModel: AppSettingsViewModel) { + val changelogViewed = appSettingsViewModel.appSettings.observeAsState().value?.viewedChangelog + + // Make sure its initialized + changelogViewed?.also { cViewed -> + val viewed = cViewed == 1 + + val whatsChangedDialogOpen = remember { mutableStateOf(!viewed) } + + if (whatsChangedDialogOpen.value) { + val scrollState = rememberScrollState() + val scope = rememberCoroutineScope() + val markdown = remember { mutableStateOf("") } + + AlertDialog( + text = { + Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)) { + MyMarkdownText(markdown = markdown.value) + } + }, + buttons = { + Row( + modifier = Modifier.padding(8.dp), + horizontalArrangement = Arrangement.Center + ) { + Button( + onClick = { + whatsChangedDialogOpen.value = false + appSettingsViewModel.markChangelogViewed() + }, + modifier = Modifier.fillMaxWidth() + ) { + Text("Done") + } + } + }, + onDismissRequest = { + whatsChangedDialogOpen.value = false + appSettingsViewModel.markChangelogViewed() + } + ) + + scope.launch(Dispatchers.IO) { + Log.d("jerboa", "Fetching RELEASES.md ...") + // Fetch the markdown text + val client = OkHttpClient() + val releasesUrl = "https://raw.githubusercontent.com/dessalines/jerboa/main/RELEASES.md".toHttpUrl() + val req = Request.Builder().url(releasesUrl).build() + val res = client.newCall(req).execute() + markdown.value = res.body?.string() ?: "" + } + } + } +} diff --git a/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt b/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt index 4fb5fb7ae..1a66a64cb 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt @@ -9,6 +9,7 @@ import androidx.compose.material.Scaffold import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Info import androidx.compose.material.icons.filled.ManageAccounts import androidx.compose.material.icons.filled.Palette import androidx.compose.material.rememberScaffoldState @@ -60,6 +61,16 @@ fun SettingsActivity( onClick = { navController.navigate("accountSettings") } ) } + SettingsMenuLink( + title = { Text("About") }, + icon = { + Icon( + imageVector = Icons.Default.Info, + contentDescription = "TODO" + ) + }, + onClick = { navController.navigate("about") } + ) } } ) diff --git a/app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt b/app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt new file mode 100644 index 000000000..c5d95f272 --- /dev/null +++ b/app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt @@ -0,0 +1,185 @@ +package com.jerboa.ui.components.settings.about + +import android.util.Log +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material.Divider +import androidx.compose.material.Icon +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Scaffold +import androidx.compose.material.Surface +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.AttachMoney +import androidx.compose.material.icons.filled.BugReport +import androidx.compose.material.icons.filled.Chat +import androidx.compose.material.icons.filled.Code +import androidx.compose.material.icons.filled.NewReleases +import androidx.compose.material.icons.filled.TravelExplore +import androidx.compose.material.rememberScaffoldState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.alorma.compose.settings.ui.SettingsMenuLink +import com.jerboa.R +import com.jerboa.openLink +import com.jerboa.ui.components.common.SimpleTopAppBar + +const val githubUrl = "https://github.com/dessalines/jerboa" +const val jerboaMatrixChat = "https://matrix.to/#/#jerboa-dev:matrix.org" +const val donateLink = "https://join-lemmy.org/donate" +const val jerboaLemmyLink = "https://lemmy.ml/c/jerboa" +const val mastodonLink = "https://mastodon.social/@LemmyDev" + +@Composable +fun AboutActivity( + navController: NavController +) { + Log.d("jerboa", "Got to About activity") + + val scaffoldState = rememberScaffoldState() + val ctx = LocalContext.current + val version = ctx.packageManager.getPackageInfo(ctx.packageName, 0).versionName + + Surface(color = MaterialTheme.colors.background) { + Scaffold( + scaffoldState = scaffoldState, + topBar = { + SimpleTopAppBar(text = "About", navController = navController) + }, + content = { padding -> + Column(modifier = Modifier.padding(padding)) { + SettingsMenuLink( + title = { Text("What's New") }, + subtitle = { Text("Version $version") }, + icon = { + Icon( + imageVector = Icons.Default.NewReleases, + contentDescription = "TODO" + ) + }, + onClick = { + openLink("$githubUrl/blob/main/RELEASES.md", ctx) + } + ) + SettingsDivider() + SettingsHeader(text = "Support") + SettingsMenuLink( + title = { Text("Issue tracker") }, + icon = { + Icon( + imageVector = Icons.Default.BugReport, + contentDescription = "TODO" + ) + }, + onClick = { + openLink("$githubUrl/issues", ctx) + } + ) + SettingsMenuLink( + title = { Text("Developer Matrix chatroom") }, + icon = { + Icon( + imageVector = Icons.Default.Chat, + contentDescription = "TODO" + ) + }, + onClick = { + openLink(jerboaMatrixChat, ctx) + } + ) + SettingsMenuLink( + title = { Text("Donate to Jerboa development") }, + icon = { + Icon( + imageVector = Icons.Default.AttachMoney, + contentDescription = "TODO" + ) + }, + onClick = { + openLink(donateLink, ctx) + } + ) + SettingsDivider() + SettingsHeader(text = "Social") + SettingsMenuLink( + title = { Text("Join c/jerboa") }, + icon = { + Icon( + painter = painterResource(id = R.drawable.ic_jerboa), + modifier = Modifier.size(32.dp), + contentDescription = "TODO" + ) + }, + onClick = { + openLink(jerboaLemmyLink, ctx) + } + ) + SettingsMenuLink( + title = { Text("Follow on Mastodon") }, + icon = { + Icon( + imageVector = Icons.Default.TravelExplore, + contentDescription = "TODO" + ) + }, + onClick = { + openLink(mastodonLink, ctx) + } + ) + SettingsDivider() + SettingsHeader(text = "Open source") + SettingsMenuLink( + modifier = Modifier.padding(top = 20.dp), + title = { Text("Source code") }, + subtitle = { + Text( + "Jerboa is libre open-source software, licensed under " + + "the GNU Affero General Public License v3.0" + ) + }, + icon = { + Icon( + imageVector = Icons.Default.Code, + contentDescription = "TODO" + ) + }, + onClick = { + openLink(githubUrl, ctx) + } + ) + } + } + ) + } +} + +@Composable +fun SettingsDivider() { + Divider(modifier = Modifier.padding(vertical = 10.dp)) +} + +@Composable +fun SettingsHeader( + text: String, + color: Color = MaterialTheme.colors.primary +) { + Text( + text, + modifier = Modifier.padding(start = 64.dp), + color = color + ) +} + +@Preview +@Composable +fun AboutPreview() { + AboutActivity(navController = rememberNavController()) +} diff --git a/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt b/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt index 6075bb85f..bf5b92040 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt @@ -165,7 +165,8 @@ private fun updateAppSettings( fontSize = fontSizeState.value.toInt(), theme = themeState.value, lightTheme = lightThemeState.value, - darkTheme = darkThemeState.value + darkTheme = darkThemeState.value, + viewedChangelog = appSettingsViewModel.appSettings.value?.viewedChangelog ?: 0 ) ) } From 3545af0523a5a9a42ffe7847a4b556a9a3df1052 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Tue, 20 Dec 2022 18:43:38 -0500 Subject: [PATCH 3/3] Some major UI changes - Redoing action bars. Fixes #258 - Using outlined icons. Fixes #255 --- .../ui/components/comment/CommentNode.kt | 45 +++-- .../ui/components/comment/edit/CommentEdit.kt | 9 +- .../components/comment/reply/CommentReply.kt | 9 +- .../jerboa/ui/components/common/AppBars.kt | 26 ++- .../jerboa/ui/components/common/Dialogs.kt | 44 ++--- .../ui/components/common/DrawerItems.kt | 4 +- .../ui/components/common/InputFields.kt | 26 +-- .../jerboa/ui/components/common/TimeAgo.kt | 2 +- .../ui/components/common/VoteHelpers.kt | 8 +- .../ui/components/community/Community.kt | 16 +- .../components/community/CommunityActivity.kt | 4 +- .../community/list/CommunityList.kt | 10 +- .../com/jerboa/ui/components/home/Home.kt | 104 +++++++++--- .../jerboa/ui/components/home/HomeActivity.kt | 4 +- .../com/jerboa/ui/components/inbox/Inbox.kt | 26 ++- .../com/jerboa/ui/components/login/Login.kt | 12 +- .../ui/components/person/PersonProfile.kt | 17 +- .../ui/components/person/PersonProfileLink.kt | 11 +- .../jerboa/ui/components/post/PostListing.kt | 158 ++++++++---------- .../ui/components/post/create/CreatePost.kt | 12 +- .../ui/components/post/edit/PostEdit.kt | 8 +- .../privatemessage/PrivateMessage.kt | 18 +- .../privatemessage/PrivateMessageReply.kt | 9 +- .../ui/components/report/CreateReport.kt | 9 +- .../components/settings/SettingsActivity.kt | 13 +- .../settings/about/AboutActivity.kt | 27 +-- .../settings/account/AccountSettings.kt | 5 +- .../lookandfeel/LookAndFeelActivity.kt | 17 +- .../main/java/com/jerboa/ui/theme/Sizes.kt | 3 +- 29 files changed, 368 insertions(+), 288 deletions(-) diff --git a/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt b/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt index 4e3560957..f1e35ec68 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt @@ -14,7 +14,17 @@ import androidx.compose.material.Divider import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Block +import androidx.compose.material.icons.outlined.BookmarkAdd +import androidx.compose.material.icons.outlined.BookmarkAdded +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.Description +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.Flag +import androidx.compose.material.icons.outlined.Link +import androidx.compose.material.icons.outlined.MoreVert +import androidx.compose.material.icons.outlined.Restore import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -359,10 +369,14 @@ fun CommentFooterLine( ) if (showRead) { ActionBarButton( - icon = Icons.Filled.Check, + icon = if (commentView.comment.read) { + Icons.Outlined.MarkChatRead + } else { + Icons.Outlined.MarkChatUnread + }, onClick = { onMarkAsReadClick(commentView) }, contentColor = if (commentView.comment.read) { - Color.Green + MaterialTheme.colors.primary } else { MaterialTheme.colors.onBackground.muted }, @@ -370,13 +384,12 @@ fun CommentFooterLine( ) } ActionBarButton( - icon = if (commentView.saved) { Icons.Default.BookmarkAdded } else { - Icons.Default - .BookmarkAdd + icon = if (commentView.saved) { Icons.Outlined.BookmarkAdded } else { + Icons.Outlined.BookmarkAdd }, onClick = { onSaveClick(commentView) }, contentColor = if (commentView.saved) { - Color.Yellow + MaterialTheme.colors.primary } else { MaterialTheme.colors.onBackground.muted }, @@ -385,13 +398,13 @@ fun CommentFooterLine( // Don't let you respond to your own comment. if (commentView.creator.id != account?.id) { ActionBarButton( - icon = Icons.Filled.Reply, + icon = Icons.Outlined.Textsms, onClick = { onReplyClick(commentView) }, account = account ) } ActionBarButton( - icon = Icons.Filled.MoreVert, + icon = Icons.Outlined.MoreVert, account = account, onClick = { showMoreOptions = !showMoreOptions } ) @@ -447,12 +460,12 @@ fun CommentOptionsDialog( Column { IconAndTextDrawerItem( text = "View Source", - icon = Icons.Default.Description, + icon = Icons.Outlined.Description, onClick = onViewSourceClick ) IconAndTextDrawerItem( text = "Copy Permalink", - icon = Icons.Default.Link, + icon = Icons.Outlined.Link, onClick = { val permalink = "${commentView.post.ap_id}/comment/${commentView.comment.id}" localClipboardManager.setText(AnnotatedString(permalink)) @@ -463,32 +476,32 @@ fun CommentOptionsDialog( if (!isCreator) { IconAndTextDrawerItem( text = "Report Comment", - icon = Icons.Default.Flag, + icon = Icons.Outlined.Flag, onClick = onReportClick ) IconAndTextDrawerItem( text = "Block ${commentView.creator.name}", - icon = Icons.Default.Block, + icon = Icons.Outlined.Block, onClick = onBlockCreatorClick ) } if (isCreator) { IconAndTextDrawerItem( text = "Edit", - icon = Icons.Default.Edit, + icon = Icons.Outlined.Edit, onClick = onEditCommentClick ) val deleted = commentView.comment.deleted if (deleted) { IconAndTextDrawerItem( text = "Restore", - icon = Icons.Default.Restore, + icon = Icons.Outlined.Restore, onClick = onDeleteCommentClick ) } else { IconAndTextDrawerItem( text = "Delete", - icon = Icons.Default.Delete, + icon = Icons.Outlined.Delete, onClick = onDeleteCommentClick ) } diff --git a/app/src/main/java/com/jerboa/ui/components/comment/edit/CommentEdit.kt b/app/src/main/java/com/jerboa/ui/components/comment/edit/CommentEdit.kt index 9064da842..5eced42ee 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/edit/CommentEdit.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/edit/CommentEdit.kt @@ -6,8 +6,9 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Save +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.Save import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.TextFieldValue @@ -46,7 +47,7 @@ fun CommentEditHeader( ) } else { Icon( - imageVector = Icons.Default.Save, + imageVector = Icons.Outlined.Save, contentDescription = "TODO" ) } @@ -59,7 +60,7 @@ fun CommentEditHeader( } ) { Icon( - Icons.Filled.Close, + Icons.Outlined.Close, contentDescription = "Back" ) } diff --git a/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt b/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt index d2f7f27ac..3e88a142f 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt @@ -8,8 +8,9 @@ import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Send +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.Send import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.TextFieldValue @@ -54,7 +55,7 @@ fun CommentReplyHeader( ) } else { Icon( - imageVector = Icons.Default.Send, + imageVector = Icons.Outlined.Send, contentDescription = "TODO" ) } @@ -67,7 +68,7 @@ fun CommentReplyHeader( } ) { Icon( - Icons.Filled.Close, + Icons.Outlined.Close, contentDescription = "Back" ) } diff --git a/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt b/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt index 7b7c4538b..55d4de219 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt @@ -12,7 +12,7 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* +import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -61,7 +61,7 @@ fun SimpleTopAppBar( navigationIcon = { IconButton(onClick = { navController.popBackStack() }) { Icon( - Icons.Filled.ArrowBack, + Icons.Outlined.ArrowBack, contentDescription = "Back" ) } @@ -87,7 +87,7 @@ fun BottomAppBarAll( BottomNavigationItem( icon = { Icon( - imageVector = Icons.Default.Home, + imageVector = Icons.Outlined.Home, contentDescription = "TODO" ) }, @@ -102,7 +102,7 @@ fun BottomAppBarAll( BottomNavigationItem( icon = { Icon( - imageVector = Icons.Default.List, + imageVector = Icons.Outlined.List, contentDescription = "TODO" ) }, @@ -117,7 +117,7 @@ fun BottomAppBarAll( icon = { InboxIconAndBadge( iconBadgeCount = totalUnreads, - icon = Icons.Default.Email, + icon = Icons.Outlined.Email, tint = if (screen == "inbox") { MaterialTheme.colors.primary } else { @@ -135,7 +135,7 @@ fun BottomAppBarAll( BottomNavigationItem( icon = { Icon( - imageVector = Icons.Default.Bookmarks, + imageVector = Icons.Outlined.Bookmarks, contentDescription = "TODO" ) }, @@ -149,7 +149,7 @@ fun BottomAppBarAll( BottomNavigationItem( icon = { Icon( - imageVector = Icons.Default.Person, + imageVector = Icons.Outlined.Person, contentDescription = "TODO" ) }, @@ -204,7 +204,7 @@ fun CommentOrPostNodeHeader( ) { if (deleted) { Icon( - imageVector = Icons.Default.Delete, + imageVector = Icons.Outlined.Delete, contentDescription = "TODO", tint = MaterialTheme.colors.error ) @@ -243,8 +243,7 @@ fun ActionBarButton( text: String? = null, contentColor: Color = MaterialTheme.colors.onBackground.muted, noClick: Boolean = false, - account: Account?, - smallIcon: Boolean = false + account: Account? ) { val ctx = LocalContext.current // Button( @@ -260,7 +259,6 @@ fun ActionBarButton( // modifier = Modifier // .defaultMinSize(minWidth = 1.dp, minHeight = 1.dp) // ) - val iconHeight = if (smallIcon) { ACTION_BAR_ICON_SIZE_SMALLER } else { ACTION_BAR_ICON_SIZE } val barMod = if (noClick) { Modifier } else { @@ -279,14 +277,14 @@ fun ActionBarButton( Icon( imageVector = icon, contentDescription = "TODO", - tint = contentColor, - modifier = Modifier.height(iconHeight) + tint = contentColor ) text?.also { Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Text( text = text, - color = contentColor + color = contentColor, + style = MaterialTheme.typography.body2 ) } } 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 12eec6917..2d52c6c8d 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 @@ -13,17 +13,17 @@ import androidx.compose.material.AlertDialog import androidx.compose.material.Button import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.BarChart -import androidx.compose.material.icons.filled.Bookmarks -import androidx.compose.material.icons.filled.BrightnessLow -import androidx.compose.material.icons.filled.FormatListNumbered -import androidx.compose.material.icons.filled.List -import androidx.compose.material.icons.filled.LocalFireDepartment -import androidx.compose.material.icons.filled.LocationCity -import androidx.compose.material.icons.filled.MarkunreadMailbox -import androidx.compose.material.icons.filled.Moving -import androidx.compose.material.icons.filled.NewReleases -import androidx.compose.material.icons.filled.Public +import androidx.compose.material.icons.outlined.BarChart +import androidx.compose.material.icons.outlined.Bookmarks +import androidx.compose.material.icons.outlined.BrightnessLow +import androidx.compose.material.icons.outlined.FormatListNumbered +import androidx.compose.material.icons.outlined.List +import androidx.compose.material.icons.outlined.LocalFireDepartment +import androidx.compose.material.icons.outlined.LocationCity +import androidx.compose.material.icons.outlined.MarkunreadMailbox +import androidx.compose.material.icons.outlined.Moving +import androidx.compose.material.icons.outlined.NewReleases +import androidx.compose.material.icons.outlined.Public import androidx.compose.runtime.Composable import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateOf @@ -114,20 +114,20 @@ fun ListingTypeOptionsDialog( Column { IconAndTextDrawerItem( text = "Subscribed", - icon = Icons.Default.Bookmarks, + icon = Icons.Outlined.Bookmarks, onClick = { onClickListingType(ListingType.Subscribed) }, highlight = (selectedListingType == ListingType.Subscribed) ) // TODO hide local for non-federated instances IconAndTextDrawerItem( text = "Local", - icon = Icons.Default.LocationCity, + icon = Icons.Outlined.LocationCity, onClick = { onClickListingType(ListingType.Local) }, highlight = (selectedListingType == ListingType.Local) ) IconAndTextDrawerItem( text = "All", - icon = Icons.Default.Public, + icon = Icons.Outlined.Public, onClick = { onClickListingType(ListingType.All) }, highlight = (selectedListingType == ListingType.All) ) @@ -150,37 +150,37 @@ fun SortOptionsDialog( Column { IconAndTextDrawerItem( text = "Active", - icon = Icons.Default.Moving, + icon = Icons.Outlined.Moving, onClick = { onClickSortType(SortType.Active) }, highlight = (selectedSortType == SortType.Active) ) IconAndTextDrawerItem( text = "Hot", - icon = Icons.Default.LocalFireDepartment, + icon = Icons.Outlined.LocalFireDepartment, onClick = { onClickSortType(SortType.Hot) }, highlight = (selectedSortType == SortType.Hot) ) IconAndTextDrawerItem( text = "New", - icon = Icons.Default.BrightnessLow, + icon = Icons.Outlined.BrightnessLow, onClick = { onClickSortType(SortType.New) }, highlight = (selectedSortType == SortType.New) ) IconAndTextDrawerItem( text = "Most Comments", - icon = Icons.Default.FormatListNumbered, + icon = Icons.Outlined.FormatListNumbered, onClick = { onClickSortType(SortType.MostComments) }, highlight = (selectedSortType == SortType.MostComments) ) IconAndTextDrawerItem( text = "New Comments", - icon = Icons.Default.NewReleases, + icon = Icons.Outlined.NewReleases, onClick = { onClickSortType(SortType.NewComments) }, highlight = (selectedSortType == SortType.NewComments) ) IconAndTextDrawerItem( text = "Top", - icon = Icons.Default.BarChart, + icon = Icons.Outlined.BarChart, onClick = onClickSortTopOptions, more = true, highlight = (topSortTypes.contains(selectedSortType)) @@ -203,14 +203,14 @@ fun UnreadOrAllOptionsDialog( Column { IconAndTextDrawerItem( text = "All", - icon = Icons.Default.List, + icon = Icons.Outlined.List, onClick = { onClickUnreadOrAll(UnreadOrAll.All) }, highlight = (selectedUnreadOrAll == UnreadOrAll.All) ) // TODO hide local for non-federated instances IconAndTextDrawerItem( text = "Unread", - icon = Icons.Default.MarkunreadMailbox, + icon = Icons.Outlined.MarkunreadMailbox, onClick = { onClickUnreadOrAll(UnreadOrAll.Unread) }, highlight = (selectedUnreadOrAll == UnreadOrAll.Unread) ) diff --git a/app/src/main/java/com/jerboa/ui/components/common/DrawerItems.kt b/app/src/main/java/com/jerboa/ui/components/common/DrawerItems.kt index d5994d071..0f3b4d086 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/DrawerItems.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/DrawerItems.kt @@ -11,7 +11,7 @@ import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowRight +import androidx.compose.material.icons.outlined.ArrowRight import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -64,7 +64,7 @@ fun IconAndTextDrawerItem( } if (more) { Icon( - imageVector = Icons.Default.ArrowRight, + imageVector = Icons.Outlined.ArrowRight, contentDescription = "TODO", tint = MaterialTheme.colors.onSurface, modifier = Modifier.size(24.dp) diff --git a/app/src/main/java/com/jerboa/ui/components/common/InputFields.kt b/app/src/main/java/com/jerboa/ui/components/common/InputFields.kt index 2d3d6a16f..93fd5481f 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/InputFields.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/InputFields.kt @@ -12,7 +12,7 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* +import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment @@ -422,7 +422,7 @@ fun MarkdownHelperBar( onClick = onPreviewClick ) { Icon( - imageVector = Icons.Default.Preview, + imageVector = Icons.Outlined.Preview, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -431,7 +431,7 @@ fun MarkdownHelperBar( onClick = onLinkClick ) { Icon( - imageVector = Icons.Default.Link, + imageVector = Icons.Outlined.Link, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -446,7 +446,7 @@ fun MarkdownHelperBar( ) } else { Icon( - imageVector = Icons.Default.Image, + imageVector = Icons.Outlined.Image, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -456,7 +456,7 @@ fun MarkdownHelperBar( onClick = onBoldClick ) { Icon( - imageVector = Icons.Default.FormatBold, + imageVector = Icons.Outlined.FormatBold, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -465,7 +465,7 @@ fun MarkdownHelperBar( onClick = onItalicsClick ) { Icon( - imageVector = Icons.Default.FormatItalic, + imageVector = Icons.Outlined.FormatItalic, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -474,7 +474,7 @@ fun MarkdownHelperBar( onClick = onQuoteClick ) { Icon( - imageVector = Icons.Default.FormatQuote, + imageVector = Icons.Outlined.FormatQuote, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -483,7 +483,7 @@ fun MarkdownHelperBar( onClick = onListClick ) { Icon( - imageVector = Icons.Default.FormatListBulleted, + imageVector = Icons.Outlined.FormatListBulleted, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -492,7 +492,7 @@ fun MarkdownHelperBar( onClick = onHeaderClick ) { Icon( - imageVector = Icons.Default.Title, + imageVector = Icons.Outlined.Title, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -501,7 +501,7 @@ fun MarkdownHelperBar( onClick = onCodeClick ) { Icon( - imageVector = Icons.Default.Code, + imageVector = Icons.Outlined.Code, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -510,7 +510,7 @@ fun MarkdownHelperBar( onClick = onStrikethroughClick ) { Icon( - imageVector = Icons.Default.FormatStrikethrough, + imageVector = Icons.Outlined.FormatStrikethrough, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -519,7 +519,7 @@ fun MarkdownHelperBar( onClick = onSubscriptClick ) { Icon( - imageVector = Icons.Default.Subscript, + imageVector = Icons.Outlined.Subscript, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -528,7 +528,7 @@ fun MarkdownHelperBar( onClick = onSuperscriptClick ) { Icon( - imageVector = Icons.Default.Superscript, + imageVector = Icons.Outlined.Superscript, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) diff --git a/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt b/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt index bc3cdced0..e46e7238a 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt @@ -12,7 +12,7 @@ import com.jerboa.prettyTimeShortener import com.jerboa.ui.theme.SMALL_PADDING import com.jerboa.ui.theme.muted import java.time.Instant -import java.util.* +import java.util.Date @Composable fun TimeAgo( diff --git a/app/src/main/java/com/jerboa/ui/components/common/VoteHelpers.kt b/app/src/main/java/com/jerboa/ui/components/common/VoteHelpers.kt index 217923bda..ed416e5fd 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/VoteHelpers.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/VoteHelpers.kt @@ -2,8 +2,8 @@ package com.jerboa.ui.components.common import androidx.compose.material.MaterialTheme import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowDownward -import androidx.compose.material.icons.filled.ArrowUpward +import androidx.compose.material.icons.outlined.FavoriteBorder +import androidx.compose.material.icons.outlined.ThumbDown import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import com.jerboa.VoteType @@ -26,8 +26,8 @@ fun VoteGeneric( else -> downvoteColor(myVote = myVote) } val voteIcon = when (type) { - VoteType.Upvote -> Icons.Default.ArrowUpward - else -> Icons.Default.ArrowDownward + VoteType.Upvote -> Icons.Outlined.FavoriteBorder + else -> Icons.Outlined.ThumbDown } val votesStr = if (showNumber) { 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 7d45c8743..c5e89fb64 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 @@ -4,7 +4,7 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* +import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -61,7 +61,7 @@ fun CommunityTopSection( ) Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Icon( - imageVector = Icons.Default.CheckCircle, + imageVector = Icons.Outlined.CheckCircle, contentDescription = "TODO", tint = if (communityView.subscribed) { Color.Green @@ -160,7 +160,7 @@ fun CommunityHeader( navigationIcon = { IconButton(onClick = { navController.popBackStack() }) { Icon( - Icons.Filled.ArrowBack, + Icons.Outlined.ArrowBack, contentDescription = "Back", tint = contentColor ) @@ -171,7 +171,7 @@ fun CommunityHeader( showSortOptions = !showSortOptions }) { Icon( - Icons.Default.Sort, + Icons.Outlined.Sort, contentDescription = "TODO", tint = contentColor ) @@ -180,7 +180,7 @@ fun CommunityHeader( showMoreOptions = !showMoreOptions }) { Icon( - Icons.Default.MoreVert, + Icons.Outlined.MoreVert, contentDescription = "TODO", tint = contentColor ) @@ -220,7 +220,7 @@ fun CommunityMoreDialog( Column { IconAndTextDrawerItem( text = "Refresh", - icon = Icons.Default.Refresh, + icon = Icons.Outlined.Refresh, onClick = { onDismissRequest() onClickRefresh() @@ -228,7 +228,7 @@ fun CommunityMoreDialog( ) IconAndTextDrawerItem( text = "Community Info", - icon = Icons.Default.Info, + icon = Icons.Outlined.Info, onClick = { navController.navigate("communitySidebar") onDismissRequest() @@ -236,7 +236,7 @@ fun CommunityMoreDialog( ) IconAndTextDrawerItem( text = "Block Community", - icon = Icons.Default.Block, + icon = Icons.Outlined.Block, onClick = onBlockCommunityClick ) } 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 7920fcd87..d8068198f 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 @@ -12,7 +12,7 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.Scaffold import androidx.compose.material.Surface import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.outlined.* import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope @@ -227,7 +227,7 @@ fun CommunityActivity( } } ) { - Icon(imageVector = Icons.Default.Add, contentDescription = "TODO") + Icon(imageVector = Icons.Outlined.Add, contentDescription = "TODO") } }, bottomBar = { diff --git a/app/src/main/java/com/jerboa/ui/components/community/list/CommunityList.kt b/app/src/main/java/com/jerboa/ui/components/community/list/CommunityList.kt index dc59e1fda..53c48729e 100644 --- a/app/src/main/java/com/jerboa/ui/components/community/list/CommunityList.kt +++ b/app/src/main/java/com/jerboa/ui/components/community/list/CommunityList.kt @@ -14,8 +14,8 @@ import androidx.compose.material.TextFieldDefaults import androidx.compose.material.TopAppBar import androidx.compose.material.contentColorFor import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material.primarySurface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -58,7 +58,7 @@ fun CommunityListHeader( } ) { Icon( - imageVector = Icons.Default.MoreVert, + imageVector = Icons.Outlined.MoreVert, contentDescription = "TODO", tint = contentColor ) @@ -71,7 +71,7 @@ fun CommunityListHeader( } ) { Icon( - Icons.Filled.Close, + Icons.Outlined.Close, contentDescription = "Back" ) } @@ -173,7 +173,7 @@ fun CommunityTopBarSearchView( onClick = { onSearchChange("") } ) { Icon( - Icons.Default.Close, + Icons.Outlined.Close, contentDescription = "", tint = contentColor ) 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 b30887923..dd1354110 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 @@ -4,30 +4,84 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material.* +import androidx.compose.material.AlertDialog +import androidx.compose.material.Divider +import androidx.compose.material.DrawerValue +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.MaterialTheme +import androidx.compose.material.ScaffoldState +import androidx.compose.material.Text +import androidx.compose.material.TopAppBar +import androidx.compose.material.contentColorFor import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.* -import androidx.compose.runtime.* +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.Bookmarks +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material.icons.outlined.ExpandLess +import androidx.compose.material.icons.outlined.ExpandMore +import androidx.compose.material.icons.outlined.FilterList +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.LocationCity +import androidx.compose.material.icons.outlined.Login +import androidx.compose.material.icons.outlined.Menu +import androidx.compose.material.icons.outlined.MoreVert +import androidx.compose.material.icons.outlined.Person +import androidx.compose.material.icons.outlined.Public +import androidx.compose.material.icons.outlined.Refresh +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material.icons.outlined.Sort +import androidx.compose.material.primarySurface +import androidx.compose.material.rememberDrawerState +import androidx.compose.material.rememberScaffoldState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController -import com.jerboa.datatypes.* +import com.jerboa.datatypes.CommunitySafe +import com.jerboa.datatypes.ListingType +import com.jerboa.datatypes.PersonSafe +import com.jerboa.datatypes.SortType import com.jerboa.datatypes.api.GetUnreadCountResponse import com.jerboa.datatypes.api.MyUserInfo +import com.jerboa.datatypes.samplePersonSafe import com.jerboa.db.Account import com.jerboa.db.AccountViewModel -import com.jerboa.ui.components.common.* +import com.jerboa.ui.components.common.IconAndTextDrawerItem +import com.jerboa.ui.components.common.LargerCircularIcon +import com.jerboa.ui.components.common.ListingTypeOptionsDialog +import com.jerboa.ui.components.common.PictrsBannerImage +import com.jerboa.ui.components.common.SortOptionsDialog +import com.jerboa.ui.components.common.SortTopOptionsDialog +import com.jerboa.ui.components.common.simpleVerticalScrollbar import com.jerboa.ui.components.community.CommunityLinkLarger import com.jerboa.ui.components.person.PersonName -import com.jerboa.ui.theme.* +import com.jerboa.ui.theme.APP_BAR_ELEVATION +import com.jerboa.ui.theme.DRAWER_BANNER_SIZE +import com.jerboa.ui.theme.LARGE_PADDING +import com.jerboa.ui.theme.SMALL_PADDING +import com.jerboa.ui.theme.XL_PADDING +import com.jerboa.ui.theme.muted import com.jerboa.unreadCountTotal import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -140,7 +194,7 @@ fun DrawerItemsMain( item { IconAndTextDrawerItem( text = "Subscribed", - icon = Icons.Default.Bookmarks, + icon = Icons.Outlined.Bookmarks, onClick = { onClickListingType(ListingType.Subscribed) } ) } @@ -148,14 +202,14 @@ fun DrawerItemsMain( item { IconAndTextDrawerItem( text = "Local", - icon = Icons.Default.LocationCity, + icon = Icons.Outlined.LocationCity, onClick = { onClickListingType(ListingType.Local) } ) } item { IconAndTextDrawerItem( text = "All", - icon = Icons.Default.Public, + icon = Icons.Outlined.Public, onClick = { onClickListingType(ListingType.All) } ) } @@ -163,7 +217,7 @@ fun DrawerItemsMain( myUserInfo?.also { IconAndTextDrawerItem( text = "Saved", - icon = Icons.Default.Bookmarks, + icon = Icons.Outlined.Bookmarks, onClick = onClickSaved ) } @@ -177,7 +231,7 @@ fun DrawerItemsMain( myUserInfo?.also { IconAndTextDrawerItem( text = "Profile", - icon = Icons.Default.Person, + icon = Icons.Outlined.Person, onClick = onClickProfile ) } @@ -186,7 +240,7 @@ fun DrawerItemsMain( myUserInfo?.also { IconAndTextDrawerItem( text = "Inbox", - icon = Icons.Default.Email, + icon = Icons.Outlined.Email, onClick = onClickInbox, iconBadgeCount = totalUnreads ) @@ -196,7 +250,7 @@ fun DrawerItemsMain( myUserInfo?.also { IconAndTextDrawerItem( text = "Settings", - icon = Icons.Default.Settings, + icon = Icons.Outlined.Settings, onClick = onClickSettings ) } @@ -256,20 +310,20 @@ fun DrawerAddAccountMode( Column { IconAndTextDrawerItem( text = "Add Account", - icon = Icons.Default.Add, + icon = Icons.Outlined.Add, onClick = { navController.navigate(route = "login") } ) accountsWithoutCurrent?.forEach { IconAndTextDrawerItem( text = "Switch to ${it.instance}/${it.name}", - icon = Icons.Default.Login, + icon = Icons.Outlined.Login, onClick = { onSwitchAccountClick(it) } ) } currentAccount?.also { IconAndTextDrawerItem( text = "Sign Out", - icon = Icons.Default.Close, + icon = Icons.Outlined.Close, onClick = onSignOutClick ) } @@ -315,9 +369,9 @@ fun DrawerHeader( AvatarAndAccountName(myPerson) Icon( imageVector = if (showAccountAddMode) { - Icons.Default.ExpandLess + Icons.Outlined.ExpandLess } else { - Icons.Default.ExpandMore + Icons.Outlined.ExpandMore }, contentDescription = "TODO" ) @@ -449,7 +503,7 @@ fun HomeHeader( } }) { Icon( - Icons.Filled.Menu, + Icons.Outlined.Menu, contentDescription = "Menu" ) } @@ -460,7 +514,7 @@ fun HomeHeader( showListingTypeOptions = !showListingTypeOptions }) { Icon( - Icons.Default.FilterList, + Icons.Outlined.FilterList, contentDescription = "TODO", tint = contentColor ) @@ -469,7 +523,7 @@ fun HomeHeader( showSortOptions = !showSortOptions }) { Icon( - Icons.Default.Sort, + Icons.Outlined.Sort, contentDescription = "TODO", tint = contentColor ) @@ -478,7 +532,7 @@ fun HomeHeader( showMoreOptions = !showMoreOptions }) { Icon( - Icons.Default.MoreVert, + Icons.Outlined.MoreVert, contentDescription = "TODO", tint = contentColor ) @@ -517,7 +571,7 @@ fun HomeMoreDialog( Column { IconAndTextDrawerItem( text = "Refresh", - icon = Icons.Default.Refresh, + icon = Icons.Outlined.Refresh, onClick = { onDismissRequest() onClickRefresh() @@ -525,7 +579,7 @@ fun HomeMoreDialog( ) IconAndTextDrawerItem( text = "Site Info", - icon = Icons.Default.Info, + icon = Icons.Outlined.Info, onClick = { navController.navigate("siteSidebar") onDismissRequest() 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 1fe7a0e92..05a53cc07 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 @@ -16,7 +16,7 @@ import androidx.compose.material.Scaffold import androidx.compose.material.ScaffoldState import androidx.compose.material.Surface import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.outlined.Add import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope @@ -103,7 +103,7 @@ fun HomeActivity( } } ) { - Icon(imageVector = Icons.Default.Add, contentDescription = "TODO") + Icon(imageVector = Icons.Outlined.Add, contentDescription = "TODO") } }, bottomBar = { diff --git a/app/src/main/java/com/jerboa/ui/components/inbox/Inbox.kt b/app/src/main/java/com/jerboa/ui/components/inbox/Inbox.kt index 8d3aee579..707c411e1 100644 --- a/app/src/main/java/com/jerboa/ui/components/inbox/Inbox.kt +++ b/app/src/main/java/com/jerboa/ui/components/inbox/Inbox.kt @@ -1,12 +1,22 @@ package com.jerboa.ui.components.inbox import androidx.compose.foundation.layout.Column -import androidx.compose.material.* +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.material.TopAppBar +import androidx.compose.material.contentColorFor import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.DoneAll -import androidx.compose.material.icons.filled.FilterList -import androidx.compose.runtime.* +import androidx.compose.material.icons.outlined.ArrowBack +import androidx.compose.material.icons.outlined.DoneAll +import androidx.compose.material.icons.outlined.FilterList +import androidx.compose.material.primarySurface +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.jerboa.UnreadOrAll @@ -51,7 +61,7 @@ fun InboxHeader( navigationIcon = { IconButton(onClick = { navController.popBackStack() }) { Icon( - Icons.Filled.ArrowBack, + Icons.Outlined.ArrowBack, contentDescription = "Back" ) } @@ -61,14 +71,14 @@ fun InboxHeader( showUnreadOrAllOptions = !showUnreadOrAllOptions }) { Icon( - Icons.Default.FilterList, + Icons.Outlined.FilterList, contentDescription = "TODO", tint = contentColor ) } IconButton(onClick = onClickMarkAllAsRead) { Icon( - Icons.Default.DoneAll, + Icons.Outlined.DoneAll, contentDescription = "TODO", tint = contentColor ) diff --git a/app/src/main/java/com/jerboa/ui/components/login/Login.kt b/app/src/main/java/com/jerboa/ui/components/login/Login.kt index 2a0b5685e..ac48430ff 100644 --- a/app/src/main/java/com/jerboa/ui/components/login/Login.kt +++ b/app/src/main/java/com/jerboa/ui/components/login/Login.kt @@ -7,9 +7,9 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.material.ExposedDropdownMenuDefaults.TrailingIcon import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Visibility -import androidx.compose.material.icons.filled.VisibilityOff +import androidx.compose.material.icons.outlined.ArrowBack +import androidx.compose.material.icons.outlined.Visibility +import androidx.compose.material.icons.outlined.VisibilityOff import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment @@ -63,9 +63,9 @@ fun PasswordField( keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password), trailingIcon = { val image = if (passwordVisibility) { - Icons.Filled.Visibility + Icons.Outlined.Visibility } else { - Icons.Filled.VisibilityOff + Icons.Outlined.VisibilityOff } IconButton(onClick = { @@ -195,7 +195,7 @@ fun LoginHeader( } ) { Icon( - Icons.Filled.ArrowBack, + Icons.Outlined.ArrowBack, contentDescription = "Back" ) } 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 1584d2cb7..bc40b82cd 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 @@ -16,10 +16,11 @@ import androidx.compose.material.Text import androidx.compose.material.TopAppBar import androidx.compose.material.contentColorFor import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Block -import androidx.compose.material.icons.filled.MoreVert -import androidx.compose.material.icons.filled.Sort +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.ArrowBack +import androidx.compose.material.icons.outlined.Block +import androidx.compose.material.icons.outlined.MoreVert +import androidx.compose.material.icons.outlined.Sort import androidx.compose.material.primarySurface import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -195,7 +196,7 @@ fun PersonProfileHeader( navigationIcon = { IconButton(onClick = { navController.popBackStack() }) { Icon( - Icons.Filled.ArrowBack, + Icons.Outlined.ArrowBack, contentDescription = "Back" ) } @@ -205,7 +206,7 @@ fun PersonProfileHeader( showSortOptions = !showSortOptions }) { Icon( - Icons.Default.Sort, + Icons.Outlined.Sort, contentDescription = "TODO", tint = contentColor ) @@ -215,7 +216,7 @@ fun PersonProfileHeader( showMoreOptions = !showMoreOptions }) { Icon( - Icons.Default.MoreVert, + Icons.Outlined.MoreVert, contentDescription = "TODO", tint = contentColor ) @@ -254,7 +255,7 @@ fun PersonProfileMoreDialog( Column { IconAndTextDrawerItem( text = "Block Person", - icon = Icons.Default.Block, + icon = Icons.Outlined.Block, onClick = onBlockPersonClick ) } diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt index afcfa5266..5b7c8b951 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileLink.kt @@ -8,8 +8,9 @@ import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.NoAccounts -import androidx.compose.material.icons.filled.Shield +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.NoAccounts +import androidx.compose.material.icons.outlined.Shield import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -74,21 +75,21 @@ fun PersonProfileLink( if (showTags) { if (isModerator) { Icon( - imageVector = Icons.Default.Shield, + imageVector = Icons.Outlined.Shield, contentDescription = "TODO", tint = MaterialTheme.colors.secondary ) } if (person.admin) { Icon( - imageVector = Icons.Default.Shield, + imageVector = Icons.Outlined.Shield, contentDescription = "TODO", tint = MaterialTheme.colors.primary ) } if (isCommunityBanned || person.banned) { Icon( - imageVector = Icons.Default.NoAccounts, + imageVector = Icons.Outlined.NoAccounts, contentDescription = "TODO", tint = Color.Red ) diff --git a/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt b/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt index 4f0fc439f..3b917564b 100644 --- a/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt +++ b/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt @@ -16,20 +16,20 @@ import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Block -import androidx.compose.material.icons.filled.BookmarkAdd -import androidx.compose.material.icons.filled.BookmarkAdded -import androidx.compose.material.icons.filled.ChatBubble -import androidx.compose.material.icons.filled.Delete -import androidx.compose.material.icons.filled.Edit -import androidx.compose.material.icons.filled.Flag -import androidx.compose.material.icons.filled.Forum -import androidx.compose.material.icons.filled.Link -import androidx.compose.material.icons.filled.Lock -import androidx.compose.material.icons.filled.MoreVert -import androidx.compose.material.icons.filled.PushPin -import androidx.compose.material.icons.filled.Reply -import androidx.compose.material.icons.filled.Restore +import androidx.compose.material.icons.outlined.Block +import androidx.compose.material.icons.outlined.BookmarkAdd +import androidx.compose.material.icons.outlined.BookmarkAdded +import androidx.compose.material.icons.outlined.ChatBubbleOutline +import androidx.compose.material.icons.outlined.CommentsDisabled +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.Flag +import androidx.compose.material.icons.outlined.Forum +import androidx.compose.material.icons.outlined.Link +import androidx.compose.material.icons.outlined.MoreVert +import androidx.compose.material.icons.outlined.PushPin +import androidx.compose.material.icons.outlined.Restore +import androidx.compose.material.icons.outlined.Textsms import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -37,7 +37,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.AnnotatedString @@ -79,7 +78,6 @@ import com.jerboa.ui.theme.MEDIUM_PADDING import com.jerboa.ui.theme.POST_LINK_PIC_SIZE import com.jerboa.ui.theme.SMALL_PADDING import com.jerboa.ui.theme.XL_PADDING -import com.jerboa.ui.theme.XXL_PADDING import com.jerboa.ui.theme.muted @Composable @@ -98,7 +96,7 @@ fun PostHeaderLine( ) { if (postView.post.stickied) { Icon( - imageVector = Icons.Default.PushPin, + imageVector = Icons.Outlined.PushPin, contentDescription = "TODO", tint = MaterialTheme.colors.onBackground.muted ) @@ -106,7 +104,7 @@ fun PostHeaderLine( } if (postView.post.locked) { Icon( - imageVector = Icons.Default.Lock, + imageVector = Icons.Outlined.CommentsDisabled, contentDescription = "TODO", tint = MaterialTheme.colors.error ) @@ -114,7 +112,7 @@ fun PostHeaderLine( } if (postView.post.deleted) { Icon( - imageVector = Icons.Default.Delete, + imageVector = Icons.Outlined.Delete, contentDescription = "TODO", tint = MaterialTheme.colors.error ) @@ -272,7 +270,7 @@ fun PostTitleAndThumbnail( ) { Box(contentAlignment = Alignment.Center) { Icon( - imageVector = Icons.Default.Link, + imageVector = Icons.Outlined.Link, contentDescription = "TODO", modifier = Modifier.size(LINK_ICON_SIZE) ) @@ -406,61 +404,54 @@ fun PostFooterLine( .fillMaxWidth() .padding(bottom = SMALL_PADDING) ) { - Row { - CommentCount( - comments = postView.counts.comments, - account = account - ) - } - Row( - horizontalArrangement = Arrangement.spacedBy(XXL_PADDING) - ) { - VoteGeneric( - myVote = myVote, - votes = upvotes, - item = postView, - type = VoteType.Upvote, - onVoteClick = { - onUpvoteClick(it) - }, - account = account - ) - VoteGeneric( - myVote = myVote, - votes = downvotes, - item = postView, - type = VoteType.Downvote, - onVoteClick = { - onDownvoteClick(it) - }, - account = account - ) + CommentCount( + comments = postView.counts.comments, + account = account + ) + VoteGeneric( + myVote = myVote, + votes = upvotes, + item = postView, + type = VoteType.Upvote, + onVoteClick = { + onUpvoteClick(it) + }, + account = account + ) + VoteGeneric( + myVote = myVote, + votes = downvotes, + item = postView, + type = VoteType.Downvote, + onVoteClick = { + onDownvoteClick(it) + }, + account = account + ) + ActionBarButton( + icon = if (postView.saved) { Icons.Outlined.BookmarkAdded } else { + Icons.Outlined.BookmarkAdd + }, + onClick = { onSaveClick(postView) }, + contentColor = if (postView.saved) { + MaterialTheme.colors.primary + } else { + MaterialTheme.colors.onBackground.muted + }, + account = account + ) + if (showReply) { ActionBarButton( - icon = if (postView.saved) { Icons.Default.BookmarkAdded } else { - Icons.Default - .BookmarkAdd - }, - onClick = { onSaveClick(postView) }, - contentColor = if (postView.saved) { - Color.Yellow - } else { - MaterialTheme.colors.onBackground.muted - }, + icon = Icons.Outlined.Textsms, + onClick = { onReplyClick(postView) }, account = account ) - if (showReply) { - ActionBarButton( - icon = Icons.Default.Reply, - onClick = { onReplyClick(postView) }, - account = account - ) - } - ActionBarButton( - icon = Icons.Default.MoreVert, - account = account, - onClick = { showMoreOptions = !showMoreOptions } - ) } + ActionBarButton( + icon = Icons.Outlined.MoreVert, + account = account, + onClick = { showMoreOptions = !showMoreOptions } + ) } } @@ -470,12 +461,11 @@ fun CommentCount( account: Account? ) { ActionBarButton( - icon = Icons.Default.ChatBubble, - text = "$comments comments", + icon = Icons.Outlined.ChatBubbleOutline, + text = "$comments", noClick = true, account = account, - onClick = {}, - smallIcon = true + onClick = {} ) } @@ -719,7 +709,7 @@ fun PostOptionsDialog( Column { IconAndTextDrawerItem( text = "Go to ${communityNameShown(postView.community)}", - icon = Icons.Default.Forum, + icon = Icons.Outlined.Forum, onClick = { onCommunityClick() } @@ -727,7 +717,7 @@ fun PostOptionsDialog( postView.post.url?.also { IconAndTextDrawerItem( text = "Copy link", - icon = Icons.Default.Link, + icon = Icons.Outlined.Link, onClick = { localClipboardManager.setText(AnnotatedString(it)) Toast.makeText(ctx, "Link Copied", Toast.LENGTH_SHORT).show() @@ -737,7 +727,7 @@ fun PostOptionsDialog( } IconAndTextDrawerItem( text = "Copy Permalink", - icon = Icons.Default.Link, + icon = Icons.Outlined.Link, onClick = { val permalink = postView.post.ap_id localClipboardManager.setText(AnnotatedString(permalink)) @@ -748,37 +738,37 @@ fun PostOptionsDialog( if (!isCreator) { IconAndTextDrawerItem( text = "Report Post", - icon = Icons.Default.Flag, + icon = Icons.Outlined.Flag, onClick = onReportClick ) IconAndTextDrawerItem( text = "Block ${postView.creator.name}", - icon = Icons.Default.Block, + icon = Icons.Outlined.Block, onClick = onBlockCreatorClick ) IconAndTextDrawerItem( text = "Block ${postView.community.name}", - icon = Icons.Default.Block, + icon = Icons.Outlined.Block, onClick = onBlockCommunityClick ) } if (isCreator) { IconAndTextDrawerItem( text = "Edit", - icon = Icons.Default.Edit, + icon = Icons.Outlined.Edit, onClick = onEditPostClick ) val deleted = postView.post.deleted if (deleted) { IconAndTextDrawerItem( text = "Restore", - icon = Icons.Default.Restore, + icon = Icons.Outlined.Restore, onClick = onDeletePostClick ) } else { IconAndTextDrawerItem( text = "Delete", - icon = Icons.Default.Delete, + icon = Icons.Outlined.Delete, onClick = onDeletePostClick ) } diff --git a/app/src/main/java/com/jerboa/ui/components/post/create/CreatePost.kt b/app/src/main/java/com/jerboa/ui/components/post/create/CreatePost.kt index 6e3459a1d..4529f1868 100644 --- a/app/src/main/java/com/jerboa/ui/components/post/create/CreatePost.kt +++ b/app/src/main/java/com/jerboa/ui/components/post/create/CreatePost.kt @@ -8,9 +8,9 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.ArrowDropDown -import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.Close import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -60,7 +60,7 @@ fun CreatePostHeader( } else { // Todo add are you sure cancel dialog Icon( - Icons.Filled.Add, + Icons.Outlined.Add, contentDescription = "TODO" ) } @@ -74,7 +74,7 @@ fun CreatePostHeader( ) { // Todo add are you sure cancel dialog Icon( - Icons.Filled.Close, + Icons.Outlined.Close, contentDescription = "Close" ) } @@ -180,7 +180,7 @@ fun CreatePostBody( }, trailingIcon = { Icon( - imageVector = Icons.Default.ArrowDropDown, + imageVector = Icons.Outlined.ArrowDropDown, contentDescription = "TODO" ) }, diff --git a/app/src/main/java/com/jerboa/ui/components/post/edit/PostEdit.kt b/app/src/main/java/com/jerboa/ui/components/post/edit/PostEdit.kt index c55ab5d4a..804a2a32e 100644 --- a/app/src/main/java/com/jerboa/ui/components/post/edit/PostEdit.kt +++ b/app/src/main/java/com/jerboa/ui/components/post/edit/PostEdit.kt @@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Save +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.Save import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.KeyboardType @@ -56,7 +56,7 @@ fun EditPostHeader( } else { // Todo add are you sure cancel dialog Icon( - Icons.Filled.Save, + Icons.Outlined.Save, contentDescription = "TODO" ) } @@ -70,7 +70,7 @@ fun EditPostHeader( ) { // Todo add are you sure cancel dialog Icon( - Icons.Filled.Close, + Icons.Outlined.Close, contentDescription = "Close" ) } diff --git a/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessage.kt b/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessage.kt index 8291a45e0..19617086f 100644 --- a/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessage.kt +++ b/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessage.kt @@ -8,12 +8,12 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.Reply +import androidx.compose.material.icons.outlined.MarkChatRead +import androidx.compose.material.icons.outlined.MarkChatUnread +import androidx.compose.material.icons.outlined.Textsms import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import com.jerboa.datatypes.PersonSafe import com.jerboa.datatypes.PrivateMessageView @@ -139,24 +139,28 @@ fun PrivateMessageFooterLine( ) { if (!isCreator(myPersonId, privateMessageView)) { ActionBarButton( - icon = Icons.Filled.Check, + icon = if (privateMessageView.private_message.read) { + Icons.Outlined.MarkChatRead + } else { + Icons.Outlined.MarkChatUnread + }, onClick = { onMarkAsReadClick(privateMessageView) }, contentColor = if (privateMessageView.private_message.read) { - Color.Green + MaterialTheme.colors.primary } else { MaterialTheme.colors.onBackground.muted }, account = account ) ActionBarButton( - icon = Icons.Filled.Reply, + icon = Icons.Outlined.Textsms, onClick = { onReplyClick(privateMessageView) }, account = account ) } // TODO // ActionBarButton( -// icon = Icons.Filled.MoreVert, +// icon = Icons.Outlined.MoreVert, // account = account, // ) } diff --git a/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessageReply.kt b/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessageReply.kt index 9a924043d..7fc33858b 100644 --- a/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessageReply.kt +++ b/app/src/main/java/com/jerboa/ui/components/privatemessage/PrivateMessageReply.kt @@ -8,8 +8,9 @@ import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Send +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.Send import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.TextFieldValue @@ -53,7 +54,7 @@ fun PrivateMessageReplyHeader( ) } else { Icon( - imageVector = Icons.Default.Send, + imageVector = Icons.Outlined.Send, contentDescription = "TODO" ) } @@ -66,7 +67,7 @@ fun PrivateMessageReplyHeader( } ) { Icon( - Icons.Filled.Close, + Icons.Outlined.Close, contentDescription = "Back" ) } diff --git a/app/src/main/java/com/jerboa/ui/components/report/CreateReport.kt b/app/src/main/java/com/jerboa/ui/components/report/CreateReport.kt index edd58485e..4fcc32e98 100644 --- a/app/src/main/java/com/jerboa/ui/components/report/CreateReport.kt +++ b/app/src/main/java/com/jerboa/ui/components/report/CreateReport.kt @@ -6,8 +6,9 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Send +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.Send import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.TextFieldValue @@ -46,7 +47,7 @@ fun CreateReportHeader( ) } else { Icon( - imageVector = Icons.Default.Send, + imageVector = Icons.Outlined.Send, contentDescription = "TODO" ) } @@ -59,7 +60,7 @@ fun CreateReportHeader( } ) { Icon( - Icons.Filled.Close, + Icons.Outlined.Close, contentDescription = "Back" ) } diff --git a/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt b/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt index 1a66a64cb..d201e1c27 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/SettingsActivity.kt @@ -9,9 +9,10 @@ import androidx.compose.material.Scaffold import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Info -import androidx.compose.material.icons.filled.ManageAccounts -import androidx.compose.material.icons.filled.Palette +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.ManageAccounts +import androidx.compose.material.icons.outlined.Palette import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -43,7 +44,7 @@ fun SettingsActivity( title = { Text("Look and feel") }, icon = { Icon( - imageVector = Icons.Default.Palette, + imageVector = Icons.Outlined.Palette, contentDescription = "TODO" ) }, @@ -54,7 +55,7 @@ fun SettingsActivity( title = { Text("${acct.name} settings") }, icon = { Icon( - imageVector = Icons.Default.ManageAccounts, + imageVector = Icons.Outlined.ManageAccounts, contentDescription = "TODO" ) }, @@ -65,7 +66,7 @@ fun SettingsActivity( title = { Text("About") }, icon = { Icon( - imageVector = Icons.Default.Info, + imageVector = Icons.Outlined.Info, contentDescription = "TODO" ) }, diff --git a/app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt b/app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt index c5d95f272..3022a4b2e 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/about/AboutActivity.kt @@ -11,12 +11,13 @@ import androidx.compose.material.Scaffold import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.AttachMoney -import androidx.compose.material.icons.filled.BugReport -import androidx.compose.material.icons.filled.Chat -import androidx.compose.material.icons.filled.Code -import androidx.compose.material.icons.filled.NewReleases -import androidx.compose.material.icons.filled.TravelExplore +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.AttachMoney +import androidx.compose.material.icons.outlined.BugReport +import androidx.compose.material.icons.outlined.Chat +import androidx.compose.material.icons.outlined.Code +import androidx.compose.material.icons.outlined.NewReleases +import androidx.compose.material.icons.outlined.TravelExplore import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -46,6 +47,8 @@ fun AboutActivity( val scaffoldState = rememberScaffoldState() val ctx = LocalContext.current + + @Suppress("DEPRECATION") val version = ctx.packageManager.getPackageInfo(ctx.packageName, 0).versionName Surface(color = MaterialTheme.colors.background) { @@ -61,7 +64,7 @@ fun AboutActivity( subtitle = { Text("Version $version") }, icon = { Icon( - imageVector = Icons.Default.NewReleases, + imageVector = Icons.Outlined.NewReleases, contentDescription = "TODO" ) }, @@ -75,7 +78,7 @@ fun AboutActivity( title = { Text("Issue tracker") }, icon = { Icon( - imageVector = Icons.Default.BugReport, + imageVector = Icons.Outlined.BugReport, contentDescription = "TODO" ) }, @@ -87,7 +90,7 @@ fun AboutActivity( title = { Text("Developer Matrix chatroom") }, icon = { Icon( - imageVector = Icons.Default.Chat, + imageVector = Icons.Outlined.Chat, contentDescription = "TODO" ) }, @@ -99,7 +102,7 @@ fun AboutActivity( title = { Text("Donate to Jerboa development") }, icon = { Icon( - imageVector = Icons.Default.AttachMoney, + imageVector = Icons.Outlined.AttachMoney, contentDescription = "TODO" ) }, @@ -126,7 +129,7 @@ fun AboutActivity( title = { Text("Follow on Mastodon") }, icon = { Icon( - imageVector = Icons.Default.TravelExplore, + imageVector = Icons.Outlined.TravelExplore, contentDescription = "TODO" ) }, @@ -147,7 +150,7 @@ fun AboutActivity( }, icon = { Icon( - imageVector = Icons.Default.Code, + imageVector = Icons.Outlined.Code, contentDescription = "TODO" ) }, 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 3e178fa8e..a359b9830 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 @@ -6,7 +6,8 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.Close import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment @@ -58,7 +59,7 @@ fun ImageWithClose( Box(contentAlignment = Alignment.TopEnd) { composable() IconButton(onClick = onClick) { - Icon(imageVector = Icons.Default.Close, contentDescription = "Remove Current Avatar") + Icon(imageVector = Icons.Outlined.Close, contentDescription = "Remove Current Avatar") } } } diff --git a/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt b/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt index bf5b92040..15d6f8201 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/lookandfeel/LookAndFeelActivity.kt @@ -9,10 +9,11 @@ import androidx.compose.material.Scaffold import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.FlashlightOn -import androidx.compose.material.icons.filled.FormatSize -import androidx.compose.material.icons.filled.Palette -import androidx.compose.material.icons.filled.ShieldMoon +import androidx.compose.material.icons.outlined.* +import androidx.compose.material.icons.outlined.FlashlightOn +import androidx.compose.material.icons.outlined.FormatSize +import androidx.compose.material.icons.outlined.Palette +import androidx.compose.material.icons.outlined.ShieldMoon import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -63,7 +64,7 @@ fun LookAndFeelActivity( state = fontSizeState, icon = { Icon( - imageVector = Icons.Default.FormatSize, + imageVector = Icons.Outlined.FormatSize, contentDescription = "TODO" ) }, @@ -85,7 +86,7 @@ fun LookAndFeelActivity( items = ThemeMode.values().map { it.name }, icon = { Icon( - imageVector = Icons.Default.Palette, + imageVector = Icons.Outlined.Palette, contentDescription = "TODO" ) }, @@ -107,7 +108,7 @@ fun LookAndFeelActivity( items = LightTheme.values().map { it.name }, icon = { Icon( - imageVector = Icons.Default.FlashlightOn, + imageVector = Icons.Outlined.FlashlightOn, contentDescription = "TODO" ) }, @@ -129,7 +130,7 @@ fun LookAndFeelActivity( items = DarkTheme.values().map { it.name }, icon = { Icon( - imageVector = Icons.Default.ShieldMoon, + imageVector = Icons.Outlined.ShieldMoon, contentDescription = "TODO" ) }, diff --git a/app/src/main/java/com/jerboa/ui/theme/Sizes.kt b/app/src/main/java/com/jerboa/ui/theme/Sizes.kt index 2021e4a43..6c00925d6 100644 --- a/app/src/main/java/com/jerboa/ui/theme/Sizes.kt +++ b/app/src/main/java/com/jerboa/ui/theme/Sizes.kt @@ -2,8 +2,7 @@ package com.jerboa.ui.theme import androidx.compose.ui.unit.dp -val ACTION_BAR_ICON_SIZE = 24.dp -val ACTION_BAR_ICON_SIZE_SMALLER = 16.dp +val ACTION_BAR_ICON_SIZE = 16.dp val SMALL_PADDING = 4.dp val MEDIUM_PADDING = 8.dp