Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ dependencies {
implementation(libs.compose.webview)
implementation(projects.shared)
implementation(projects.social.bluesky)
implementation(projects.social.fanbox)
implementation(projects.social.mastodon)
implementation(projects.social.misskey)
implementation(projects.social.nostr)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dev.dimension.flare.di

import dev.dimension.flare.data.platform.AllRssTimelineLoaderFactory
import dev.dimension.flare.data.platform.BlueskyPlatformSpec
import dev.dimension.flare.data.platform.FanboxPlatformSpec
import dev.dimension.flare.data.platform.MastodonPlatformSpec
import dev.dimension.flare.data.platform.MisskeyPlatformSpec
import dev.dimension.flare.data.platform.NostrPlatformSpec
Expand Down Expand Up @@ -33,6 +34,7 @@ internal fun runtimeData(allRssTimelineLoaderFactory: AllRssTimelineLoaderFactor
MastodonPlatformSpec,
MisskeyPlatformSpec,
BlueskyPlatformSpec,
FanboxPlatformSpec,
PixivPlatformSpec,
XqtPlatformSpec,
VvoPlatformSpec,
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/dev/dimension/flare/ui/AppContainer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ fun AppContainer(afterInit: () -> Unit) {
@Composable
fun FlareApp(content: @Composable () -> Unit) {
BindAmberSignerLauncher()
val state by producePresenter("env") { EnvironmentSettingsPresenter().invoke() }
val state by producePresenter("env") {
remember { EnvironmentSettingsPresenter() }.invoke()
}
val globalAppearance = state.globalAppearance.takeSuccessOr(GlobalAppearance.Default)
val timelineAppearance = state.timelineAppearance.takeSuccessOr(TimelineAppearance.Default)
val originalUriHandler = LocalUriHandler.current
Expand Down
22 changes: 22 additions & 0 deletions app/src/main/java/dev/dimension/flare/ui/route/Route.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ package dev.dimension.flare.ui.route

import androidx.compose.runtime.Immutable
import androidx.navigation3.runtime.NavKey
import dev.dimension.flare.common.SerializableImmutableList
import dev.dimension.flare.data.model.tab.UiSourceTimelineTabItem
import dev.dimension.flare.data.model.tab.UiTimelineTabItem
import dev.dimension.flare.data.model.tab.xqtDeviceFollow
import dev.dimension.flare.feature.agent.localhistory.LocalHistoryAgentTarget
import dev.dimension.flare.model.AccountType
import dev.dimension.flare.model.MicroBlogKey
import dev.dimension.flare.ui.model.UiMedia
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.toImmutableMap
import kotlinx.serialization.Serializable
Expand Down Expand Up @@ -441,6 +443,13 @@ internal sealed interface Route : NavKey {
val customHeaders: Map<String, String>? = null,
) : Media

@Serializable
data class RawMedia(
val medias: SerializableImmutableList<UiMedia>,
val index: Int = 0,
val preview: String? = null,
) : Media

@Serializable
data class StatusMedia(
val statusKey: MicroBlogKey,
Expand Down Expand Up @@ -472,6 +481,12 @@ internal sealed interface Route : NavKey {
val articleId: String? = null,
) : Route

@Serializable
data class Article(
val accountType: AccountType,
val articleKey: MicroBlogKey,
) : Route

@Serializable
data class BlockUser(
val accountType: AccountType?,
Expand Down Expand Up @@ -621,6 +636,13 @@ internal sealed interface Route : NavKey {
)
}

is DeeplinkRoute.Article -> {
Article(
accountType = deeplinkRoute.accountType,
articleKey = deeplinkRoute.articleKey,
)
}

is DeeplinkRoute.Search -> {
Search(
accountType = deeplinkRoute.accountType,
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/dev/dimension/flare/ui/route/Router.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import androidx.navigation3.scene.DialogSceneStrategy
import androidx.navigation3.ui.NavDisplay
import dev.dimension.flare.ui.component.BottomSheetSceneStrategy
import dev.dimension.flare.ui.component.platform.isBigScreen
import dev.dimension.flare.ui.screen.article.articleEntryBuilder
import dev.dimension.flare.ui.screen.bluesky.blueskyEntryBuilder
import dev.dimension.flare.ui.screen.compose.composeEntryBuilder
import dev.dimension.flare.ui.screen.dm.dmEntryBuilder
Expand Down Expand Up @@ -96,6 +97,7 @@ internal fun Router(
entryProvider =
entryProvider {
homeEntryBuilder(navigate, onBack, openDrawer, uriHandler = uriHandler)
articleEntryBuilder(navigate, onBack)
blueskyEntryBuilder(navigate, onBack)
composeEntryBuilder(navigate, onBack)
dmEntryBuilder(navigate, onBack)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.res.stringResource
Expand Down Expand Up @@ -48,7 +49,7 @@ internal fun AgentChatHistoryScreen(
modifier: Modifier = Modifier,
) {
val state by producePresenter {
AgentChatHistoryPresenter().invoke()
remember { AgentChatHistoryPresenter() }.invoke()
}
val topAppBarScrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
FlareScaffold(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package dev.dimension.flare.ui.screen.article

import androidx.navigation3.runtime.EntryProviderScope
import androidx.navigation3.runtime.NavKey
import dev.dimension.flare.ui.route.Route

internal fun EntryProviderScope<NavKey>.articleEntryBuilder(
navigate: (Route) -> Unit,
onBack: () -> Unit,
) {
entry<Route.Article> { args ->
ArticleScreen(
accountType = args.accountType,
articleKey = args.articleKey,
navigate = navigate,
onBack = onBack,
)
}
}
Loading
Loading