From 9293ee3d1a19b107f5f79d65828db714c8a1a0e7 Mon Sep 17 00:00:00 2001 From: LeightonGinty Date: Sun, 17 Nov 2024 02:02:17 +0000 Subject: Add purchase booze --- .../main/java/com/example/alcagotchi/AlcoGotchi.kt | 14 ++ app/src/main/java/com/example/alcagotchi/Shop.kt | 118 --------------- .../java/com/example/alcagotchi/ShopActivity.kt | 167 +++++++++++++++++++++ 3 files changed, 181 insertions(+), 118 deletions(-) delete mode 100644 app/src/main/java/com/example/alcagotchi/Shop.kt create mode 100644 app/src/main/java/com/example/alcagotchi/ShopActivity.kt (limited to 'app/src') diff --git a/app/src/main/java/com/example/alcagotchi/AlcoGotchi.kt b/app/src/main/java/com/example/alcagotchi/AlcoGotchi.kt index 0b7dbff..349eac9 100644 --- a/app/src/main/java/com/example/alcagotchi/AlcoGotchi.kt +++ b/app/src/main/java/com/example/alcagotchi/AlcoGotchi.kt @@ -92,4 +92,18 @@ class AlcoGotchi private constructor() { handleStateResponse(client.newCall(request).execute()) } } + suspend fun postBuy(choice: String) { + val body = JSONObject() + body.put("item", choice) + + val request = Request.Builder() + .url(buildUrl("buy")) + .post(body.toString().toRequestBody(jsonMediaType)) + .build() + + client.newCall(request).enqueue(basicCallback) + return withContext(Dispatchers.IO) { + handleStateResponse(client.newCall(request).execute()) + } + } } diff --git a/app/src/main/java/com/example/alcagotchi/Shop.kt b/app/src/main/java/com/example/alcagotchi/Shop.kt deleted file mode 100644 index 7e66d0c..0000000 --- a/app/src/main/java/com/example/alcagotchi/Shop.kt +++ /dev/null @@ -1,118 +0,0 @@ -package com.example.alcagotchi - -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Button -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -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.Color -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.example.alcagotchi.ui.theme.AlcaGotchiTheme -import com.example.alcagotchi.ui.theme.AlcaGotchiTheme - -class ShopActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { - AlcaGotchiTheme { - Surface( - modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background - ) { - ShopGreeting( - stringResource(R.string.welcome_to_casino), - ) - } - } - } - } -} - -@Composable -fun ShopOptions(modifier: Modifier = Modifier) { - Column( - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - text = "Your balance: many coin", - fontSize = 36.sp, - color = Color(0xFF00FF00), - modifier = Modifier - .padding(top = 16.dp) - .padding(end = 16.dp) - ) - Button(onClick = { /*TODO*/ }) { - Text("Buy beer") - } - Button(onClick = { /*TODO*/ }) { - Text("Buy wine") - } - Button(onClick = { /*TODO*/ }) { - Text("Buy lemonade") - } - Button(onClick = { /*TODO*/ }) { - Text("Buy whisky") - } - } -} - -@Composable -fun ShopGreeting(message: String, modifier: Modifier = Modifier) { - // Create a box to overlap image and texts - Box(modifier) { - Image( - painter = painterResource(id = R.drawable.shop), - contentDescription = null, - contentScale = ContentScale.Crop, - alpha = 1F, - modifier = Modifier.fillMaxSize() - - - ) - ShopOptions() - } -} - -@Preview(showBackground = false) -@Composable -private fun ShopPreview() { - AlcaGotchiTheme { - ShopGreeting( - stringResource(R.string.welcome_to_casino), - ) - } -} diff --git a/app/src/main/java/com/example/alcagotchi/ShopActivity.kt b/app/src/main/java/com/example/alcagotchi/ShopActivity.kt new file mode 100644 index 0000000..81a79a1 --- /dev/null +++ b/app/src/main/java/com/example/alcagotchi/ShopActivity.kt @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.alcagotchi + +import android.app.Activity +import android.app.AlertDialog +import android.content.Context +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.alcagotchi.ui.theme.AlcaGotchiTheme +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking + +class ShopActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + AlcaGotchiTheme { + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background + ) { + ShopGreeting( + stringResource(R.string.welcome_to_casino), + ) + } + } + } + } +} + +class ShopViewModel : ViewModel() { + val coin = mutableIntStateOf(0) + + fun buy(choice: String, context: Context) { + val alcoGotchi = AlcoGotchi.getInstance() + viewModelScope.launch { + runBlocking { + try { + alcoGotchi.postBuy(choice) + } catch (e: Exception) { + val alertDialog = AlertDialog.Builder(context) + + alertDialog.apply { + setTitle("no") + setMessage(e.toString()) + + }.create().show() + } + + coin.intValue = alcoGotchi.coins + } + } + } +} + + +@Composable +fun ShopOptions(viewModel: ShopViewModel, modifier: Modifier = Modifier) { + val coin by viewModel.coin + + Column( + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + val context = LocalContext.current as Activity + + Text( + text = "Your coins:", + fontSize = 36.sp, + color = Color(0xFF00FF00), + modifier = Modifier + .padding(top = 16.dp) + .padding(end = 16.dp) + ) + Text( + text = coin.toString(), + fontSize = 36.sp, + color = Color(0xFF00FF00), + modifier = Modifier + .padding(top = 16.dp) + .padding(end = 16.dp) + ) + Button(onClick = { viewModel.buy("beer", context) }) { + Text("Buy beer") + } + Button(onClick = { viewModel.buy("wine", context) }) { + Text("Buy wine") + } + Button(onClick = { viewModel.buy("whisky", context) }) { + Text("Buy whisky") + } + Button(onClick = { viewModel.buy("lemonade", context) }) { + Text("Buy lemonade") + } + Button(onClick = { context.finish() }) { + Text("Exit Shop") + } + } +} + +@Composable +fun ShopGreeting(message: String, modifier: Modifier = Modifier) { + // Create a box to overlap image and texts + Box(modifier) { + Image( + painter = painterResource(id = R.drawable.shop), + contentDescription = null, + contentScale = ContentScale.Crop, + alpha = 1F, + modifier = Modifier.fillMaxSize() + + + ) + ShopOptions(viewModel = ShopViewModel()) + } +} + +@Preview(showBackground = false) +@Composable +private fun ShopPreview() { + AlcaGotchiTheme { + ShopGreeting( + stringResource(R.string.welcome_to_casino), + ) + } +} + -- cgit v1.2.3-70-g09d2