Skip to content
This repository was archived by the owner on Jul 30, 2025. It is now read-only.

Commit b971da8

Browse files
authored
Merge pull request #4029 from knighthat/master
#4001 close app after user "back"
2 parents 819ee8b + 4bd4ab8 commit b971da8

File tree

1 file changed

+24
-267
lines changed
  • composeApp/src/androidMain/kotlin/it/fast4x/rimusic/ui/screens/home

1 file changed

+24
-267
lines changed
Lines changed: 24 additions & 267 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package it.fast4x.rimusic.ui.screens.home
22

3+
import android.app.Activity
4+
import androidx.activity.compose.BackHandler
35
import androidx.compose.animation.ExperimentalAnimationApi
46
import androidx.compose.foundation.ExperimentalFoundationApi
57
import androidx.compose.material.ExperimentalMaterialApi
@@ -29,8 +31,10 @@ import it.fast4x.rimusic.R
2931
import it.fast4x.rimusic.enums.CheckUpdateState
3032
import it.fast4x.rimusic.enums.HomeScreenTabs
3133
import it.fast4x.rimusic.enums.NavRoutes
34+
import it.fast4x.rimusic.enums.PopupType
3235
import it.fast4x.rimusic.models.toUiMood
3336
import it.fast4x.rimusic.ui.components.themed.ConfirmationDialog
37+
import it.fast4x.rimusic.ui.components.themed.SmartMessage
3438
import it.fast4x.rimusic.ui.screens.globalRoutes
3539
import it.fast4x.rimusic.ui.screens.searchResultRoute
3640
import it.fast4x.rimusic.ui.screens.searchRoute
@@ -45,6 +49,7 @@ import it.fast4x.rimusic.utils.rememberPreference
4549
import it.fast4x.rimusic.utils.showSearchTabKey
4650
import it.fast4x.rimusic.utils.showStatsInNavbarKey
4751
import me.knighthat.Skeleton
52+
import kotlin.system.exitProcess
4853

4954

5055
@OptIn(ExperimentalMaterial3Api::class)
@@ -93,83 +98,7 @@ fun HomeScreen(
9398
}
9499
) {
95100
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-
}
123101

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-
*/
173102
host {
174103

175104
val openTabFromShortcut1 by remember{ mutableIntStateOf(openTabFromShortcut) }
@@ -186,19 +115,6 @@ fun HomeScreen(
186115
else -> remember { mutableIntStateOf(openTabFromShortcut1) }
187116
}
188117

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-
202118
if (tabIndex == -2) navController.navigate(NavRoutes.search.name)
203119

204120

@@ -310,183 +226,6 @@ fun HomeScreen(
310226
}
311227
}
312228
}
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-
// }
490229
}
491230
}
492231

@@ -509,5 +248,23 @@ fun HomeScreen(
509248
onDismiss = { checkUpdateState = CheckUpdateState.Disabled },
510249
onConfirm = { checkUpdateState = CheckUpdateState.Enabled },
511250
)
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+
}
513270
}

0 commit comments

Comments
 (0)