diff --git a/app/src/main/java/com/bnyro/recorder/enums/ThemeMode.kt b/app/src/main/java/com/bnyro/recorder/enums/ThemeMode.kt
index 124679d2..89cb0238 100644
--- a/app/src/main/java/com/bnyro/recorder/enums/ThemeMode.kt
+++ b/app/src/main/java/com/bnyro/recorder/enums/ThemeMode.kt
@@ -5,7 +5,9 @@ import com.bnyro.recorder.util.Preferences
enum class ThemeMode {
SYSTEM,
LIGHT,
- DARK;
+ DARK,
+ AMOLED,
+ ;
companion object {
fun getCurrent() = valueOf(Preferences.getString(Preferences.themeModeKey, SYSTEM.name))
diff --git a/app/src/main/java/com/bnyro/recorder/ui/Destination.kt b/app/src/main/java/com/bnyro/recorder/ui/Destination.kt
new file mode 100755
index 00000000..d4408063
--- /dev/null
+++ b/app/src/main/java/com/bnyro/recorder/ui/Destination.kt
@@ -0,0 +1,7 @@
+package com.bnyro.recorder.ui
+
+sealed class Destination(val route: String) {
+ object Home : Destination("home")
+ object Settings : Destination("settings")
+ object RecordingPlayer : Destination("player")
+}
diff --git a/app/src/main/java/com/bnyro/recorder/ui/Destinations.kt b/app/src/main/java/com/bnyro/recorder/ui/Destinations.kt
deleted file mode 100755
index 9bb8a308..00000000
--- a/app/src/main/java/com/bnyro/recorder/ui/Destinations.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.bnyro.recorder.ui
-
-interface Destination {
- val route: String
-}
-
-object Home : Destination {
- override val route = "home"
-}
-
-object Settings : Destination {
- override val route = "settings"
-}
-
-object RecordingPlayer : Destination {
- override val route = "player"
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/bnyro/recorder/ui/MainActivity.kt b/app/src/main/java/com/bnyro/recorder/ui/MainActivity.kt
index 3fd10127..7b641ed5 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/MainActivity.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/MainActivity.kt
@@ -3,13 +3,12 @@ package com.bnyro.recorder.ui
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
+import androidx.activity.viewModels
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
-import androidx.lifecycle.ViewModelProvider
-import androidx.lifecycle.get
import androidx.navigation.compose.rememberNavController
import com.bnyro.recorder.enums.RecorderType
import com.bnyro.recorder.enums.ThemeMode
@@ -20,7 +19,7 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- val themeModel: ThemeModel = ViewModelProvider(this).get()
+ val themeModel: ThemeModel by viewModels()
val initialRecorder = when (intent?.getStringExtra("action")) {
"audio" -> RecorderType.AUDIO
@@ -30,21 +29,23 @@ class MainActivity : ComponentActivity() {
setContent {
RecordYouTheme(
- when (val mode = themeModel.themeMode) {
+ when (themeModel.themeMode) {
ThemeMode.SYSTEM -> isSystemInDarkTheme()
- else -> mode == ThemeMode.DARK
- }
+ ThemeMode.DARK -> true
+ else -> false
+ },
+ amoledDark = themeModel.themeMode == ThemeMode.AMOLED,
) {
val navController = rememberNavController()
Surface(
modifier = Modifier
.fillMaxSize(),
- color = MaterialTheme.colorScheme.background
+ color = MaterialTheme.colorScheme.background,
) {
AppNavHost(
navController = navController,
modifier = Modifier,
- initialRecorder = initialRecorder
+ initialRecorder = initialRecorder,
)
}
}
diff --git a/app/src/main/java/com/bnyro/recorder/ui/NavHost.kt b/app/src/main/java/com/bnyro/recorder/ui/NavHost.kt
index 2d5b5684..d64328f2 100755
--- a/app/src/main/java/com/bnyro/recorder/ui/NavHost.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/NavHost.kt
@@ -5,29 +5,33 @@ import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
-import com.bnyro.recorder.enums.Recorder
+import com.bnyro.recorder.enums.RecorderType
import com.bnyro.recorder.ui.screens.HomeScreen
import com.bnyro.recorder.ui.screens.PlayerScreen
import com.bnyro.recorder.ui.screens.SettingsScreen
@Composable
fun AppNavHost(
- navController: NavHostController, modifier: Modifier = Modifier, initialRecorder: Recorder
+ navController: NavHostController,
+ modifier: Modifier = Modifier,
+ initialRecorder: RecorderType,
) {
NavHost(
- navController = navController, startDestination = Home.route, modifier = modifier
+ navController = navController,
+ startDestination = Destination.Home.route,
+ modifier = modifier,
) {
- composable(route = Home.route) {
+ composable(route = Destination.Home.route) {
HomeScreen(initialRecorder, onNavigate = { destination ->
navController.navigateTo(destination.route)
})
}
- composable(route = Settings.route) {
+ composable(route = Destination.Settings.route) {
SettingsScreen()
}
- composable(route = RecordingPlayer.route) {
+ composable(route = Destination.RecordingPlayer.route) {
PlayerScreen(showVideoModeInitially = false)
}
}
@@ -36,4 +40,4 @@ fun AppNavHost(
fun NavHostController.navigateTo(route: String) = this.navigate(route) {
launchSingleTop = true
restoreState = true
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/bnyro/recorder/ui/common/BlobIconBox.kt b/app/src/main/java/com/bnyro/recorder/ui/common/BlobIconBox.kt
index f7c04226..4c08d548 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/common/BlobIconBox.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/common/BlobIconBox.kt
@@ -3,8 +3,7 @@ package com.bnyro.recorder.ui.common
import androidx.annotation.DrawableRes
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
@@ -21,21 +20,20 @@ fun BlobIconBox(@DrawableRes icon: Int) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
- .fillMaxWidth()
- .height(350.dp)
+ .fillMaxSize()
.alpha(0.3f)
) {
Image(
modifier = Modifier.size(350.dp),
painter = painterResource(id = R.drawable.blob),
contentDescription = null,
- colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.tertiaryContainer)
+ colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.secondaryContainer)
)
Image(
modifier = Modifier.size(250.dp),
painter = painterResource(id = icon),
contentDescription = null,
- colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onTertiaryContainer)
+ colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSecondaryContainer)
)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/bnyro/recorder/ui/models/ThemeModel.kt b/app/src/main/java/com/bnyro/recorder/ui/models/ThemeModel.kt
index 2974ee43..ba222103 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/models/ThemeModel.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/models/ThemeModel.kt
@@ -8,6 +8,6 @@ import com.bnyro.recorder.enums.ThemeMode
class ThemeModel : ViewModel() {
var themeMode by mutableStateOf(
- ThemeMode.getCurrent()
+ ThemeMode.getCurrent(),
)
}
diff --git a/app/src/main/java/com/bnyro/recorder/ui/screens/HomeScreen.kt b/app/src/main/java/com/bnyro/recorder/ui/screens/HomeScreen.kt
index c8fed4ed..c675b566 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/screens/HomeScreen.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/screens/HomeScreen.kt
@@ -25,11 +25,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.viewmodel.compose.viewModel
import com.bnyro.recorder.R
-import com.bnyro.recorder.enums.Recorder
import com.bnyro.recorder.enums.RecorderState
+import com.bnyro.recorder.enums.RecorderType
import com.bnyro.recorder.ui.Destination
-import com.bnyro.recorder.ui.RecordingPlayer
-import com.bnyro.recorder.ui.Settings
import com.bnyro.recorder.ui.common.ClickableIcon
import com.bnyro.recorder.ui.models.RecorderModel
import kotlinx.coroutines.launch
@@ -37,9 +35,9 @@ import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@Composable
fun HomeScreen(
- initialRecorder: Recorder,
+ initialRecorder: RecorderType,
onNavigate: (Destination) -> Unit,
- recorderModel: RecorderModel = viewModel()
+ recorderModel: RecorderModel = viewModel(),
) {
val pagerState = rememberPagerState { 2 }
val scope = rememberCoroutineScope()
@@ -47,56 +45,55 @@ fun HomeScreen(
TopAppBar(title = { Text(stringResource(R.string.app_name)) }, actions = {
ClickableIcon(
imageVector = Icons.Default.Settings,
- contentDescription = stringResource(R.string.settings)
+ contentDescription = stringResource(R.string.settings),
) {
- onNavigate(Settings)
+ onNavigate(Destination.Settings)
}
ClickableIcon(
imageVector = Icons.Default.VideoLibrary,
- contentDescription = stringResource(R.string.recordings)
+ contentDescription = stringResource(R.string.recordings),
) {
- onNavigate(RecordingPlayer)
+ onNavigate(Destination.RecordingPlayer)
}
})
}, bottomBar = {
Column {
AnimatedVisibility(recorderModel.recorderState == RecorderState.IDLE) {
NavigationBar {
- NavigationBarItem(icon = {
- Icon(
- imageVector = Icons.Default.Mic,
- contentDescription = stringResource(
- id = R.string.record_sound
+ NavigationBarItem(
+ icon = {
+ Icon(
+ imageVector = Icons.Default.Mic,
+ contentDescription = stringResource(
+ id = R.string.record_sound,
+ ),
)
- )
- },
+ },
label = { Text(stringResource(R.string.record_sound)) },
selected = (pagerState.currentPage == 0),
onClick = {
scope.launch {
- pagerState.animateScrollToPage(
- 0
- )
+ pagerState.animateScrollToPage(0)
}
- })
- NavigationBarItem(icon = {
- Icon(
- imageVector = Icons.Default.Videocam,
- contentDescription = stringResource(
- id = R.string.record_screen
+ },
+ )
+ NavigationBarItem(
+ icon = {
+ Icon(
+ imageVector = Icons.Default.Videocam,
+ contentDescription = stringResource(
+ id = R.string.record_screen,
+ ),
)
- )
- },
+ },
label = { Text(stringResource(R.string.record_screen)) },
selected = (pagerState.currentPage == 1),
onClick = {
scope.launch {
- pagerState.animateScrollToPage(
- 1
- )
+ pagerState.animateScrollToPage(1)
}
- })
-
+ },
+ )
}
}
}
@@ -104,13 +101,14 @@ fun HomeScreen(
Column(
Modifier
.fillMaxSize()
- .padding(paddingValues)
+ .padding(paddingValues),
) {
HorizontalPager(
- state = pagerState, modifier = Modifier.fillMaxSize()
+ state = pagerState,
+ modifier = Modifier.fillMaxSize(),
) { index ->
RecorderView(initialRecorder = initialRecorder, recordScreenMode = (index == 1))
}
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/bnyro/recorder/ui/screens/PlayerScreen.kt b/app/src/main/java/com/bnyro/recorder/ui/screens/PlayerScreen.kt
index 8d8a15de..f537ba97 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/screens/PlayerScreen.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/screens/PlayerScreen.kt
@@ -14,18 +14,20 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBarDefaults
+import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
-import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.viewmodel.compose.viewModel
import com.bnyro.recorder.R
import com.bnyro.recorder.enums.SortOrder
+import com.bnyro.recorder.obj.RecordingItemData
import com.bnyro.recorder.ui.common.ClickableIcon
-import com.bnyro.recorder.ui.common.FullscreenDialog
import com.bnyro.recorder.ui.components.PlayerView
import com.bnyro.recorder.ui.models.PlayerModel
diff --git a/app/src/main/java/com/bnyro/recorder/ui/screens/RecorderScreen.kt b/app/src/main/java/com/bnyro/recorder/ui/screens/RecorderScreen.kt
index 34ca23f5..0f4a221f 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/screens/RecorderScreen.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/screens/RecorderScreen.kt
@@ -8,7 +8,6 @@ import android.os.Build
import android.text.format.DateUtils
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
-import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.Crossfade
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
@@ -24,12 +23,8 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.ExpandLess
-import androidx.compose.material.icons.filled.ExpandMore
-import androidx.compose.material.icons.filled.Mic
import androidx.compose.material.icons.filled.Pause
import androidx.compose.material.icons.filled.PlayArrow
-import androidx.compose.material.icons.filled.Settings
import androidx.compose.material.icons.filled.Stop
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ElevatedCard
@@ -52,12 +47,11 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.bnyro.recorder.R
-import com.bnyro.recorder.enums.RecorderType
import com.bnyro.recorder.enums.RecorderState
+import com.bnyro.recorder.enums.RecorderType
import com.bnyro.recorder.ui.common.BlobIconBox
import com.bnyro.recorder.ui.common.ClickableIcon
import com.bnyro.recorder.ui.components.AudioVisualizer
-import com.bnyro.recorder.ui.components.SettingsBottomSheet
import com.bnyro.recorder.ui.models.RecorderModel
@Composable
@@ -147,7 +141,7 @@ fun RecorderView(
ElevatedCard(
colors = CardDefaults.elevatedCardColors(
- containerColor = if (isSystemInDarkTheme()) Color(0xffee665b) else Color(
+ containerColor = if (isSystemInDarkTheme()) Color(0xA8EE665B) else Color(
0xffdd6f62
),
contentColor = Color.White
@@ -184,9 +178,15 @@ fun RecorderView(
else -> {
Box(
Modifier
- .size(36.dp)
+ .size(40.dp)
+ .clip(CircleShape)
+ .background(Color(0x9FFFFFFF))
+ )
+ Box(
+ Modifier
+ .size(26.dp)
.clip(CircleShape)
- .background(Color.White)
+ .background(Color(0x9FFFFFFF))
)
}
}
diff --git a/app/src/main/java/com/bnyro/recorder/ui/screens/SettingsScreen.kt b/app/src/main/java/com/bnyro/recorder/ui/screens/SettingsScreen.kt
index faca46ba..7e27cb79 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/screens/SettingsScreen.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/screens/SettingsScreen.kt
@@ -2,6 +2,7 @@ package com.bnyro.recorder.ui.screens
import android.net.Uri
import android.os.Build
+import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -24,6 +25,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
@@ -50,16 +52,15 @@ import com.bnyro.recorder.util.Preferences
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SettingsScreen() {
- val themeModel: ThemeModel = viewModel()
-
+ val themeModel: ThemeModel = viewModel(LocalContext.current as ComponentActivity)
var audioFormat by remember {
mutableStateOf(AudioFormat.getCurrent())
}
var audioChannels by remember {
mutableStateOf(
AudioChannels.fromInt(
- Preferences.prefs.getInt(Preferences.audioChannelsKey, AudioChannels.MONO.value)
- )
+ Preferences.prefs.getInt(Preferences.audioChannelsKey, AudioChannels.MONO.value),
+ ),
)
}
var audioDeviceSource by remember {
@@ -67,14 +68,14 @@ fun SettingsScreen() {
AudioDeviceSource.fromInt(
Preferences.prefs.getInt(
Preferences.audioDeviceSourceKey,
- AudioDeviceSource.DEFAULT.value
- )
- )
+ AudioDeviceSource.DEFAULT.value,
+ ),
+ ),
)
}
var screenAudioSource by remember {
mutableStateOf(
- AudioSource.fromInt(Preferences.prefs.getInt(Preferences.audioSourceKey, 0))
+ AudioSource.fromInt(Preferences.prefs.getInt(Preferences.audioSourceKey, 0)),
)
}
var videoEncoder by remember {
@@ -98,27 +99,28 @@ fun SettingsScreen() {
actions = {
ClickableIcon(
imageVector = Icons.Default.DarkMode,
- contentDescription = stringResource(R.string.theme)
+ contentDescription = stringResource(R.string.theme),
) {
showThemePref = true
}
ClickableIcon(
imageVector = Icons.Default.Info,
- contentDescription = stringResource(R.string.about)
+ contentDescription = stringResource(R.string.about),
) {
showAbout = true
}
- })
+ },
+ )
}) { paddingValues ->
Column(
modifier = Modifier
.padding(paddingValues)
- .padding(horizontal = 16.dp)
+ .padding(horizontal = 16.dp),
) {
Text(
text = stringResource(R.string.directory),
fontWeight = FontWeight.Bold,
- fontSize = 18.sp
+ fontSize = 18.sp,
)
Spacer(modifier = Modifier.height(5.dp))
Button(
@@ -126,7 +128,7 @@ fun SettingsScreen() {
val lastDir = Preferences.prefs.getString(Preferences.targetFolderKey, "")
.takeIf { !it.isNullOrBlank() }
directoryPicker.launch(lastDir?.let { Uri.parse(it) })
- }
+ },
) {
Text(stringResource(R.string.choose_dir))
}
@@ -135,7 +137,7 @@ fun SettingsScreen() {
title = stringResource(R.string.audio_format),
entries = AudioFormat.formats.map { it.name },
values = AudioFormat.formats.map { it.format },
- selections = listOf(audioFormat.format)
+ selections = listOf(audioFormat.format),
) { index, newValue ->
if (newValue) {
audioFormat = AudioFormat.formats[index]
@@ -146,13 +148,13 @@ fun SettingsScreen() {
CustomNumInputPref(
key = Preferences.audioSampleRateKey,
title = stringResource(R.string.sample_rate),
- defValue = 44_100
+ defValue = 44_100,
)
Spacer(modifier = Modifier.width(10.dp))
CustomNumInputPref(
key = Preferences.audioBitrateKey,
title = stringResource(R.string.bitrate),
- defValue = 192_000
+ defValue = 192_000,
)
}
val audioDeviceSourceValues = AudioDeviceSource.values().map { it.value }
@@ -161,16 +163,16 @@ fun SettingsScreen() {
R.string.default_audio,
R.string.microphone,
R.string.camcorder,
- R.string.unprocessed
+ R.string.unprocessed,
).map {
stringResource(it)
},
values = audioDeviceSourceValues,
- selections = listOf(audioDeviceSource.value)
+ selections = listOf(audioDeviceSource.value),
) { index, newValue ->
if (newValue) {
audioDeviceSource = AudioDeviceSource.fromInt(
- audioDeviceSourceValues[index]
+ audioDeviceSourceValues[index],
)
Preferences.edit {
putInt(Preferences.audioDeviceSourceKey, audioDeviceSourceValues[index])
@@ -183,7 +185,7 @@ fun SettingsScreen() {
stringResource(it)
},
values = audioChannelsValues,
- selections = listOf(audioChannels.value)
+ selections = listOf(audioChannels.value),
) { index, newValue ->
if (newValue) {
audioChannels = AudioChannels.fromInt(audioChannelsValues[index])
@@ -200,7 +202,7 @@ fun SettingsScreen() {
stringResource(it)
},
values = audioValues,
- selections = listOf(screenAudioSource.value)
+ selections = listOf(screenAudioSource.value),
) { index, newValue ->
if (newValue) {
screenAudioSource = AudioSource.fromInt(audioValues[index])
@@ -210,7 +212,7 @@ fun SettingsScreen() {
ChipSelector(
entries = VideoFormat.codecs.map { it.name },
values = VideoFormat.codecs.map { it.codec },
- selections = listOf(videoEncoder.codec)
+ selections = listOf(videoEncoder.codec),
) { index, newValue ->
if (newValue) {
videoEncoder = VideoFormat.codecs[index]
@@ -221,14 +223,14 @@ fun SettingsScreen() {
CustomNumInputPref(
key = Preferences.videoBitrateKey,
title = stringResource(R.string.bitrate),
- defValue = 1_200_000
+ defValue = 1_200_000,
)
Spacer(modifier = Modifier.height(10.dp))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
CheckboxPref(
prefKey = Preferences.losslessRecorderKey,
title = stringResource(R.string.lossless_audio),
- summary = stringResource(R.string.lossless_audio_desc)
+ summary = stringResource(R.string.lossless_audio_desc),
)
}
Spacer(modifier = Modifier.height(10.dp))
@@ -236,7 +238,7 @@ fun SettingsScreen() {
CheckboxPref(
prefKey = Preferences.showOverlayAnnotationToolKey,
title = stringResource(R.string.screen_recorder_annotation),
- summary = stringResource(R.string.screen_recorder_annotation_desc)
+ summary = stringResource(R.string.screen_recorder_annotation_desc),
)
}
Spacer(modifier = Modifier.height(10.dp))
@@ -248,12 +250,17 @@ fun SettingsScreen() {
SelectionDialog(
onDismissRequest = { showThemePref = false },
title = stringResource(R.string.theme),
- entries = listOf(R.string.system, R.string.light, R.string.dark).map {
+ entries = listOf(
+ R.string.system,
+ R.string.light,
+ R.string.dark,
+ R.string.amoled_dark,
+ ).map {
stringResource(it)
- }
+ },
) {
themeModel.themeMode = ThemeMode.values()[it]
- Preferences.edit { putString(Preferences.themeModeKey, themeModel.themeMode.name) }
+ Preferences.edit { putString(Preferences.themeModeKey, ThemeMode.values()[it].name) }
}
}
diff --git a/app/src/main/java/com/bnyro/recorder/ui/theme/Theme.kt b/app/src/main/java/com/bnyro/recorder/ui/theme/Theme.kt
index 77649fd5..a67899e5 100644
--- a/app/src/main/java/com/bnyro/recorder/ui/theme/Theme.kt
+++ b/app/src/main/java/com/bnyro/recorder/ui/theme/Theme.kt
@@ -10,6 +10,7 @@ import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
@@ -18,13 +19,13 @@ import androidx.core.view.WindowCompat
private val DarkColorScheme = darkColorScheme(
primary = Purple80,
secondary = PurpleGrey80,
- tertiary = Pink80
+ tertiary = Pink80,
)
private val LightColorScheme = lightColorScheme(
primary = Purple40,
secondary = PurpleGrey40,
- tertiary = Pink40
+ tertiary = Pink40,
/* Other default colors to override
background = Color(0xFFFFFBFE),
@@ -37,18 +38,32 @@ private val LightColorScheme = lightColorScheme(
*/
)
+private val AmoledDarkColorScheme = darkColorScheme(
+ primary = Color(0xFFEE665B),
+ background = Color(0xFF000000),
+ onPrimary = Color(0xFFFFFFFF),
+)
+
@Composable
fun RecordYouTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
// Dynamic color is available on Android 12+
dynamicColor: Boolean = true,
- content: @Composable () -> Unit
+ amoledDark: Boolean = false,
+ content: @Composable () -> Unit,
) {
val colorScheme = when {
+ amoledDark && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+ val context = LocalContext.current
+ dynamicDarkColorScheme(context).copy(background = Color.Black)
+ }
+
+ amoledDark -> AmoledDarkColorScheme
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
val context = LocalContext.current
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
}
+
darkTheme -> DarkColorScheme
else -> LightColorScheme
}
@@ -61,11 +76,11 @@ fun RecordYouTheme(
activity.window.statusBarColor = colorScheme.background.toArgb()
WindowCompat.getInsetsController(
activity.window,
- view
+ view,
).isAppearanceLightStatusBars = !darkTheme
WindowCompat.getInsetsController(
activity.window,
- view
+ view,
).isAppearanceLightNavigationBars = !darkTheme
}
}
@@ -74,6 +89,6 @@ fun RecordYouTheme(
MaterialTheme(
colorScheme = colorScheme,
typography = Typography,
- content = content
+ content = content,
)
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5675c40d..24d6cdd2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -66,4 +66,5 @@
Light
Screen Record Annotation
Show annotation tool during screen recording
+ Amoled Dark
\ No newline at end of file