Skip to content

Commit

Permalink
refactor: I made many changes and I do not write commit message today.
Browse files Browse the repository at this point in the history
  • Loading branch information
oxyroid committed Jan 28, 2024
1 parent c22e816 commit 6c31231
Show file tree
Hide file tree
Showing 74 changed files with 1,397 additions and 736 deletions.
398 changes: 398 additions & 0 deletions .idea/protoeditor.xml

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ hilt {

dependencies {
implementation(project(":core"))
implementation(project(":data"))
implementation(project(":dlna"))
implementation(project(":ui"))
implementation(project(":features:foryou"))
Expand Down
2 changes: 2 additions & 0 deletions androidApp/src/main/java/com/m3u/androidApp/M3UApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.m3u.core.architecture.logger.Logger
import com.m3u.core.architecture.pref.Pref
import com.m3u.core.wrapper.Message
import com.m3u.data.repository.TvRepository
import com.m3u.dlna.DLNACastManager
import com.m3u.features.crash.CrashHandler
import com.m3u.material.ktx.isTelevision
import dagger.hilt.android.HiltAndroidApp
Expand Down Expand Up @@ -42,6 +43,7 @@ class M3UApplication : Application(), Configuration.Provider {
if (resources.configuration.isTelevision() || pref.alwaysTv) {
tvRepository.startServer()
} else {
DLNACastManager.bindCastService(this@M3UApplication)
tvRepository
.broadcast
.onEach {
Expand Down
14 changes: 2 additions & 12 deletions androidApp/src/main/java/com/m3u/androidApp/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material3.windowsizeclass.WindowSizeClass
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
Expand All @@ -29,7 +28,6 @@ import androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_B
import androidx.lifecycle.lifecycleScope
import com.m3u.androidApp.ui.App
import com.m3u.androidApp.ui.AppViewModel
import com.m3u.androidApp.ui.rememberAppState
import com.m3u.core.architecture.logger.Logger
import com.m3u.core.architecture.pref.Pref
import com.m3u.core.unspecified.UBoolean
Expand All @@ -42,8 +40,7 @@ import com.m3u.core.util.coroutine.getValue
import com.m3u.core.util.coroutine.setValue
import com.m3u.core.wrapper.Message
import com.m3u.data.manager.PlayerManager
import com.m3u.ui.AppLocalProvider
import com.m3u.ui.Destination
import com.m3u.ui.Toolkit
import com.m3u.ui.helper.Action
import com.m3u.ui.helper.Fob
import com.m3u.ui.helper.Helper
Expand Down Expand Up @@ -89,22 +86,15 @@ class MainActivity : AppCompatActivity() {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
setContent {
val pagerState = rememberPagerState(pref.rootDestination) {
Destination.Root.entries.size
}
val state = rememberAppState(
pagerState = pagerState
)
val darkMode = pref.darkMode
LaunchedEffect(darkMode) {
helper.darkMode = darkMode.unspecifiable
}
AppLocalProvider(
Toolkit(
helper = helper,
pref = pref
) {
App(
state = state,
viewModel = viewModel
)
}
Expand Down
51 changes: 39 additions & 12 deletions androidApp/src/main/java/com/m3u/androidApp/ui/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,73 @@ package com.m3u.androidApp.ui

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.m3u.ui.Destination
import com.m3u.ui.helper.LocalHelper

@Composable
fun App(
modifier: Modifier = Modifier,
state: AppState = rememberAppState(),
viewModel: AppViewModel = hiltViewModel(),
) {
val helper = LocalHelper.current

val navController = rememberNavController()
val entry by navController.currentBackStackEntryAsState()

val isInRootDestination by remember {
derivedStateOf {
entry?.destination?.route?.startsWith(ROOT_ROUTE) ?: false
}
}
val actualRootDestination by remember {
derivedStateOf {
if (isInRootDestination) viewModel.rootDestination
else null
}
}

val title: String by viewModel.title.collectAsStateWithLifecycle()
val actions by viewModel.actions.collectAsStateWithLifecycle()
val message by helper.message.collectAsStateWithLifecycle()
val fob by viewModel.fob.collectAsStateWithLifecycle()
val deep by viewModel.deep.collectAsStateWithLifecycle()

val rootDestination = state.rootDestination
val onBackPressed: (() -> Unit)? = {
navController.popBackStack()
Unit
}.takeIf { deep > 0 }

val navigateToRootDestination = { rootDestination: Destination.Root ->
viewModel.rootDestination = rootDestination
navController.popBackStackToRoot()
}

AppRootGraph(
AppScaffold(
title = title,
message = message,
actions = actions,
currentRootDestination = rootDestination,
rootDestinations = state.rootDestinations,
rootDestination = actualRootDestination,
fob = fob,
onBackPressed = state::onBackClick.takeIf { deep > 0 },
navigateToRoot = state::navigateToRoot,
modifier = Modifier.fillMaxSize().then(modifier),
onBackPressed = onBackPressed,
navigateToRoot = navigateToRootDestination,
modifier = Modifier
.fillMaxSize()
.then(modifier),
) { contentPadding ->
AppNavHost(
pagerState = state.pagerState,
roots = state.rootDestinations,
navigateToRoot = state::navigateToRoot,
root = actualRootDestination,
navigateToRoot = navigateToRootDestination,
contentPadding = contentPadding,
modifier = Modifier.fillMaxSize(),
navController = state.navController
navController = navController
)
}
}
21 changes: 9 additions & 12 deletions androidApp/src/main/java/com/m3u/androidApp/ui/AppNavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.pager.PagerState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.rememberNavController
import com.m3u.core.architecture.pref.LocalPref
import com.m3u.core.wrapper.eventOf
import com.m3u.features.about.navigation.aboutScreen
import com.m3u.features.about.navigation.navigateToAbout
import com.m3u.features.playlist.navigation.navigateToPlaylist
Expand All @@ -23,13 +23,12 @@ import com.m3u.features.playlist.navigation.playlistTvScreen
import com.m3u.features.stream.PlayerActivity
import com.m3u.material.ktx.isTelevision
import com.m3u.ui.Destination
import com.m3u.ui.Destination.Root.Setting.SettingFragment
import kotlinx.collections.immutable.ImmutableList
import com.m3u.ui.DestinationEvent
import com.m3u.ui.EventBus

@Composable
fun AppNavHost(
pagerState: PagerState,
roots: ImmutableList<Destination.Root>,
root: Destination.Root?,
navigateToRoot: (Destination.Root) -> Unit,
contentPadding: PaddingValues,
modifier: Modifier = Modifier,
Expand All @@ -40,6 +39,7 @@ fun AppNavHost(
val pref = LocalPref.current

val tv = isTelevision()

NavHost(
navController = navController,
startDestination = startDestination,
Expand All @@ -65,11 +65,10 @@ fun AppNavHost(
contentPadding = contentPadding
)
rootGraph(
pagerState = pagerState,
roots = roots,
root = root,
contentPadding = contentPadding,
navigateToPlaylist = { playlist ->
navController.navigateToPlaylist(playlist.url, null, tv)
navController.navigateToPlaylist(playlist.url, tv)
},
navigateToStream = {
if (pref.zappingMode && PlayerActivity.isInPipMode) return@rootGraph
Expand All @@ -86,11 +85,9 @@ fun AppNavHost(
navigateToAbout = {
navController.navigateToAbout()
},
navigateToRecommendPlaylist = { playlist, recommend ->
navController.navigateToPlaylist(playlist.url, recommend, tv)
},
navigateToSettingPlaylistManagement = {
navigateToRoot(Destination.Root.Setting(SettingFragment.Playlists))
navigateToRoot(Destination.Root.Setting)
EventBus.setting = eventOf(DestinationEvent.Setting.Playlists)
}
)

Expand Down
Loading

0 comments on commit 6c31231

Please sign in to comment.