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 {
release {
applicationIdSuffix = ".release"
postprocessing {
isRemoveUnusedCode = true
isObfuscate = false
isOptimizeCode = true
}
isMinifyEnabled = false
isShrinkResources = false
// proguardFiles(
// getDefaultProguardFile("proguard-android-optimize.txt"),
// "proguard-rules.pro"
// )
}
debug {
applicationIdSuffix = ".debug"
isDebuggable = true
isMinifyEnabled = false
isShrinkResources = false
}
create("nightly") {
initWith(getByName("release"))

View File

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

View File

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

View File

@ -293,7 +293,6 @@ fun ColumnScope.ConfigureAppWidget(
val widgetInfo = remember(widget.config.widgetId) {
AppWidgetManager.getInstance(context).getAppWidgetInfo(widget.config.widgetId)
}
if (widgetInfo == null) {
var replaceWidget by rememberSaveable {
mutableStateOf(false)
@ -365,6 +364,7 @@ fun ColumnScope.ConfigureAppWidget(
}
AppWidgetHost(
widgetInfo = widgetInfo,
widgetId = widget.config.widgetId,
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.AlignVerticalTop
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.ColorLens
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.LightMode
import androidx.compose.material.icons.rounded.MusicNote
@ -363,6 +363,7 @@ fun ConfigureClockWidgetSheet(
val color by viewModel.color.collectAsState()
val style by viewModel.clockStyle.collectAsState()
val fillHeight by viewModel.fillHeight.collectAsState()
val widgetsOnHome by viewModel.widgetsOnHome.collectAsState()
val alignment by viewModel.alignment.collectAsState()
val showSeconds by viewModel.showSeconds.collectAsState()
val timeFormat by viewModel.timeFormat.collectAsState()
@ -564,71 +565,79 @@ fun ConfigureClockWidgetSheet(
}
}
}
if (fillHeight == true) {
OutlinedCard(
modifier = Modifier.padding(top = 16.dp),
OutlinedCard(
modifier = Modifier.padding(top = 16.dp),
) {
Column(
modifier = Modifier.fillMaxWidth()
) {
Column(
modifier = Modifier.fillMaxWidth()
) {
var showDropdown by remember { mutableStateOf(false) }
Preference(
title = stringResource(R.string.preference_clock_widget_alignment),
summary = when (alignment) {
ClockWidgetAlignment.Top -> stringResource(R.string.preference_clock_widget_alignment_top)
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
SwitchPreference(
title = stringResource(R.string.preference_clock_widget_fill_height),
icon = Icons.Rounded.Height,
value = fillHeight == true || widgetsOnHome == false,
onValueChanged = {
viewModel.setFillHeight(it)
},
enabled = widgetsOnHome == true,
)
var showDropdown by remember { mutableStateOf(false) }
Preference(
title = stringResource(R.string.preference_clock_widget_alignment),
summary = when (alignment) {
ClockWidgetAlignment.Top -> stringResource(R.string.preference_clock_widget_alignment_top)
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 = {
showDropdown = true
viewModel.setAlignment(ClockWidgetAlignment.Top)
showDropdown = false
}
)
DropdownMenu(
expanded = showDropdown,
onDismissRequest = { showDropdown = false }) {
DropdownMenuItem(
leadingIcon = {
Icon(
Icons.Rounded.AlignVerticalTop,
null
)
},
text = { Text(stringResource(R.string.preference_clock_widget_alignment_top)) },
onClick = {
viewModel.setAlignment(ClockWidgetAlignment.Top)
showDropdown = false
}
)
DropdownMenuItem(
leadingIcon = {
Icon(
Icons.Rounded.AlignVerticalCenter,
null
)
},
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
})
}
DropdownMenuItem(
leadingIcon = {
Icon(
Icons.Rounded.AlignVerticalCenter,
null
)
},
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.TimeFormat
import de.mm20.launcher2.preferences.ui.ClockWidgetSettings
import de.mm20.launcher2.preferences.ui.UiSettings
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.stateIn
@ -15,6 +16,8 @@ import org.koin.core.component.inject
class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
private val settings: ClockWidgetSettings by inject()
private val uiSettings: UiSettings by inject()
val compact = settings.compact
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setCompact(compact: Boolean) {
@ -68,9 +71,16 @@ class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
settings.setUseThemeColor(boolean)
}
val widgetsOnHome = uiSettings.homeScreenWidgets
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
val fillHeight = settings.fillHeight
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
fun setFillHeight(fillHeight: Boolean) {
settings.setFillHeight(fillHeight)
}
val parts = settings.parts
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)

View File

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

View File

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

View File

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

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
//consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
isShrinkResources = false
// 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_open_file">Адкрыць</string>
<string name="menu_map">Праглядзець на мапе</string>
<string name="menu_website">Адкрыць вэбсайт</string>
<string name="menu_website">Адкрыць вэб-сайт</string>
<string name="action_undo">Скасаваць</string>
<string name="menu_delete">Выдаліць</string>
<string name="menu_favorites_unpin">Адмацаваць</string>
@ -188,13 +188,13 @@
<string name="weather_no_data">Няма даных аб надвор\'і.</string>
<string name="weather_widget_set_location">Абраць месцазнаходжанне</string>
<string name="weather_location_search_no_result">Месцазнаходжанне ня знойдзена.</string>
<string name="missing_permission_contact_search_settings">Доступ да кантактаў патрэбны для іх пошуку</string>
<string name="missing_permission_calendar_search_settings">Доступ да календара патрэбны для пошуку праз каляндар</string>
<string name="missing_permission_auto_location">Доступ да месцазнаходжання патрэбны для яго аўтаматычнага вызначэння</string>
<string name="missing_permission_music_widget">Доступ да апавяшчэнняў патрэбны для кіравання прайграваннем медыя</string>
<string name="missing_permission_contact_search_settings">Для пошуку кантактаў патрэбны доступ да кантактнай кнігі</string>
<string name="missing_permission_calendar_search_settings">Для пошуку праз каляндар патрэбны доступ да календара</string>
<string name="missing_permission_auto_location">Для аўтаматычнага вызначэння лакацыі патрэбны доступ да месцазнаходжання</string>
<string name="missing_permission_music_widget">Для кіравання прайграваннем медыя патрэбны доступ да апавяшчэнняў</string>
<string name="widget_config_calendar_missing_calendars_hint">Не можаце знайсці свае календары?</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="disclaimer">Адмова ад адказнасці</string>
<string name="show_all">Паказаць усе</string>
@ -217,8 +217,8 @@
<item quantity="many">+%1$d бягучых падзей з тых часоў</item>
<item quantity="other">+%1$d бягучых падзей з тых часоў</item>
</plurals>
<string name="missing_permission_file_search_settings_android10">Доступ да ўсіх файлаў патрэбны для пошуку праз лакальныя файлы</string>
<string name="missing_permission_notification_badges">Доступ да апавяшчэнняў патрэбны для адлюстроўвання бэйджаў апавяшчэнняў на значках</string>
<string name="missing_permission_file_search_settings_android10">Для пошуку праз лакальныя файлы патрэбны доступ да ўсіх файлаў</string>
<string name="missing_permission_notification_badges">Для адлюстравання бэйджаў апавяшчэнняў на значках патрэбны доступ да апавяшчэнняў</string>
<string name="missing_permission_calendar_widget">Дайце дазвол на доступ да календару, каб тут паказваліся будучыя сустрэчы і падзеі.</string>
<string name="missing_permission_calendar_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_summary">Зрабіце хуткі здымак, каб аналізаваць выкарыстоўванне памяці. Праграма не будзе адказваць, пакуль працэс не завяршыцца.</string>
<string name="preference_debug_dump_heap_in_progress">Здымаецца…</string>
<string name="preference_debug_cleanup_database">Ачысціць базу дадзеных</string>
<string name="preference_debug_cleanup_database_summary">Выдаліць зламаныя і неўжываныя пункты з базы дадзеных праграмы запуску</string>
<string name="preference_debug_cleanup_database">Ачысціць базу даных</string>
<string name="preference_debug_cleanup_database_summary">Выдаліць зламаныя і неўжываныя пункты з базы даных праграмы запуску</string>
<string name="preference_debug_reinstall_iconpacks">Пераўсталяваць пакеты значкоў</string>
<string name="preference_debug_reinstall_iconpacks_summary">Ачысціць і стварыць нанава кэш пакетаў значкоў</string>
<string name="preference_category_icons">Значкі</string>
@ -388,11 +388,11 @@
<string name="preference_category_license">Ліцэнзія</string>
<string name="preference_clockwidget_music_part_summary">Адлюстроўвае кнопкі для кіравання мультымедыя, калі ёсць актыўны сеанс медыя</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_alarm_part_summary">Адлюстроўвае будзільнікі, якія празвоняць меньш чым праз 8 гадзін</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_summary">Аднавіць з дапамогай раней створанай рэзервовай копіі</string>
<string name="preference_backup">Рэзервовае капіраванне</string>
@ -467,7 +467,7 @@
<string name="backup_complete">Рэзервовае капіяванне скончана.</string>
<string name="restore_invalid_file">Здаецца, выбраны файл не з\'яўляецца рэзервовай копіяй. Вы ўпэўнены, што выбралі пэўны файл?</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">
<item quantity="one">Зарадзіцца поўнасцю праз %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="menu_navigation">Навігацыя</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_digital2">Звычайны</string>
<string name="clock_style_digital2">Просты</string>
<string name="clock_style_orbit">Арбітальны</string>
<string name="preference_customize_filter_bar_summary">Дапасуйце элементы ў панэлі фільтраў</string>
<string name="clock_style_custom">Уласны віджэт</string>
@ -801,4 +801,86 @@
</plurals>
<string name="weather_widget_no_provider">Правайдара надвор\'я не выбрана, альбо выбраны правайдар недаступны</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>

View File

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

View File

@ -867,4 +867,9 @@
<string name="poi_category_kiosk">קיוסק</string>
<string name="poi_category_museum">מוזיאון</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>

View File

@ -861,4 +861,6 @@
<string name="preference_search_bar_style_transparent">Transparant</string>
<string name="preference_search_bar_style_hidden">Verborgen</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>

View File

@ -867,4 +867,9 @@
<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_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>

View File

@ -847,4 +847,9 @@
<string name="font_name_device_body">ชุดแบบอักษรของอุปกรณ์</string>
<string name="font_name_device_headline">ชุดแบบอักษรเริ่มต้นสำหรับหัวเรื่อง</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>

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
//consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
isShrinkResources = false
// 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()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
//consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
isShrinkResources = false
// 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()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
//consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
isShrinkResources = false
// 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 clockWidgetMusicPart: Boolean = true,
val clockWidgetDatePart: Boolean = true,
@Deprecated("Use homeScreenWidgets")
val clockWidgetFillHeight: Boolean = true,
val clockWidgetAlignment: ClockWidgetAlignment = ClockWidgetAlignment.Bottom,

View File

@ -64,7 +64,13 @@ class ClockWidgetSettings internal constructor(
}
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
get() = launcherDataStore.data.map { it.homeScreenDock }

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,11 @@
-keep class de.mm20.launcher2.weather.** { *; }
-keep class kotlin.coroutines.Continuation
-dontwarn edu.umd.cs.findbugs.annotations.Nullable
#-keep class de.mm20.launcher2.weather.** { *; }
#-keep class kotlin.coroutines.Continuation
#-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.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.kts.kts.kts.kts.
## Add project specific ProGuard rules here.
## You can control the set of applied configuration files using the
## 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
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# 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
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
## If your project uses WebView with JS, uncomment the following
## and specify the fully qualified class name to the JavaScript interface
## 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
#
## If you keep the line number information, uncomment this to
## hide the original source file name.
##-renamesourcefileattribute SourceFile
#-assumenosideeffects class android.util.Log {
## public static *** d(...);
# 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.R
import de.mm20.launcher2.weather.WeatherProvider
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.Locale
import java.util.concurrent.TimeUnit
import kotlin.getValue
internal class OpenWeatherMapProvider(
private val context: Context,
@ -17,11 +21,24 @@ internal class OpenWeatherMapProvider(
private val retrofit by lazy {
Retrofit.Builder()
.client(client)
.baseUrl("https://api.openweathermap.org/")
.addConverterFactory(GsonConverterFactory.create())
.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 {
retrofit.create(OpenWeatherMapApi::class.java)
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<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="metno_contact" translatable="false"></string>-->
</resources>

View File

@ -10,15 +10,21 @@ android {
minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
//consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
isShrinkResources = false
// 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()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
//consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
isShrinkResources = false
// 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()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
//consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
isShrinkResources = false
// 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"
gradle = "8.1.2"
gradle = "8.12"
android-gradle-plugin = "8.10.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"]
androidx-lifecycle = ["androidx-lifecycle-viewmodel", "androidx-lifecycle-common", "androidx-lifecycle-runtime", "androidx-lifecycle-viewmodelcompose", "androidx-lifecycle-runtimecompose"]
retrofit = ["retrofit-core", "retrofit-gson"]
tests = ["junit"]
[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
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
zipStorePath=wrapper/dists

View File

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

View File

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