فهرست منبع

code improvements

code improvements

code improvements
Milan Jurkulak 3 سال پیش
والد
کامیت
3f5e0997ed

+ 1 - 1
app/src/main/kotlin/org/mjdev/tvapp/ui/pages/MainPage.kt

@@ -126,7 +126,7 @@ class MainPage : Page() {
             BrowseView(
                 modifier = Modifier.fillMaxSize(),
                 appIcon = R.mipmap.ic_launcher,
-                userIcon = R.drawable.milanj,
+                userIcon = org.mjdev.tvlib.R.drawable.person,
                 title = titleState.value,
                 messages = messages.value,
                 categories = countryList.value,

+ 5 - 2
app/src/main/kotlin/org/mjdev/tvapp/ui/screens/DetailScreen.kt

@@ -62,7 +62,7 @@ class DetailScreen : Screen() {
 
     override val immersive: Boolean = true
 
-    override val pageArgs = listOf(
+    override val routeArgs = listOf(
         navArgument(data) {
             nullable = true
             type = AnyType
@@ -118,7 +118,8 @@ class DetailScreen : Screen() {
                     ) {
                         Column(
                             modifier = Modifier
-                                .fillMaxWidth().alpha(0.8f)
+                                .fillMaxWidth()
+                                .alpha(0.8f)
                                 .background(themeProvider.detailTextBackgroundColor)
                                 .padding(
                                     vertical = themeProvider.detailTextPaddingVertical,
@@ -144,9 +145,11 @@ class DetailScreen : Screen() {
                     }
                 }
             }
+
             DetailsLoadingState.Loading -> {
                 Loading()
             }
+
             else -> {
                 Loading()
                 postError("File or address $data not found.")

+ 1 - 1
app/src/main/kotlin/org/mjdev/tvapp/ui/screens/IPTVScreen.kt

@@ -30,7 +30,7 @@ class IPTVScreen : Screen() {
     override val menuIcon: ImageVector get() = Icons.Filled.PlayArrow
     override val immersive: Boolean = true
 
-    override val pageArgs = listOf(
+    override val routeArgs = listOf(
         navArgument(data) {
             nullable = true
             type = AnyType

+ 1 - 1
app/src/main/kotlin/org/mjdev/tvapp/ui/screens/PlayerScreen.kt

@@ -37,7 +37,7 @@ class PlayerScreen : Screen() {
     override val menuIcon: ImageVector get() = Icons.Filled.PlayArrow
     override val immersive: Boolean = true
 
-    override val pageArgs = listOf(
+    override val routeArgs = listOf(
         navArgument(data) {
             nullable = true
             type = AnyType

+ 11 - 5
app/src/main/kotlin/org/mjdev/tvapp/viewmodel/DetailViewModel.kt

@@ -16,8 +16,8 @@ import kotlinx.coroutines.flow.SharingStarted
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.flow
 import kotlinx.coroutines.flow.stateIn
-import org.mjdev.tvlib.viewmodel.BaseViewModel
 import org.mjdev.tvapp.database.DAO
+import org.mjdev.tvlib.viewmodel.BaseViewModel
 import org.mjdev.tvapp.repository.IMovieRepository
 import org.mjdev.tvapp.repository.MovieRepository
 import org.mjdev.tvapp.state.DetailsLoadingState
@@ -25,9 +25,10 @@ import java.net.URL
 import javax.inject.Inject
 
 @HiltViewModel
-class DetailViewModel @Inject constructor(
-    private val movieRepository: IMovieRepository
-) : BaseViewModel() {
+class DetailViewModel @Inject constructor() : BaseViewModel() {
+
+    @Inject
+    lateinit var movieRepository: IMovieRepository
 
     fun detailsLoadingState(
         data: Any?
@@ -44,12 +45,15 @@ class DetailViewModel @Inject constructor(
                     }
                     emit(state)
                 }
+
                 is String -> {
                     emit(DetailsLoadingState.Ready(data))
                 }
+
                 is Uri, is URL -> {
                     emit(DetailsLoadingState.Ready(data))
                 }
+
                 else -> {
                     emit(DetailsLoadingState.Ready(data))
                 }
@@ -68,7 +72,9 @@ class DetailViewModel @Inject constructor(
         @Suppress("unused")
         fun mockDetailViewModel(
             context: Context
-        ): DetailViewModel = DetailViewModel(MovieRepository(DAO(context)))
+        ): DetailViewModel = DetailViewModel().apply {
+            movieRepository = MovieRepository(DAO(context))
+        }
 
     }
 

+ 22 - 13
app/src/main/kotlin/org/mjdev/tvapp/viewmodel/MainViewModel.kt

@@ -22,20 +22,23 @@ import org.mjdev.tvlib.helpers.cursor.AudioCursor
 import org.mjdev.tvlib.helpers.cursor.PhotoCursor
 import org.mjdev.tvlib.helpers.cursor.VideoCursor
 import org.mjdev.tvlib.network.NetworkConnectivityService
-import org.mjdev.tvlib.network.NetworkConnectivityServiceImpl
 import org.mjdev.tvlib.viewmodel.BaseViewModel
 import org.mjdev.tvapp.data.local.Message
 import org.mjdev.tvapp.data.local.Movie
 import org.mjdev.tvapp.database.DAO
 import org.mjdev.tvapp.repository.IMovieRepository
 import org.mjdev.tvapp.repository.MovieRepository
+import org.mjdev.tvlib.network.NetworkConnectivityServiceImpl
 import javax.inject.Inject
 
 @HiltViewModel
-class MainViewModel @Inject constructor(
-    private val repository: IMovieRepository,
-    var networkInfo: NetworkConnectivityService
-) : BaseViewModel() {
+class MainViewModel @Inject constructor() : BaseViewModel() {
+
+    @Inject
+    lateinit var movieRepository: IMovieRepository
+
+    @Inject
+    lateinit var networkInfo: NetworkConnectivityService
 
     @Inject
     lateinit var appsList: AppsManager
@@ -50,7 +53,7 @@ class MainViewModel @Inject constructor(
     lateinit var localPhotoCursor: PhotoCursor
 
     val messages: StateFlow<List<Message>> = channelFlow {
-        send(repository.getMessages().getOrThrow())
+        send(movieRepository.getMessages().getOrThrow())
     }.stateIn(
         viewModelScope,
         SharingStarted.WhileSubscribed(5000L),
@@ -59,7 +62,7 @@ class MainViewModel @Inject constructor(
 
     val featuredMovieList: StateFlow<List<Any?>> = flow {
         mutableListOf<Any?>().apply {
-            addAll(repository.getMovies().getOrThrow().takeLast(8))
+            addAll(movieRepository.getMovies().getOrThrow().takeLast(8))
             if (localAudioCursor.count > 0) {
                 add(localAudioCursor.getData(0))
             }
@@ -79,7 +82,7 @@ class MainViewModel @Inject constructor(
     )
 
     val categoryList: StateFlow<Map<String, List<Movie>>> = flow {
-        repository.getMovies().getOrThrow().sortedBy { m ->
+        movieRepository.getMovies().getOrThrow().sortedBy { m ->
             m.category
         }.asMap { m ->
             Pair(m.category, m)
@@ -93,7 +96,7 @@ class MainViewModel @Inject constructor(
     )
 
     val countryList: StateFlow<List<String>> = flow {
-        repository.getMovies().getOrThrow().filter { it.country != null }.map {
+        movieRepository.getMovies().getOrThrow().filter { it.country != null }.map {
             it.country.toString()
         }.distinct().sortedBy {
             it
@@ -109,10 +112,16 @@ class MainViewModel @Inject constructor(
     companion object {
 
         @Suppress("unused")
-        fun mockMainViewModel(context: Context): MainViewModel = MainViewModel(
-            MovieRepository(DAO(context)),
-            NetworkConnectivityServiceImpl(context)
-        )
+        fun mockMainViewModel(
+            context: Context
+        ): MainViewModel = MainViewModel().apply {
+            movieRepository = MovieRepository(DAO(context))
+            networkInfo = NetworkConnectivityServiceImpl(context)
+            appsList = AppsManager(context)
+            localAudioCursor = AudioCursor(context)
+            localVideoCursor = VideoCursor(context)
+            localPhotoCursor = PhotoCursor(context)
+        }
 
     }
 

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/NavControllerExt.kt

@@ -44,7 +44,7 @@ object NavControllerExt {
     ) {
         val instance = T::class.createInstance()
         val finalRoute = instance.route
-        val args = instance.pageArgs.mapIndexed { idx, arg ->
+        val args = instance.routeArgs.mapIndexed { idx, arg ->
             Pair(arg.name, values[idx])
         }.toBundle()
         navigate(finalRoute, args)
@@ -57,7 +57,7 @@ object NavControllerExt {
     ) {
         val instance = T::class.createInstance()
         val finalRoute = instance.route
-        val args = instance.pageArgs.mapIndexed { idx, arg ->
+        val args = instance.routeArgs.mapIndexed { idx, arg ->
             Pair(arg.name, values[idx])
         }.toBundle()
         navigate(

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/NavGraphBuilderExt.kt

@@ -51,7 +51,7 @@ object NavGraphBuilderExt {
         }
         composable(
             route = route.route,
-            arguments = route.pageArgs,
+            arguments = route.routeArgs,
             enterTransition = enterTransition,
             exitTransition = exitTransition,
             deepLinks = deepLinks,
@@ -59,7 +59,7 @@ object NavGraphBuilderExt {
             popExitTransition = popExitTransition
         ) { be ->
             val rArgs = mutableMapOf<String, Any?>().apply {
-                route.pageArgs.forEach { arg ->
+                route.routeArgs.forEach { arg ->
                     put(arg.name, be.arg(arg.name, null))
                 }
             }

+ 1 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/screen/Screen.kt

@@ -40,7 +40,7 @@ open class Screen {
     open val route: String
         get() = (this::class.simpleName ?: "none")
 
-    open val pageArgs: List<NamedNavArgument> = emptyList()
+    open val routeArgs: List<NamedNavArgument> = emptyList()
 
     open val title: Any? = null
 

+ 4 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/screen/ScreenWithPages.kt

@@ -11,6 +11,7 @@ package org.mjdev.tvlib.screen
 import androidx.compose.runtime.Composable
 import org.mjdev.tvlib.annotations.TvPreview
 import org.mjdev.tvlib.extensions.NavExt.rememberNavControllerEx
+import org.mjdev.tvlib.ui.components.page.Page.Companion.EMPTY_PAGE
 import org.mjdev.tvlib.ui.components.page.PagerScope
 import org.mjdev.tvlib.ui.components.page.TvPager
 
@@ -18,7 +19,9 @@ open class ScreenWithPages : Screen() {
 
     open val startPageIndex: Int = 0
 
-    open val pages: PagerScope.() -> Unit = {}
+    open val pages: PagerScope.() -> Unit = {
+        page(EMPTY_PAGE)
+    }
 
     @TvPreview
     @Composable

+ 4 - 6
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/page/TvPager.kt

@@ -31,7 +31,6 @@ import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import kotlinx.coroutines.launch
 import org.mjdev.tvlib.annotations.TvPreview
-import org.mjdev.tvlib.extensions.ComposeExt.isEditMode
 import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
 import org.mjdev.tvlib.extensions.NavExt.rememberNavControllerEx
 import org.mjdev.tvlib.navigation.MenuItemClickListener
@@ -48,11 +47,11 @@ fun TvPager(
     roundCornerSize: Dp = 0.dp,
     backGroundColor: Color = Color.Transparent,
     backGroundShape: Shape = RoundedCornerShape(roundCornerSize),
-    pages: PagerScope.() -> Unit = {}
+    pages: PagerScope.() -> Unit = {
+        page(EMPTY_PAGE)
+    }
 ) {
 
-    val isEdit = isEditMode()
-
     val currentPage = remember { mutableStateOf<Page?>(null) }
     val coroutineScope = rememberCoroutineScope()
     val pagerScope = rememberPagerScope(navController, startIndex, pages)
@@ -103,8 +102,7 @@ fun TvPager(
             )
         }
     ) { pageIndex ->
-        val page = if (isEdit) EMPTY_PAGE
-        else if (pagerScope.size > pageIndex) pagerScope[pageIndex]
+        val page = if (pagerScope.size > pageIndex) pagerScope[pageIndex]
         else null
         Box(
             modifier = Modifier