mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 22:37:03 +05:30
Merge pull request #27 from msfjarvis/comments
Add comment open action and cleanup unused code
This commit is contained in:
commit
6867d84ca9
9 changed files with 38 additions and 152 deletions
|
@ -11,11 +11,11 @@
|
|||
android:label="@string/app_name"
|
||||
android:roundIcon="@drawable/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Lobsters">
|
||||
android:theme="@style/Theme.MaterialComponents">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.Lobsters.NoActionBar">
|
||||
android:theme="@style/Theme.MaterialComponents.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
|
|
|
@ -56,9 +56,11 @@ fun LobstersApp(
|
|||
if (lastIndex == index) {
|
||||
viewModel.getMorePosts()
|
||||
}
|
||||
LobstersItem(item) { post ->
|
||||
urlLauncher.launch(post.url)
|
||||
}
|
||||
LobstersItem(
|
||||
item,
|
||||
linkOpenAction = { post -> urlLauncher.launch(post.url) },
|
||||
commentOpenAction = { post -> urlLauncher.launch(post.commentsUrl) },
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
|
@ -6,7 +6,6 @@ import androidx.compose.foundation.background
|
|||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumnFor
|
||||
|
@ -26,40 +25,42 @@ import dev.msfjarvis.lobsters.model.Submitter
|
|||
fun LazyItemScope.LobstersItem(
|
||||
post: LobstersPost,
|
||||
modifier: Modifier = Modifier,
|
||||
onClick: (LobstersPost) -> Unit,
|
||||
linkOpenAction: (LobstersPost) -> Unit,
|
||||
commentOpenAction: (LobstersPost) -> Unit,
|
||||
) {
|
||||
ListItem(
|
||||
modifier = modifier.padding(horizontal = 8.dp)
|
||||
.fillParentMaxWidth()
|
||||
.clickable(onClick = { onClick.invoke(post) }),
|
||||
.clickable(
|
||||
onClick = { linkOpenAction.invoke(post) },
|
||||
onLongClick = { commentOpenAction.invoke(post) }
|
||||
),
|
||||
text = {
|
||||
Column {
|
||||
Text(
|
||||
text = post.title,
|
||||
color = Color(0xFF7395D9),
|
||||
fontWeight = FontWeight.Bold,
|
||||
modifier = Modifier.padding(top = 4.dp)
|
||||
)
|
||||
Row(
|
||||
modifier = Modifier.padding(vertical = 8.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
post.tags.forEach { tag ->
|
||||
Text(
|
||||
text = tag,
|
||||
modifier = Modifier
|
||||
.border(BorderStroke(1.dp, Color.Gray))
|
||||
.background(Color(0xFFFFFCD7), RoundedCornerShape(4.dp))
|
||||
.padding(vertical = 2.dp, horizontal = 4.dp),
|
||||
color = Color.DarkGray,
|
||||
)
|
||||
}
|
||||
Text(
|
||||
text = post.title,
|
||||
color = Color(0xFF7395D9),
|
||||
fontWeight = FontWeight.Bold,
|
||||
modifier = Modifier.padding(top = 4.dp)
|
||||
)
|
||||
Row(
|
||||
modifier = Modifier.padding(vertical = 8.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
post.tags.take(4).forEach { tag ->
|
||||
Text(
|
||||
text = tag,
|
||||
modifier = Modifier
|
||||
.border(BorderStroke(1.dp, Color.Gray))
|
||||
.background(Color(0xFFFFFCD7), RoundedCornerShape(4.dp))
|
||||
.padding(vertical = 2.dp, horizontal = 4.dp),
|
||||
color = Color.DarkGray,
|
||||
)
|
||||
}
|
||||
Text(
|
||||
text = "submitted by ${post.submitterUser.username}",
|
||||
modifier = Modifier.padding(bottom = 4.dp),
|
||||
)
|
||||
}
|
||||
Text(
|
||||
text = "submitted by ${post.submitterUser.username}",
|
||||
modifier = Modifier.padding(bottom = 4.dp),
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
@ -95,7 +96,7 @@ fun PreviewLobstersItem() {
|
|||
)
|
||||
LobstersTheme {
|
||||
LazyColumnFor(items = listOf(post)) { item ->
|
||||
LobstersItem(post = item, onClick = {})
|
||||
LobstersItem(post = item, linkOpenAction = {}, commentOpenAction = {})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Lobsters" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/black</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:windowLightStatusBar">false</item>
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
</resources>
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFBB86FC</color>
|
||||
<color name="purple_500">#FF6200EE</color>
|
||||
<color name="purple_700">#FF3700B3</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
</resources>
|
|
@ -1,26 +0,0 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Lobsters" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/white</item>
|
||||
<item name="colorPrimaryVariant">@color/white</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:windowLightStatusBar">true</item>
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<style name="Theme.Lobsters.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Lobsters.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
|
||||
|
||||
<style name="Theme.Lobsters.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
|
||||
</resources>
|
|
@ -1,34 +0,0 @@
|
|||
/*
|
||||
* Copyright 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package dev.msfjarvis.lobsters.data.source
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import java.time.LocalDateTime
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
object DateTimeTypeConverters {
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toLocalDateTime(value: String?): LocalDateTime? {
|
||||
return value?.let { LocalDateTime.parse(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromLocalDateTime(value: LocalDateTime?): String? {
|
||||
return value?.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
|
||||
}
|
||||
}
|
|
@ -2,10 +2,6 @@ package dev.msfjarvis.lobsters.data.source
|
|||
|
||||
import androidx.room.TypeConverter
|
||||
import com.squareup.moshi.Moshi
|
||||
import dev.msfjarvis.lobsters.model.KeybaseSignature
|
||||
import dev.msfjarvis.lobsters.model.KeybaseSignatureJsonAdapter
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
import dev.msfjarvis.lobsters.model.LobstersPostJsonAdapter
|
||||
import dev.msfjarvis.lobsters.model.Submitter
|
||||
import dev.msfjarvis.lobsters.model.SubmitterJsonAdapter
|
||||
|
||||
|
@ -25,30 +21,6 @@ object LobstersApiTypeConverters {
|
|||
return value?.let { SubmitterJsonAdapter(moshi).toJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toKeybaseSignature(value: String?): KeybaseSignature? {
|
||||
return value?.let { KeybaseSignatureJsonAdapter(moshi).fromJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromKeybaseSignature(value: KeybaseSignature?): String? {
|
||||
return value?.let { KeybaseSignatureJsonAdapter(moshi).toJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toLobstersPost(value: String?): LobstersPost? {
|
||||
return value?.let { LobstersPostJsonAdapter(moshi).fromJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun fromLobstersPost(value: LobstersPost?): String? {
|
||||
return value?.let { LobstersPostJsonAdapter(moshi).toJson(value) }
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
@JvmStatic
|
||||
fun toTagList(value: String?): List<String>? {
|
||||
|
|
|
@ -4,7 +4,6 @@ import androidx.room.Database
|
|||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import dev.msfjarvis.lobsters.data.model.LobstersEntity
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
|
||||
@Database(
|
||||
entities = [
|
||||
|
@ -15,7 +14,6 @@ import dev.msfjarvis.lobsters.model.LobstersPost
|
|||
)
|
||||
@TypeConverters(
|
||||
LobstersApiTypeConverters::class,
|
||||
DateTimeTypeConverters::class,
|
||||
)
|
||||
abstract class PostsDatabase : RoomDatabase() {
|
||||
abstract fun postsDao(): PostsDao
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue