package
com.example.newcanaryproject
import
android.app.Activity
import
android.content.Context
import
android.content.Intent
import
android.graphics.Typeface
import
android.os.Bundle
import
android.speech.RecognizerIntent
import
android.speech.SpeechRecognizer
import
android.view.ViewGroup
import
android.widget.LinearLayout
import
android.widget.Toast
import
androidx.activity.ComponentActivity
import
androidx.activity.compose.setContent
import
androidx.annotation.Dimension.DP
import
androidx.compose.animation.Crossfade
import
androidx.compose.foundation.layout.*
import
androidx.compose.material.*
import
androidx.compose.material.icons.Icons
import
androidx.compose.material.icons.filled.Mic
import
androidx.compose.runtime.*
import
androidx.compose.ui.Alignment
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.graphics.Color
import
androidx.compose.ui.graphics.toArgb
import
androidx.compose.ui.platform.LocalContext
import
androidx.compose.ui.res.dimensionResource
import
androidx.compose.ui.text.TextStyle
import
androidx.compose.ui.text.font.FontFamily
import
androidx.compose.ui.text.font.FontStyle
import
androidx.compose.ui.text.style.TextAlign
import
androidx.compose.ui.unit.*
import
androidx.compose.ui.viewinterop.AndroidView
import
com.example.newcanaryproject.ui.theme.*
import
com.github.mikephil.charting.charts.PieChart
import
com.github.mikephil.charting.components.Description
import
com.github.mikephil.charting.components.Legend
import
com.github.mikephil.charting.data.PieData
import
com.github.mikephil.charting.data.PieDataSet
import
com.github.mikephil.charting.data.PieEntry
import
org.intellij.lang.annotations.JdkConstants.HorizontalAlignment
import
java.util.*
class
MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContent {
NewCanaryProjectTheme {
Surface(color = MaterialTheme.colors.primary) {
Scaffold(
topBar = {
TopAppBar(
title = {
Text(
text =
"Pie Chart Example"
,
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center
)
})
}) {
PieChart()
}
}
}
}
}
@Composable
fun PieChart() {
Column(modifier = Modifier.fillMaxSize()) {
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text =
"Web Browser Usage Share"
,
style = TextStyle.Default,
fontFamily = FontFamily.Default,
fontStyle = FontStyle.Normal,
fontSize =
20
.sp
)
Column(
modifier = Modifier
.padding(
18
.dp)
.size(
320
.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Crossfade(targetState = getPieChartData) { pieChartData ->
AndroidView(factory = { context ->
PieChart(context).apply {
layoutParams = LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
)
this
.description.isEnabled =
false
this
.isDrawHoleEnabled =
false
this
.legend.isEnabled =
true
this
.legend.textSize = 14F
this
.legend.horizontalAlignment =
Legend.LegendHorizontalAlignment.CENTER
this
.setEntryLabelColor(resources.getColor(R.color.white))
}
},
modifier = Modifier
.wrapContentSize()
.padding(
5
.dp), update = {
updatePieChartWithData(it, pieChartData)
})
}
}
}
}
}
fun updatePieChartWithData(
chart: PieChart,
data: List<PieChartData>
) {
val entries = ArrayList<PieEntry>()
for
(i in data.indices) {
val item = data[i]
entries.add(PieEntry(item.value ?:
0
.toFloat(), item.browserName ?:
""
))
}
val ds = PieDataSet(entries,
""
)
ds.colors = arrayListOf(
greenColor.toArgb(),
blueColor.toArgb(),
redColor.toArgb(),
yellowColor.toArgb(),
)
ds.yValuePosition = PieDataSet.ValuePosition.INSIDE_SLICE
ds.xValuePosition = PieDataSet.ValuePosition.INSIDE_SLICE
ds.sliceSpace = 2f
ds.valueTextColor = resources.getColor(R.color.white)
ds.valueTextSize = 18f
ds.valueTypeface = Typeface.DEFAULT_BOLD
val d = PieData(ds)
chart.data = d
chart.invalidate()
}
}