From 8f023bb16b8ad2179a3e6e23691612d92be4d8cd Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 30 Dec 2024 21:32:58 +0600 Subject: [PATCH] updated donation system --- .idea/inspectionProfiles/Project_Default.xml | 50 ++++ .../java/dev/robin/flip_2_dnd/MainActivity.kt | 9 + .../presentation/donation/DonationScreen.kt | 152 ++++++++++++ .../presentation/settings/SettingsScreen.kt | 232 ++++++++++-------- app/src/main/res/drawable/donation.xml | 15 ++ assets/images/donation.svg | 35 +++ metadata/dev.robin.flip_2_dnd.yml | 26 +- metadata/en-US/changelogs/8.txt | 2 + metadata/en-US/changelogs/9.txt | 1 + 9 files changed, 413 insertions(+), 109 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 app/src/main/java/dev/robin/flip_2_dnd/presentation/donation/DonationScreen.kt create mode 100644 app/src/main/res/drawable/donation.xml create mode 100644 assets/images/donation.svg create mode 100644 metadata/en-US/changelogs/9.txt diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..f0c6ad0 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,50 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/dev/robin/flip_2_dnd/MainActivity.kt b/app/src/main/java/dev/robin/flip_2_dnd/MainActivity.kt index b57f8be..e7c2832 100644 --- a/app/src/main/java/dev/robin/flip_2_dnd/MainActivity.kt +++ b/app/src/main/java/dev/robin/flip_2_dnd/MainActivity.kt @@ -18,6 +18,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import dagger.hilt.android.AndroidEntryPoint +import dev.robin.flip_2_dnd.presentation.donation.DonationScreen import dev.robin.flip_2_dnd.presentation.main.MainScreen import dev.robin.flip_2_dnd.presentation.main.MainViewModel import dev.robin.flip_2_dnd.presentation.settings.SettingsScreen @@ -58,6 +59,14 @@ class MainActivity : ComponentActivity() { } composable("settings") { SettingsScreen( + navController = navController, + onDonateClick = { + navController.navigate("donation") + } + ) + } + composable("donation") { + DonationScreen( navController = navController ) } diff --git a/app/src/main/java/dev/robin/flip_2_dnd/presentation/donation/DonationScreen.kt b/app/src/main/java/dev/robin/flip_2_dnd/presentation/donation/DonationScreen.kt new file mode 100644 index 0000000..e48a068 --- /dev/null +++ b/app/src/main/java/dev/robin/flip_2_dnd/presentation/donation/DonationScreen.kt @@ -0,0 +1,152 @@ +package dev.robin.flip_2_dnd.presentation.donation + +import android.content.ActivityNotFoundException +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.widget.Toast +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import dev.robin.flip_2_dnd.R + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DonationScreen( + navController: NavController? = null +) { + val context = LocalContext.current + val usdtAddress = "0xA11C1eD5213705517E050DB075D1D238e21f5D15" + val btcAddress = "1DxZPSf4xraev8S3mJFtA4mH7QEeZHzDdQ" + Scaffold( + topBar = { + TopAppBar( + title = { Text("Donation") }, + navigationIcon = { + if (navController != null) { + IconButton(onClick = { navController.popBackStack() }) { + Icon( + painter = painterResource(id = R.drawable.ic_arrow_back), + contentDescription = "Back" + ) + } + } + } + ) + } + ) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(it) + .padding(16.dp), + verticalArrangement = Arrangement.Top, + horizontalAlignment = Alignment.CenterHorizontally + ) { + ListItem( + modifier = Modifier.clickable { + val binancePayUrl = "https://app.binance.com/en/wallet" + + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(binancePayUrl)) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + try { + context.startActivity(intent) + } catch (e: ActivityNotFoundException) { + // Fallback to the browser if the app is not installed + val webIntent = Intent(Intent.ACTION_VIEW, Uri.parse(binancePayUrl)) + webIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + context.startActivity(webIntent) + } + }, + supportingContent = { + Text("Binance ID") + }, + headlineContent = { + Text("Pay with Binance") + }, + trailingContent = { + Text("754979664") + } + ) + ListItem( + modifier = Modifier.clickable { + val clipboardManager = + context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText("Crypto Address", usdtAddress) + clipboardManager.setPrimaryClip(clip) + + // Show a toast message + Toast.makeText(context, "Address copied to clipboard", Toast.LENGTH_SHORT).show() + }, + supportingContent = { + Text("BNB Smart Chain(BEP20)") + }, + headlineContent = { + Text("Pay with USDT") + }, + trailingContent = { + Text(usdtAddress) + } + ) + ListItem( + modifier = Modifier.clickable { + val clipboardManager = + context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText("Crypto Address", usdtAddress) + clipboardManager.setPrimaryClip(clip) + + // Show a toast message + Toast.makeText(context, "Address copied to clipboard", Toast.LENGTH_SHORT).show() + }, + supportingContent = { + Text("BNB Smart Chain(BEP20)") + }, + headlineContent = { + Text("Pay with ETH") + }, + trailingContent = { + Text(usdtAddress) + } + ) + ListItem( + modifier = Modifier.clickable { + val clipboardManager = + context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText("Crypto Address", usdtAddress) + clipboardManager.setPrimaryClip(clip) + + // Show a toast message + Toast.makeText(context, "Address copied to clipboard", Toast.LENGTH_SHORT).show() + }, + supportingContent = { + Text("Bitcoin") + }, + headlineContent = { + Text("Pay with BTC") + }, + trailingContent = { + Text(btcAddress) + } + ) + Text("Thank you for your donation!") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/robin/flip_2_dnd/presentation/settings/SettingsScreen.kt b/app/src/main/java/dev/robin/flip_2_dnd/presentation/settings/SettingsScreen.kt index e34518c..d4ff931 100644 --- a/app/src/main/java/dev/robin/flip_2_dnd/presentation/settings/SettingsScreen.kt +++ b/app/src/main/java/dev/robin/flip_2_dnd/presentation/settings/SettingsScreen.kt @@ -1,8 +1,28 @@ package dev.robin.flip_2_dnd.presentation.settings -import androidx.compose.foundation.layout.* -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Button +import androidx.compose.material3.Divider +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -14,112 +34,126 @@ import dev.robin.flip_2_dnd.R @OptIn(ExperimentalMaterial3Api::class) @Composable fun SettingsScreen( - viewModel: SettingsViewModel = hiltViewModel(), - navController: NavController? = null + viewModel: SettingsViewModel = hiltViewModel(), + navController: NavController? = null, + onDonateClick: () -> Unit ) { - val soundEnabled by viewModel.soundEnabled.collectAsState() - val vibrationEnabled by viewModel.vibrationEnabled.collectAsState() - val screenOffOnly by viewModel.screenOffOnly.collectAsState() - val priorityDndEnabled by viewModel.priorityDndEnabled.collectAsState() + val soundEnabled by viewModel.soundEnabled.collectAsState() + val vibrationEnabled by viewModel.vibrationEnabled.collectAsState() + val screenOffOnly by viewModel.screenOffOnly.collectAsState() + val priorityDndEnabled by viewModel.priorityDndEnabled.collectAsState() - Scaffold( - topBar = { - TopAppBar( - title = { Text("Settings") }, - navigationIcon = { - if (navController != null) { - IconButton(onClick = { navController.popBackStack() }) { - Icon( - painter = painterResource(id = R.drawable.ic_arrow_back), - contentDescription = "Back" - ) - } - } - } - ) - } - ) { paddingValues -> - Column( - modifier = Modifier - .fillMaxSize() - .padding(paddingValues) - .padding(16.dp) - ) { - Text( - text = "Behavior", - style = MaterialTheme.typography.titleLarge, - modifier = Modifier.padding(vertical = 8.dp) - ) + Scaffold( + topBar = { + TopAppBar( + title = { Text("Settings") }, + navigationIcon = { + if (navController != null) { + IconButton(onClick = { navController.popBackStack() }) { + Icon( + painter = painterResource(id = R.drawable.ic_arrow_back), + contentDescription = "Back" + ) + } + } + } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp) + ) { + Text( + text = "Behavior", + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(vertical = 8.dp) + ) - Column { - SettingsSwitchItem( - title = "Screen Off Only", - description = "Enable DND only when screen is off", - checked = screenOffOnly, - onCheckedChange = { viewModel.setScreenOffOnly(it) } - ) - - SettingsSwitchItem( - title = "Priority DND", - description = "Enable Priority mode DND instead of Total Silence", - checked = priorityDndEnabled, - onCheckedChange = { viewModel.setPriorityDndEnabled(it) } - ) - } + Column { + SettingsSwitchItem( + title = "Screen Off Only", + description = "Enable DND only when screen is off", + checked = screenOffOnly, + onCheckedChange = { viewModel.setScreenOffOnly(it) } + ) - Divider(modifier = Modifier.padding(vertical = 16.dp)) + SettingsSwitchItem( + title = "Priority DND", + description = "Enable Priority mode DND instead of Total Silence", + checked = priorityDndEnabled, + onCheckedChange = { viewModel.setPriorityDndEnabled(it) } + ) + } - Text( - text = "Notifications", - style = MaterialTheme.typography.titleLarge, - modifier = Modifier.padding(vertical = 8.dp) - ) + Divider(modifier = Modifier.padding(vertical = 16.dp)) - Column { - SettingsSwitchItem( - title = "Sound", - description = "Play sound when DND changes", - checked = soundEnabled, - onCheckedChange = { viewModel.setSoundEnabled(it) } - ) + Text( + text = "Notifications", + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(vertical = 8.dp) + ) - SettingsSwitchItem( - title = "Vibration", - description = "Vibrate when DND changes", - checked = vibrationEnabled, - onCheckedChange = { viewModel.setVibrationEnabled(it) } - ) - } - } - } + Column { + SettingsSwitchItem( + title = "Sound", + description = "Play sound when DND changes", + checked = soundEnabled, + onCheckedChange = { viewModel.setSoundEnabled(it) } + ) + + SettingsSwitchItem( + title = "Vibration", + description = "Vibrate when DND changes", + checked = vibrationEnabled, + onCheckedChange = { viewModel.setVibrationEnabled(it) } + ) + } + Row(horizontalArrangement = Arrangement.End, modifier = Modifier.fillMaxWidth()) { + Button(onClick = onDonateClick) { + Row(verticalAlignment = Alignment.CenterVertically) { + Image( + painter = painterResource(id = R.drawable.donation), + contentDescription = "Logo", + modifier = Modifier.width(30.dp) + ) + Spacer(Modifier.width(20.dp)) + Text("Donate") + } + } + } + } + } } @Composable fun SettingsSwitchItem( - title: String, - description: String, - checked: Boolean, - onCheckedChange: (Boolean) -> Unit + title: String, + description: String, + checked: Boolean, + onCheckedChange: (Boolean) -> Unit ) { - ListItem( - headlineContent = { - Text( - text = title, - style = MaterialTheme.typography.titleMedium - ) - }, - supportingContent = { - Text( - text = description, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - }, - trailingContent = { - Switch( - checked = checked, - onCheckedChange = onCheckedChange - ) - } - ) + ListItem( + headlineContent = { + Text( + text = title, + style = MaterialTheme.typography.titleMedium + ) + }, + supportingContent = { + Text( + text = description, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + }, + trailingContent = { + Switch( + checked = checked, + onCheckedChange = onCheckedChange + ) + } + ) } diff --git a/app/src/main/res/drawable/donation.xml b/app/src/main/res/drawable/donation.xml new file mode 100644 index 0000000..ffc3c12 --- /dev/null +++ b/app/src/main/res/drawable/donation.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/assets/images/donation.svg b/assets/images/donation.svg new file mode 100644 index 0000000..6593a82 --- /dev/null +++ b/assets/images/donation.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/metadata/dev.robin.flip_2_dnd.yml b/metadata/dev.robin.flip_2_dnd.yml index f42df5a..fb685f7 100644 --- a/metadata/dev.robin.flip_2_dnd.yml +++ b/metadata/dev.robin.flip_2_dnd.yml @@ -18,10 +18,10 @@ AutoName: Flip 2 DND RepoType: git Repo: https://github.com/robinsrk/Flip_2_DND -Description: +Description: Flip 2 DND is a simple yet powerful app that automatically toggles Do Not Disturb mode based on your phone's orientation. - Features: +Features: • Toggle DND by flipping your phone face down • Disable DND by flipping your phone face up • Optional "Only when screen off" mode @@ -51,12 +51,6 @@ Builds: subdir: app gradle: - yes - - versionName: '1.0.5' - versionCode: 5 - commit: v1.0.5 - subdir: app - gradle: - - yes - versionName: '1.0.6' versionCode: 6 commit: v1.0.6 @@ -69,8 +63,20 @@ Builds: subdir: app gradle: - yes + - versionName: '1.0.8' + versionCode: 8 + commit: v1.0.8 + subdir: app + gradle: + - yes + - versionName: '1.0.9' + versionCode: 9 + commit: v1.0.9 + subdir: app + gradle: + - yes AutoUpdateMode: Version UpdateCheckMode: Tags -CurrentVersion: '1.0.7' -CurrentVersionCode: 7 +CurrentVersion: '1.0.9' +CurrentVersionCode: 9 diff --git a/metadata/en-US/changelogs/8.txt b/metadata/en-US/changelogs/8.txt index e69de29..9b11714 100644 --- a/metadata/en-US/changelogs/8.txt +++ b/metadata/en-US/changelogs/8.txt @@ -0,0 +1,2 @@ +- Improved flip detection +- Fixed autostart after device boot \ No newline at end of file diff --git a/metadata/en-US/changelogs/9.txt b/metadata/en-US/changelogs/9.txt new file mode 100644 index 0000000..f747cfc --- /dev/null +++ b/metadata/en-US/changelogs/9.txt @@ -0,0 +1 @@ +- added donation page for development \ No newline at end of file