package com.example.newcanaryproject
import android.content.Context
import android.content.Context.AUDIO_SERVICE
import android.media.AudioManager
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.newcanaryproject.ui.theme.NewCanaryProjectTheme
import com.example.newcanaryproject.ui.theme.greenColor
import com.github.skydoves.colorpicker.compose.*
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
NewCanaryProjectTheme {
// on below line we are specifying background color for our application
Surface(
// on below line we are specifying modifier and color for our app
modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background
) {
// on the below line we are specifying
// the theme as the scaffold.
Scaffold(
// in scaffold we are specifying the top bar.
topBar = {
// inside top bar we are specifying background color.
TopAppBar(backgroundColor = greenColor,
// along with that we are specifying
// title for our top bar.
title = {
// in the top bar we are specifying tile as a text
Text(
// on below line we are specifying
// text to display in top app bar.
text = "GFG",
// on below line we are specifying
// modifier to fill max width.
modifier = Modifier.fillMaxWidth(),
// on below line we are specifying
// text alignment.
textAlign = TextAlign.Center,
// on below line we are specifying
// color for our text.
color = Color.White
)
})
}) {
// on below line we are calling color picker method
volumeController(LocalContext.current)
}
}
}
}
}
}
@Composable
fun volumeController(context: Context) {
// Declare an audio manager
val audioManager = context.getSystemService(AUDIO_SERVICE) as AudioManager
// on below line we are creating variables for
// volume level, max volume, volume percent.
val volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
val maxVolumeLevel = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
val volumePercent = (volumeLevel.toFloat() / maxVolumeLevel * 100).toInt()
// on below line we are creating a variable
// for current volume and initializing it.
val currentVolume = remember {
mutableStateOf(volumePercent)
}
// on below line we are creating a column,
Column(
// on below line we are adding a modifier to it,
modifier = Modifier
.fillMaxSize()
// on below line we are adding a padding.
.padding(all = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
// on below line we are displaying a
// text as volume controller.
Text(
text = "Volume Controller",
// on below line we are adding font weight
fontWeight = FontWeight.Bold,
// on below line we are adding font size.
fontSize = 20.sp,
// on below line we are adding text color.
color = greenColor,
)
// on below line we are creating text to display volume level.
Text(
text = "Volume Level : " + currentVolume.value,
// on below line we are adding font weight.
fontWeight = FontWeight.Bold,
// on below line we are adding font size and color.
fontSize = 20.sp,
color = greenColor
)
// on below line we are creating a row for buttons.
Row(modifier = Modifier.padding(4.dp)) {
// below line is use to create a button.
Button(
// below line is use to add onclick
// parameter for our button onclick
onClick = {
// on below line we are increasing our volume.
audioManager.adjustVolume(
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_PLAY_SOUND
)
// on below line we are getting our current volume level.
val volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
val maxVolumeLevel = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
val volumePercent = (volumeLevel.toFloat() / maxVolumeLevel * 100).toInt()
currentVolume.value = volumePercent
},
// in below line we are using modifier
// which is use to add padding to our button
modifier = Modifier.padding(all = Dp(10F)),
// below line is use to set or
// button as enable or disable.
enabled = true,
// below line is use to
// add border to our button.
border = BorderStroke(width = 1.dp, brush = SolidColor(Color.Blue)),
// below line is use to add shape for our button.
shape = MaterialTheme.shapes.medium,
// on below line we are updating color for our button.
colors = ButtonDefaults.buttonColors(backgroundColor = greenColor),
) {
// on below line we are adding text for our button.
Text(text = "+")
}
// on below line we are adding a spacer.
Spacer(modifier = Modifier.width(20.dp))
// below line is use to create a button.
Button(
// below line is use to add onclick
// parameter for our button onclick
onClick = {
// on below line we are decreasing volume
audioManager.adjustVolume(
AudioManager.ADJUST_LOWER,
AudioManager.FLAG_PLAY_SOUND
)
// on below line we are getting our current volume level.
val volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
val maxVolumeLevel = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
val volumePercent = (volumeLevel.toFloat() / maxVolumeLevel * 100).toInt()
currentVolume.value = volumePercent
},
// on below line we are updating color for our button.
colors = ButtonDefaults.buttonColors(backgroundColor = greenColor),
// in below line we are using modifier
// which is use to add padding to our button
modifier = Modifier.padding(all = Dp(10F)),
// below line is use to set or
// button as enable or disable.
enabled = true,
// below line is use to
// add border to our button.
border = BorderStroke(width = 1.dp, brush = SolidColor(Color.Blue)),
// below line is use to add shape for our button.
shape = MaterialTheme.shapes.medium,
) {
// on below line we are creating a text.
Text(text = "-")
}
}
}
}