diff --git a/app/build.gradle b/app/build.gradle index 20e8e791b..51949eb77 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,6 +22,7 @@ android { buildConfigField "String", "ACRA_LOGIN", "\"$login\"" buildConfigField "String", "ACRA_PASS", "\"$password\"" buildConfigField "String", "ACRA_URI", "\"$uri\"" + buildConfigField "boolean", "GOOGLE_PLAY_BUILD", "false" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/dev/arkbuilders/rate/presentation/App.kt b/app/src/main/java/dev/arkbuilders/rate/presentation/App.kt index 5c06fe33d..b659e20eb 100644 --- a/app/src/main/java/dev/arkbuilders/rate/presentation/App.kt +++ b/app/src/main/java/dev/arkbuilders/rate/presentation/App.kt @@ -29,7 +29,9 @@ class App : Application() { super.onCreate() Timber.plant(Timber.DebugTree()) DIManager.init(this) - initAcra() + + if (!BuildConfig.GOOGLE_PLAY_BUILD) + initAcra() initWorker() } diff --git a/app/src/main/java/dev/arkbuilders/rate/presentation/pairalert/PairAlertConditionScreen.kt b/app/src/main/java/dev/arkbuilders/rate/presentation/pairalert/PairAlertConditionScreen.kt index 5e47a3e08..40638eae6 100644 --- a/app/src/main/java/dev/arkbuilders/rate/presentation/pairalert/PairAlertConditionScreen.kt +++ b/app/src/main/java/dev/arkbuilders/rate/presentation/pairalert/PairAlertConditionScreen.kt @@ -14,12 +14,14 @@ import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.Button import androidx.compose.material.Card import androidx.compose.material.Icon import androidx.compose.material.IconButton import androidx.compose.material.OutlinedTextField +import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add @@ -31,16 +33,23 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue 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.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import dev.arkbuilders.rate.R import dev.arkbuilders.rate.data.model.PairAlertCondition import dev.arkbuilders.rate.presentation.destinations.AddCurrencyScreenDestination import dev.arkbuilders.rate.presentation.destinations.PairAlertConditionScreenDestination import dev.arkbuilders.rate.presentation.shared.SharedViewModel +import dev.arkbuilders.rate.presentation.theme.Purple500 import dev.arkbuilders.rate.presentation.utils.activityViewModel import dev.arkbuilders.rate.utils.removeFractionalPartIfEmpty @@ -50,8 +59,27 @@ fun PairAlertConditionScreen( navigator: DestinationsNavigator, viewModel: SharedViewModel = activityViewModel() ) { + var descDialog by remember { mutableStateOf(false) } + Box(modifier = Modifier.fillMaxSize()) { LazyColumn(modifier = Modifier.fillMaxSize()) { + item { + Box( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.CenterEnd + ) { + IconButton( + modifier = Modifier.padding(top = 16.dp, end = 8.dp), + onClick = { descDialog = true } + ) { + Icon( + painter = painterResource(R.drawable.ic_question_mark), + contentDescription = "", + tint = Purple500 + ) + } + } + } items( viewModel.pairAlertConditions, key = { it.id } @@ -63,6 +91,11 @@ fun PairAlertConditionScreen( } } } + + if (descDialog) + DescDialog { + descDialog = false + } } @Composable @@ -205,4 +238,31 @@ private fun AddOrDeleteBtn( Icon(Icons.Filled.Delete, "Delete") } } +} + +@Composable +private fun DescDialog(onDismiss: () -> Unit) { + Dialog(onDismissRequest = { onDismiss() }) { + Surface( + shape = RoundedCornerShape(20.dp), + color = Color.White + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.pair_alerts_desc), + textAlign = TextAlign.Center + ) + Button( + modifier = Modifier.padding(top = 10.dp), + onClick = { onDismiss() }) { + Text(text = stringResource(R.string.ok)) + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/rate/presentation/settings/SettingsScreen.kt b/app/src/main/java/dev/arkbuilders/rate/presentation/settings/SettingsScreen.kt index 3d4ce44f3..56d322f99 100644 --- a/app/src/main/java/dev/arkbuilders/rate/presentation/settings/SettingsScreen.kt +++ b/app/src/main/java/dev/arkbuilders/rate/presentation/settings/SettingsScreen.kt @@ -2,8 +2,11 @@ package dev.arkbuilders.rate.presentation.settings +import android.content.Intent +import android.net.Uri import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -41,14 +44,18 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog +import androidx.core.content.ContextCompat import androidx.lifecycle.viewmodel.compose.viewModel import com.ramcosta.composedestinations.annotation.Destination +import dev.arkbuilders.rate.BuildConfig import dev.arkbuilders.rate.R import dev.arkbuilders.rate.data.preferences.PreferenceKey import dev.arkbuilders.rate.di.DIManager @@ -68,12 +75,39 @@ fun SettingsScreen() { } } +@Composable +private fun PrivacyPolicy() { + val ctx = LocalContext.current + val url = stringResource(id = R.string.privacy_policy_url) + Surface( + color = Color.Transparent, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + onClick = { + val intent = Intent(Intent.ACTION_VIEW) + intent.data = Uri.parse(url) + ctx.startActivity(intent) + }, + ) { + Column { + Text( + modifier = Modifier.padding(16.dp), + text = stringResource(id = R.string.privacy_policy), + style = MaterialTheme.typography.body1, + ) + Divider() + } + + } +} + @Composable private fun Settings(vm: SettingsViewModel) { Column( modifier = Modifier - .verticalScroll(rememberScrollState()) .padding(16.dp) + .verticalScroll(rememberScrollState()) ) { SettingsGroup(name = R.string.currencies) { SettingsNumberComp( @@ -117,14 +151,17 @@ private fun Settings(vm: SettingsViewModel) { ) } SettingsGroup(name = R.string.privacy) { - SettingsSwitchComp( - name = R.string.crash_reports, - state = vm.boolPrefs[PreferenceKey.CrashReport]!! - ) { state -> - vm.onToggle( - PreferenceKey.CrashReport, - state - ) + PrivacyPolicy() + if (!BuildConfig.GOOGLE_PLAY_BUILD) { + SettingsSwitchComp( + name = R.string.crash_reports, + state = vm.boolPrefs[PreferenceKey.CrashReport]!! + ) { state -> + vm.onToggle( + PreferenceKey.CrashReport, + state + ) + } } } } @@ -245,7 +282,7 @@ fun SettingsNumberComp( modifier = Modifier.size(24.dp) ) } - Spacer(modifier = Modifier.width(16.dp)) + Spacer(modifier = Modifier.width(8.dp)) Column(modifier = Modifier.padding(8.dp)) { Text( text = stringResource(id = name), diff --git a/app/src/main/res/drawable/ic_question_mark.xml b/app/src/main/res/drawable/ic_question_mark.xml new file mode 100644 index 000000000..1d4bf0826 --- /dev/null +++ b/app/src/main/res/drawable/ic_question_mark.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a1b46d3c..d58d30d23 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,4 +19,8 @@ List Used count Used time + App in the background checks the specified exchange rates once a day and if the condition matches, then displays a notification. + OK + https://www.ark-builders.dev/apps/rate/privacy-policy + Privacy policy