From 6cf6cd6f08e80c1e07009c97f20341caa5dda92a Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Sat, 1 Jul 2023 07:59:50 +0300 Subject: [PATCH] WIP: UI for package list and grid + start of handling data --- app/build.gradle.kts | 4 +- .../illusionware/npsbrowser/Preferences.kt | 23 +- .../npsbrowser/activities/MainActivity.kt | 339 +++++++++++++++++- .../npsbrowser/ui/pages/Onboarding.kt | 5 +- .../npsbrowser/viewmodels/PackageListData.kt | 45 +++ .../main/res/drawable-v24/rect_light_blue.xml | 6 - app/src/main/res/drawable-v24/rect_red.xml | 6 - app/src/main/res/drawable-v24/splash.xml | 15 - .../main/res/drawable/default_game_icon.png | Bin 0 -> 16143 bytes app/src/main/res/drawable/ic_add_24dp.xml | 5 - app/src/main/res/drawable/ic_search_24dp.xml | 9 - app/src/main/res/drawable/ic_settings.xml | 9 - app/src/main/res/drawable/no_key_icon.xml | 11 + app/src/main/res/drawable/no_url_icon.xml | 15 + app/src/main/res/drawable/splash_gradient.xml | 7 - .../main/res/font/red_hat_display_bold.ttf | Bin 0 -> 36436 bytes app/src/main/res/layout/activity_main.xml | 31 -- app/src/main/res/layout/activity_splash.xml | 19 - app/src/main/res/layout/appbar.xml | 18 - app/src/main/res/layout/main_fragment.xml | 39 -- .../main/res/layout/recycler_item_grid.xml | 116 ------ .../main/res/layout/recycler_item_list.xml | 105 ------ app/src/main/res/layout/settings_fragment.xml | 21 -- app/src/main/res/menu/main.xml | 17 - 24 files changed, 429 insertions(+), 436 deletions(-) create mode 100644 app/src/main/java/com/illusionware/npsbrowser/viewmodels/PackageListData.kt delete mode 100644 app/src/main/res/drawable-v24/rect_light_blue.xml delete mode 100644 app/src/main/res/drawable-v24/rect_red.xml delete mode 100644 app/src/main/res/drawable-v24/splash.xml create mode 100644 app/src/main/res/drawable/default_game_icon.png delete mode 100644 app/src/main/res/drawable/ic_add_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_search_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/drawable/no_key_icon.xml create mode 100644 app/src/main/res/drawable/no_url_icon.xml delete mode 100644 app/src/main/res/drawable/splash_gradient.xml create mode 100644 app/src/main/res/font/red_hat_display_bold.ttf delete mode 100644 app/src/main/res/layout/activity_main.xml delete mode 100644 app/src/main/res/layout/activity_splash.xml delete mode 100644 app/src/main/res/layout/appbar.xml delete mode 100644 app/src/main/res/layout/main_fragment.xml delete mode 100644 app/src/main/res/layout/recycler_item_grid.xml delete mode 100644 app/src/main/res/layout/recycler_item_list.xml delete mode 100644 app/src/main/res/layout/settings_fragment.xml delete mode 100644 app/src/main/res/menu/main.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ac22ae4..cea2e01 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -100,7 +100,7 @@ dependencies { // Compose extras library for controlling system ui and etc. implementation("com.google.accompanist:accompanist-systemuicontroller:0.31.2-alpha") - implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.8.0") + implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.1") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") @@ -110,4 +110,6 @@ dependencies { debugImplementation("androidx.compose.ui:ui-test-manifest") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.navigation:navigation-compose:2.6.0") + implementation("io.coil-kt:coil:2.4.0") + implementation("io.coil-kt:coil-compose:2.4.0") } diff --git a/app/src/main/java/com/illusionware/npsbrowser/Preferences.kt b/app/src/main/java/com/illusionware/npsbrowser/Preferences.kt index 1d6107e..1dc03b3 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/Preferences.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/Preferences.kt @@ -8,6 +8,7 @@ import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.intPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.preferencesDataStore +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map enum class ConsoleType { @@ -24,6 +25,11 @@ enum class DataType { THEMES, } +enum class Layout { + LIST, + GRID, +} + class Preferences(private val context: Context) { companion object { private val Context.dataStore by preferencesDataStore("settings") @@ -53,7 +59,7 @@ class Preferences(private val context: Context) { } val layout = context.dataStore.data.map{ prefs -> - prefs[DATA_LAYOUT] ?: 0 + prefs[DATA_LAYOUT] ?: Layout.LIST.ordinal } val seenOnboarding = context.dataStore.data.map{ prefs -> @@ -180,7 +186,20 @@ class Preferences(private val context: Context) { } } } + } + suspend fun getAvailableTsvs(): List> { + val list = mutableListOf>() + if (psvGames.first().isNotEmpty()) list.add(Pair(ConsoleType.PSVITA, DataType.GAMES)) + if (psvDLC.first().isNotEmpty()) list.add(Pair(ConsoleType.PSVITA, DataType.DLC)) + if (psvThemes.first().isNotEmpty()) list.add(Pair(ConsoleType.PSVITA, DataType.THEMES)) + if (ps3Games.first().isNotEmpty()) list.add(Pair(ConsoleType.PS3, DataType.GAMES)) + if (ps3DLC.first().isNotEmpty()) list.add(Pair(ConsoleType.PS3, DataType.DLC)) + if (pspGames.first().isNotEmpty()) list.add(Pair(ConsoleType.PSP, DataType.GAMES)) + if (pspDLC.first().isNotEmpty()) list.add(Pair(ConsoleType.PSP, DataType.DLC)) + if (psxGames.first().isNotEmpty()) list.add(Pair(ConsoleType.PSX, DataType.GAMES)) + if (psmGames.first().isNotEmpty()) list.add(Pair(ConsoleType.PSM, DataType.GAMES)) + return list } suspend fun setHMACKey(key: String) { @@ -224,4 +243,4 @@ class Preferences(private val context: Context) { prefs[PKG2ZIP_AUTO_DECRYPT] = autoDecrypt } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt index 82bcf97..e4762da 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt @@ -3,17 +3,29 @@ package com.illusionware.npsbrowser.activities import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.clickable import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Close @@ -23,6 +35,9 @@ import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -40,18 +55,32 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.ColorPainter +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.Layout +import androidx.compose.ui.layout.layoutId import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import coil.compose.AsyncImage +import coil.request.ImageRequest +import com.illusionware.npsbrowser.ConsoleType +import com.illusionware.npsbrowser.Layout import com.illusionware.npsbrowser.Preferences import com.illusionware.npsbrowser.R import com.illusionware.npsbrowser.ui.theme.ColorAccent @@ -60,12 +89,18 @@ import com.illusionware.npsbrowser.ui.theme.Typography import com.illusionware.npsbrowser.ui.components.* import com.illusionware.npsbrowser.ui.pages.SettingsScreen import com.illusionware.npsbrowser.ui.pages.OnBoarding +import com.illusionware.npsbrowser.ui.theme.ColorOnPrimaryLight import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking +val PlaceholderColor = Color(0x1F888888) +val redHatDisplayFamily = FontFamily( + Font(R.font.red_hat_display_bold, FontWeight.Bold), +) + class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -128,13 +163,18 @@ fun Router() { @OptIn(ExperimentalMaterial3Api::class) @Composable -@Preview() +@Preview fun HomePage(navigateToSettings: () -> Unit = {}) { + val prefs = Preferences(LocalContext.current) var isSearchOpen by rememberSaveable { mutableStateOf(false)} var searchQuery by rememberSaveable { mutableStateOf("")} val searchBar = remember { FocusRequester() } var layoutDialogOpen by remember { mutableStateOf(false) } + val tsvs by remember { runBlocking { mutableStateOf(prefs.getAvailableTsvs()) }} + var selectedBarItem by remember { mutableStateOf(ConsoleType.PSVITA) } +// val noTsvs by remember { mutableStateOf(false) } + Scaffold( topBar = { TopAppBar( @@ -213,12 +253,27 @@ fun HomePage(navigateToSettings: () -> Unit = {}) { } } ) + }, + bottomBar = { + if (tsvs.isNotEmpty()) { + NavBar( + selectedTab = selectedBarItem, + onTabSelected = { selectedBarItem = it }, + ) + } } ) { padding -> Column(Modifier.padding(padding)) { - NoTsvs(navigateToSettings = navigateToSettings) + if (tsvs.isEmpty()) { + NoTsvs(navigateToSettings = navigateToSettings) + } else { +// when (selectedBarItem) { +// ConsoleType.PSVITA -> VitaPage(searchQuery = searchQuery) +// ConsoleType.PS3 -> PS3Page(searchQuery = searchQuery) +// } + PackageList(selectedBarItem) + } } - // TODO: only show NoTsvs when there are no Tsvs loaded if (layoutDialogOpen) { LayoutDialog(onDismiss = { layoutDialogOpen = false }) @@ -226,6 +281,52 @@ fun HomePage(navigateToSettings: () -> Unit = {}) { } } +@Composable +fun NavBar(selectedTab: ConsoleType, onTabSelected: (ConsoleType) -> Unit) { + NavigationBar { + NavigationBarItem( + selected = selectedTab == ConsoleType.PSVITA, + icon = { Icon(painterResource(id = R.drawable.vita_icon), contentDescription = "PS Vita") }, + label = { Text(text = "PS Vita") }, + onClick = { + onTabSelected(ConsoleType.PSVITA) + } + ) + NavigationBarItem( + selected = selectedTab == ConsoleType.PS3, + icon = { Icon(painterResource(id = R.drawable.ps3_icon), contentDescription = "PS3") }, + label = { Text(text = "PS3") }, + onClick = { + onTabSelected(ConsoleType.PS3) + } + ) + NavigationBarItem( + selected = selectedTab == ConsoleType.PSP, + icon = { Icon(painterResource(id = R.drawable.psp_icon), contentDescription = "PSP") }, + label = { Text(text = "PSP") }, + onClick = { + onTabSelected(ConsoleType.PSP) + } + ) + NavigationBarItem( + selected = selectedTab == ConsoleType.PSX, + icon = { Icon(painterResource(id = R.drawable.psx_icon), contentDescription = "PSX") }, + label = { Text(text = "PSX") }, + onClick = { + onTabSelected(ConsoleType.PSX) + } + ) + NavigationBarItem( + selected = selectedTab == ConsoleType.PSM, + icon = { Icon(painterResource(id = R.drawable.psm_icon), contentDescription = "PSM") }, + label = { Text(text = "PSM") }, + onClick = { + onTabSelected(ConsoleType.PSM) + } + ) + } +} + @Composable @Preview fun NoTsvs(padding: PaddingValues = PaddingValues(0.dp), navigateToSettings: () -> Unit = {}) { @@ -267,9 +368,229 @@ fun NoTsvs(padding: PaddingValues = PaddingValues(0.dp), navigateToSettings: () } @Composable -fun LayoutDialog(onDismiss: () -> Unit = {}) { +@Preview +fun PackageList(type: ConsoleType = ConsoleType.PSVITA) { val prefs = Preferences(LocalContext.current) - val layout = prefs.layout.collectAsState(initial = "") + val layout = prefs.layout.collectAsState(initial = Layout.LIST.ordinal).value +// val thing = when (type) { +// ConsoleType.PSVITA -> { +// var list = ArrayList() +// list.add(Package("test")) +// val gs = prefs.psvGames.collectAsState(initial = emptyList()) +// list.add(gs.value) +// } +// ConsoleType.PS3 -> { +// prefs.ps3Games.collectAsState(initial = emptyList()) +// } +// ConsoleType.PSP -> { +// prefs.pspGames.collectAsState(initial = emptyList()) +// } +// ConsoleType.PSX -> { +// prefs.psxGames.collectAsState(initial = emptyList()) +// } +// ConsoleType.PSM -> { +// prefs.psmGames.collectAsState(initial = emptyList()) +// } +// } + + Column(Modifier.fillMaxSize()) { + if (layout == Layout.LIST.ordinal) { + LazyColumn { + items(15) { + PackageListItem() + } + } + } else { + LazyVerticalGrid( + columns = GridCells.Adaptive(140.dp), + contentPadding = PaddingValues(8.dp), + ) { + items(15) { + PackageGridItem() + } + } + } + } +} + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun PackageListItem() { + Box( + Modifier + .fillMaxWidth() + .clickable { /* TODO: */ }) { + Row( + modifier = Modifier + .padding(horizontal = 16.dp, vertical = 8.dp) + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier.weight(1.0f) + ) { + AsyncImage( + model = ImageRequest.Builder(LocalContext.current) + .data("https://picsum.photos/200") + .crossfade(true) + .error(R.drawable.default_game_icon) + .build(), + placeholder = ColorPainter(PlaceholderColor), + contentDescription = "Package Icon", + modifier = Modifier.size(48.dp), + contentScale = ContentScale.Crop, + ) + Column( + verticalArrangement = Arrangement.spacedBy(2.dp), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = "10 Second Ninja X", + color = MaterialTheme.colorScheme.onBackground, + style = Typography.bodyLarge, + overflow = TextOverflow.Ellipsis, + maxLines = 2, + modifier = Modifier + .width(IntrinsicSize.Min) + .weight(1.0f) + ) + } + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp), + ) { + ProvideTextStyle(value = Typography.bodySmall.copy(color = MaterialTheme.colorScheme.outline)) { + Text(text = "US") + Text(text = "3.69") + Text(text = "223.8MB") + Tag(title = "GAME", small = true) + } + } + } + } + Column { + Icon( + painter = painterResource(id = R.drawable.no_url_icon), + contentDescription = "No PKG URL", + tint = Color(0xFFCB5A5A) + ) + Icon( + painter = painterResource(id = R.drawable.no_key_icon), + contentDescription = "No Zrif Key", + tint = Color(0xFFCB5A5A) + ) + } + } + } +} + +@Composable +fun Tag(title: String, small: Boolean = false) { + Box( + Modifier + .clip(RoundedCornerShape(4.dp)) + .background(Color(0xFFEAF654)) + .layoutId("tag") + .padding(horizontal = if (small) 6.dp else 8.dp, vertical = if (small) 2.dp else 4.dp) + ) { + Text( + text = title.uppercase(), + color = ColorOnPrimaryLight, + style = Typography.bodySmall.copy( + fontWeight = FontWeight.Bold, + fontFamily = redHatDisplayFamily, + fontSize = if (small) 8.sp else 12.sp + ) + ) + } +} + +@Composable +@Preview +fun PackageGridItem() { + Box( + Modifier + .fillMaxWidth() + .clip(RoundedCornerShape(8.dp)) + .clickable { /* TODO: */ } + ) { + Column( + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalAlignment = Alignment.Start, + modifier = Modifier.padding(8.dp) + ) { + Layout( + content = { + AsyncImage( + model = ImageRequest.Builder(LocalContext.current) + .data("https://picsum.photos/200") + .crossfade(true) + .error(R.drawable.default_game_icon) + .build(), + placeholder = ColorPainter(PlaceholderColor), + contentDescription = "Package Icon", + modifier = Modifier + .aspectRatio(1f / 1f) + .fillMaxWidth(), + contentScale = ContentScale.Crop, + ) + Tag(title = "GAME") + } + ) { measurables, constraints -> + val imagePlaceable = measurables[0].measure(constraints) + val tagPlaceable = measurables.first { it.layoutId == "tag" }.measure(constraints) + + layout(imagePlaceable.width, imagePlaceable.height) { + imagePlaceable.placeRelative(0, 0) + tagPlaceable.placeRelative( + x = imagePlaceable.width - tagPlaceable.width - 16, + y = 16, + ) + } + } + Text( + text = "10 Second Ninja X", + color = MaterialTheme.colorScheme.onBackground, + style = Typography.bodyLarge, + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + ProvideTextStyle(value = Typography.bodySmall.copy(color = MaterialTheme.colorScheme.outline)) { + Text(text = "US") + Text(text = "3.69") + Text(text = "223.8MB") + } + } + Row { + Icon( + painter = painterResource(id = R.drawable.no_url_icon), + contentDescription = "No PKG URL", + tint = Color(0xFFCB5A5A) + ) + Icon( + painter = painterResource(id = R.drawable.no_key_icon), + contentDescription = "No Zrif Key", + tint = Color(0xFFCB5A5A) + ) + } + } + } +} + +@Composable +fun LayoutDialog(onDismiss: () -> Unit) { + val prefs = Preferences(LocalContext.current) + val layout = prefs.layout.collectAsState(initial = Layout.LIST.ordinal).value NPSAlertDialog( onDismiss = onDismiss, @@ -283,13 +604,13 @@ fun LayoutDialog(onDismiss: () -> Unit = {}) { Column { NPSRadioButton( text = "List", - selected = layout.value == 0, - onClick = { CoroutineScope(Dispatchers.IO).launch { prefs.changeLayout(0) } }, + selected = layout == Layout.LIST.ordinal, + onClick = { CoroutineScope(Dispatchers.IO).launch { prefs.changeLayout(Layout.LIST.ordinal) } }, ) NPSRadioButton( text = "Grid", - selected = layout.value == 1, - onClick = { CoroutineScope(Dispatchers.IO).launch { prefs.changeLayout(1) } }, + selected = layout == Layout.GRID.ordinal, + onClick = { CoroutineScope(Dispatchers.IO).launch { prefs.changeLayout(Layout.GRID.ordinal) } }, ) } } diff --git a/app/src/main/java/com/illusionware/npsbrowser/ui/pages/Onboarding.kt b/app/src/main/java/com/illusionware/npsbrowser/ui/pages/Onboarding.kt index 60db7e5..3097b80 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/ui/pages/Onboarding.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/ui/pages/Onboarding.kt @@ -93,7 +93,10 @@ const val PAGE_COUNT = 3 @Composable fun OnBoarding(navigateToHome: () -> Unit = {}, darkTheme: Boolean = false) { val systemUiController = rememberSystemUiController() - val pagerState = rememberPagerState() + val pagerState = rememberPagerState( + initialPage = 0, + initialPageOffsetFraction = 0f + ) val scope = rememberCoroutineScope() val context = LocalContext.current diff --git a/app/src/main/java/com/illusionware/npsbrowser/viewmodels/PackageListData.kt b/app/src/main/java/com/illusionware/npsbrowser/viewmodels/PackageListData.kt new file mode 100644 index 0000000..09885dc --- /dev/null +++ b/app/src/main/java/com/illusionware/npsbrowser/viewmodels/PackageListData.kt @@ -0,0 +1,45 @@ +package com.illusionware.npsbrowser.viewmodels + +import androidx.lifecycle.ViewModel +import com.github.doyaaaaaken.kotlincsv.dsl.context.ExcessFieldsRowBehaviour +import com.github.doyaaaaaken.kotlincsv.dsl.context.InsufficientFieldsRowBehaviour +import com.github.doyaaaaaken.kotlincsv.dsl.csvReader +import com.illusionware.npsbrowser.ConsoleType +import com.illusionware.npsbrowser.DataType +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +data class Package( + val id: String, + val title: String, + val region: String, + val minFW: String, + val pkgUrl: String, + val pkgSize: Int, + val consoleType: ConsoleType, + val dataType: DataType, +) + +data class PackageListUiState( + val packages: List = emptyList(), + val error: String = "", +) + +class PackageListViewModel(): ViewModel() { + // TODO: actually properly think about and implement this + private val _uiState = MutableStateFlow(PackageListUiState()) + val uiState: StateFlow = _uiState.asStateFlow() + private val tsvReader = csvReader { + charset = "ISO_8859_1" + quoteChar = '"' + delimiter = '\t' + excessFieldsRowBehaviour = ExcessFieldsRowBehaviour.TRIM + insufficientFieldsRowBehaviour = InsufficientFieldsRowBehaviour.EMPTY_STRING + } + + fun loadPackagesFromTsv() { + val file = "psv_games.tsv" + val rows = tsvReader.readAll(file) + } +} diff --git a/app/src/main/res/drawable-v24/rect_light_blue.xml b/app/src/main/res/drawable-v24/rect_light_blue.xml deleted file mode 100644 index 0da9c7a..0000000 --- a/app/src/main/res/drawable-v24/rect_light_blue.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/rect_red.xml b/app/src/main/res/drawable-v24/rect_red.xml deleted file mode 100644 index 48eeebb..0000000 --- a/app/src/main/res/drawable-v24/rect_red.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/splash.xml b/app/src/main/res/drawable-v24/splash.xml deleted file mode 100644 index dfc6f06..0000000 --- a/app/src/main/res/drawable-v24/splash.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/default_game_icon.png b/app/src/main/res/drawable/default_game_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3eeddafab96e074c9f88e6d0e2f5d027fcca27 GIT binary patch literal 16143 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 TSazl$@ZUup1MN~x`_TUZ$<;24 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_add_24dp.xml b/app/src/main/res/drawable/ic_add_24dp.xml deleted file mode 100644 index addf0af..0000000 --- a/app/src/main/res/drawable/ic_add_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_search_24dp.xml b/app/src/main/res/drawable/ic_search_24dp.xml deleted file mode 100644 index da931c2..0000000 --- a/app/src/main/res/drawable/ic_search_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml deleted file mode 100644 index 24a5623..0000000 --- a/app/src/main/res/drawable/ic_settings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/no_key_icon.xml b/app/src/main/res/drawable/no_key_icon.xml new file mode 100644 index 0000000..af9a1d0 --- /dev/null +++ b/app/src/main/res/drawable/no_key_icon.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/no_url_icon.xml b/app/src/main/res/drawable/no_url_icon.xml new file mode 100644 index 0000000..04d5a1d --- /dev/null +++ b/app/src/main/res/drawable/no_url_icon.xml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/splash_gradient.xml b/app/src/main/res/drawable/splash_gradient.xml deleted file mode 100644 index fe46205..0000000 --- a/app/src/main/res/drawable/splash_gradient.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/font/red_hat_display_bold.ttf b/app/src/main/res/font/red_hat_display_bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..59ee9d1d31699eaa1c77838d2463e2786858a684 GIT binary patch literal 36436 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 URtN4ypV;aG{2y^h#5_X&AH-V13IG5A literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index b4a2717..0000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml deleted file mode 100644 index 8cbc6fc..0000000 --- a/app/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/appbar.xml b/app/src/main/res/layout/appbar.xml deleted file mode 100644 index 9b90a44..0000000 --- a/app/src/main/res/layout/appbar.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/main_fragment.xml b/app/src/main/res/layout/main_fragment.xml deleted file mode 100644 index 7e4205a..0000000 --- a/app/src/main/res/layout/main_fragment.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/layout/recycler_item_grid.xml b/app/src/main/res/layout/recycler_item_grid.xml deleted file mode 100644 index 2a197d1..0000000 --- a/app/src/main/res/layout/recycler_item_grid.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/recycler_item_list.xml b/app/src/main/res/layout/recycler_item_list.xml deleted file mode 100644 index f5f07a7..0000000 --- a/app/src/main/res/layout/recycler_item_list.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/settings_fragment.xml b/app/src/main/res/layout/settings_fragment.xml deleted file mode 100644 index 9ef6864..0000000 --- a/app/src/main/res/layout/settings_fragment.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml deleted file mode 100644 index e8e9167..0000000 --- a/app/src/main/res/menu/main.xml +++ /dev/null @@ -1,17 +0,0 @@ - -

- - - \ No newline at end of file