package ru.vendetti.bitcoin_summarizer import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Menu import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.DrawerValue import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MediumTopAppBar import androidx.compose.material3.ModalNavigationDrawer import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberDrawerState import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.ClipboardManager import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.ExperimentalTextApi import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.TextLinkStyles import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.withLink import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.fragment.app.Fragment import kotlinx.coroutines.launch import ru.vendetti.bitcoin_summarizer.ui.theme.BitcoinSummarizerTheme import ru.vendetti.bitcoin_summarizer.ui.theme.Flame class AboutFragment: Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return inflater.inflate(R.layout.fragment_compose_view, container, false).apply { findViewById(R.id.compose_view).setContent { BitcoinSummarizerTheme { AboutComposable() } } } } } @OptIn(ExperimentalMaterial3Api::class, ExperimentalTextApi::class) @Composable @Preview fun AboutComposable() { val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val scope = rememberCoroutineScope() ModalNavigationDrawer( drawerState = drawerState, drawerContent = { MyHamburgerModal(ScreenKey.About) } ) { Scaffold( modifier = Modifier, topBar = { CenterAlignedTopAppBar( colors = TopAppBarDefaults.topAppBarColors( containerColor = MaterialTheme.colorScheme.primary, scrolledContainerColor = MaterialTheme.colorScheme.primary, titleContentColor = MaterialTheme.colorScheme.onPrimary, navigationIconContentColor = MaterialTheme.colorScheme.onPrimary, actionIconContentColor = MaterialTheme.colorScheme.onPrimary, ), title = { Text( "About", maxLines = 1, overflow = TextOverflow.Ellipsis ) }, navigationIcon = { IconButton(onClick = { scope.launch { drawerState.apply { if(isClosed) open() else close() } } }) { Icon( imageVector = Icons.Filled.Menu, contentDescription = "Navigation hamburger menu" ) } }, scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) ) }, ) { innerPadding -> Box( modifier = Modifier .background(Color.Transparent) .padding(innerPadding) .verticalScroll(rememberScrollState()) ) { Column( modifier = Modifier .padding(16.dp, 16.dp, 16.dp, 36.dp) ) { Icon( painter = painterResource(id = R.mipmap.ic_launcher_foreground), contentDescription = null, modifier = Modifier .width(160.dp) .height(160.dp) .align(Alignment.CenterHorizontally) ) Spacer(modifier = Modifier.height(16.dp)) Text( "Репозиторий проекта", modifier = Modifier .align(alignment = Alignment.CenterHorizontally), fontSize = 24.sp ) Spacer(modifier = Modifier.height(16.dp)) val repositoryLinkString = buildAnnotatedString { withLink(LinkAnnotation.Url( url = "https://git.vendetti.ru/andy/bitcoin-summarizer/tags", styles = TextLinkStyles(style = SpanStyle(color = Flame)) ) ) { append("Ссылка на репозиторий") } } Text(text = repositoryLinkString) Spacer(modifier = Modifier.height(16.dp)) HorizontalDivider() Spacer(modifier = Modifier.height(16.dp)) Text( "Авторы", modifier = Modifier .align(alignment = Alignment.CenterHorizontally), fontSize = 24.sp ) Spacer(modifier = Modifier.height(16.dp)) Text("Студенты гр. 9ИСП-42-21, ГБПОУ УКРТБ") Spacer(modifier = Modifier.height(16.dp)) Text("Васильев Андрей Дмитриевич - Back-end: CI/CD (Continuous Integration), Api interactions, Database interactions") Spacer(modifier = Modifier.height(8.dp)) SelectionContainer { Text("andy@vendetti.ru", color = Flame) } Spacer(modifier = Modifier.height(16.dp)) Text("Зубарев Артемий Альбертович - Front-end: Charts, App navigation (Cicerone)") Spacer(modifier = Modifier.height(8.dp)) SelectionContainer { Text("artemiy.work32@gmail.com", color = Flame) } Spacer(modifier = Modifier.height(16.dp)) HorizontalDivider() Spacer(modifier = Modifier.height(16.dp)) Text( "Используемый API", modifier = Modifier .align(alignment = Alignment.CenterHorizontally), fontSize = 24.sp ) val apiLinkString = buildAnnotatedString { withLink(LinkAnnotation.Url( url = "https://alternative.me/crypto/api/", styles = TextLinkStyles(style = SpanStyle(color = Flame)) ) ) { append("Ссылка на API") } } Text(text = apiLinkString) } } } } }