1
1
package it.fast4x.rimusic.ui.screens.home
2
2
3
+ import android.app.Activity
4
+ import androidx.activity.compose.BackHandler
3
5
import androidx.compose.animation.ExperimentalAnimationApi
4
6
import androidx.compose.foundation.ExperimentalFoundationApi
5
7
import androidx.compose.material.ExperimentalMaterialApi
@@ -29,8 +31,10 @@ import it.fast4x.rimusic.R
29
31
import it.fast4x.rimusic.enums.CheckUpdateState
30
32
import it.fast4x.rimusic.enums.HomeScreenTabs
31
33
import it.fast4x.rimusic.enums.NavRoutes
34
+ import it.fast4x.rimusic.enums.PopupType
32
35
import it.fast4x.rimusic.models.toUiMood
33
36
import it.fast4x.rimusic.ui.components.themed.ConfirmationDialog
37
+ import it.fast4x.rimusic.ui.components.themed.SmartMessage
34
38
import it.fast4x.rimusic.ui.screens.globalRoutes
35
39
import it.fast4x.rimusic.ui.screens.searchResultRoute
36
40
import it.fast4x.rimusic.ui.screens.searchRoute
@@ -45,6 +49,7 @@ import it.fast4x.rimusic.utils.rememberPreference
45
49
import it.fast4x.rimusic.utils.showSearchTabKey
46
50
import it.fast4x.rimusic.utils.showStatsInNavbarKey
47
51
import me.knighthat.Skeleton
52
+ import kotlin.system.exitProcess
48
53
49
54
50
55
@OptIn(ExperimentalMaterial3Api ::class )
@@ -93,83 +98,7 @@ fun HomeScreen(
93
98
}
94
99
) {
95
100
globalRoutes()
96
- /*
97
- settingsRoute {
98
- SettingsScreen(
99
- navController = navController,
100
- )
101
- }
102
-
103
- historyRoute {
104
- HistoryScreen(
105
- navController = navController,
106
- )
107
- }
108
-
109
- localPlaylistRoute { playlistId ->
110
- LocalPlaylistScreen(
111
- navController = navController,
112
- playlistId = playlistId ?: error("playlistId cannot be null")
113
- )
114
- }
115
- */
116
- /*
117
- builtInPlaylistRoute { builtInPlaylist ->
118
- BuiltInPlaylistScreen(
119
- navController = navController,
120
- builtInPlaylist = builtInPlaylist
121
- )
122
- }
123
101
124
- playlistRoute { browseId, params, maxDepth ->
125
- PlaylistScreen(
126
- navController = navController,
127
- browseId = browseId ?: error("browseId cannot be null"),
128
- params = params,
129
- maxDepth = maxDepth
130
- )
131
- }
132
- */
133
- /*
134
- playlistRoute { browseId, params ->
135
- PlaylistScreen(
136
- browseId = browseId ?: "",
137
- params = params
138
- )
139
- }
140
-
141
-
142
- searchResultRoute { query ->
143
- SearchResultScreen(
144
- navController = navController,
145
- query = query,
146
- onSearchAgain = {
147
- searchRoute(query)
148
- }
149
- )
150
- }
151
-
152
- searchRoute { initialTextInput ->
153
- val context = LocalContext.current
154
-
155
- SearchScreen(
156
- navController = navController,
157
- initialTextInput = initialTextInput,
158
- onSearch = { query ->
159
- pop()
160
- searchResultRoute(query)
161
-
162
- if (!context.preferences.getBoolean(pauseSearchHistoryKey, false)) {
163
- query {
164
- Database.insert(SearchQuery(query = query))
165
- }
166
- }
167
- },
168
- onViewPlaylist = onPlaylistUrl,
169
- onDismiss = { homeRoute::global }
170
- )
171
- }
172
- */
173
102
host {
174
103
175
104
val openTabFromShortcut1 by remember{ mutableIntStateOf(openTabFromShortcut) }
@@ -186,19 +115,6 @@ fun HomeScreen(
186
115
else -> remember { mutableIntStateOf(openTabFromShortcut1) }
187
116
}
188
117
189
-
190
- /*
191
- var (tabIndex, onTabChanged) =
192
- if (preferences.getEnum(indexNavigationTabKey, HomeScreenTabs.Default) == HomeScreenTabs.Default)
193
- rememberPreference(
194
- homeScreenTabIndexKey,
195
- HomeScreenTabs.QuickPics.index
196
- ) else
197
- remember {
198
- mutableStateOf(preferences.getEnum(indexNavigationTabKey, HomeScreenTabs.QuickPics).index)
199
- }
200
- */
201
-
202
118
if (tabIndex == - 2 ) navController.navigate(NavRoutes .search.name)
203
119
204
120
@@ -310,183 +226,6 @@ fun HomeScreen(
310
226
}
311
227
}
312
228
}
313
-
314
- // Scaffold(
315
- // navController = navController,
316
- // playerEssential = playerEssential,
317
- // topIconButtonId = R.drawable.settings,
318
- // onTopIconButtonClick = {
319
- // //settingsRoute()
320
- // navController.navigate(NavRoutes.settings.name)
321
- // },
322
- // showButton1 = uiType() != UiType.RiMusic,
323
- // topIconButton2Id = R.drawable.stats_chart,
324
- // onTopIconButton2Click = {
325
- // //statisticsTypeRoute(StatisticsType.Today)
326
- // navController.navigate(NavRoutes.statistics.name)
327
- // },
328
- // showButton2 = if( uiType() == UiType.RiMusic ) false else showStatsInNavbar,
329
- // showBottomButton = if( uiType() == UiType.RiMusic ) false else showSearchTab,
330
- // onBottomIconButtonClick = {
331
- // //searchRoute("")
332
- // navController.navigate(NavRoutes.search.name)
333
- // },
334
- // tabIndex = tabIndex,
335
- // onTabChanged = onTabChanged,
336
- // showTopActions = true,
337
- // onHomeClick = {},
338
- // onSettingsClick = {
339
- // //settingsRoute()
340
- // navController.navigate(NavRoutes.settings.name)
341
- // },
342
- // onStatisticsClick = {
343
- // //statisticsTypeRoute(StatisticsType.Today)
344
- // navController.navigate(NavRoutes.statistics.name)
345
- // },
346
- // onHistoryClick = {
347
- // //historyRoute()
348
- // navController.navigate(NavRoutes.history.name)
349
- // },
350
- // onSearchClick = {
351
- // //searchRoute("")
352
- // navController.navigate(NavRoutes.search.name)
353
- // },
354
- // tabColumnContent = { Item ->
355
- // if (enableQuickPicksPage)
356
- // Item(0, stringResource(R.string.quick_picks), R.drawable.sparkles)
357
- // Item(1, stringResource(R.string.songs), R.drawable.musical_notes)
358
- // Item(2, stringResource(R.string.artists), R.drawable.artists)
359
- // Item(3, stringResource(R.string.albums), R.drawable.album)
360
- // Item(4, stringResource(R.string.playlists), R.drawable.library)
361
- // }
362
- // ) { currentTabIndex ->
363
- // saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
364
- // when (currentTabIndex) {
365
- // 0 -> QuickPicksModern(
366
- // onAlbumClick = {
367
- // //albumRoute(it)
368
- // navController.navigate(route = "${NavRoutes.album.name}/$it")
369
- // },
370
- // onArtistClick = {
371
- // //artistRoute(it)
372
- // navController.navigate(route = "${NavRoutes.artist.name}/$it")
373
- // },
374
- // onPlaylistClick = {
375
- // //playlistRoute(it)
376
- // navController.navigate(route = "${NavRoutes.playlist.name}/$it")
377
- // },
378
- // onSearchClick = {
379
- // //searchRoute("")
380
- // navController.navigate(NavRoutes.search.name)
381
- // },
382
- // onMoodClick = { mood ->
383
- // //moodRoute(mood.toUiMood())
384
- // navController.currentBackStackEntry?.savedStateHandle?.set("mood", mood.toUiMood())
385
- // navController.navigate(NavRoutes.mood.name)
386
- // },
387
- // onSettingsClick = {
388
- // //settingsRoute()
389
- // navController.navigate(NavRoutes.settings.name)
390
- // },
391
- // navController = navController
392
- //
393
- // )
394
- //
395
- // 1 -> HomeSongsModern(
396
- // navController = navController,
397
- // onSearchClick = {
398
- // //searchRoute("")
399
- // navController.navigate(NavRoutes.search.name)
400
- // },
401
- // onSettingsClick = {
402
- // //settingsRoute()
403
- // navController.navigate(NavRoutes.settings.name)
404
- // }
405
- // )
406
- //
407
- // 2 -> HomeArtistsModern(
408
- // onArtistClick = {
409
- // //artistRoute(it.id)
410
- // navController.navigate(route = "${NavRoutes.artist.name}/${it.id}")
411
- // },
412
- // onSearchClick = {
413
- // //searchRoute("")
414
- // navController.navigate(NavRoutes.search.name)
415
- // },
416
- // onSettingsClick = {
417
- // //settingsRoute()
418
- // navController.navigate(NavRoutes.settings.name)
419
- // }
420
- // )
421
- //
422
- // 3 -> HomeAlbumsModern(
423
- // onAlbumClick = {
424
- // //albumRoute(it.id)
425
- // navController.navigate(route = "${NavRoutes.album.name}/${it.id}")
426
- // },
427
- // onSearchClick = {
428
- // //searchRoute("")
429
- // navController.navigate(NavRoutes.search.name)
430
- // },
431
- // onSettingsClick = {
432
- // //settingsRoute()
433
- // navController.navigate(NavRoutes.settings.name)
434
- // }
435
- // )
436
- //
437
- // 4 -> HomeLibraryModern(
438
- // onBuiltInPlaylist = {
439
- // //builtInPlaylistRoute(it)
440
- // navController.navigate(route = "${NavRoutes.builtInPlaylist.name}/${it.ordinal}")
441
- // },
442
- // onPlaylistClick = {
443
- // //localPlaylistRoute(it.id)
444
- // navController.navigate(route = "${NavRoutes.localPlaylist.name}/${it.id}")
445
- // },
446
- // onSearchClick = {
447
- // //searchRoute("")
448
- // navController.navigate(NavRoutes.search.name)
449
- // },
450
- // onDeviceListSongsClick = {
451
- // //deviceListSongRoute("")
452
- // navController.navigate(NavRoutes.onDevice.name)
453
- // },
454
- // onStatisticsClick = {
455
- // //statisticsTypeRoute(StatisticsType.Today)
456
- // navController.navigate(NavRoutes.statistics.name)
457
- // },
458
- // onSettingsClick = {
459
- // //settingsRoute()
460
- // navController.navigate(NavRoutes.settings.name)
461
- // }
462
- //
463
- // )
464
- // /*
465
- // 5 -> HomeDiscovery(
466
- // onMoodClick = { mood -> moodRoute(mood.toUiMood()) },
467
- // onNewReleaseAlbumClick = { albumRoute(it) },
468
- // onSearchClick = { searchRoute("") }
469
- // )
470
- // */
471
- //
472
- // //6 -> HomeEqualizer( )
473
- // /*
474
- // 5 -> HomeStatistics(
475
- // onStatisticsType = { statisticsTypeRoute(it)},
476
- // onBuiltInPlaylist = { builtInPlaylistRoute(it) },
477
- // onPlaylistClick = { localPlaylistRoute(it.id) },
478
- // onSearchClick = { searchRoute("") }
479
- // )
480
- // */
481
- //
482
- // /*
483
- // 6 -> HomeSearch(
484
- // onSearchType = { searchTypeRoute(it) }
485
- // )
486
- // */
487
- // }
488
- // }
489
- // }
490
229
}
491
230
}
492
231
@@ -509,5 +248,23 @@ fun HomeScreen(
509
248
onDismiss = { checkUpdateState = CheckUpdateState .Disabled },
510
249
onConfirm = { checkUpdateState = CheckUpdateState .Enabled },
511
250
)
512
-
251
+
252
+ // Exit app when user uses back
253
+ val context = LocalContext .current
254
+ var confirmCount by remember { mutableIntStateOf( 0 ) }
255
+ BackHandler {
256
+ if ( confirmCount == 0 ) {
257
+ SmartMessage (
258
+ // TODO: add this string to xml
259
+ " Press once again to exit" ,
260
+ context = context
261
+ )
262
+ confirmCount++
263
+ } else {
264
+ val activity = context as ? Activity
265
+ activity?.finishAffinity()
266
+ // Close app with exit 0 notify that no problem occurred
267
+ exitProcess( 0 )
268
+ }
269
+ }
513
270
}
0 commit comments