From 4e2b9eb5412b538c9d340a2c323d9b377290b97c Mon Sep 17 00:00:00 2001 From: Nacho Date: Sun, 5 Jan 2025 18:13:41 +0100 Subject: [PATCH] Fixed flickering and banner overlapping --- .../vbhelper/components/CharacterEntry.kt | 31 +++++-------------- .../nacabaro/vbhelper/components/TopBanner.kt | 3 ++ .../nacabaro/vbhelper/screens/DexScreen.kt | 17 +++++----- .../nacabaro/vbhelper/screens/DimScreen.kt | 22 +++---------- 4 files changed, 23 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt b/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt index e644947..44a21b7 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt @@ -1,24 +1,19 @@ package com.github.nacabaro.vbhelper.components import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Card import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @Composable fun CharacterEntry( - name: ImageBitmap, icon: ImageBitmap, modifier: Modifier = Modifier, onClick: () -> Unit = { } @@ -28,25 +23,15 @@ fun CharacterEntry( onClick = onClick, modifier = modifier .padding(8.dp) + .size(96.dp) ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, + Image( + bitmap = icon, + contentDescription = "Icon", + filterQuality = FilterQuality.None, modifier = Modifier + .padding(8.dp) .fillMaxSize() - ) { - Image( - bitmap = icon, - contentDescription = "Icon", - modifier = Modifier - .padding(8.dp) - .size(64.dp) - ) - Image( - bitmap = name, - contentDescription = "Name", - modifier = Modifier - .padding(8.dp) - ) - } + ) } } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt b/app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt index 03f1efd..55c4fa0 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/components/TopBanner.kt @@ -1,10 +1,12 @@ package com.github.nacabaro.vbhelper.components +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -24,6 +26,7 @@ fun TopBanner( ) { Box( // Use Box to overlay elements modifier = modifier + .background(MaterialTheme.colorScheme.background) .fillMaxWidth() .padding(16.dp) ) { diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt index 522ba13..d9cb68a 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt @@ -1,7 +1,6 @@ package com.github.nacabaro.vbhelper.screens import android.graphics.Bitmap -import android.util.Log import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -16,18 +15,17 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController -import com.github.nacabaro.vbhelper.R import com.github.nacabaro.vbhelper.components.TopBanner import com.github.nacabaro.vbhelper.di.VBHelper import com.github.nacabaro.vbhelper.domain.Dim @@ -44,12 +42,12 @@ fun DexScreen( val application = LocalContext.current.applicationContext as VBHelper val dexRepository = DexRepository(application.container.db) - val dimList = remember { mutableStateListOf() } + val dimList = remember { mutableStateOf>(emptyList()) } LaunchedEffect(dexRepository) { coroutineScope.launch { - dimList.clear() - dimList.addAll(dexRepository.getAllDims()) + val newDimList = dexRepository.getAllDims() + dimList.value = newDimList // Replace the entire list atomically } } @@ -67,7 +65,7 @@ fun DexScreen( modifier = Modifier .padding(top = contentPadding.calculateTopPadding()) ) { - items(dimList) { + items(dimList.value) { val bitmap = remember (it.logo) { Bitmap.createBitmap(it.logoWidth, it.logoHeight, Bitmap.Config.RGB_565).apply { copyPixelsFromBuffer(ByteBuffer.wrap(it.logo)) @@ -75,8 +73,6 @@ fun DexScreen( } val imageBitmap = remember(bitmap) { bitmap.asImageBitmap() } - Log.d("DexScreen", "dimList: ${it.id}") - DexDiMEntry( name = it.name, logo = imageBitmap, @@ -118,6 +114,7 @@ fun DexDiMEntry( Image ( bitmap = logo, contentDescription = name, + filterQuality = FilterQuality.None, modifier = Modifier .padding(8.dp) .size(64.dp) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/DimScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/DimScreen.kt index 096247a..abfd00f 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/DimScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/DimScreen.kt @@ -1,25 +1,22 @@ package com.github.nacabaro.vbhelper.screens import android.graphics.Bitmap -import android.util.Log import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavController import com.github.nacabaro.vbhelper.components.CharacterEntry -import com.github.nacabaro.vbhelper.components.StorageEntry import com.github.nacabaro.vbhelper.components.TopBanner import com.github.nacabaro.vbhelper.domain.Character import com.github.nacabaro.vbhelper.di.VBHelper -import com.github.nacabaro.vbhelper.navigation.BottomNavItem import com.github.nacabaro.vbhelper.source.DexRepository import kotlinx.coroutines.launch import java.nio.ByteBuffer @@ -33,14 +30,12 @@ fun DiMScreen( val application = LocalContext.current.applicationContext as VBHelper val dexRepository = DexRepository(application.container.db) - val characterList = remember { mutableStateListOf() } - - Log.d("dimId", dimId.toString()) + val characterList = remember { mutableStateOf>(emptyList()) } LaunchedEffect(dexRepository) { coroutineScope.launch { - characterList.clear() - characterList.addAll(dexRepository.getCharactersByDimId(dimId)) + val newCharacterList = dexRepository.getCharactersByDimId(dimId) + characterList.value = newCharacterList } } @@ -58,21 +53,14 @@ fun DiMScreen( columns = GridCells.Fixed(3), contentPadding = contentPadding ) { - items(characterList) { character -> - val bitmapName = remember (character.name) { - Bitmap.createBitmap(character.nameWidth, character.nameHeight, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(character.name)) - } - } + items(characterList.value) { character -> val bitmapCharacter = remember (character.sprite1) { Bitmap.createBitmap(character.spritesWidth, character.spritesHeight, Bitmap.Config.RGB_565).apply { copyPixelsFromBuffer(ByteBuffer.wrap(character.sprite1)) } } - val imageBitmapName = remember(bitmapName) { bitmapName.asImageBitmap() } val imageBitmapCharacter = remember(bitmapCharacter) { bitmapCharacter.asImageBitmap() } CharacterEntry( - name = imageBitmapName, icon = imageBitmapCharacter, onClick = { } )