Загрузка данных


package com.example.telegramdrawer

import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            App()
        }
    }
}

@Composable
fun App() {
    var isDarkTheme by remember { mutableStateOf(false) }

    MaterialTheme(
        colors = if (isDarkTheme) darkColors() else lightColors()
    ) {
        TelegramDrawer(isDarkTheme) {
            isDarkTheme = !isDarkTheme
        }
    }
}

@Composable
fun TelegramDrawer(
    isDarkTheme: Boolean,
    onThemeToggle: () -> Unit
) {
    val scaffoldState = rememberScaffoldState()
    val scope = rememberCoroutineScope()

    var selectedItem by remember { mutableStateOf("Главная") }
    var backgroundColor by remember { mutableStateOf(Color.White) }

    val context = LocalContext.current

    Scaffold(
        scaffoldState = scaffoldState,
        topBar = {
            TopAppBar(
                title = { Text("Telegram") },
                navigationIcon = {
                    IconButton(onClick = {
                        scope.launch {
                            scaffoldState.drawerState.open()
                        }
                    }) {
                        Icon(Icons.Default.Menu, contentDescription = "Menu")
                    }
                },
                actions = {
                    IconButton(onClick = onThemeToggle) {
                        Icon(
                            imageVector = if (isDarkTheme)
                                Icons.Default.WbSunny
                            else
                                Icons.Default.DarkMode,
                            contentDescription = "Theme"
                        )
                    }
                }
            )
        },
        drawerContent = {

            var expanded by remember { mutableStateOf(true) }

            Column(modifier = Modifier.fillMaxWidth()) {

                // Профиль
                Column(
                    modifier = Modifier
                        .fillMaxWidth()
                        .clickable {
                            selectedItem = "Профиль пользователя"
                        }
                        .padding(16.dp)
                ) {
                    Text("Екатерина")
                    Text("+7 (914) 599-83-69")

                    IconButton(onClick = { expanded = !expanded }) {
                        Icon(
                            imageVector = if (expanded)
                                Icons.Default.KeyboardArrowUp
                            else
                                Icons.Default.KeyboardArrowDown,
                            contentDescription = "Expand"
                        )
                    }
                }

                if (expanded) {
                    Text("Аккаунт 1", modifier = Modifier.padding(16.dp))
                    Text("Аккаунт 2", modifier = Modifier.padding(16.dp))
                    Text("Добавить аккаунт", modifier = Modifier.padding(16.dp))
                }

                Divider()

                DrawerMenuItem("Мой профиль", Icons.Default.Person) {
                    selectedItem = "Мой профиль"
                    backgroundColor = Color(0xFFE3F2FD)

                    Toast.makeText(context, "Мой профиль", Toast.LENGTH_SHORT).show()

                    scope.launch { scaffoldState.drawerState.close() }
                }

                DrawerMenuItem("Настройки", Icons.Default.Settings) {
                    selectedItem = "Настройки"
                    backgroundColor = Color(0xFFFFF3E0)

                    Toast.makeText(context, "Настройки", Toast.LENGTH_LONG).show()

                    scope.launch { scaffoldState.drawerState.close() }
                }

                DrawerMenuItem("Возможности Telegram", Icons.Default.Info) {
                    selectedItem = "Возможности Telegram"
                    backgroundColor = Color(0xFFE8F5E9)

                    scope.launch { scaffoldState.drawerState.close() }
                }
            }
        }
    ) { padding ->

        Box(
            modifier = Modifier
                .fillMaxSize()
                .padding(padding)
                .background(backgroundColor),
            contentAlignment = androidx.compose.ui.Alignment.Center
        ) {
            Text(text = selectedItem, style = MaterialTheme.typography.h5)
        }
    }
}

@Composable
fun DrawerMenuItem(
    text: String,
    icon: androidx.compose.ui.graphics.vector.ImageVector,
    onClick: () -> Unit
) {
    Row(
        modifier = Modifier
            .fillMaxWidth()
            .clickable { onClick() }
            .padding(16.dp)
    ) {
        Icon(icon, contentDescription = text)
        Spacer(modifier = Modifier.width(16.dp))
        Text(text)
    }
}