Repo created
This commit is contained in:
parent
75dc487a7a
commit
39c29d175b
6317 changed files with 388324 additions and 2 deletions
15
feature/onboarding/permissions/build.gradle.kts
Normal file
15
feature/onboarding/permissions/build.gradle.kts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
plugins {
|
||||
id(ThunderbirdPlugins.Library.androidCompose)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "app.k9mail.feature.onboarding.permissions"
|
||||
resourcePrefix = "onboarding_permissions_"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.core.common)
|
||||
implementation(projects.core.android.permissions)
|
||||
implementation(projects.core.ui.compose.designsystem)
|
||||
implementation(projects.feature.account.common)
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.IconsWithBottomRightOverlay
|
||||
|
||||
@Composable
|
||||
@Preview(showBackground = true)
|
||||
internal fun PermissionBoxUnknownStatePreview() {
|
||||
PreviewWithTheme {
|
||||
PermissionBox(
|
||||
icon = IconsWithBottomRightOverlay.person,
|
||||
permissionState = PermissionsContract.UiPermissionState.Unknown,
|
||||
title = "Contacts",
|
||||
description = "Allow access to be able to display contact names and photos.",
|
||||
onAllowClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@Preview(showBackground = true)
|
||||
internal fun PermissionBoxGrantedStatePreview() {
|
||||
PreviewWithTheme {
|
||||
PermissionBox(
|
||||
icon = IconsWithBottomRightOverlay.person,
|
||||
permissionState = PermissionsContract.UiPermissionState.Granted,
|
||||
title = "Contacts",
|
||||
description = "Allow access to be able to display contact names and photos.",
|
||||
onAllowClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@Preview(showBackground = true)
|
||||
internal fun PermissionBoxDeniedStatePreview() {
|
||||
PreviewWithTheme {
|
||||
PermissionBox(
|
||||
icon = IconsWithBottomRightOverlay.person,
|
||||
permissionState = PermissionsContract.UiPermissionState.Denied,
|
||||
title = "Contacts",
|
||||
description = "Allow access to be able to display contact names and photos.",
|
||||
onAllowClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import app.k9mail.core.ui.compose.common.annotation.PreviewDevices
|
||||
import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun PermissionContentPreview() {
|
||||
PreviewWithTheme {
|
||||
PermissionsContent(
|
||||
state = PermissionsContract.State(
|
||||
isLoading = false,
|
||||
contactsPermissionState = PermissionsContract.UiPermissionState.Granted,
|
||||
notificationsPermissionState = PermissionsContract.UiPermissionState.Denied,
|
||||
isNotificationsPermissionVisible = true,
|
||||
isNextButtonVisible = false,
|
||||
),
|
||||
onEvent = {},
|
||||
brandName = "BrandName",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import app.k9mail.core.android.permissions.PermissionState
|
||||
import app.k9mail.core.ui.compose.common.annotation.PreviewDevices
|
||||
import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import net.thunderbird.core.common.provider.BrandNameProvider
|
||||
|
||||
@Composable
|
||||
@PreviewDevices
|
||||
internal fun PermissionScreenPreview() {
|
||||
PreviewWithTheme {
|
||||
PermissionsScreen(
|
||||
viewModel = PermissionsViewModel(
|
||||
checkPermission = { PermissionState.Denied },
|
||||
backgroundDispatcher = Dispatchers.Main.immediate,
|
||||
),
|
||||
brandNameProvider = object : BrandNameProvider {
|
||||
override val brandName: String = "BrandName"
|
||||
},
|
||||
onNext = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package app.k9mail.feature.onboarding.permissions
|
||||
|
||||
import app.k9mail.core.android.permissions.corePermissionsAndroidModule
|
||||
import app.k9mail.feature.onboarding.permissions.domain.PermissionsDomainContract.UseCase
|
||||
import app.k9mail.feature.onboarding.permissions.domain.usecase.CheckPermission
|
||||
import app.k9mail.feature.onboarding.permissions.domain.usecase.HasRuntimePermissions
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsViewModel
|
||||
import org.koin.core.module.Module
|
||||
import org.koin.core.module.dsl.viewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
val featureOnboardingPermissionsModule: Module = module {
|
||||
includes(corePermissionsAndroidModule)
|
||||
|
||||
factory<UseCase.CheckPermission> { CheckPermission(permissionChecker = get()) }
|
||||
factory<UseCase.HasRuntimePermissions> { HasRuntimePermissions(permissionsModelChecker = get()) }
|
||||
|
||||
viewModel {
|
||||
PermissionsViewModel(
|
||||
checkPermission = get(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package app.k9mail.feature.onboarding.permissions.domain
|
||||
|
||||
import app.k9mail.core.android.permissions.Permission
|
||||
import app.k9mail.core.android.permissions.PermissionState
|
||||
|
||||
interface PermissionsDomainContract {
|
||||
|
||||
interface UseCase {
|
||||
|
||||
fun interface CheckPermission {
|
||||
operator fun invoke(permission: Permission): PermissionState
|
||||
}
|
||||
|
||||
fun interface HasRuntimePermissions {
|
||||
operator fun invoke(): Boolean
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package app.k9mail.feature.onboarding.permissions.domain.usecase
|
||||
|
||||
import app.k9mail.core.android.permissions.Permission
|
||||
import app.k9mail.core.android.permissions.PermissionChecker
|
||||
import app.k9mail.core.android.permissions.PermissionState
|
||||
import app.k9mail.feature.onboarding.permissions.domain.PermissionsDomainContract.UseCase
|
||||
|
||||
/**
|
||||
* Checks if a [Permission] has been granted to the app.
|
||||
*/
|
||||
class CheckPermission(
|
||||
private val permissionChecker: PermissionChecker,
|
||||
) : UseCase.CheckPermission {
|
||||
|
||||
override fun invoke(permission: Permission): PermissionState {
|
||||
return permissionChecker.checkPermission(permission)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package app.k9mail.feature.onboarding.permissions.domain.usecase
|
||||
|
||||
import app.k9mail.core.android.permissions.PermissionsModelChecker
|
||||
import app.k9mail.feature.onboarding.permissions.domain.PermissionsDomainContract
|
||||
|
||||
class HasRuntimePermissions(
|
||||
private val permissionsModelChecker: PermissionsModelChecker,
|
||||
) : PermissionsDomainContract.UseCase.HasRuntimePermissions {
|
||||
override fun invoke(): Boolean {
|
||||
return permissionsModelChecker.hasRuntimePermissions()
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import androidx.compose.animation.core.animateFloatAsState
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.k9mail.core.ui.compose.common.image.ImageWithOverlayCoordinate
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleLarge
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.feature.onboarding.permissions.R
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.UiPermissionState
|
||||
|
||||
private val MAX_WIDTH = 500.dp
|
||||
|
||||
@Composable
|
||||
internal fun PermissionBox(
|
||||
icon: ImageWithOverlayCoordinate,
|
||||
permissionState: UiPermissionState,
|
||||
title: String,
|
||||
description: String,
|
||||
onAllowClick: () -> Unit,
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.width(MAX_WIDTH)
|
||||
.padding(horizontal = MainTheme.spacings.double),
|
||||
) {
|
||||
Row {
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
end = MainTheme.spacings.double,
|
||||
top = MainTheme.spacings.default,
|
||||
bottom = MainTheme.spacings.default,
|
||||
),
|
||||
) {
|
||||
IconWithPermissionStateOverlay(icon, permissionState)
|
||||
}
|
||||
Column {
|
||||
TextTitleLarge(text = title)
|
||||
TextBodyMedium(text = description)
|
||||
}
|
||||
}
|
||||
|
||||
val buttonAlpha by animateFloatAsState(
|
||||
targetValue = if (permissionState == UiPermissionState.Granted) 0f else 1f,
|
||||
label = "AllowButtonAlpha",
|
||||
)
|
||||
|
||||
Column(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalAlignment = Alignment.End,
|
||||
) {
|
||||
Spacer(modifier = Modifier.height(MainTheme.spacings.default))
|
||||
|
||||
ButtonFilled(
|
||||
text = stringResource(R.string.onboarding_permissions_allow_button),
|
||||
onClick = onAllowClick,
|
||||
modifier = Modifier.alpha(buttonAlpha),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun IconWithPermissionStateOverlay(
|
||||
icon: ImageWithOverlayCoordinate,
|
||||
permissionState: UiPermissionState,
|
||||
) {
|
||||
Box {
|
||||
val iconSize = MainTheme.sizes.iconLarge
|
||||
val overlayIconSize = iconSize / 2
|
||||
val overlayIconOffset = overlayIconSize / 2
|
||||
val scalingFactor = iconSize / icon.image.defaultHeight
|
||||
val overlayOffsetX = (icon.overlayOffsetX * scalingFactor) - overlayIconOffset
|
||||
val overlayOffsetY = (icon.overlayOffsetY * scalingFactor) - overlayIconOffset
|
||||
|
||||
Icon(
|
||||
imageVector = icon.image,
|
||||
modifier = Modifier.size(iconSize),
|
||||
)
|
||||
|
||||
when (permissionState) {
|
||||
UiPermissionState.Unknown -> Unit
|
||||
UiPermissionState.Granted -> {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.CheckCircle,
|
||||
tint = MainTheme.colors.success,
|
||||
modifier = Modifier
|
||||
.size(overlayIconSize)
|
||||
.offset(
|
||||
x = overlayOffsetX,
|
||||
y = overlayOffsetY,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
UiPermissionState.Denied -> {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.Cancel,
|
||||
tint = MainTheme.colors.warning,
|
||||
modifier = Modifier
|
||||
.size(overlayIconSize)
|
||||
.offset(
|
||||
x = overlayOffsetX,
|
||||
y = overlayOffsetY,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,190 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import androidx.compose.animation.Crossfade
|
||||
import androidx.compose.animation.core.animateDpAsState
|
||||
import androidx.compose.foundation.ScrollState
|
||||
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.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.k9mail.core.ui.compose.common.visibility.hide
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.DelayedCircularProgressIndicator
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.Surface
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonFilled
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonText
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.icon.IconsWithBottomRightOverlay
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextHeadlineSmall
|
||||
import app.k9mail.core.ui.compose.designsystem.template.ResponsiveWidthContainer
|
||||
import app.k9mail.core.ui.compose.designsystem.template.Scaffold
|
||||
import app.k9mail.core.ui.compose.theme2.MainTheme
|
||||
import app.k9mail.feature.account.common.ui.AppTitleTopHeader
|
||||
import app.k9mail.feature.onboarding.permissions.R
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.Event
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.State
|
||||
import net.thunderbird.core.ui.compose.common.modifier.testTagAsResourceId
|
||||
import app.k9mail.feature.account.common.R as CommonR
|
||||
|
||||
@Composable
|
||||
internal fun PermissionsContent(
|
||||
state: State,
|
||||
onEvent: (Event) -> Unit,
|
||||
brandName: String,
|
||||
) {
|
||||
val scrollState = rememberScrollState()
|
||||
|
||||
Scaffold(
|
||||
bottomBar = {
|
||||
BottomBar(state, onEvent, scrollState)
|
||||
},
|
||||
) { innerPadding ->
|
||||
ResponsiveWidthContainer(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(innerPadding),
|
||||
) { contentPadding ->
|
||||
Column(
|
||||
verticalArrangement = Arrangement.SpaceBetween,
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(state = scrollState)
|
||||
.padding(contentPadding),
|
||||
) {
|
||||
HeaderArea(brandName = brandName)
|
||||
|
||||
ContentArea(state, onEvent)
|
||||
|
||||
// This provides some bottom padding but is also necessary to make the vertical arrangement have the
|
||||
// desired effect of putting ContentArea() in the middle.
|
||||
Spacer(modifier = Modifier.height(MainTheme.spacings.double))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun HeaderArea(
|
||||
brandName: String,
|
||||
) {
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
AppTitleTopHeader(
|
||||
title = brandName,
|
||||
)
|
||||
|
||||
TextHeadlineSmall(
|
||||
text = stringResource(R.string.onboarding_permissions_screen_title),
|
||||
modifier = Modifier.padding(horizontal = MainTheme.spacings.double),
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.height(MainTheme.spacings.double))
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ContentArea(state: State, onEvent: (Event) -> Unit) {
|
||||
Column(
|
||||
verticalArrangement = Arrangement.Center,
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.padding(MainTheme.spacings.double),
|
||||
) {
|
||||
if (state.isLoading) {
|
||||
DelayedCircularProgressIndicator()
|
||||
} else {
|
||||
PermissionBoxes(state, onEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun PermissionBoxes(
|
||||
state: State,
|
||||
onEvent: (Event) -> Unit,
|
||||
) {
|
||||
PermissionBox(
|
||||
icon = IconsWithBottomRightOverlay.person,
|
||||
permissionState = state.contactsPermissionState,
|
||||
title = stringResource(R.string.onboarding_permissions_contacts_title),
|
||||
description = stringResource(R.string.onboarding_permissions_contacts_description),
|
||||
onAllowClick = { onEvent(Event.AllowContactsPermissionClicked) },
|
||||
)
|
||||
|
||||
if (state.isNotificationsPermissionVisible) {
|
||||
Spacer(modifier = Modifier.height(MainTheme.spacings.quadruple))
|
||||
|
||||
PermissionBox(
|
||||
icon = IconsWithBottomRightOverlay.notification,
|
||||
permissionState = state.notificationsPermissionState,
|
||||
title = stringResource(R.string.onboarding_permissions_notifications_title),
|
||||
description = stringResource(R.string.onboarding_permissions_notifications_description),
|
||||
onAllowClick = { onEvent(Event.AllowNotificationsPermissionClicked) },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun BottomBar(
|
||||
state: State,
|
||||
onEvent: (Event) -> Unit,
|
||||
scrollState: ScrollState,
|
||||
) {
|
||||
// Elevate the bottom bar when some scrollable content is "underneath" it
|
||||
val elevation by animateDpAsState(
|
||||
targetValue = if (scrollState.canScrollForward) 8.dp else 0.dp,
|
||||
label = "BottomBarElevation",
|
||||
)
|
||||
|
||||
Surface(
|
||||
tonalElevation = elevation,
|
||||
) {
|
||||
ResponsiveWidthContainer(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) { contentPadding ->
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.padding(
|
||||
start = MainTheme.spacings.quadruple,
|
||||
end = MainTheme.spacings.quadruple,
|
||||
top = MainTheme.spacings.default,
|
||||
bottom = MainTheme.spacings.double,
|
||||
)
|
||||
.fillMaxWidth()
|
||||
.padding(contentPadding),
|
||||
horizontalArrangement = Arrangement.End,
|
||||
) {
|
||||
Crossfade(
|
||||
targetState = state.isNextButtonVisible,
|
||||
label = "NextButton",
|
||||
) { isNextButtonVisible ->
|
||||
ButtonFilled(
|
||||
text = stringResource(CommonR.string.account_common_button_next),
|
||||
onClick = { onEvent(Event.NextClicked) },
|
||||
modifier = Modifier.hide(!isNextButtonVisible)
|
||||
.testTagAsResourceId("onboarding_permissions_next_button"),
|
||||
)
|
||||
|
||||
ButtonText(
|
||||
text = stringResource(R.string.onboarding_permissions_skip_button),
|
||||
onClick = { onEvent(Event.NextClicked) },
|
||||
modifier = Modifier.hide(isNextButtonVisible)
|
||||
.testTagAsResourceId("onboarding_permissions_skip_button"),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel
|
||||
|
||||
interface PermissionsContract {
|
||||
interface ViewModel : UnidirectionalViewModel<State, Event, Effect>
|
||||
|
||||
data class State(
|
||||
val isLoading: Boolean = true,
|
||||
val contactsPermissionState: UiPermissionState = UiPermissionState.Unknown,
|
||||
val notificationsPermissionState: UiPermissionState = UiPermissionState.Unknown,
|
||||
val isNotificationsPermissionVisible: Boolean = false,
|
||||
val isNextButtonVisible: Boolean = false,
|
||||
)
|
||||
|
||||
sealed interface Event {
|
||||
data object LoadPermissionState : Event
|
||||
|
||||
data object AllowContactsPermissionClicked : Event
|
||||
data object AllowNotificationsPermissionClicked : Event
|
||||
|
||||
data class ContactsPermissionResult(val success: Boolean) : Event
|
||||
data class NotificationsPermissionResult(val success: Boolean) : Event
|
||||
|
||||
data object NextClicked : Event
|
||||
}
|
||||
|
||||
sealed interface Effect {
|
||||
data object RequestContactsPermission : Effect
|
||||
data object RequestNotificationsPermission : Effect
|
||||
|
||||
data object NavigateNext : Effect
|
||||
}
|
||||
|
||||
enum class UiPermissionState {
|
||||
Unknown,
|
||||
Granted,
|
||||
Denied,
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import android.Manifest
|
||||
import android.os.Build
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.activity.compose.ManagedActivityResultLauncher
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import app.k9mail.core.ui.compose.common.mvi.observe
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.Effect
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.Event
|
||||
import net.thunderbird.core.common.provider.BrandNameProvider
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import org.koin.compose.koinInject
|
||||
|
||||
@Composable
|
||||
fun PermissionsScreen(
|
||||
viewModel: PermissionsContract.ViewModel = koinViewModel<PermissionsViewModel>(),
|
||||
brandNameProvider: BrandNameProvider = koinInject(),
|
||||
onNext: () -> Unit,
|
||||
) {
|
||||
val contactsPermissionLauncher = rememberLauncherForActivityResult(RequestPermission()) { success ->
|
||||
viewModel.event(Event.ContactsPermissionResult(success))
|
||||
}
|
||||
|
||||
val notificationsPermissionLauncher = rememberLauncherForActivityResult(RequestPermission()) { success ->
|
||||
viewModel.event(Event.NotificationsPermissionResult(success))
|
||||
}
|
||||
|
||||
val (state, dispatch) = viewModel.observe { effect ->
|
||||
when (effect) {
|
||||
Effect.RequestContactsPermission -> contactsPermissionLauncher.requestContactsPermission()
|
||||
Effect.RequestNotificationsPermission -> notificationsPermissionLauncher.requestNotificationsPermission()
|
||||
Effect.NavigateNext -> onNext()
|
||||
}
|
||||
}
|
||||
|
||||
BackHandler {
|
||||
// no back navigation
|
||||
}
|
||||
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
dispatch(Event.LoadPermissionState)
|
||||
}
|
||||
|
||||
PermissionsContent(
|
||||
state = state.value,
|
||||
onEvent = dispatch,
|
||||
brandName = brandNameProvider.brandName,
|
||||
)
|
||||
}
|
||||
|
||||
private fun ManagedActivityResultLauncher<String, Boolean>.requestContactsPermission() {
|
||||
launch(Manifest.permission.READ_CONTACTS)
|
||||
}
|
||||
|
||||
private fun ManagedActivityResultLauncher<String, Boolean>.requestNotificationsPermission() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
launch(Manifest.permission.POST_NOTIFICATIONS)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
package app.k9mail.feature.onboarding.permissions.ui
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.k9mail.core.android.permissions.Permission
|
||||
import app.k9mail.core.android.permissions.PermissionState
|
||||
import app.k9mail.core.ui.compose.common.mvi.BaseViewModel
|
||||
import app.k9mail.feature.onboarding.permissions.domain.PermissionsDomainContract.UseCase
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.Effect
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.Event
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.State
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.UiPermissionState
|
||||
import app.k9mail.feature.onboarding.permissions.ui.PermissionsContract.ViewModel
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class PermissionsViewModel(
|
||||
private val checkPermission: UseCase.CheckPermission,
|
||||
private val backgroundDispatcher: CoroutineDispatcher = Dispatchers.IO,
|
||||
) : BaseViewModel<State, Event, Effect>(initialState = State(isLoading = true)), ViewModel {
|
||||
|
||||
override fun event(event: Event) {
|
||||
when (event) {
|
||||
Event.LoadPermissionState -> handleOneTimeEvent(event, ::loadPermissionState)
|
||||
Event.AllowContactsPermissionClicked -> handleAllowContactsPermissionClicked()
|
||||
Event.AllowNotificationsPermissionClicked -> handleAllowNotificationsPermissionClicked()
|
||||
is Event.ContactsPermissionResult -> handleContactsPermissionResult(event.success)
|
||||
is Event.NotificationsPermissionResult -> handleNotificationsPermissionResult(event.success)
|
||||
Event.NextClicked -> handleNextClicked()
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadPermissionState() {
|
||||
viewModelScope.launch {
|
||||
val (contactsPermissionState, notificationsPermissionState) = withContext(backgroundDispatcher) {
|
||||
arrayOf(
|
||||
checkPermission(Permission.Contacts),
|
||||
checkPermission(Permission.Notifications),
|
||||
)
|
||||
}
|
||||
|
||||
val contactsUiPermissionState = when (contactsPermissionState) {
|
||||
PermissionState.GrantedImplicitly -> error("Unexpected case")
|
||||
PermissionState.Granted -> UiPermissionState.Granted
|
||||
PermissionState.Denied -> UiPermissionState.Unknown
|
||||
}
|
||||
val notificationsUiPermissionState = when (notificationsPermissionState) {
|
||||
PermissionState.GrantedImplicitly -> UiPermissionState.Unknown
|
||||
PermissionState.Granted -> UiPermissionState.Granted
|
||||
PermissionState.Denied -> UiPermissionState.Unknown
|
||||
}
|
||||
val isNotificationsPermissionVisible = notificationsPermissionState != PermissionState.GrantedImplicitly
|
||||
|
||||
updateState { state ->
|
||||
state.copy(
|
||||
isLoading = false,
|
||||
contactsPermissionState = contactsUiPermissionState,
|
||||
notificationsPermissionState = notificationsUiPermissionState,
|
||||
isNotificationsPermissionVisible = isNotificationsPermissionVisible,
|
||||
)
|
||||
}
|
||||
updateNextButtonState()
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleAllowContactsPermissionClicked() {
|
||||
emitEffect(Effect.RequestContactsPermission)
|
||||
}
|
||||
|
||||
private fun handleAllowNotificationsPermissionClicked() {
|
||||
emitEffect(Effect.RequestNotificationsPermission)
|
||||
}
|
||||
|
||||
private fun handleContactsPermissionResult(success: Boolean) {
|
||||
updateState { state ->
|
||||
state.copy(
|
||||
contactsPermissionState = if (success) UiPermissionState.Granted else UiPermissionState.Denied,
|
||||
)
|
||||
}
|
||||
updateNextButtonState()
|
||||
}
|
||||
|
||||
private fun handleNotificationsPermissionResult(success: Boolean) {
|
||||
updateState { state ->
|
||||
state.copy(
|
||||
notificationsPermissionState = if (success) UiPermissionState.Granted else UiPermissionState.Denied,
|
||||
)
|
||||
}
|
||||
updateNextButtonState()
|
||||
}
|
||||
|
||||
private fun updateNextButtonState() {
|
||||
updateState { state ->
|
||||
val isContactsPermissionGranted = state.contactsPermissionState == UiPermissionState.Granted
|
||||
val isNotificationsPermissionGrantedOrHidden = !state.isNotificationsPermissionVisible ||
|
||||
state.notificationsPermissionState == UiPermissionState.Granted
|
||||
|
||||
state.copy(
|
||||
isNextButtonVisible = isContactsPermissionGranted && isNotificationsPermissionGrantedOrHidden,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleNextClicked() {
|
||||
emitEffect(Effect.NavigateNext)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_allow_button">اسمح</string>
|
||||
<string name="onboarding_permissions_contacts_title">جهات الاتصال</string>
|
||||
<string name="onboarding_permissions_notifications_title">الإشعارات</string>
|
||||
<string name="onboarding_permissions_notifications_description">قم بتفعيل الإشعارات حتى لا تفوتك أي رسالة.</string>
|
||||
<string name="onboarding_permissions_skip_button">تخطي</string>
|
||||
<string name="onboarding_permissions_screen_title">تحسين التجربة</string>
|
||||
<string name="onboarding_permissions_contacts_description">قم بالسماح بالوصول لإمكانية تقديم اقتراحات جهات الاتصال وعرض أسماء جهات الاتصال وصورهم.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_title">Кантакты</string>
|
||||
<string name="onboarding_permissions_screen_title">Палепшыць досвед</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Предоставете достъп до контактите си, за да можем да покажем техните имена и снимки.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Включете известията, за да не пропускате съобщения.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Известия</string>
|
||||
<string name="onboarding_permissions_screen_title">Подобрете изживяването</string>
|
||||
<string name="onboarding_permissions_contacts_title">Контакти</string>
|
||||
<string name="onboarding_permissions_allow_button">Разрешаване</string>
|
||||
<string name="onboarding_permissions_skip_button">Пропускане</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Gwellaat ar vuhezad</string>
|
||||
<string name="onboarding_permissions_contacts_title">Darempredoù</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakti</string>
|
||||
<string name="onboarding_permissions_contacts_description">Dodijelite pristup kontaktima kako bi vam prikazivali predloge za kontakt, njihova imena i slike.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Obavještenja</string>
|
||||
<string name="onboarding_permissions_notifications_description">Uključite obavještenja kako ne bi ste propustili nijedan mejl.</string>
|
||||
<string name="onboarding_permissions_allow_button">Dozvolite</string>
|
||||
<string name="onboarding_permissions_skip_button">Preskočite</string>
|
||||
<string name="onboarding_permissions_screen_title">Poboljšajte iskustvo</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Permet l\'accés per poder proporcionar suggeriments dels contactes i mostrar-ne els noms i les fotografies.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Activi les notificacions per no perdre\'s cap correu electrònic.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notificacions</string>
|
||||
<string name="onboarding_permissions_screen_title">Millora l\'experiència</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contactes</string>
|
||||
<string name="onboarding_permissions_allow_button">Permetre</string>
|
||||
<string name="onboarding_permissions_skip_button">Ometre</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_title">Cuntatti</string>
|
||||
<string name="onboarding_permissions_contacts_description">Permette l’accessu per prupone suggestioni di cuntattu è per affissà nomi è fotò di i cuntatti.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Attivate e nutificazioni per ùn perde alcunu messaghju.</string>
|
||||
<string name="onboarding_permissions_skip_button">Ignurà</string>
|
||||
<string name="onboarding_permissions_screen_title">Amendà l’esperienza</string>
|
||||
<string name="onboarding_permissions_notifications_title">Nutificazioni</string>
|
||||
<string name="onboarding_permissions_allow_button">Permette</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Povolte přístup pro poskytování návrhů kontaktů a zobrazení jmen a fotografií kontaktů.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Povolte oznámení, ať nezmeškáte žádné e-maily.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Oznámení</string>
|
||||
<string name="onboarding_permissions_screen_title">Vylepšete používání aplikace</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakty</string>
|
||||
<string name="onboarding_permissions_allow_button">Povolit</string>
|
||||
<string name="onboarding_permissions_skip_button">Přeskočit</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Erlaube den Zugriff, um Kontaktvorschläge zu machen und Namen und Fotos von Kontakten anzuzeigen.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Aktiviere Benachrichtigungen, damit du keine E-Mails verpasst.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Benachrichtigungen</string>
|
||||
<string name="onboarding_permissions_screen_title">Verbessere das Erlebnis</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakte</string>
|
||||
<string name="onboarding_permissions_allow_button">Erlauben</string>
|
||||
<string name="onboarding_permissions_skip_button">Überspringen</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_notifications_description">Ενεργοποιήστε τις ειδοποιήσεις για να μη χάσετε κανένα email.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Ειδοποιήσεις</string>
|
||||
<string name="onboarding_permissions_screen_title">Βελτιώστε την εμπειρία</string>
|
||||
<string name="onboarding_permissions_contacts_title">Επαφές</string>
|
||||
<string name="onboarding_permissions_skip_button">Παράλειψη</string>
|
||||
<string name="onboarding_permissions_contacts_description">Επιτρέψτε την πρόσβαση για να λαμβάνετε προτάσεις επαφών και για να εμφανίζονται τα ονόματα / φωτογραφίες.</string>
|
||||
<string name="onboarding_permissions_allow_button">Αποδοχή</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Allow access to be able to provide contact suggestions and to display contact names and photos.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Turn on notifications so you don\'t miss any emails.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notifications</string>
|
||||
<string name="onboarding_permissions_screen_title">Improve the experience</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contacts</string>
|
||||
<string name="onboarding_permissions_allow_button">Allow</string>
|
||||
<string name="onboarding_permissions_skip_button">Skip</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_allow_button">Permesi</string>
|
||||
<string name="onboarding_permissions_skip_button">Preterpasi</string>
|
||||
<string name="onboarding_permissions_notifications_title">Sciigoj</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontaktoj</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Concede el permiso para poder buscar destinatarios entre los contactos y que aparezcan sus nombres y fotos de perfil.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Activa las notificaciones para no perderte ningún correo electrónico.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notificaciones</string>
|
||||
<string name="onboarding_permissions_screen_title">Mejorar la experiencia</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contactos</string>
|
||||
<string name="onboarding_permissions_allow_button">Permitir</string>
|
||||
<string name="onboarding_permissions_skip_button">Omitir</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Luba ligipääs nutiseadme kontaktidele ja kasuta seal leiduvaid kirjeid soovitustena koos nimede ja fotodega.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Lülita sisse teavitused ning ainsamgi kiri ei jää sul märkamata.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Teavitused</string>
|
||||
<string name="onboarding_permissions_screen_title">Kasuta rakendust tõhusamalt</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontaktid</string>
|
||||
<string name="onboarding_permissions_allow_button">Luba</string>
|
||||
<string name="onboarding_permissions_skip_button">Jäta vahele</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Onartu baimena kontaktuen iradokizunak emateko eta kontaktuen izenak eta argazkiak bistaratzeko.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Gaitu jakinarazpenak mezurik ez galtzeko.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Jakinarazpenak</string>
|
||||
<string name="onboarding_permissions_screen_title">Hobetu esperientzia</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontaktuak</string>
|
||||
<string name="onboarding_permissions_allow_button">Onartu</string>
|
||||
<string name="onboarding_permissions_skip_button">Saltatu</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">اجازهٔ دسترسی برای دادن پیشنهاد مخاطب و نمایش نام و عکس آشنایان.</string>
|
||||
<string name="onboarding_permissions_notifications_description">روشن کردن آگاهیها برای از دست ندادن هیچ رایانامهای.</string>
|
||||
<string name="onboarding_permissions_notifications_title">آگاهیها</string>
|
||||
<string name="onboarding_permissions_screen_title">بهبود تجربه</string>
|
||||
<string name="onboarding_permissions_contacts_title">آشنایان</string>
|
||||
<string name="onboarding_permissions_allow_button">اجازه</string>
|
||||
<string name="onboarding_permissions_skip_button">پرش</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_notifications_description">Ota ilmoitukset käyttöön, niin saapuvat viestit eivät jää huomiotta.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Ilmoitukset</string>
|
||||
<string name="onboarding_permissions_screen_title">Paranna kokemusta</string>
|
||||
<string name="onboarding_permissions_contacts_title">Yhteystiedot</string>
|
||||
<string name="onboarding_permissions_allow_button">Salli</string>
|
||||
<string name="onboarding_permissions_skip_button">Ohita</string>
|
||||
<string name="onboarding_permissions_contacts_description">Salli pääsy, jotta voimme näyttää yhteystietoehdotuksia ja yhteystietojen nimet ja kuvat.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Autoriser l’accès afin de donner des suggestions de contact et d’afficher le nom et la photo des contacts.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Activation des notifications afin que vous ne ratiez aucun courriel.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notifications</string>
|
||||
<string name="onboarding_permissions_screen_title">Amélioration de l’expérience</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contacts</string>
|
||||
<string name="onboarding_permissions_allow_button">Autoriser</string>
|
||||
<string name="onboarding_permissions_skip_button">Ignorer</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Jou tagong om suggestjes foar kontakten jaan te kinnen en nammen en foto’s fan kontakten toane te kinnen.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Skeakelje meldingen yn, sadat jo gjin e-mailberjochten misse.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Meldingen</string>
|
||||
<string name="onboarding_permissions_screen_title">Ferbetterje de ûnderfining</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakten</string>
|
||||
<string name="onboarding_permissions_allow_button">Tastean</string>
|
||||
<string name="onboarding_permissions_skip_button">Oerslaan</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_allow_button">Ceadaigh</string>
|
||||
<string name="onboarding_permissions_screen_title">Feabhas a chur ar an taithí</string>
|
||||
<string name="onboarding_permissions_contacts_title">Teagmhálaithe</string>
|
||||
<string name="onboarding_permissions_contacts_description">Ceadaigh rochtain a bheith in ann moltaí teagmhála a sholáthar agus ainmneacha teagmhála agus grianghraif a thaispeáint.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Fógraí</string>
|
||||
<string name="onboarding_permissions_notifications_description">Cuir fógraí ar siúl ionas nach gcaillfidh tú aon ríomhphost.</string>
|
||||
<string name="onboarding_permissions_skip_button">Scipeáil</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Thoir piseach air an àrainneachd</string>
|
||||
<string name="onboarding_permissions_contacts_description">Thoir seachad cead-inntrigidh ma tha thu airson ’s gum mol sinn luchd-aithne dhut agus airson ainmean is dealbhan luchd-aithne fhaicinn.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Cuir na brathan air is chan fhairtlich post-d eile ort.</string>
|
||||
<string name="onboarding_permissions_allow_button">Ceadaich</string>
|
||||
<string name="onboarding_permissions_skip_button">Leum seachad air</string>
|
||||
<string name="onboarding_permissions_contacts_title">Luchd-aithne</string>
|
||||
<string name="onboarding_permissions_notifications_title">Brathan</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">कॉन्टैक्ट जोड़ने की सलाह और कॉन्टैक्ट का नाम और फोटो देख पाने के लिए एक्सेस दें।</string>
|
||||
<string name="onboarding_permissions_notifications_title">नोटिफिकेशन</string>
|
||||
<string name="onboarding_permissions_screen_title">ऐप बेहतर करें</string>
|
||||
<string name="onboarding_permissions_contacts_title">कॉन्टैक्ट</string>
|
||||
<string name="onboarding_permissions_notifications_description">नोटिफिकेशन ऑन करें ताकि आपसे कोई भी ईमेल छूट ना जाएं।</string>
|
||||
<string name="onboarding_permissions_allow_button">दें</string>
|
||||
<string name="onboarding_permissions_skip_button">छोड़ें</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Poboljšajte iskustvo</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakti</string>
|
||||
<string name="onboarding_permissions_notifications_title">Obavijesti</string>
|
||||
<string name="onboarding_permissions_contacts_description">Omogućite pristup kako biste mogli dobivati prijedloge kontakata i prikazivati imena i fotografije kontakata.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Uključite obavijesti kako ne biste propustili nijednu email poruku.</string>
|
||||
<string name="onboarding_permissions_allow_button">Dopusti</string>
|
||||
<string name="onboarding_permissions_skip_button">Preskoči</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Engedélyezze a hozzáférést a névjegyjavaslatok biztosításához, illetve a névjegyek és fényképek megjelenítéséhez.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Kapcsolja be az értesítéseket, hogy ne maradjon le egyetlen levélről sem.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Értesítések</string>
|
||||
<string name="onboarding_permissions_screen_title">Élmény javítása</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kapcsolatok</string>
|
||||
<string name="onboarding_permissions_allow_button">Engedélyezés</string>
|
||||
<string name="onboarding_permissions_skip_button">Kihagyás</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Tingkatkan pengalaman Anda</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontak</string>
|
||||
<string name="onboarding_permissions_contacts_description">Memungkinkan akses agar dapat memberikan saran kontak serta menampilkan nama kontak dan foto.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notifikasi</string>
|
||||
<string name="onboarding_permissions_notifications_description">Menyalakan notifikasi agar Anda tidak melewatkan surel apa pun.</string>
|
||||
<string name="onboarding_permissions_allow_button">Izinkan</string>
|
||||
<string name="onboarding_permissions_skip_button">Lewati</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Heimilaðu aðgang að þeim til að fá tillögur og birtingu á nöfnum tengiliða ásamt myndum.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Kveiktu á tilkynningum svo þú missir ekki af neinum tölvupóstum.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Tilkynningar</string>
|
||||
<string name="onboarding_permissions_screen_title">Bættu upplifunina</string>
|
||||
<string name="onboarding_permissions_contacts_title">Tengiliðir</string>
|
||||
<string name="onboarding_permissions_allow_button">Leyfa</string>
|
||||
<string name="onboarding_permissions_skip_button">Sleppa</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Migliora l\'esperienza</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contatti</string>
|
||||
<string name="onboarding_permissions_contacts_description">Consenti l\'accesso ai contatti per ricevere suggerimenti e visualizzare nomi e foto profilo</string>
|
||||
<string name="onboarding_permissions_notifications_description">Attiva le notifiche per non perdere nessuna email</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notifiche</string>
|
||||
<string name="onboarding_permissions_allow_button">Consenti</string>
|
||||
<string name="onboarding_permissions_skip_button">Salta</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_title">אנשי קשר</string>
|
||||
<string name="onboarding_permissions_notifications_title">התראות</string>
|
||||
<string name="onboarding_permissions_notifications_description">הפעל התראות על מנת לא לפספס אף הודעת דוא\"ל.</string>
|
||||
<string name="onboarding_permissions_allow_button">אפשר</string>
|
||||
<string name="onboarding_permissions_skip_button">דלג</string>
|
||||
<string name="onboarding_permissions_screen_title">לשפר את החוויה</string>
|
||||
<string name="onboarding_permissions_contacts_description">לאפשר גישה על מנת שתוכל לקבל הצעות אנשי קשר ולהציג שמות ותמונות של אנשי קשר.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">アクセスを許可すると、連絡先の候補を表示したり、連絡先の名前や写真を表示できます。</string>
|
||||
<string name="onboarding_permissions_notifications_description">通知をオンにすれば、メールを見逃しません。</string>
|
||||
<string name="onboarding_permissions_notifications_title">通知</string>
|
||||
<string name="onboarding_permissions_screen_title">アプリを使いやすくしましょう</string>
|
||||
<string name="onboarding_permissions_contacts_title">連絡先</string>
|
||||
<string name="onboarding_permissions_allow_button">許可</string>
|
||||
<string name="onboarding_permissions_skip_button">スキップ</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_title">Контакттар</string>
|
||||
<string name="onboarding_permissions_allow_button">Рұқсат ету</string>
|
||||
<string name="onboarding_permissions_skip_button">Аттап кету</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_notifications_title">알림</string>
|
||||
<string name="onboarding_permissions_notifications_description">이메일을 놓치지 않도록 알림을 켜세요.</string>
|
||||
<string name="onboarding_permissions_allow_button">허용</string>
|
||||
<string name="onboarding_permissions_skip_button">건너뛰기</string>
|
||||
<string name="onboarding_permissions_contacts_title">연락처</string>
|
||||
<string name="onboarding_permissions_contacts_description">연락처 추천을 제공하고 이름과 사진을 표시할 수 있도록 액세스를 허용합니다.</string>
|
||||
<string name="onboarding_permissions_screen_title">사용성 개선</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Pagerinkite patirtį</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontaktai</string>
|
||||
<string name="onboarding_permissions_contacts_description">Leiskite prieigą, kad programa galėtų siūlyti laiškų adresatus, rodyti jų vardus ir nuotraukas.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Pranešimai</string>
|
||||
<string name="onboarding_permissions_notifications_description">Įjunkite pranešimus, kad gaunami laiškai neliktų nepastebėti.</string>
|
||||
<string name="onboarding_permissions_allow_button">Leisti</string>
|
||||
<string name="onboarding_permissions_skip_button">Praleisti</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Gi tilgang til å tilby kontaktforslag, og vise kontakters navn og -bilder.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Skru på varsler så du ikke går glipp av noen e-poster.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Varsler</string>
|
||||
<string name="onboarding_permissions_screen_title">Tilpass opplevelsen</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakter</string>
|
||||
<string name="onboarding_permissions_allow_button">Tillat</string>
|
||||
<string name="onboarding_permissions_skip_button">Hopp over</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Geef toegang om suggesties voor contacten te kunnen geven en namen en foto’s van contacten te kunnen tonen.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Schakel meldingen in, zodat u geen e-mailberichten mist.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Meldingen</string>
|
||||
<string name="onboarding_permissions_screen_title">Verbeter de ervaring</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contacten</string>
|
||||
<string name="onboarding_permissions_allow_button">Toestaan</string>
|
||||
<string name="onboarding_permissions_skip_button">Overslaan</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Tilpass opplevinga</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontaktar</string>
|
||||
<string name="onboarding_permissions_allow_button">Tillat</string>
|
||||
<string name="onboarding_permissions_skip_button">Hopp over</string>
|
||||
<string name="onboarding_permissions_contacts_description">Tillat tilgjenge for å vere i stand til å føreslå kontaktar og for å vise kontaktnamn og bilete.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notifikasjonar</string>
|
||||
<string name="onboarding_permissions_notifications_description">Skru på notifikasjonar så du ikkje går glipp av nokon e-postar.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Zezwól na dostęp, aby móc sugerować kontakty oraz wyświetlać ich imiona, nazwiska i zdjęcia.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Włącz powiadomienia, aby nie przegapić żadnych e-maili.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Powiadomienia</string>
|
||||
<string name="onboarding_permissions_screen_title">Popraw doświadczenie</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakty</string>
|
||||
<string name="onboarding_permissions_allow_button">Zezwól</string>
|
||||
<string name="onboarding_permissions_skip_button">Pomiń</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Permitir o acesso para poder fornecer sugestões de contatos e exibir nomes e fotos de contatos.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Ligar as notificações para que não perca qualquer mensagem.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notificações</string>
|
||||
<string name="onboarding_permissions_screen_title">Melhore sua experiência de uso</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contatos</string>
|
||||
<string name="onboarding_permissions_allow_button">Permitir</string>
|
||||
<string name="onboarding_permissions_skip_button">Pular</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Permitir acesso para fornecer sugestões de contactos e visualizar nomes e fotografias dos contactos.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Ligar notificações de modo a não perder nenhuns emails.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notificações</string>
|
||||
<string name="onboarding_permissions_screen_title">Melhorar a experiência</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contactos</string>
|
||||
<string name="onboarding_permissions_allow_button">Permitir</string>
|
||||
<string name="onboarding_permissions_skip_button">Saltar</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Permite accesul pentru a putea oferi sugestii de contact și pentru a afișa numele și fotografiile persoanelor de contact.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Activează notificările pentru a nu pierde niciun e-mail.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Notificări</string>
|
||||
<string name="onboarding_permissions_screen_title">Îmbunătățește experiența</string>
|
||||
<string name="onboarding_permissions_contacts_title">Contacte</string>
|
||||
<string name="onboarding_permissions_allow_button">Permite</string>
|
||||
<string name="onboarding_permissions_skip_button">Omite</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_notifications_title">Уведомления</string>
|
||||
<string name="onboarding_permissions_skip_button">Пропустить</string>
|
||||
<string name="onboarding_permissions_screen_title">Повысить удобство</string>
|
||||
<string name="onboarding_permissions_contacts_title">Контакты</string>
|
||||
<string name="onboarding_permissions_notifications_description">Включите уведомления, чтобы не пропустить ни одного письма.</string>
|
||||
<string name="onboarding_permissions_allow_button">Разрешить</string>
|
||||
<string name="onboarding_permissions_contacts_description">Предоставьте доступ, чтобы иметь возможность предлагать контакты и отображать их имена и фотографии.</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Pomôžte nám zlepšiť aplikáciu</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakty</string>
|
||||
<string name="onboarding_permissions_skip_button">Preskočiť</string>
|
||||
<string name="onboarding_permissions_notifications_description">Povoľte oznámenia, aby ste nezmeškali žiadne emaily.</string>
|
||||
<string name="onboarding_permissions_allow_button">Povoliť</string>
|
||||
<string name="onboarding_permissions_contacts_description">Povoľte prístup na poskytovanie návrhov kontaktov a zobrazenie mien a fotografií kontakov.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Oznámenia</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Izboljšajte izkušnjo</string>
|
||||
<string name="onboarding_permissions_contacts_description">Omogočite dostop, da vam bo program lahko ponudil predloge za stike in prikazal imena in fotografije stikov.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Obvestila</string>
|
||||
<string name="onboarding_permissions_notifications_description">Vklopite obvestila, da ne zgrešite sporočil.</string>
|
||||
<string name="onboarding_permissions_skip_button">Preskoči</string>
|
||||
<string name="onboarding_permissions_contacts_title">Stiki</string>
|
||||
<string name="onboarding_permissions_allow_button">Dovoli</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Lejoni hyrje, për të qenë në gjendje të jepen sugjerime kontaktesh dhe për të shfaqur emra dhe foto kontaktesh.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Aktivizoni njoftimet, që të mos humbni email-e.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Njoftime</string>
|
||||
<string name="onboarding_permissions_screen_title">Përmirësoni përdorimin</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakte</string>
|
||||
<string name="onboarding_permissions_allow_button">Lejoji</string>
|
||||
<string name="onboarding_permissions_skip_button">Anashkaloje</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Побољшајте искуство</string>
|
||||
<string name="onboarding_permissions_contacts_title">Контакти</string>
|
||||
<string name="onboarding_permissions_contacts_description">Дозволите приступ како бисте могли да добијете предлоге контаката и приказ имена и фотографија контаката.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Обавештења</string>
|
||||
<string name="onboarding_permissions_notifications_description">Укључите обавештења како не бисте пропустили ниједан имејл.</string>
|
||||
<string name="onboarding_permissions_allow_button">Дозволи</string>
|
||||
<string name="onboarding_permissions_skip_button">Прескочи</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Tillåt åtkomst för att kunna ge kontaktförslag och visa kontaktnamn och foton.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Slå på aviseringar så att du inte missar några e-postmeddelanden.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Aviseringar</string>
|
||||
<string name="onboarding_permissions_screen_title">Förbättra upplevelsen</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kontakter</string>
|
||||
<string name="onboarding_permissions_allow_button">Tillåt</string>
|
||||
<string name="onboarding_permissions_skip_button">Hoppa över</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">தொடர்பு பரிந்துரைகளை வழங்கவும் தொடர்பு பெயர்கள் மற்றும் புகைப்படங்களைக் காண்பிக்கவும் அணுகலை அனுமதிக்கவும்.</string>
|
||||
<string name="onboarding_permissions_notifications_description">அறிவிப்புகளை இயக்கவும், எனவே நீங்கள் எந்த மின்னஞ்சல்களையும் தவறவிடாதீர்கள்.</string>
|
||||
<string name="onboarding_permissions_allow_button">இசைவு</string>
|
||||
<string name="onboarding_permissions_skip_button">தவிர்</string>
|
||||
<string name="onboarding_permissions_screen_title">அனுபவத்தை மேம்படுத்தவும்</string>
|
||||
<string name="onboarding_permissions_contacts_title">தொடர்புகள்</string>
|
||||
<string name="onboarding_permissions_notifications_title">அறிவிப்புகள்</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Kişi önerileri almak, kişi adlarını ve fotoğraflarını görmek için erişim izni verin.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Hiçbir e-postayı kaçırmamak için bildirimleri açın.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Bildirimler</string>
|
||||
<string name="onboarding_permissions_screen_title">Deneyiminizi iyileştirin</string>
|
||||
<string name="onboarding_permissions_contacts_title">Kişiler</string>
|
||||
<string name="onboarding_permissions_allow_button">İzin ver</string>
|
||||
<string name="onboarding_permissions_skip_button">Atla</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_screen_title">Зробіть користування зручнішим</string>
|
||||
<string name="onboarding_permissions_contacts_title">Контакти</string>
|
||||
<string name="onboarding_permissions_contacts_description">Дозвольте доступ, щоб з\'явилася можливість пропонувати контакти та показувати імена та світлини контактів.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Сповіщення</string>
|
||||
<string name="onboarding_permissions_notifications_description">Увімкніть сповіщення, щоб не пропустити жодного листа.</string>
|
||||
<string name="onboarding_permissions_allow_button">Дозволити</string>
|
||||
<string name="onboarding_permissions_skip_button">Пропустити</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">Cho phép truy cập để có thể cung cấp đề xuất liên hệ và hiển thị tên và ảnh liên hệ.</string>
|
||||
<string name="onboarding_permissions_notifications_description">Bật thông báo để không bỏ lỡ bất kỳ email nào.</string>
|
||||
<string name="onboarding_permissions_notifications_title">Thông báo</string>
|
||||
<string name="onboarding_permissions_screen_title">Cải thiện trải nghiệm</string>
|
||||
<string name="onboarding_permissions_contacts_title">Danh bạ</string>
|
||||
<string name="onboarding_permissions_allow_button">Cho phép</string>
|
||||
<string name="onboarding_permissions_skip_button">Bỏ qua</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">允许访问以便提供联系人建议并显示联系人名称和照片。</string>
|
||||
<string name="onboarding_permissions_notifications_description">打开通知,以免错过任何电子邮件。</string>
|
||||
<string name="onboarding_permissions_notifications_title">通知</string>
|
||||
<string name="onboarding_permissions_screen_title">改善体验</string>
|
||||
<string name="onboarding_permissions_contacts_title">联系人</string>
|
||||
<string name="onboarding_permissions_allow_button">允许</string>
|
||||
<string name="onboarding_permissions_skip_button">跳过</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_permissions_contacts_description">允許訪問能夠提供聯絡人建議並顯示聯絡人姓名和照片。</string>
|
||||
<string name="onboarding_permissions_notifications_description">開啟通知,這樣您就不會錯過任何電子郵件。</string>
|
||||
<string name="onboarding_permissions_notifications_title">通知</string>
|
||||
<string name="onboarding_permissions_screen_title">改善體驗</string>
|
||||
<string name="onboarding_permissions_contacts_title">聯絡人</string>
|
||||
<string name="onboarding_permissions_allow_button">允許</string>
|
||||
<string name="onboarding_permissions_skip_button">跳過</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Title of the onboarding screen to ask for Android permissions -->
|
||||
<string name="onboarding_permissions_screen_title">Improve the experience</string>
|
||||
<!-- Title of the section asking for the permission to read contacts -->
|
||||
<string name="onboarding_permissions_contacts_title">Contacts</string>
|
||||
<!-- Description of why we ask for the permission to read contacts -->
|
||||
<string name="onboarding_permissions_contacts_description">Allow access to be able to provide contact suggestions and to display contact names and photos.</string>
|
||||
<!-- Title of the section asking for permission to post notifications -->
|
||||
<string name="onboarding_permissions_notifications_title">Notifications</string>
|
||||
<!-- Description of why we ask the permission to post notifications -->
|
||||
<string name="onboarding_permissions_notifications_description">Turn on notifications so you don\'t miss any emails.</string>
|
||||
<!-- Text of the button that will trigger the system dialog to ask for an Android permission -->
|
||||
<string name="onboarding_permissions_allow_button">Allow</string>
|
||||
<!-- Text of the button to skip the onboarding screen to ask for Android permissions -->
|
||||
<string name="onboarding_permissions_skip_button">Skip</string>
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue