diff --git a/app/build.gradle b/app/build.gradle index 59e681f..9391b43 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,14 +5,14 @@ plugins { android { namespace 'com.mitchelbv.thuis_c' - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "com.mitchelbv.thuis_c" minSdk 30 - targetSdk 33 - versionCode 1 - versionName "1.0" + targetSdk 34 + versionCode 3 + versionName "1.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1cc0729..05217f9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,7 +4,6 @@ - { + val tempMatches = mutableListOf() + val token = feyenoordService.getToken() + val feyenoordApiResponse = token.token?.let { feyenoordService.getEvents(it) } + feyenoordApiResponse?.TabItems?.filter { it.CategoryId == 2 }?.forEach { + for (item in it.Items) { + + tempMatches.add( + Match( + homeTeam = item.NameHomeTeam!!, + awayTeam = item.NameAwayTeam!!, + date = item.EventStartDateTime?.let { it1 -> + toLocalFormattedDateTime( + it1, + "dd MMMM" + ) + }.toString(), + beginTime = item.EventStartDateTime?.let { it1 -> + toLocalFormattedDateTime( + it1, + "HH:mm" + ) + }.toString(), + endTime = item.EventEndDateTime?.let { it1 -> + toLocalFormattedDateTime( + it1, + "HH:mm" + ) + }.toString(), + awayImage = item.AwayImageUrl!!, + homeImage = item.HomeImageUrl!! + ) + ) + } + } + return tempMatches + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordView.kt b/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordView.kt index ef157d1..2b600a7 100644 --- a/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordView.kt +++ b/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordView.kt @@ -1,6 +1,5 @@ package com.mitchelbv.thuis_c.ui.feyenoord -import android.widget.Spinner import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -12,6 +11,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -26,21 +26,23 @@ fun FeyenoordScreen( navHostController: NavHostController ) { val feyenoordUiState by feyenoordViewModel.uiState.collectAsState() - if (feyenoordUiState.loading) { - Column( - modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - CircularProgressIndicator() - } - } Column( - modifier = Modifier - .verticalScroll(rememberScrollState()) -// .padding(16.dp) + modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally ) { - MatchList(matches = feyenoordUiState.matches, Modifier) + if (feyenoordUiState.matches.isEmpty()) { + CircularProgressIndicator() + } else { + MatchList(matches = feyenoordUiState.matches, Modifier) + } +// if (feyenoordUiState.loading) { +// CircularProgressIndicator() +// } else if (feyenoordUiState.error) { +// Text(feyenoordUiState.errorMessage) +// } else { +// MatchList(matches = feyenoordUiState.matches, Modifier) +// } } } @@ -54,7 +56,7 @@ fun MatchList(matches: List, modifier: Modifier) { } @Composable -fun TeamNameWithLogo(team_name: String, team_logo_url: String, modifier: Modifier) { +fun TeamNameWithLogo(teamName: String, teamLogoUrl: String, modifier: Modifier) { Column( modifier = modifier .size(128.dp) @@ -63,17 +65,18 @@ fun TeamNameWithLogo(team_name: String, team_logo_url: String, modifier: Modifie Alignment.CenterHorizontally ) { AsyncImage( - model = team_logo_url, - contentDescription = team_name, + model = teamLogoUrl, + contentDescription = teamName, placeholder = painterResource(id = R.drawable.placeholder), contentScale = ContentScale.Fit, modifier = modifier.size(64.dp) ) Text( - text = team_name, + text = teamName, + textAlign = TextAlign.Center, modifier = modifier .fillMaxWidth() - .wrapContentWidth(Alignment.CenterHorizontally) +// .wrapContentWidth(Alignment.CenterHorizontally) ) } @@ -90,8 +93,8 @@ fun MatchCard(match: Match, modifier: Modifier) { .height(128.dp) ) { TeamNameWithLogo( - team_name = match.homeTeam, - team_logo_url = match.homeImage, + teamName = match.homeTeam, + teamLogoUrl = match.homeImage, modifier = modifier ) Column( @@ -106,8 +109,8 @@ fun MatchCard(match: Match, modifier: Modifier) { } } TeamNameWithLogo( - team_name = match.awayTeam, - team_logo_url = match.awayImage, + teamName = match.awayTeam, + teamLogoUrl = match.awayImage, modifier = modifier ) diff --git a/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordViewModel.kt b/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordViewModel.kt index a656495..81dd0cf 100644 --- a/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordViewModel.kt +++ b/app/src/main/java/com/mitchelbv/thuis_c/ui/feyenoord/FeyenoordViewModel.kt @@ -1,8 +1,11 @@ package com.mitchelbv.thuis_c.ui.feyenoord +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.mitchelbv.thuis_c.network.feyenoord.FeyenoordRetrofitHelper +import com.mitchelbv.thuis_c.network.feyenoord.FeyenoordService +import com.mitchelbv.thuis_c.repository.FeyenoordRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -14,58 +17,21 @@ import java.util.TimeZone data class FeyenoordUiState( val matches: List = listOf(), - val loading: Boolean = true + val loading: Boolean = true, ) class FeyenoordViewModel : ViewModel() { private val _uiState = MutableStateFlow(FeyenoordUiState()) val uiState: StateFlow = _uiState.asStateFlow() + private val feyenoordRepository: FeyenoordRepository = FeyenoordRepository() init { fillMatches() } - private fun toLocalFormattedDateTime(date: String, outputFormat: String): String { - val apiUtcDate = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault()) - apiUtcDate.timeZone = TimeZone.getTimeZone("UTC") - val parsedDate = apiUtcDate.parse(date) - - val localDateFormat = SimpleDateFormat(outputFormat, Locale.getDefault()) - localDateFormat.timeZone = TimeZone.getDefault() - return localDateFormat.format(parsedDate); - } - private fun fillMatches() { - val tempMatches = mutableListOf() viewModelScope.launch(Dispatchers.IO) { - - val tokenResponse = FeyenoordRetrofitHelper.feyenoord.getToken() - val apiResponse = tokenResponse.token?.let { - FeyenoordRetrofitHelper.feyenoord.getEvents( - it - ) - } - if (apiResponse != null) { - for (tabItem in apiResponse.TabItems) { - val test = arrayOf(tabItem).filter { it.CategoryId == 2 } - test.forEach { - for (item in it.Items) { - tempMatches.add( - Match( - homeTeam = item.NameHomeTeam!!, - awayTeam = item.NameAwayTeam!!, - date = item.EventStartDateTime?.let { it1 -> toLocalFormattedDateTime(it1, "dd MMMM") }.toString(), - beginTime = item.EventStartDateTime?.let { it1 -> toLocalFormattedDateTime(it1, "HH:mm")}.toString(), - endTime = item.EventEndDateTime?.let { it1 -> toLocalFormattedDateTime(it1, "HH:mm")}.toString(), - awayImage = item.AwayImageUrl!!, - homeImage = item.HomeImageUrl!! - ) - ) - } - } - } - } - _uiState.value = FeyenoordUiState(matches = tempMatches, loading = false) + _uiState.value = FeyenoordUiState(matches = feyenoordRepository.getMatches(), loading = false) } } } \ No newline at end of file diff --git a/app/src/main/java/com/mitchelbv/thuis_c/ui/home/Home.kt b/app/src/main/java/com/mitchelbv/thuis_c/ui/home/Home.kt index 5eb850e..612a538 100644 --- a/app/src/main/java/com/mitchelbv/thuis_c/ui/home/Home.kt +++ b/app/src/main/java/com/mitchelbv/thuis_c/ui/home/Home.kt @@ -24,8 +24,8 @@ fun HomeScreen(navController: NavHostController) { // Row(modifier = Modifier.height(100.dp).width(180.dp)) { // HomeCard(cardId = R.drawable.storefront, cardText = R.string.home_card_cards, routeTo = Screen.Cards.route, navController = navController) // HomeCard(cardId = R.drawable.feyenoord, cardText = R.string.home_card_freezer, routeTo = Screen.Freezer.route, navController = navController) - HomeButton(buttonText = R.string.home_card_cards, routeTo = Screen.Cards.route, navController = navController) - HomeButton(buttonText = R.string.home_card_freezer, routeTo = Screen.Freezer.route, navController = navController) +// HomeButton(buttonText = R.string.home_card_cards, routeTo = Screen.Cards.route, navController = navController) +// HomeButton(buttonText = R.string.home_card_freezer, routeTo = Screen.Freezer.route, navController = navController) // } } } diff --git a/build.gradle b/build.gradle index e919c0c..0d3b968 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } }// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.6.0' apply false - id 'com.android.library' version '8.6.0' apply false + id 'com.android.application' version '8.7.3' apply false + id 'com.android.library' version '8.7.3' apply false id 'org.jetbrains.kotlin.android' version '1.7.20' apply false } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 00c1a66..2000017 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Oct 31 14:59:45 CET 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME