Compare commits

...

10 Commits

Author SHA1 Message Date
0f77c9cf10 ...
Some checks failed
Deploy static content to Pages / deploy (push) Has been cancelled
2025-07-15 16:09:50 +09:00
Velcorn
109f91059f Translated using Weblate (German)
Currently translated at 100.0% (828 of 828 strings)

Translation: Kvaesitso/i18n
2025-07-14 05:40:06 +00:00
MM20
5aed3a06d9
Merge branch 'main' of github.com:MM2-0/Kvaesitso 2025-07-13 20:56:02 +02:00
MM20
8ae2fc93fc
Bring back clock widget fill height option
Close #1493
2025-07-13 20:55:29 +02:00
lenify
265843f49d Translated using Weblate (Belarusian)
Currently translated at 99.8% (827 of 828 strings)

Translation: Kvaesitso/i18n
2025-07-12 19:36:28 +00:00
lenify
3072b8beb3 Translated using Weblate (Belarusian)
Currently translated at 94.3% (781 of 828 strings)

Translation: Kvaesitso/i18n
2025-07-09 19:23:01 +00:00
Wari
e636b16b0e Translated using Weblate (Thai)
Currently translated at 100.0% (828 of 828 strings)

Translation: Kvaesitso/i18n
2025-07-09 19:23:01 +00:00
OlliesGudh
45bd3b33ae Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (828 of 828 strings)

Translation: Kvaesitso/i18n
2025-07-09 19:23:01 +00:00
Amit Beckenstein
1dd83c726b Translated using Weblate (Hebrew)
Currently translated at 100.0% (828 of 828 strings)

Translation: Kvaesitso/i18n
2025-07-08 06:23:01 +00:00
Bart Libert
9b41912e65 Translated using Weblate (Dutch)
Currently translated at 100.0% (828 of 828 strings)

Translation: Kvaesitso/i18n
2025-07-08 06:23:00 +00:00
69 changed files with 857 additions and 383 deletions

View File

