Skip to content

Commit b8098ac

Browse files
authored
Merge pull request #1737 from DimensionDev/feature/xqt_notification_posts
feat: Introduce XQT device follow timeline, adding new data sources, UI components, and routing.
2 parents 1675300 + a6afc13 commit b8098ac

File tree

15 files changed

+2270
-2039
lines changed

15 files changed

+2270
-2039
lines changed

app/src/main/java/dev/dimension/flare/ui/route/Route.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.compose.runtime.Immutable
44
import androidx.navigation3.runtime.NavKey
55
import dev.dimension.flare.data.model.MixedTimelineTabItem
66
import dev.dimension.flare.data.model.TimelineTabItem
7+
import dev.dimension.flare.data.model.XQT
78
import dev.dimension.flare.model.AccountType
89
import dev.dimension.flare.model.MicroBlogKey
910
import kotlinx.collections.immutable.ImmutableMap
@@ -443,6 +444,14 @@ internal sealed interface Route : NavKey {
443444

444445
public fun from(deeplinkRoute: DeeplinkRoute): Route? {
445446
return when (deeplinkRoute) {
447+
is DeeplinkRoute.Timeline.XQTDeviceFollow ->
448+
Route.Timeline(
449+
accountType = deeplinkRoute.accountType,
450+
tabItem =
451+
XQT.DeviceFollowTimelineTabItem(
452+
account = deeplinkRoute.accountType,
453+
),
454+
)
446455
is DeeplinkRoute.OpenLinkDirectly -> null
447456
is DeeplinkRoute.DeepLinkAccountPicker ->
448457
DeepLinkAccountPicker(

compose-ui/src/commonMain/composeResources/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,7 @@
476476
<string name="mixed_timeline_title">Mixed</string>
477477
<string name="liked_title">Liked</string>
478478
<string name="all_rss_feeds_title">All Rss Feeds</string>
479+
<string name="posts_title">Posts</string>
479480
<string name="settings_appearance_absolute_timestamp">Absolute timestamp</string>
480481
<string name="settings_appearance_absolute_timestamp_description">Display absolute timestamps on posts</string>
481482
<string name="settings_about_description">The ultimate next generation open-sourced AI powered decentralized social network client.</string>

compose-ui/src/commonMain/kotlin/dev/dimension/flare/data/model/TabSettings.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public sealed class TitleType {
9191
Social,
9292
Liked,
9393
AllRssFeeds,
94+
Posts,
9495
}
9596
}
9697
}
@@ -900,6 +901,25 @@ public object XQT {
900901

901902
override fun update(metaData: TabMetaData): TabItem = copy(metaData = metaData)
902903
}
904+
905+
@Immutable
906+
@Serializable
907+
public data class DeviceFollowTimelineTabItem(
908+
override val account: AccountType,
909+
override val metaData: TabMetaData =
910+
TabMetaData(
911+
title = TitleType.Localized(TitleType.Localized.LocalizedKey.Posts),
912+
icon = IconType.Material(IconType.Material.MaterialIcon.List),
913+
),
914+
) : TimelineTabItem() {
915+
override val key: String = "device_follow_$account"
916+
917+
override fun createPresenter(): TimelinePresenter =
918+
dev.dimension.flare.ui.presenter.home.xqt
919+
.XQTDeviceFollowTimelinePresenter(account)
920+
921+
override fun update(metaData: TabMetaData): TabItem = copy(metaData = metaData)
922+
}
903923
}
904924

905925
public object Bluesky {

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/component/TabIcon.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import dev.dimension.flare.compose.ui.liked_title
5555
import dev.dimension.flare.compose.ui.mastodon_tab_local_title
5656
import dev.dimension.flare.compose.ui.mastodon_tab_public_title
5757
import dev.dimension.flare.compose.ui.mixed_timeline_title
58+
import dev.dimension.flare.compose.ui.posts_title
5859
import dev.dimension.flare.compose.ui.rss_title
5960
import dev.dimension.flare.compose.ui.settings_title
6061
import dev.dimension.flare.compose.ui.social_title
@@ -281,6 +282,7 @@ internal val TitleType.Localized.res: StringResource
281282
TitleType.Localized.LocalizedKey.MixedTimeline -> Res.string.mixed_timeline_title
282283
TitleType.Localized.LocalizedKey.Liked -> Res.string.liked_title
283284
TitleType.Localized.LocalizedKey.AllRssFeeds -> Res.string.all_rss_feeds_title
285+
TitleType.Localized.LocalizedKey.Posts -> Res.string.posts_title
284286
}
285287

286288
internal fun IconType.Material.MaterialIcon.toIcon(): ImageVector =

desktopApp/src/main/kotlin/dev/dimension/flare/ui/route/Route.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dev.dimension.flare.ui.route
22

33
import androidx.navigation3.runtime.NavKey
44
import dev.dimension.flare.data.model.TimelineTabItem
5+
import dev.dimension.flare.data.model.XQT
56
import dev.dimension.flare.model.AccountType
67
import dev.dimension.flare.model.MicroBlogKey
78
import dev.dimension.flare.ui.model.UiRssSource
@@ -244,6 +245,13 @@ internal sealed interface Route : NavKey {
244245

245246
public fun from(deeplinkRoute: DeeplinkRoute): Route? {
246247
return when (deeplinkRoute) {
248+
is DeeplinkRoute.Timeline.XQTDeviceFollow ->
249+
Route.Timeline(
250+
tabItem =
251+
XQT.DeviceFollowTimelineTabItem(
252+
account = deeplinkRoute.accountType,
253+
),
254+
)
247255
is DeeplinkRoute.OpenLinkDirectly -> null
248256
is DeeplinkRoute.DeepLinkAccountPicker ->
249257
DeepLinkAccountPicker(

0 commit comments

Comments
 (0)