Adjusted paddings (#707)

* Adjusted paddings

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Unify intro card padding to 8 dp

* Minor changes in Composable calls

---------

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Ricki Hirner <hirner@bitfire.at>
This commit is contained in:
Arnau Mora 2024-04-14 21:42:52 +02:00 committed by GitHub
parent ab4244a533
commit bd93c86e2c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 212 additions and 153 deletions

View file

@ -33,6 +33,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
@ -116,144 +117,160 @@ fun PermissionsContent(
) {
val context = LocalContext.current
Column(
modifier = modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
PermissionsCard(
model.needKeepPermissions,
onKeepPermissionsRequested = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val intent = Intent(
Intent.ACTION_AUTO_REVOKE_PERMISSIONS,
Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
)
try {
context.startActivity(intent)
Toast.makeText(context, R.string.permissions_autoreset_instruction, Toast.LENGTH_LONG).show()
} catch (e: Exception) {
Logger.log.log(Level.WARNING, "Couldn't start Keep Permissions activity", e)
}
PermissionsCardContent(
keepPermissions = model.needKeepPermissions,
onKeepPermissionsRequested = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val intent = Intent(
Intent.ACTION_AUTO_REVOKE_PERMISSIONS,
Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
)
try {
context.startActivity(intent)
Toast.makeText(context, R.string.permissions_autoreset_instruction, Toast.LENGTH_LONG).show()
} catch (e: Exception) {
Logger.log.log(Level.WARNING, "Couldn't start Keep Permissions activity", e)
}
},
model.openTasksAvailable,
model.tasksOrgAvailable,
model.jtxAvailable
}
},
openTasksAvailable = model.openTasksAvailable,
tasksOrgAvailable = model.tasksOrgAvailable,
jtxAvailable = model.jtxAvailable,
modifier = modifier
)
}
@Preview(showBackground = true, showSystemUi = true)
@Composable
fun PermissionsCard_Preview() {
AppTheme {
PermissionsCardContent(
keepPermissions = true,
onKeepPermissionsRequested = {},
openTasksAvailable = true,
tasksOrgAvailable = true,
jtxAvailable = true
)
}
}
@Composable
fun PermissionsCard(
fun PermissionsCardContent(
keepPermissions: Boolean?,
onKeepPermissionsRequested: () -> Unit,
openTasksAvailable: Boolean?,
tasksOrgAvailable: Boolean?,
jtxAvailable: Boolean?
jtxAvailable: Boolean?,
modifier: Modifier = Modifier
) {
val context = LocalContext.current
CardWithImage(
title = stringResource(R.string.permissions_title),
message = stringResource(
R.string.permissions_text,
stringResource(R.string.app_name)
),
image = painterResource(R.drawable.intro_permissions),
modifier = Modifier.padding(8.dp)
Column(
modifier = modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
if (keepPermissions != null) {
PermissionSwitchRow(
text = stringResource(R.string.permissions_autoreset_title),
summaryWhenGranted = stringResource(R.string.permissions_autoreset_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_autoreset_status_off),
allPermissionsGranted = keepPermissions,
onLaunchRequest = onKeepPermissionsRequested,
modifier = Modifier.padding(vertical = 4.dp)
)
}
val allPermissions = mutableListOf<String>()
allPermissions.addAll(PermissionUtils.CONTACT_PERMISSIONS)
allPermissions.addAll(PermissionUtils.CALENDAR_PERMISSIONS)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
allPermissions += Manifest.permission.POST_NOTIFICATIONS
if (openTasksAvailable == true)
allPermissions.addAll(TaskProvider.PERMISSIONS_OPENTASKS)
if (tasksOrgAvailable == true)
allPermissions.addAll(TaskProvider.PERMISSIONS_TASKS_ORG)
if (jtxAvailable == true)
allPermissions.addAll(TaskProvider.PERMISSIONS_JTX)
PermissionSwitchRow(
text = stringResource(R.string.permissions_all_title),
permissions = allPermissions,
summaryWhenGranted = stringResource(R.string.permissions_all_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_all_status_off),
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(vertical = 4.dp)
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
PermissionSwitchRow(
text = stringResource(R.string.permissions_notification_title),
summaryWhenGranted = stringResource(R.string.permissions_notification_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_notification_status_off),
permissions = listOf(Manifest.permission.POST_NOTIFICATIONS),
modifier = Modifier.padding(vertical = 4.dp)
)
PermissionSwitchRow(
text = stringResource(R.string.permissions_calendar_title),
summaryWhenGranted = stringResource(R.string.permissions_calendar_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_calendar_status_off),
permissions = PermissionUtils.CALENDAR_PERMISSIONS.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
PermissionSwitchRow(
text = stringResource(R.string.permissions_contacts_title),
summaryWhenGranted = stringResource(R.string.permissions_contacts_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_contacts_status_off),
permissions = PermissionUtils.CONTACT_PERMISSIONS.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
if (jtxAvailable == true)
PermissionSwitchRow(
text = stringResource(R.string.permissions_jtx_title),
summaryWhenGranted = stringResource(R.string.permissions_tasks_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_tasks_status_off),
permissions = TaskProvider.PERMISSIONS_JTX.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
if (openTasksAvailable == true)
PermissionSwitchRow(
text = stringResource(R.string.permissions_opentasks_title),
summaryWhenGranted = stringResource(R.string.permissions_tasks_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_tasks_status_off),
permissions = TaskProvider.PERMISSIONS_OPENTASKS.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
if (tasksOrgAvailable == true)
PermissionSwitchRow(
text = stringResource(R.string.permissions_tasksorg_title),
summaryWhenGranted = stringResource(R.string.permissions_tasks_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_tasks_status_off),
permissions = TaskProvider.PERMISSIONS_TASKS_ORG.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
Text(
text = stringResource(R.string.permissions_app_settings_hint),
style = MaterialTheme.typography.body1,
modifier = Modifier.padding(top = 24.dp)
)
OutlinedButton(
modifier = Modifier.padding(top = 8.dp),
onClick = { PermissionUtils.showAppSettings(context) }
CardWithImage(
title = stringResource(R.string.permissions_title),
message = stringResource(
R.string.permissions_text,
stringResource(R.string.app_name)
),
image = painterResource(R.drawable.intro_permissions),
modifier = Modifier.padding(8.dp)
) {
Text(stringResource(R.string.permissions_app_settings).uppercase())
if (keepPermissions != null) {
PermissionSwitchRow(
text = stringResource(R.string.permissions_autoreset_title),
summaryWhenGranted = stringResource(R.string.permissions_autoreset_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_autoreset_status_off),
allPermissionsGranted = keepPermissions,
onLaunchRequest = onKeepPermissionsRequested,
modifier = Modifier.padding(vertical = 4.dp)
)
}
val allPermissions = mutableListOf<String>()
allPermissions.addAll(PermissionUtils.CONTACT_PERMISSIONS)
allPermissions.addAll(PermissionUtils.CALENDAR_PERMISSIONS)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
allPermissions += Manifest.permission.POST_NOTIFICATIONS
if (openTasksAvailable == true)
allPermissions.addAll(TaskProvider.PERMISSIONS_OPENTASKS)
if (tasksOrgAvailable == true)
allPermissions.addAll(TaskProvider.PERMISSIONS_TASKS_ORG)
if (jtxAvailable == true)
allPermissions.addAll(TaskProvider.PERMISSIONS_JTX)
PermissionSwitchRow(
text = stringResource(R.string.permissions_all_title),
permissions = allPermissions,
summaryWhenGranted = stringResource(R.string.permissions_all_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_all_status_off),
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(vertical = 4.dp)
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
PermissionSwitchRow(
text = stringResource(R.string.permissions_notification_title),
summaryWhenGranted = stringResource(R.string.permissions_notification_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_notification_status_off),
permissions = listOf(Manifest.permission.POST_NOTIFICATIONS),
modifier = Modifier.padding(vertical = 4.dp)
)
PermissionSwitchRow(
text = stringResource(R.string.permissions_calendar_title),
summaryWhenGranted = stringResource(R.string.permissions_calendar_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_calendar_status_off),
permissions = PermissionUtils.CALENDAR_PERMISSIONS.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
PermissionSwitchRow(
text = stringResource(R.string.permissions_contacts_title),
summaryWhenGranted = stringResource(R.string.permissions_contacts_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_contacts_status_off),
permissions = PermissionUtils.CONTACT_PERMISSIONS.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
if (jtxAvailable == true)
PermissionSwitchRow(
text = stringResource(R.string.permissions_jtx_title),
summaryWhenGranted = stringResource(R.string.permissions_tasks_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_tasks_status_off),
permissions = TaskProvider.PERMISSIONS_JTX.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
if (openTasksAvailable == true)
PermissionSwitchRow(
text = stringResource(R.string.permissions_opentasks_title),
summaryWhenGranted = stringResource(R.string.permissions_tasks_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_tasks_status_off),
permissions = TaskProvider.PERMISSIONS_OPENTASKS.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
if (tasksOrgAvailable == true)
PermissionSwitchRow(
text = stringResource(R.string.permissions_tasksorg_title),
summaryWhenGranted = stringResource(R.string.permissions_tasks_status_on),
summaryWhenNotGranted = stringResource(R.string.permissions_tasks_status_off),
permissions = TaskProvider.PERMISSIONS_TASKS_ORG.toList(),
modifier = Modifier.padding(vertical = 4.dp)
)
Text(
text = stringResource(R.string.permissions_app_settings_hint),
style = MaterialTheme.typography.body1,
modifier = Modifier.padding(top = 24.dp)
)
OutlinedButton(
modifier = Modifier.padding(top = 8.dp),
onClick = { PermissionUtils.showAppSettings(context) }
) {
Text(stringResource(R.string.permissions_app_settings).uppercase())
}
}
}
}

View file

@ -38,6 +38,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.core.text.HtmlCompat
import androidx.lifecycle.ViewModel
@ -168,30 +169,71 @@ fun TasksCard(
val showAgain by model.showAgain.collectAsStateWithLifecycle(true)
fun installApp(packageName: String) {
val uri = Uri.parse("market://details?id=$packageName&referrer=" +
Uri.encode("utm_source=" + BuildConfig.APPLICATION_ID))
val intent = Intent(Intent.ACTION_VIEW, uri)
if (intent.resolveActivity(context.packageManager) != null)
context.startActivity(intent)
else
coroutineScope.launch {
snackbarHostState.showSnackbar(
message = context.getString(R.string.intro_tasks_no_app_store),
duration = SnackbarDuration.Long
)
}
}
TasksCardContent(
jtxSelected = jtxSelected,
jtxInstalled = jtxInstalled,
tasksOrgSelected = tasksOrgSelected,
tasksOrgInstalled = tasksOrgInstalled,
openTasksSelected = openTasksSelected,
openTasksInstalled = openTasksInstalled,
showAgain = showAgain,
onSetShowAgain = model::setShowAgain,
onProviderSelected = { provider ->
if (model.currentProvider.value != provider)
model.selectProvider(provider)
},
installApp = { packageName ->
val uri = Uri.parse("market://details?id=$packageName&referrer=" +
Uri.encode("utm_source=" + BuildConfig.APPLICATION_ID))
val intent = Intent(Intent.ACTION_VIEW, uri)
if (intent.resolveActivity(context.packageManager) != null)
context.startActivity(intent)
else
coroutineScope.launch {
snackbarHostState.showSnackbar(
message = context.getString(R.string.intro_tasks_no_app_store),
duration = SnackbarDuration.Long
)
}
}
)
}
fun onProviderSelected(provider: TaskProvider.ProviderName) {
if (model.currentProvider.value != provider)
model.selectProvider(provider)
@Preview(showBackground = true, showSystemUi = true)
@Composable
fun TasksCardContent_Preview() {
AppTheme {
TasksCardContent(
jtxSelected = true,
jtxInstalled = true,
tasksOrgSelected = false,
tasksOrgInstalled = false,
openTasksSelected = false,
openTasksInstalled = false,
showAgain = true,
onSetShowAgain = {},
onProviderSelected = {},
installApp = {}
)
}
}
@Composable
fun TasksCardContent(
jtxSelected: Boolean,
jtxInstalled: Boolean,
tasksOrgSelected: Boolean,
tasksOrgInstalled: Boolean,
openTasksSelected: Boolean,
openTasksInstalled: Boolean,
showAgain: Boolean,
onSetShowAgain: (Boolean) -> Unit,
onProviderSelected: (TaskProvider.ProviderName) -> Unit,
installApp: (String) -> Unit,
) {
Column(
modifier = Modifier
.fillMaxHeight()
.padding(8.dp)
.verticalScroll(rememberScrollState())
) {
CardWithImage(
@ -199,9 +241,7 @@ fun TasksCard(
imageAlignment = BiasAlignment(0f, .1f),
title = stringResource(R.string.intro_tasks_title),
message = stringResource(R.string.intro_tasks_text1),
modifier = Modifier
.padding(horizontal = 16.dp)
.padding(top = 16.dp)
modifier = Modifier.padding(8.dp)
) {
RadioWithSwitch(
title = stringResource(R.string.intro_tasks_jtx),
@ -266,14 +306,14 @@ fun TasksCard(
) {
Checkbox(
checked = !showAgain,
onCheckedChange = { model.setShowAgain(!it) }
onCheckedChange = { onSetShowAgain(!it) }
)
Text(
text = stringResource(R.string.intro_tasks_dont_show),
style = MaterialTheme.typography.body2,
modifier = Modifier
.fillMaxWidth()
.clickable { model.setShowAgain(!showAgain) }
.clickable { onSetShowAgain(!showAgain) }
)
}
}
@ -289,4 +329,4 @@ fun TasksCard(
.padding(horizontal = 12.dp, vertical = 8.dp)
)
}
}
}

View file

@ -37,7 +37,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
@ -250,16 +249,16 @@ private fun BatteryOptimizationsContent(
onChangeDontShowAutostart: (Boolean) -> Unit,
manufacturerWarning: Boolean
) {
val context = LocalContext.current
val uriHandler = LocalUriHandler.current
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(8.dp)
) {
Card {
Card(
modifier = Modifier.padding(8.dp)
) {
Column(
modifier = Modifier
.fillMaxWidth()
@ -314,7 +313,8 @@ private fun BatteryOptimizationsContent(
}
if (manufacturerWarning) {
Card(
modifier = Modifier.padding(top = 8.dp)
modifier = Modifier
.padding(8.dp)
) {
Column(
modifier = Modifier
@ -374,7 +374,9 @@ private fun BatteryOptimizationsContent(
stringResource(R.string.app_settings_reset_hints)
),
style = MaterialTheme.typography.body2,
modifier = Modifier.padding(top = 8.dp)
modifier = Modifier
.padding(top = 8.dp)
.padding(horizontal = 16.dp)
)
Spacer(modifier = Modifier.height(90.dp))
}