@ -47,17 +47,17 @@ android {
buildTypes { buildTypes {
release { release {
applicationIdSuffix = ".release" isMinifyEnabled = false
isShrinkResources = false
postprocessing { // proguardFiles(
isRemoveUnusedCode = true // getDefaultProguardFile("proguard-android-optimize.txt"),
isObfuscate = false // "proguard-rules.pro"
isOptimizeCode = true // )
}
} }
debug { debug {
applicationIdSuffix = ".debug"
isDebuggable = true isDebuggable = true
isMinifyEnabled = false
isShrinkResources = false
} }
create("nightly") { create("nightly") {
initWith(getByName("release")) initWith(getByName("release"))

View File

@ -16,18 +16,26 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") // //consumerProguardFiles("consumer-rules.pro")
signingConfig = signingConfigs.getByName("debug") signingConfig = signingConfigs.getByName("debug")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
create("nightly") { create("nightly") {
isMinifyEnabled = false
isShrinkResources = false
initWith(getByName("release")) initWith(getByName("release"))
matchingFallbacks += "release" matchingFallbacks += "release"
} }

View File

@ -1,18 +1,17 @@
package de.mm20.launcher2.ui.launcher.scaffold package de.mm20.launcher2.ui.launcher.scaffold
import android.annotation.SuppressLint
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.expandVertically import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@ -26,6 +25,7 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableIntStateOf
@ -35,17 +35,18 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex import androidx.compose.ui.zIndex
import de.mm20.launcher2.preferences.ui.ClockWidgetSettings
import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.launcher.widgets.WidgetColumn import de.mm20.launcher2.ui.launcher.widgets.WidgetColumn
import de.mm20.launcher2.ui.launcher.widgets.clock.ClockWidget import de.mm20.launcher2.ui.launcher.widgets.clock.ClockWidget
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.koin.compose.koinInject
internal object ClockAndWidgetsHomeComponent: ScaffoldComponent() { internal object ClockAndWidgetsHomeComponent : ScaffoldComponent() {
private var editMode by mutableStateOf(false) private var editMode by mutableStateOf(false)
private val scrollState = ScrollState(0) private val scrollState = ScrollState(0)
@ -54,7 +55,7 @@ internal object ClockAndWidgetsHomeComponent: ScaffoldComponent() {
} }
override val isAtBottom: State<Boolean?> = derivedStateOf { override val isAtBottom: State<Boolean?> = derivedStateOf {
!scrollState.canScrollForward !scrollState.canScrollForward || scrollState.value == 0
} }
override val drawBackground: Boolean = false override val drawBackground: Boolean = false
@ -72,11 +73,19 @@ internal object ClockAndWidgetsHomeComponent: ScaffoldComponent() {
) { ) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val topPadding by animateDpAsState(if (editMode) 80.dp else 0.dp) val clockWidgetSettings: ClockWidgetSettings = koinInject()
val fillHeight by clockWidgetSettings.fillHeight.collectAsState(null)
if (fillHeight == null) return
val topPadding by animateDpAsState(if (editMode) 80.dp else 0.dp)
val previousScroll = remember { mutableIntStateOf(scrollState.value) } val previousScroll = remember { mutableIntStateOf(scrollState.value) }
LaunchedEffect(scrollState.value, scrollState.canScrollForward, scrollState.canScrollBackward) { LaunchedEffect(
scrollState.value,
scrollState.canScrollForward,
scrollState.canScrollBackward
) {
val delta = scrollState.value - previousScroll.intValue val delta = scrollState.value - previousScroll.intValue
previousScroll.intValue = scrollState.value previousScroll.intValue = scrollState.value
if (!editMode) { if (!editMode) {
@ -92,8 +101,15 @@ internal object ClockAndWidgetsHomeComponent: ScaffoldComponent() {
.padding(insets), .padding(insets),
) { ) {
ClockWidget( ClockWidget(
modifier = Modifier
.fillMaxWidth()
then if (fillHeight == true) Modifier.height(
state.size.height.toDp() - insets.calculateTopPadding()
).padding(
bottom = insets.calculateBottomPadding()
) else Modifier,
editMode = editMode, editMode = editMode,
fillScreenHeight = false, fillScreenHeight = fillHeight == true,
) )
WidgetColumn( WidgetColumn(
modifier = Modifier modifier = Modifier
@ -126,7 +142,10 @@ internal object ClockAndWidgetsHomeComponent: ScaffoldComponent() {
scope.launch { state.unlock() } scope.launch { state.unlock() }
} }
) { ) {
Icon(Icons.AutoMirrored.Rounded.ArrowBack, stringResource(R.string.action_done)) Icon(
Icons.AutoMirrored.Rounded.ArrowBack,
stringResource(R.string.action_done)
)
} }
}, },
colors = TopAppBarDefaults.topAppBarColors( colors = TopAppBarDefaults.topAppBarColors(

View File

@ -293,7 +293,6 @@ fun ColumnScope.ConfigureAppWidget(
val widgetInfo = remember(widget.config.widgetId) { val widgetInfo = remember(widget.config.widgetId) {
AppWidgetManager.getInstance(context).getAppWidgetInfo(widget.config.widgetId) AppWidgetManager.getInstance(context).getAppWidgetInfo(widget.config.widgetId)
} }
if (widgetInfo == null) { if (widgetInfo == null) {
var replaceWidget by rememberSaveable { var replaceWidget by rememberSaveable {
mutableStateOf(false) mutableStateOf(false)
@ -365,6 +364,7 @@ fun ColumnScope.ConfigureAppWidget(
} }
AppWidgetHost( AppWidgetHost(
widgetInfo = widgetInfo, widgetInfo = widgetInfo,
widgetId = widget.config.widgetId, widgetId = widget.config.widgetId,
modifier = Modifier modifier = Modifier

View File

@ -24,10 +24,10 @@ import androidx.compose.material.icons.rounded.AlignVerticalBottom
import androidx.compose.material.icons.rounded.AlignVerticalCenter import androidx.compose.material.icons.rounded.AlignVerticalCenter
import androidx.compose.material.icons.rounded.AlignVerticalTop import androidx.compose.material.icons.rounded.AlignVerticalTop
import androidx.compose.material.icons.rounded.AutoAwesome import androidx.compose.material.icons.rounded.AutoAwesome
import androidx.compose.material.icons.rounded.AvTimer
import androidx.compose.material.icons.rounded.BatteryFull import androidx.compose.material.icons.rounded.BatteryFull
import androidx.compose.material.icons.rounded.ColorLens import androidx.compose.material.icons.rounded.ColorLens
import androidx.compose.material.icons.rounded.DarkMode import androidx.compose.material.icons.rounded.DarkMode
import androidx.compose.material.icons.rounded.Height
import androidx.compose.material.icons.rounded.HorizontalSplit import androidx.compose.material.icons.rounded.HorizontalSplit
import androidx.compose.material.icons.rounded.LightMode import androidx.compose.material.icons.rounded.LightMode
import androidx.compose.material.icons.rounded.MusicNote import androidx.compose.material.icons.rounded.MusicNote
@ -363,6 +363,7 @@ fun ConfigureClockWidgetSheet(
val color by viewModel.color.collectAsState() val color by viewModel.color.collectAsState()
val style by viewModel.clockStyle.collectAsState() val style by viewModel.clockStyle.collectAsState()
val fillHeight by viewModel.fillHeight.collectAsState() val fillHeight by viewModel.fillHeight.collectAsState()
val widgetsOnHome by viewModel.widgetsOnHome.collectAsState()
val alignment by viewModel.alignment.collectAsState() val alignment by viewModel.alignment.collectAsState()
val showSeconds by viewModel.showSeconds.collectAsState() val showSeconds by viewModel.showSeconds.collectAsState()
val timeFormat by viewModel.timeFormat.collectAsState() val timeFormat by viewModel.timeFormat.collectAsState()
@ -564,71 +565,79 @@ fun ConfigureClockWidgetSheet(
} }
} }
} }
if (fillHeight == true) { OutlinedCard(
OutlinedCard( modifier = Modifier.padding(top = 16.dp),
modifier = Modifier.padding(top = 16.dp), ) {
Column(
modifier = Modifier.fillMaxWidth()
) { ) {
Column( SwitchPreference(
modifier = Modifier.fillMaxWidth() title = stringResource(R.string.preference_clock_widget_fill_height),
) { icon = Icons.Rounded.Height,
var showDropdown by remember { mutableStateOf(false) } value = fillHeight == true || widgetsOnHome == false,
Preference( onValueChanged = {
title = stringResource(R.string.preference_clock_widget_alignment), viewModel.setFillHeight(it)
summary = when (alignment) { },
ClockWidgetAlignment.Top -> stringResource(R.string.preference_clock_widget_alignment_top) enabled = widgetsOnHome == true,
ClockWidgetAlignment.Center -> stringResource(R.string.preference_clock_widget_alignment_center) )
else -> stringResource(R.string.preference_clock_widget_alignment_bottom) var showDropdown by remember { mutableStateOf(false) }
}, Preference(
icon = when (alignment) { title = stringResource(R.string.preference_clock_widget_alignment),
ClockWidgetAlignment.Top -> Icons.Rounded.AlignVerticalTop summary = when (alignment) {
ClockWidgetAlignment.Center -> Icons.Rounded.AlignVerticalCenter ClockWidgetAlignment.Top -> stringResource(R.string.preference_clock_widget_alignment_top)
else -> Icons.Rounded.AlignVerticalBottom ClockWidgetAlignment.Center -> stringResource(R.string.preference_clock_widget_alignment_center)
else -> stringResource(R.string.preference_clock_widget_alignment_bottom)
},
icon = when (alignment) {
ClockWidgetAlignment.Top -> Icons.Rounded.AlignVerticalTop
ClockWidgetAlignment.Center -> Icons.Rounded.AlignVerticalCenter
else -> Icons.Rounded.AlignVerticalBottom
},
onClick = {
showDropdown = true
},
enabled = fillHeight == true,
)
DropdownMenu(
expanded = showDropdown,
onDismissRequest = { showDropdown = false }) {
DropdownMenuItem(
leadingIcon = {
Icon(
Icons.Rounded.AlignVerticalTop,
null
)
}, },
text = { Text(stringResource(R.string.preference_clock_widget_alignment_top)) },
onClick = { onClick = {
showDropdown = true viewModel.setAlignment(ClockWidgetAlignment.Top)
showDropdown = false
} }
) )
DropdownMenu( DropdownMenuItem(
expanded = showDropdown, leadingIcon = {
onDismissRequest = { showDropdown = false }) { Icon(
DropdownMenuItem( Icons.Rounded.AlignVerticalCenter,
leadingIcon = { null
Icon( )
Icons.Rounded.AlignVerticalTop, },
null text = { Text(stringResource(R.string.preference_clock_widget_alignment_center)) },
) onClick = {
}, viewModel.setAlignment(ClockWidgetAlignment.Center)
text = { Text(stringResource(R.string.preference_clock_widget_alignment_top)) }, showDropdown = false
onClick = { })
viewModel.setAlignment(ClockWidgetAlignment.Top) DropdownMenuItem(
showDropdown = false leadingIcon = {
} Icon(
) Icons.Rounded.AlignVerticalBottom,
DropdownMenuItem( null
leadingIcon = { )
Icon( },
Icons.Rounded.AlignVerticalCenter, text = { Text(stringResource(R.string.preference_clock_widget_alignment_bottom)) },
null onClick = {
) viewModel.setAlignment(ClockWidgetAlignment.Bottom)
}, showDropdown = false
text = { Text(stringResource(R.string.preference_clock_widget_alignment_center)) }, })
onClick = {
viewModel.setAlignment(ClockWidgetAlignment.Center)
showDropdown = false
})
DropdownMenuItem(
leadingIcon = {
Icon(
Icons.Rounded.AlignVerticalBottom,
null
)
},
text = { Text(stringResource(R.string.preference_clock_widget_alignment_bottom)) },
onClick = {
viewModel.setAlignment(ClockWidgetAlignment.Bottom)
showDropdown = false
})
}
} }
} }
} }

View File

@ -7,6 +7,7 @@ import de.mm20.launcher2.preferences.ClockWidgetColors
import de.mm20.launcher2.preferences.ClockWidgetStyle import de.mm20.launcher2.preferences.ClockWidgetStyle
import de.mm20.launcher2.preferences.TimeFormat import de.mm20.launcher2.preferences.TimeFormat
import de.mm20.launcher2.preferences.ui.ClockWidgetSettings import de.mm20.launcher2.preferences.ui.ClockWidgetSettings
import de.mm20.launcher2.preferences.ui.UiSettings
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
@ -15,6 +16,8 @@ import org.koin.core.component.inject
class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent { class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
private val settings: ClockWidgetSettings by inject() private val settings: ClockWidgetSettings by inject()
private val uiSettings: UiSettings by inject()
val compact = settings.compact val compact = settings.compact
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setCompact(compact: Boolean) { fun setCompact(compact: Boolean) {
@ -68,9 +71,16 @@ class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
settings.setUseThemeColor(boolean) settings.setUseThemeColor(boolean)
} }
val widgetsOnHome = uiSettings.homeScreenWidgets
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
val fillHeight = settings.fillHeight val fillHeight = settings.fillHeight
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setFillHeight(fillHeight: Boolean) {
settings.setFillHeight(fillHeight)
}
val parts = settings.parts val parts = settings.parts
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") // //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
create("nightly") { create("nightly") {
initWith(getByName("release")) initWith(getByName("release"))

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") // //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") // //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,16 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
isMinifyEnabled = false isMinifyEnabled = false
proguardFiles( isShrinkResources = false
getDefaultProguardFile("proguard-android-optimize.txt"), // proguardFiles(
"proguard-rules.pro" // getDefaultProguardFile("proguard-android-optimize.txt"),
) // "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }
compileOptions { compileOptions {

View File

@ -20,7 +20,9 @@ import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.flow.channelFlow
import de.mm20.launcher2.ktx.foldOrNull import de.mm20.launcher2.ktx.foldOrNull
import de.mm20.launcher2.ktx.isBetterThan import de.mm20.launcher2.ktx.isBetterThan
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.withContext
import java.util.concurrent.locks.ReentrantReadWriteLock import java.util.concurrent.locks.ReentrantReadWriteLock
import kotlin.concurrent.read import kotlin.concurrent.read
import kotlin.concurrent.write import kotlin.concurrent.write
@ -78,20 +80,24 @@ class DevicePoseProvider internal constructor(
} }
if (hasFineAccess) { if (hasFineAccess) {
requestLocationUpdates( withContext(Dispatchers.Main) {
LocationManager.GPS_PROVIDER, requestLocationUpdates(
minTimeMs, LocationManager.GPS_PROVIDER,
minDistanceM, minTimeMs,
locationCallback minDistanceM,
) locationCallback
)
}
} }
if (hasCoarseAccess) { if (hasCoarseAccess) {
requestLocationUpdates( withContext(Dispatchers.Main) {
LocationManager.NETWORK_PROVIDER, requestLocationUpdates(
minTimeMs, LocationManager.NETWORK_PROVIDER,
minDistanceM, minTimeMs,
locationCallback minDistanceM,
) locationCallback
)
}
} }
}?.onFailure { }?.onFailure {
Log.e("DevicePoseProvider", "Failed to register location listener", it) Log.e("DevicePoseProvider", "Failed to register location listener", it)

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -18,7 +18,7 @@
<string name="menu_customize">Дапасаваць</string> <string name="menu_customize">Дапасаваць</string>
<string name="menu_open_file">Адкрыць</string> <string name="menu_open_file">Адкрыць</string>
<string name="menu_map">Праглядзець на мапе</string> <string name="menu_map">Праглядзець на мапе</string>
<string name="menu_website">Адкрыць вэбсайт</string> <string name="menu_website">Адкрыць вэб-сайт</string>
<string name="action_undo">Скасаваць</string> <string name="action_undo">Скасаваць</string>
<string name="menu_delete">Выдаліць</string> <string name="menu_delete">Выдаліць</string>
<string name="menu_favorites_unpin">Адмацаваць</string> <string name="menu_favorites_unpin">Адмацаваць</string>
@ -188,13 +188,13 @@
<string name="weather_no_data">Няма даных аб надвор\'і.</string> <string name="weather_no_data">Няма даных аб надвор\'і.</string>
<string name="weather_widget_set_location">Абраць месцазнаходжанне</string> <string name="weather_widget_set_location">Абраць месцазнаходжанне</string>
<string name="weather_location_search_no_result">Месцазнаходжанне ня знойдзена.</string> <string name="weather_location_search_no_result">Месцазнаходжанне ня знойдзена.</string>
<string name="missing_permission_contact_search_settings">Доступ да кантактаў патрэбны для іх пошуку</string> <string name="missing_permission_contact_search_settings">Для пошуку кантактаў патрэбны доступ да кантактнай кнігі</string>
<string name="missing_permission_calendar_search_settings">Доступ да календара патрэбны для пошуку праз каляндар</string> <string name="missing_permission_calendar_search_settings">Для пошуку праз каляндар патрэбны доступ да календара</string>
<string name="missing_permission_auto_location">Доступ да месцазнаходжання патрэбны для яго аўтаматычнага вызначэння</string> <string name="missing_permission_auto_location">Для аўтаматычнага вызначэння лакацыі патрэбны доступ да месцазнаходжання</string>
<string name="missing_permission_music_widget">Доступ да апавяшчэнняў патрэбны для кіравання прайграваннем медыя</string> <string name="missing_permission_music_widget">Для кіравання прайграваннем медыя патрэбны доступ да апавяшчэнняў</string>
<string name="widget_config_calendar_missing_calendars_hint">Не можаце знайсці свае календары?</string> <string name="widget_config_calendar_missing_calendars_hint">Не можаце знайсці свае календары?</string>
<string name="missing_permission_appshortcuts_search_settings">%1$s павінна быць стандартнай праграмай галоўнага экрана для пошуку ярлыкоў</string> <string name="missing_permission_appshortcuts_search_settings">%1$s павінна быць стандартнай праграмай галоўнага экрана для пошуку ярлыкоў</string>
<string name="missing_permission_file_search_settings">Доступ да файлаў патрэбны для пошуку праз лакальныя файлы</string> <string name="missing_permission_file_search_settings">Для пошуку праз лакальныя файлы патрэбны доступ да файлаў</string>
<string name="missing_permission_calendar_widget_settings">Гэтаму віджэту патрэбны доступ да календара</string> <string name="missing_permission_calendar_widget_settings">Гэтаму віджэту патрэбны доступ да календара</string>
<string name="disclaimer">Адмова ад адказнасці</string> <string name="disclaimer">Адмова ад адказнасці</string>
<string name="show_all">Паказаць усе</string> <string name="show_all">Паказаць усе</string>
@ -217,8 +217,8 @@
<item quantity="many">+%1$d бягучых падзей з тых часоў</item> <item quantity="many">+%1$d бягучых падзей з тых часоў</item>
<item quantity="other">+%1$d бягучых падзей з тых часоў</item> <item quantity="other">+%1$d бягучых падзей з тых часоў</item>
</plurals> </plurals>
<string name="missing_permission_file_search_settings_android10">Доступ да ўсіх файлаў патрэбны для пошуку праз лакальныя файлы</string> <string name="missing_permission_file_search_settings_android10">Для пошуку праз лакальныя файлы патрэбны доступ да ўсіх файлаў</string>
<string name="missing_permission_notification_badges">Доступ да апавяшчэнняў патрэбны для адлюстроўвання бэйджаў апавяшчэнняў на значках</string> <string name="missing_permission_notification_badges">Для адлюстравання бэйджаў апавяшчэнняў на значках патрэбны доступ да апавяшчэнняў</string>
<string name="missing_permission_calendar_widget">Дайце дазвол на доступ да календару, каб тут паказваліся будучыя сустрэчы і падзеі.</string> <string name="missing_permission_calendar_widget">Дайце дазвол на доступ да календару, каб тут паказваліся будучыя сустрэчы і падзеі.</string>
<string name="missing_permission_calendar_search">Дайце дазвол на доступ да календару, каб выконваць пошук праз ваш каляндар.</string> <string name="missing_permission_calendar_search">Дайце дазвол на доступ да календару, каб выконваць пошук праз ваш каляндар.</string>
<string name="missing_permission_location_search">Дайце дазвол на доступ да месцазнаходжання, каб шукаць праз бліжайшыя месцы.</string> <string name="missing_permission_location_search">Дайце дазвол на доступ да месцазнаходжання, каб шукаць праз бліжайшыя месцы.</string>
@ -279,8 +279,8 @@
<string name="preference_debug_dump_heap">Здымак памяці</string> <string name="preference_debug_dump_heap">Здымак памяці</string>
<string name="preference_debug_dump_heap_summary">Зрабіце хуткі здымак, каб аналізаваць выкарыстоўванне памяці. Праграма не будзе адказваць, пакуль працэс не завяршыцца.</string> <string name="preference_debug_dump_heap_summary">Зрабіце хуткі здымак, каб аналізаваць выкарыстоўванне памяці. Праграма не будзе адказваць, пакуль працэс не завяршыцца.</string>
<string name="preference_debug_dump_heap_in_progress">Здымаецца…</string> <string name="preference_debug_dump_heap_in_progress">Здымаецца…</string>
<string name="preference_debug_cleanup_database">Ачысціць базу дадзеных</string> <string name="preference_debug_cleanup_database">Ачысціць базу даных</string>
<string name="preference_debug_cleanup_database_summary">Выдаліць зламаныя і неўжываныя пункты з базы дадзеных праграмы запуску</string> <string name="preference_debug_cleanup_database_summary">Выдаліць зламаныя і неўжываныя пункты з базы даных праграмы запуску</string>
<string name="preference_debug_reinstall_iconpacks">Пераўсталяваць пакеты значкоў</string> <string name="preference_debug_reinstall_iconpacks">Пераўсталяваць пакеты значкоў</string>
<string name="preference_debug_reinstall_iconpacks_summary">Ачысціць і стварыць нанава кэш пакетаў значкоў</string> <string name="preference_debug_reinstall_iconpacks_summary">Ачысціць і стварыць нанава кэш пакетаў значкоў</string>
<string name="preference_category_icons">Значкі</string> <string name="preference_category_icons">Значкі</string>
@ -388,11 +388,11 @@
<string name="preference_category_license">Ліцэнзія</string> <string name="preference_category_license">Ліцэнзія</string>
<string name="preference_clockwidget_music_part_summary">Адлюстроўвае кнопкі для кіравання мультымедыя, калі ёсць актыўны сеанс медыя</string> <string name="preference_clockwidget_music_part_summary">Адлюстроўвае кнопкі для кіравання мультымедыя, калі ёсць актыўны сеанс медыя</string>
<string name="preference_screen_backup">Рэзэрвовае капіраванне і аднаўленне</string> <string name="preference_screen_backup">Рэзэрвовае капіраванне і аднаўленне</string>
<string name="preference_screen_backup_summary">Экспарт і імпарт дадзеных праграмы запуску</string> <string name="preference_screen_backup_summary">Экспарт і імпарт даных праграмы запуску</string>
<string name="preference_clockwidget_battery_part_summary">Адлюстроўвае бягучы зарад батарэі, калі ён нізкі, або калі прылада зараджаецца</string> <string name="preference_clockwidget_battery_part_summary">Адлюстроўвае бягучы зарад батарэі, калі ён нізкі, або калі прылада зараджаецца</string>
<string name="preference_clockwidget_alarm_part_summary">Адлюстроўвае будзільнікі, якія празвоняць меньш чым праз 8 гадзін</string> <string name="preference_clockwidget_alarm_part_summary">Адлюстроўвае будзільнікі, якія празвоняць меньш чым праз 8 гадзін</string>
<string name="preference_clockwidget_battery_part">Батарэя</string> <string name="preference_clockwidget_battery_part">Батарэя</string>
<string name="preference_backup_summary">Экспартаваць налады і дадзеныя праграмы запуску</string> <string name="preference_backup_summary">Экспартаваць налады і даныя праграмы запуску</string>
<string name="preference_restore">Аднаўленне</string> <string name="preference_restore">Аднаўленне</string>
<string name="preference_restore_summary">Аднавіць з дапамогай раней створанай рэзервовай копіі</string> <string name="preference_restore_summary">Аднавіць з дапамогай раней створанай рэзервовай копіі</string>
<string name="preference_backup">Рэзервовае капіраванне</string> <string name="preference_backup">Рэзервовае капіраванне</string>
@ -467,7 +467,7 @@
<string name="backup_complete">Рэзервовае капіяванне скончана.</string> <string name="backup_complete">Рэзервовае капіяванне скончана.</string>
<string name="restore_invalid_file">Здаецца, выбраны файл не з\'яўляецца рэзервовай копіяй. Вы ўпэўнены, што выбралі пэўны файл?</string> <string name="restore_invalid_file">Здаецца, выбраны файл не з\'яўляецца рэзервовай копіяй. Вы ўпэўнены, што выбралі пэўны файл?</string>
<string name="preference_favorites_edit_button_summary">Паказваць кнопку рэдагавання абраных</string> <string name="preference_favorites_edit_button_summary">Паказваць кнопку рэдагавання абраных</string>
<string name="restore_different_minor_version">Гэты бэкап быў створаны з іншай версіі %1$s. Некаторыя дадзеныя могуць не аднавіцца пэўна.</string> <string name="restore_different_minor_version">Гэты бэкап быў створаны з іншай версіі %1$s. Некаторыя даныя могуць не аднавіцца пэўна.</string>
<plurals name="battery_part_remaining_charge_time"> <plurals name="battery_part_remaining_charge_time">
<item quantity="one">Зарадзіцца поўнасцю праз %1$s хвіліну</item> <item quantity="one">Зарадзіцца поўнасцю праз %1$s хвіліну</item>
<item quantity="few">Зарадзіцца поўнасцю праз %1$s хвіліны</item> <item quantity="few">Зарадзіцца поўнасцю праз %1$s хвіліны</item>
@ -623,9 +623,9 @@
<string name="preference_search_location_custom_tile_server_url">Спасылка на Tileserver</string> <string name="preference_search_location_custom_tile_server_url">Спасылка на Tileserver</string>
<string name="menu_navigation">Навігацыя</string> <string name="menu_navigation">Навігацыя</string>
<string name="menu_bugreport">Справаздача аб памылцы</string> <string name="menu_bugreport">Справаздача аб памылцы</string>
<string name="plugin_type_filesearch">Пошук файлаў</string> <string name="plugin_type_filesearch">Файлы</string>
<string name="clock_style_digital1">Тоўсты</string> <string name="clock_style_digital1">Тоўсты</string>
<string name="clock_style_digital2">Звычайны</string> <string name="clock_style_digital2">Просты</string>
<string name="clock_style_orbit">Арбітальны</string> <string name="clock_style_orbit">Арбітальны</string>
<string name="preference_customize_filter_bar_summary">Дапасуйце элементы ў панэлі фільтраў</string> <string name="preference_customize_filter_bar_summary">Дапасуйце элементы ў панэлі фільтраў</string>
<string name="clock_style_custom">Уласны віджэт</string> <string name="clock_style_custom">Уласны віджэт</string>
@ -801,4 +801,86 @@
</plurals> </plurals>
<string name="weather_widget_no_provider">Правайдара надвор\'я не выбрана, альбо выбраны правайдар недаступны</string> <string name="weather_widget_no_provider">Правайдара надвор\'я не выбрана, альбо выбраны правайдар недаступны</string>
<string name="widget_removed">Віджэт выдалены</string> <string name="widget_removed">Віджэт выдалены</string>
<string name="preference_screen_shapes">Фігуры</string>
<string name="preference_shapes_rect">Прамавугольныя</string>
<string name="preference_shapes_extra_round">Вельмі скругленыя</string>
<string name="preference_shapes_base">Стандартная фігура</string>
<string name="weather_condition_thunder">Гром</string>
<string name="weather_condition_haze">Смуга</string>
<string name="preference_location_breezy">Кіраванне месцазнаходжаннем у Breezy Weather</string>
<string name="provider_breezy">Breezy Weather</string>
<string name="action_install">Усталяваць</string>
<string name="preference_colors_high_contrast">Высокі кантраст</string>
<string name="music_widget_interactive_progress_bar">Інтэрактыўная панэль выканання</string>
<string name="missing_permission_tasks_integration">Для інтэграцыі з задачамі патрэбны доступ да заданняў</string>
<string name="preference_shapes_default">Прадвызначаныя</string>
<string name="preference_grid_list_style">Паказваць праграмы спісам</string>
<string name="preference_transparencies_default">Прадвызначана</string>
<string name="preference_transparencies_semi_transparent">Паўпразрыста</string>
<string name="preference_screen_transparencies">Празрыстасць</string>
<string name="no_selection">Не выбрана</string>
<string name="save_as_file">Захаваць у файл</string>
<plurals name="calendar_widget_running_tasks">
<item quantity="one">+%1$d незавершаная задача</item>
<item quantity="few">+%1$d незавершаныя задачы</item>
<item quantity="many">+%1$d незавершаных задач</item>
<item quantity="other">+%1$d незавершаных задач</item>
</plurals>
<string name="missing_permission_tasks_search_settings">Для пошуку праз заданні патрэбны доступ да заданняў</string>
<string name="preference_screen_typography">Тыпаграфія</string>
<string name="preference_grid_list_icons">Паказваць значкі праграм спісам</string>
<string name="preference_grid_list_style_summary">Паказваць праграмы спісам замест сеткі</string>
<string name="preference_grid_list_icons_summary">Паказваць значкі пры праглядзе спісам</string>
<string name="missing_permission_call_contacts_settings">Для выканання выклікаў патрэбны доступ да тэлефону</string>
<string name="departure_time_now">зараз</string>
<string name="import_theme_contents">Змесціва</string>
<string name="preference_launch_breezyweather_app">Адкрыць Breezy Weather</string>
<string name="preference_launch_tasks_app">Адкрыць Tasks</string>
<string name="plugin_type_contacts">Кантакты</string>
<string name="bad_configuration_title">Віншую, вы закрылі самі сябе!</string>
<string name="preference_breezyweather_integration_description">Breezy Weather гэта бясплатная праграма з адкрытым зыходным кодам для паказу надвор\'я. Калі яна ўсталяваная, %1$s можа выкарыстоўваць Breezy Weather як крыніцу даных аб надвор\'і.</string>
<plurals name="departure_time_in">
<item quantity="one">праз %1$d хвіліну</item>
<item quantity="few">праз %1$d хвіліны</item>
<item quantity="many">праз %1$d хвілін</item>
<item quantity="other">праз %1$d хвілін</item>
</plurals>
<string name="preference_search_tasks">Задачы</string>
<string name="preference_tasks_integration_ready">Інтэграцыя з Tasks поўнасцю наладжаная і гатовая да выкарыстання.</string>
<string name="preference_search_tasks_summary">Шукаць задачы ў праграме \"Tasks\"</string>
<string name="clock_variant_analog_ticks">Цікі</string>
<string name="departure_time_departed">адправіўся</string>
<string name="preference_search_local_calendar_summary">Пошук праз календары на гэтай прыладзе</string>
<string name="preference_contacts_call_on_tap_summary">Выклікаць адразу пасля націскання на нумар</string>
<string name="confirmation_delete_transparencies_scheme">Вы сапраўды хочаце выдаліць схему празрыстасці \"%1$s\"?</string>
<string name="preference_breezyweather_integration">Breezy Weather</string>
<string name="new_theme_name">(без назвы)</string>
<string name="theme_export_title">Экспартаваць тэму</string>
<string name="theme_bundle_name">Назва</string>
<string name="theme_bundle_author">Аўтар</string>
<string name="import_theme_exists">Тэма ўжо існуе, таму будзе абноўлена</string>
<string name="theme_import_title">Імпартаваць тэму</string>
<string name="preference_breezyweather_integration_instructions">Каб выкарыстоўваць Breezy Weather як пастаўшчыка даных аб надвор\'і:\n\n1. Перайдзіце ў Breezy Weather &gt; Налады &gt; Віджэты і жывыя шпалеры &gt; Адпраўляць даныя пра надвор’е ў Gadgetbridge &gt; Уключыць %1$s\n\n2. Выберыце Breezy Weather як пастаўшчыка надвор\'я ў %1$s</string>
<string name="preference_tasks_integration">Tasks</string>
<string name="preference_tasks_integration_description">Tasks гэта бясплатная праграма з адкрытым зыходным кодам для вядзення спіса задач і стварэння напамінаў. Калі яна ўсталяваная, %1$s можа паказваць задачы адтуль у пошуку.</string>
<string name="confirmation_delete_shapes_scheme">Вы сапраўды хочаце выдаліць схему фігур \"%1$s\"?</string>
<string name="confirmation_delete_typography_scheme">Вы сапраўды хочаце выдаліць схему тыпаграфіі \"%1$s\"?</string>
<string name="font_name_device_headline">Стандартны шрыфт загалоўкаў</string>
<string name="font_name_device_body">Шрыфт тэксту прылады</string>
<string name="preference_typography_fonts">Шрыфты</string>
<string name="font_category_device_default">Налады прылады</string>
<string name="preference_contacts_call_on_tap">Націсніце, каб выклікнуць</string>
<string name="preference_clock_widget_time_format_system">Сістэмны фармат</string>
<string name="preference_clock_widget_time_format">Фармат часу</string>
<string name="preference_clock_widget_time_format_24h">24 гадзіны</string>
<string name="preference_clock_widget_time_format_12h">12 гадзін</string>
<string name="preference_widgets_on_home_screen">Віджэты на галоўным экране</string>
<string name="preference_widgets_on_home_screen_summary">Паказваць віджэты на галоўным экране, не на дадатковай старонцы</string>
<string name="bad_configuration_summary">Вы знайшлі канфігурацыю, пры якой нельга адкрыць ні пошук, ні налады, тым самым зрабіўшы праграму не прыгоднай для выкарыстання.</string>
<string name="preference_search_bar_style_transparent">Празрысты</string>
<string name="preference_search_bar_style_solid">Суцэльны</string>
<string name="preference_search_bar_style_hidden">Схаваны</string>
<string name="preference_gesture_swipe_up">Чырканне ўверх</string>
<string name="gesture_action_widgets">Віджэты</string>
<string name="font_category_generic">Звычайн</string>
</resources> </resources>

View File

@ -862,4 +862,5 @@
<string name="preference_search_bar_style_solid">Vollflächig</string> <string name="preference_search_bar_style_solid">Vollflächig</string>
<string name="preference_search_bar_style_hidden">Versteckt</string> <string name="preference_search_bar_style_hidden">Versteckt</string>
<string name="music_widget_interactive_progress_bar">Interaktiver Fortschrittsbalken</string> <string name="music_widget_interactive_progress_bar">Interaktiver Fortschrittsbalken</string>
<string name="clock_variant_analog_ticks">Striche</string>
</resources> </resources>

View File

@ -867,4 +867,9 @@
<string name="poi_category_kiosk">קיוסק</string> <string name="poi_category_kiosk">קיוסק</string>
<string name="poi_category_museum">מוזיאון</string> <string name="poi_category_museum">מוזיאון</string>
<string name="filter_settings_network_warning">הסינון הנוכחי מאפשר תוצאות מקוונות כברירת מחדל. שאילתות החיפוש שלך עשויות להישלח שלא במתכוון לשירותי אינטרנט חיצוניים. מסיבות של פרטיות, זה לא מומלץ.</string> <string name="filter_settings_network_warning">הסינון הנוכחי מאפשר תוצאות מקוונות כברירת מחדל. שאילתות החיפוש שלך עשויות להישלח שלא במתכוון לשירותי אינטרנט חיצוניים. מסיבות של פרטיות, זה לא מומלץ.</string>
<string name="clock_variant_analog_ticks">סימנים</string>
<string name="music_widget_interactive_progress_bar">סרגל התקדמות אינטראקטיבי</string>
<string name="preference_search_bar_style_solid">מוצק</string>
<string name="preference_search_bar_style_hidden">מוסתר</string>
<string name="preference_search_bar_style_transparent">שקוף</string>
</resources> </resources>

View File

@ -861,4 +861,6 @@
<string name="preference_search_bar_style_transparent">Transparant</string> <string name="preference_search_bar_style_transparent">Transparant</string>
<string name="preference_search_bar_style_hidden">Verborgen</string> <string name="preference_search_bar_style_hidden">Verborgen</string>
<string name="preference_search_bar_style_solid">Massief</string> <string name="preference_search_bar_style_solid">Massief</string>
<string name="clock_variant_analog_ticks">Streepjes</string>
<string name="music_widget_interactive_progress_bar">Interactieve voortgangsbalk</string>
</resources> </resources>

View File

@ -867,4 +867,9 @@
<string name="font_name_device_headline">Fonte padrão do título</string> <string name="font_name_device_headline">Fonte padrão do título</string>
<string name="font_name_device_body">Fonte de texto do dispositivo</string> <string name="font_name_device_body">Fonte de texto do dispositivo</string>
<string name="font_category_generic">Genérico</string> <string name="font_category_generic">Genérico</string>
<string name="preference_search_bar_style_transparent">Transparente</string>
<string name="preference_search_bar_style_hidden">Oculto</string>
<string name="preference_search_bar_style_solid">Sólido</string>
<string name="clock_variant_analog_ticks">Tique-taques</string>
<string name="music_widget_interactive_progress_bar">Barra de progresso interativa</string>
</resources> </resources>

View File

@ -847,4 +847,9 @@
<string name="font_name_device_body">ชุดแบบอักษรของอุปกรณ์</string> <string name="font_name_device_body">ชุดแบบอักษรของอุปกรณ์</string>
<string name="font_name_device_headline">ชุดแบบอักษรเริ่มต้นสำหรับหัวเรื่อง</string> <string name="font_name_device_headline">ชุดแบบอักษรเริ่มต้นสำหรับหัวเรื่อง</string>
<string name="font_category_generic">ทั่วไป</string> <string name="font_category_generic">ทั่วไป</string>
<string name="preference_search_bar_style_transparent">โปร่งใส</string>
<string name="preference_search_bar_style_solid">สีทึบ</string>
<string name="preference_search_bar_style_hidden">ซ่อน</string>
<string name="clock_variant_analog_ticks">ขีด</string>
<string name="music_widget_interactive_progress_bar">แถบเวลาแบบควบคุมได้</string>
</resources> </resources>

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -51,7 +51,6 @@ data class LauncherSettingsData internal constructor(
val clockWidgetBatteryPart: Boolean = true, val clockWidgetBatteryPart: Boolean = true,
val clockWidgetMusicPart: Boolean = true, val clockWidgetMusicPart: Boolean = true,
val clockWidgetDatePart: Boolean = true, val clockWidgetDatePart: Boolean = true,
@Deprecated("Use homeScreenWidgets")
val clockWidgetFillHeight: Boolean = true, val clockWidgetFillHeight: Boolean = true,
val clockWidgetAlignment: ClockWidgetAlignment = ClockWidgetAlignment.Bottom, val clockWidgetAlignment: ClockWidgetAlignment = ClockWidgetAlignment.Bottom,

View File

@ -64,7 +64,13 @@ class ClockWidgetSettings internal constructor(
} }
val fillHeight val fillHeight
get() = launcherDataStore.data.map { !it.homeScreenWidgets } get() = launcherDataStore.data.map { it.clockWidgetFillHeight || !it.homeScreenWidgets }
fun setFillHeight(fillHeight: Boolean) {
launcherDataStore.update {
it.copy(clockWidgetFillHeight = fillHeight)
}
}
val dock val dock
get() = launcherDataStore.data.map { it.homeScreenDock } get() = launcherDataStore.data.map { it.homeScreenDock }

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
create("nightly") { create("nightly") {
initWith(getByName("release")) initWith(getByName("release"))

View File

@ -14,15 +14,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") // //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
create("nightly") { create("nightly") {
initWith(getByName("release")) initWith(getByName("release"))

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -12,7 +12,7 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
javaCompileOptions { javaCompileOptions {
annotationProcessorOptions { annotationProcessorOptions {
@ -23,10 +23,16 @@ android {
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -13,16 +13,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
isMinifyEnabled = false isMinifyEnabled = false
proguardFiles( isShrinkResources = false
getDefaultProguardFile("proguard-android-optimize.txt"), // proguardFiles(
"proguard-rules.pro" // getDefaultProguardFile("proguard-android-optimize.txt"),
) // "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }
compileOptions { compileOptions {

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,15 +11,19 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), // proguardFiles(
"proguard-rules.pro" // getDefaultProguardFile("proguard-android-optimize.txt"),
) //// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
} }
} }
@ -43,6 +47,7 @@ dependencies {
implementation(libs.bundles.retrofit) implementation(libs.bundles.retrofit)
implementation(libs.suncalc) implementation(libs.suncalc)
implementation(libs.koin.android) implementation(libs.koin.android)
implementation("com.squareup.okhttp3:logging-interceptor:4.5.0")
implementation(project(":data:database")) implementation(project(":data:database"))
implementation(project(":core:base")) implementation(project(":core:base"))

View File

@ -1,3 +1,11 @@
-keep class de.mm20.launcher2.weather.** { *; } #-keep class de.mm20.launcher2.weather.** { *; }
-keep class kotlin.coroutines.Continuation #-keep class kotlin.coroutines.Continuation
-dontwarn edu.umd.cs.findbugs.annotations.Nullable #-dontwarn edu.umd.cs.findbugs.annotations.Nullable
#
#-assumenosideeffects class android.util.Log {
## public static *** d(...);
# public static *** v(...);
# public static *** i(...);
# public static *** w(...);
## public static *** e(...);
#}

View File

@ -1,21 +1,28 @@
# Add project specific ProGuard rules here. ## Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the ## You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.kts.kts.kts.kts. ## proguardFiles setting in build.gradle.kts.kts.kts.kts.kts.
##
## For more details, see
## http://developer.android.com/guide/developing/tools/proguard.html
# #
# For more details, see ## If your project uses WebView with JS, uncomment the following
# http://developer.android.com/guide/developing/tools/proguard.html ## and specify the fully qualified class name to the JavaScript interface
## class:
# If your project uses WebView with JS, uncomment the following ##-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# and specify the fully qualified class name to the JavaScript interface ## public *;
# class: ##}
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { #
# public *; ## Uncomment this to preserve the line number information for
#} ## debugging stack traces.
##-keepattributes SourceFile,LineNumberTable
# Uncomment this to preserve the line number information for #
# debugging stack traces. ## If you keep the line number information, uncomment this to
#-keepattributes SourceFile,LineNumberTable ## hide the original source file name.
##-renamesourcefileattribute SourceFile
# If you keep the line number information, uncomment this to #-assumenosideeffects class android.util.Log {
# hide the original source file name. ## public static *** d(...);
#-renamesourcefileattribute SourceFile # public static *** v(...);
# public static *** i(...);
# public static *** w(...);
## public static *** e(...);
#}

View File

@ -7,9 +7,13 @@ import de.mm20.launcher2.preferences.weather.WeatherLocation
import de.mm20.launcher2.weather.Forecast import de.mm20.launcher2.weather.Forecast
import de.mm20.launcher2.weather.R import de.mm20.launcher2.weather.R
import de.mm20.launcher2.weather.WeatherProvider import de.mm20.launcher2.weather.WeatherProvider
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
import java.util.Locale import java.util.Locale
import java.util.concurrent.TimeUnit
import kotlin.getValue
internal class OpenWeatherMapProvider( internal class OpenWeatherMapProvider(
private val context: Context, private val context: Context,
@ -17,11 +21,24 @@ internal class OpenWeatherMapProvider(
private val retrofit by lazy { private val retrofit by lazy {
Retrofit.Builder() Retrofit.Builder()
.client(client)
.baseUrl("https://api.openweathermap.org/") .baseUrl("https://api.openweathermap.org/")
.addConverterFactory(GsonConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create())
.build() .build()
} }
private val client by lazy {
val timeOutMillSeconds = 1500L
OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
.callTimeout(timeOutMillSeconds,TimeUnit.MILLISECONDS)
.connectTimeout(timeOutMillSeconds,TimeUnit.MILLISECONDS)
.readTimeout(timeOutMillSeconds,TimeUnit.MILLISECONDS)
.writeTimeout(timeOutMillSeconds,TimeUnit.MILLISECONDS)
.build()
}
private val openWeatherMapService by lazy { private val openWeatherMapService by lazy {
retrofit.create(OpenWeatherMapApi::class.java) retrofit.create(OpenWeatherMapApi::class.java)
} }

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!--<string name="openweathermap_key" translatable="false">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>--> <string name="openweathermap_key" translatable="false">87cd0810b7e4b4debd31a6ef98b98154"</string>
<!--<string name="here_key" translatable="false">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>--> <!--<string name="here_key" translatable="false">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>-->
<!--<string name="metno_contact" translatable="false"></string>--> <!--<string name="metno_contact" translatable="false"></string>-->
</resources> </resources>

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -8,7 +8,7 @@ targetSdk = "36"
pluginSdk = "2.2.0" pluginSdk = "2.2.0"
gradle = "8.1.2" gradle = "8.12"
android-gradle-plugin = "8.10.1" android-gradle-plugin = "8.10.1"
ksp-gradle-plugin = "2.1.21-2.0.1" ksp-gradle-plugin = "2.1.21-2.0.1"
@ -139,6 +139,7 @@ osmopeninghours = { group = "de.westnordost", name = "osm-opening-hours", versio
kotlin = ["kotlin-stdlib", "kotlinx-coroutines-core", "kotlinx-coroutines-android", "kotlinx-collections-immutable", "kotlinx-serialization-json"] kotlin = ["kotlin-stdlib", "kotlinx-coroutines-core", "kotlinx-coroutines-android", "kotlinx-collections-immutable", "kotlinx-serialization-json"]
androidx-lifecycle = ["androidx-lifecycle-viewmodel", "androidx-lifecycle-common", "androidx-lifecycle-runtime", "androidx-lifecycle-viewmodelcompose", "androidx-lifecycle-runtimecompose"] androidx-lifecycle = ["androidx-lifecycle-viewmodel", "androidx-lifecycle-common", "androidx-lifecycle-runtime", "androidx-lifecycle-viewmodelcompose", "androidx-lifecycle-runtimecompose"]
retrofit = ["retrofit-core", "retrofit-gson"] retrofit = ["retrofit-core", "retrofit-gson"]
tests = ["junit"] tests = ["junit"]
[plugins] [plugins]

View File

@ -1,6 +1,6 @@
#Sun Feb 09 12:41:42 CET 2025 #Tue Jul 15 14:35:45 KST 2025
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -10,16 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
consumerProguardFiles("proguard-rules.pro") // "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -12,15 +12,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -12,15 +12,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -14,7 +14,7 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildFeatures { buildFeatures {
@ -23,10 +23,16 @@ android {
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
create("nightly") { create("nightly") {
initWith(getByName("release")) initWith(getByName("release"))

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -11,15 +11,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro") //consumerProguardFiles("consumer-rules.pro")
} }
buildTypes { buildTypes {
release { release {
proguardFiles( isMinifyEnabled = false
getDefaultProguardFile("proguard-android-optimize.txt"), isShrinkResources = false
"proguard-rules.pro" // proguardFiles(
) // getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
isMinifyEnabled = false
isShrinkResources = false
} }
} }