Merge pull request 'Dependencies updated and example screen added' (#13) from dev into main
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Gitea Android Builder / Build (push) Successful in 2m20s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Gitea Android Builder / Build (push) Successful in 2m20s
				
			Reviewed-on: #13
This commit is contained in:
		| @@ -4,13 +4,23 @@ import android.os.Bundle | |||||||
| import androidx.activity.ComponentActivity | import androidx.activity.ComponentActivity | ||||||
| import androidx.activity.compose.setContent | import androidx.activity.compose.setContent | ||||||
| import androidx.activity.enableEdgeToEdge | 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.fillMaxSize | ||||||
|  | import androidx.compose.foundation.layout.height | ||||||
| import androidx.compose.foundation.layout.padding | import androidx.compose.foundation.layout.padding | ||||||
| import androidx.compose.material3.Scaffold | import androidx.compose.foundation.rememberScrollState | ||||||
|  | import androidx.compose.foundation.verticalScroll | ||||||
|  | import androidx.compose.material3.MaterialTheme | ||||||
| import androidx.compose.material3.Text | import androidx.compose.material3.Text | ||||||
| import androidx.compose.runtime.Composable | 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.Modifier | ||||||
| import androidx.compose.ui.tooling.preview.Preview | import androidx.compose.ui.unit.dp | ||||||
| import ru.vendetti.bitcoin_summarizer.ui.theme.BitcoinSummarizerTheme | import ru.vendetti.bitcoin_summarizer.ui.theme.BitcoinSummarizerTheme | ||||||
|  |  | ||||||
| class MainActivity : ComponentActivity() { | class MainActivity : ComponentActivity() { | ||||||
| @@ -19,29 +29,59 @@ class MainActivity : ComponentActivity() { | |||||||
|         enableEdgeToEdge() |         enableEdgeToEdge() | ||||||
|         setContent { |         setContent { | ||||||
|             BitcoinSummarizerTheme { |             BitcoinSummarizerTheme { | ||||||
|                 Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> |                 CryptoScreen() | ||||||
|                     Greeting( |  | ||||||
|                         name = "Android", |  | ||||||
|                         modifier = Modifier.padding(innerPadding) |  | ||||||
|                     ) |  | ||||||
|                 } |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @Composable | @Composable | ||||||
| fun Greeting(name: String, modifier: Modifier = Modifier) { | fun CryptoScreen() { | ||||||
|     Text( |     // Создаем репозиторий для работы с API | ||||||
|         text = "Hello $name!", |     val cryptoRepository = remember { CryptoRepository(RetrofitClient.apiService) } | ||||||
|         modifier = modifier |  | ||||||
|     ) |     // Состояния для хранения результатов запросов | ||||||
|  |     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}" | ||||||
|  |         } ?: "Ошибка загрузки данных страха и жадности" | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @Preview(showBackground = true) |     // Отображаем результаты в виде простой страницы | ||||||
| @Composable |     Column( | ||||||
| fun GreetingPreview() { |         modifier = Modifier | ||||||
|     BitcoinSummarizerTheme { |             .fillMaxSize() | ||||||
|         Greeting("Android") |             .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) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -1,16 +1,16 @@ | |||||||
| [versions] | [versions] | ||||||
| agp = "8.8.1" | agp = "8.8.2" | ||||||
| converterGson = "2.9.0" | converterGson = "2.9.0" | ||||||
| kotlin = "2.0.0" | kotlin = "2.0.0" | ||||||
| coreKtx = "1.10.1" | coreKtx = "1.15.0" | ||||||
| junit = "4.13.2" | junit = "4.13.2" | ||||||
| junitVersion = "1.1.5" | junitVersion = "1.2.1" | ||||||
| espressoCore = "3.5.1" | espressoCore = "3.6.1" | ||||||
| kotlinxCoroutinesAndroid = "1.7.1" | kotlinxCoroutinesAndroid = "1.7.3" | ||||||
| kotlinxCoroutinesCore = "1.7.1" | kotlinxCoroutinesCore = "1.7.3" | ||||||
| lifecycleRuntimeKtx = "2.6.1" | lifecycleRuntimeKtx = "2.8.7" | ||||||
| activityCompose = "1.8.0" | activityCompose = "1.10.1" | ||||||
| composeBom = "2024.04.01" | composeBom = "2025.02.00" | ||||||
| retrofit = "2.9.0" | retrofit = "2.9.0" | ||||||
|  |  | ||||||
| [libraries] | [libraries] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user