86 lines
3.9 KiB
Kotlin
86 lines
3.9 KiB
Kotlin
package ru.vendetti.bitcoin_summarizer
|
||
|
||
import android.os.Bundle
|
||
import androidx.activity.ComponentActivity
|
||
import androidx.activity.compose.setContent
|
||
import androidx.compose.foundation.layout.Column
|
||
import androidx.compose.foundation.layout.Spacer
|
||
import androidx.compose.foundation.layout.fillMaxSize
|
||
import androidx.compose.foundation.layout.height
|
||
import androidx.compose.foundation.layout.padding
|
||
import androidx.compose.foundation.rememberScrollState
|
||
import androidx.compose.foundation.verticalScroll
|
||
import androidx.compose.material3.MaterialTheme
|
||
import androidx.compose.material3.Text
|
||
import androidx.compose.runtime.Composable
|
||
import androidx.compose.runtime.LaunchedEffect
|
||
import androidx.compose.runtime.getValue
|
||
import androidx.compose.runtime.mutableStateOf
|
||
import androidx.compose.runtime.remember
|
||
import androidx.compose.runtime.setValue
|
||
import androidx.compose.ui.Modifier
|
||
import androidx.compose.ui.unit.dp
|
||
import ru.vendetti.bitcoin_summarizer.ui.theme.BitcoinSummarizerTheme
|
||
|
||
class MainActivity : ComponentActivity() {
|
||
override fun onCreate(savedInstanceState: Bundle?) {
|
||
super.onCreate(savedInstanceState)
|
||
setContent {
|
||
BitcoinSummarizerTheme {
|
||
CryptoScreen()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
@Composable
|
||
fun CryptoScreen() {
|
||
// Создаем репозиторий для работы с API
|
||
val cryptoRepository = remember { CryptoRepository(RetrofitClient.apiService) }
|
||
|
||
// Состояния для хранения результатов запросов
|
||
var bitcoinTicker by remember { mutableStateOf("Загрузка Bitcoin Ticker...") }
|
||
var globalData by remember { mutableStateOf("Загрузка глобальных данных...") }
|
||
var fearGreedData by remember { mutableStateOf("Загрузка индекса страха и жадности...") }
|
||
|
||
// Запускаем корутину для выполнения сетевых запросов
|
||
LaunchedEffect(Unit) {
|
||
// Запрос Bitcoin Ticker
|
||
val tickerResponse = cryptoRepository.fetchBitcoinTicker()
|
||
bitcoinTicker = tickerResponse?.joinToString(separator = "\n") { data ->
|
||
"Название: ${data.name}, Цена: ${data.priceUsd}, Обновлено: ${data.lastUpdated}"
|
||
} ?: "Ошибка загрузки Bitcoin Ticker"
|
||
|
||
// Запрос глобальных данных
|
||
val globalResponse = cryptoRepository.fetchGlobalData()
|
||
globalData = globalResponse?.let { data ->
|
||
"Активных криптовалют: ${data.activeCryptocurrencies}\nРыночная капитализация: ${data.totalMarketCapUsd}\n24h Объем: ${data.total24hVolumeUsd}"
|
||
} ?: "Ошибка загрузки глобальных данных"
|
||
|
||
// Запрос индекса страха и жадности
|
||
val fearResponse = cryptoRepository.fetchFearAndGreedData(30)
|
||
fearGreedData = fearResponse?.dataList?.joinToString(separator = "\n") { data ->
|
||
"Время: ${data.timestamp}, Значение: ${data.value}, Классификация: ${data.valueClassification}"
|
||
} ?: "Ошибка загрузки данных страха и жадности"
|
||
}
|
||
|
||
// Отображаем результаты в виде простой страницы
|
||
Column(
|
||
modifier = Modifier
|
||
.fillMaxSize()
|
||
.padding(16.dp)
|
||
.verticalScroll(rememberScrollState())
|
||
) {
|
||
Text(text = "Bitcoin Ticker Data", style = MaterialTheme.typography.bodyMedium)
|
||
Text(text = bitcoinTicker)
|
||
Spacer(modifier = Modifier.height(16.dp))
|
||
|
||
Text(text = "Global Data", style = MaterialTheme.typography.bodyMedium)
|
||
Text(text = globalData)
|
||
Spacer(modifier = Modifier.height(16.dp))
|
||
|
||
Text(text = "Fear & Greed Index", style = MaterialTheme.typography.bodyMedium)
|
||
Text(text = fearGreedData)
|
||
}
|
||
}
|