88 lines
4.0 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ru.vendetti.bitcoin_summarizer
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
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)
enableEdgeToEdge()
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?.data?.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)
}
}