From b5a7677db0ff8a1e0ef273f6451ec62d58e0e420 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Wed, 5 Aug 2026 12:26:16 +0530 Subject: [PATCH 01/12] fix alert crashes --- .../weather_master_app/feature/alerts/AlertsScreen.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/alerts/AlertsScreen.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/alerts/AlertsScreen.kt index 7fc659db6..acfe9b35b 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/alerts/AlertsScreen.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/alerts/AlertsScreen.kt @@ -1,5 +1,6 @@ package com.pranshulgg.weather_master_app.feature.alerts +import android.util.Log import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.WindowInsets @@ -50,6 +51,10 @@ fun AlertsScreen(navController: NavController, locationId: String) { } + if (!uiState.alerts.isNotEmpty()) { + return + } + LargeTopBarScaffold( title = "Alerts", navigationIcon = { NavigateUpBtn(navController) }, From 4bc33951e4350bb76d986665e769ee75a72d1cd9 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Wed, 5 Aug 2026 12:26:25 +0530 Subject: [PATCH 02/12] missing strings --- .../editlocation/ui/EditLocationScreenDialogs.kt | 6 ++++-- .../feature/shared/ui/SharedDialogs.kt | 16 ---------------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/editlocation/ui/EditLocationScreenDialogs.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/editlocation/ui/EditLocationScreenDialogs.kt index 58df7f4a9..3457834c1 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/editlocation/ui/EditLocationScreenDialogs.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/editlocation/ui/EditLocationScreenDialogs.kt @@ -1,6 +1,8 @@ package com.pranshulgg.weather_master_app.feature.editlocation.ui import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import com.pranshulgg.weather_master_app.R import com.pranshulgg.weather_master_app.core.ui.components.TextAlertDialog import com.pranshulgg.weather_master_app.feature.editlocation.EditLocationViewModel import com.pranshulgg.weather_master_app.feature.locations.LocationsScreenViewModel @@ -18,8 +20,8 @@ object EditLocationScreenDialogs { show = uiState.isConfirmationDialogOpen, onConfirm = onConfirm, onDismiss = viewModel::hideConfirmationDialog, - title = "Delete Location", - message = "Are you sure you want to delete this location?" + title = stringResource(R.string.confirm_delete_location), + message = stringResource(R.string.alert_delete_location_secondary) ) } } \ No newline at end of file diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/shared/ui/SharedDialogs.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/shared/ui/SharedDialogs.kt index 8ec051e05..a27f2bcba 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/shared/ui/SharedDialogs.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/shared/ui/SharedDialogs.kt @@ -44,20 +44,4 @@ object SharedDialogs { } -// @Composable -// fun ChangelogDialog( -// show: Boolean, -// onDismiss: () -> Unit, -// version: String, -// ) { -// DialogBasic( -// show = show, -// onDismiss = onDismiss, -// title = "Change Log $version", -// dismissText = stringResource(R.string.action_ok), -// showOnlyDismissAction = true -// ) { -// ChangelogContent() -// } -// } } \ No newline at end of file From a78eec66bd8d293de0136ac15d92b6eccd64e276 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Wed, 5 Aug 2026 12:26:38 +0530 Subject: [PATCH 03/12] update readme --- README.md | 2 ++ fastlane/metadata/android/en-US/full_description.txt | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f73306bd4..52d363aba 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,8 @@ - **China** - **AccuWeather** - **Meteo AM** +- **IPMA** +- **WeatherApi.com** - _**And more to be added**_ # 🌐 Translate the app on [Crowdin](https://crowdin.com/project/weathermaster) diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 992b24c2f..f88a37e6e 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -1,4 +1,4 @@ -

WeatherMaster inspired by the Google Pixel weather app, but with more features

+

WeatherMasterInspired by the Google Pixel weather app, but with more features


Features both the Pixel Weather-inspired design and the original Froggy style, with summaries, multiple weather and search providers, personalization options, and more.


@@ -17,5 +17,7 @@
  • China
  • AccuWeather
  • Meteo AM
  • +
  • IPMA
  • +
  • WeatherApi.com
  • And more to be added
  • From 2272157b60d3f723fbadb7ba6236aae50e46cead Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Wed, 5 Aug 2026 12:27:39 +0530 Subject: [PATCH 04/12] fix application id --- app/build.gradle.kts | 5 +- .../locations/ui/LocationsScreenDialogs.kt | 6 +- .../feature/main/MainScreen.kt | 3 +- .../feature/main/MainScreenViewModel.kt | 4 +- .../feature/settings/SettingsScreen.kt | 71 +++++++++++++++++-- 5 files changed, 77 insertions(+), 12 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 637ffa435..5950e7d71 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -40,10 +40,11 @@ android { android.buildFeatures.buildConfig = true defaultConfig { - applicationId = "com.pranshulgg.weather_master_app" + applicationId = + "com.pranshulgg.weather_master_app" // com.pranshulgg.weather_master for Google Play Store minSdk = 26 targetSdk = 36 - versionCode = 57 + versionCode = 58 versionName = versionNameString testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/locations/ui/LocationsScreenDialogs.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/locations/ui/LocationsScreenDialogs.kt index 97ac2fb49..2634d8d66 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/locations/ui/LocationsScreenDialogs.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/locations/ui/LocationsScreenDialogs.kt @@ -1,6 +1,8 @@ package com.pranshulgg.weather_master_app.feature.locations.ui import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import com.pranshulgg.weather_master_app.R import com.pranshulgg.weather_master_app.core.ui.components.TextAlertDialog import com.pranshulgg.weather_master_app.feature.locations.LocationsScreenViewModel import com.pranshulgg.weather_master_app.feature.shared.WeatherViewModel @@ -21,7 +23,7 @@ fun LocationScreenConfirmationDialog( viewModel.hideConfirmationDialog() }, onDismiss = viewModel::hideConfirmationDialog, - title = "Delete Location", - message = "Are you sure you want to delete this location?" + title = stringResource(R.string.confirm_delete_location), + message = stringResource(R.string.alert_delete_location_secondary) ) } \ No newline at end of file diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt index 7d6dfe9b5..bfd9fe7af 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt @@ -65,7 +65,8 @@ data class MainScreenUiState( val isNewVersionAvailable: Boolean = false, val lastestVersionUrl: String = "https://github.com/PranshulGG/WeatherMaster/releases/latest", val isUnsupportedSourceDialogOpen: Boolean = false, - val isChangelogSheetOpen: Boolean = false + val isChangelogSheetOpen: Boolean = false, + val isGooglePlayStoreRelease: Boolean = false // Set TRUE when building for play store ) @OptIn(ExperimentalMaterial3Api::class) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreenViewModel.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreenViewModel.kt index 62b80ceb3..f273ebe90 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreenViewModel.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreenViewModel.kt @@ -25,7 +25,9 @@ class MainScreenViewModel @Inject constructor( init { viewModelScope.launch { - checkForUpdates() + if (!_uiState.value.isGooglePlayStoreRelease) { + checkForUpdates() + } } } diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/settings/SettingsScreen.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/settings/SettingsScreen.kt index 6a62f6f22..300e5c8f8 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/settings/SettingsScreen.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/settings/SettingsScreen.kt @@ -1,31 +1,49 @@ package com.pranshulgg.weather_master_app.feature.settings +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.BasicAlertDialog +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ListItem +import androidx.compose.material3.ListItemDefaults +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.pranshulgg.weather_master_app.R +import com.pranshulgg.weather_master_app.core.ui.components.DialogBasic import com.pranshulgg.weather_master_app.core.ui.components.LargeTopBarScaffold import com.pranshulgg.weather_master_app.core.ui.components.NavigateUpBtn import com.pranshulgg.weather_master_app.core.ui.components.SettingSection import com.pranshulgg.weather_master_app.core.ui.components.SettingTile import com.pranshulgg.weather_master_app.core.ui.components.SettingsTileIcon +import com.pranshulgg.weather_master_app.core.ui.components.WeatherIconBox import com.pranshulgg.weather_master_app.core.ui.navigation.NavRoutes import com.pranshulgg.weather_master_app.core.utils.locale.getCurrentAppLocale +@OptIn(ExperimentalMaterial3Api::class) @Composable fun SettingsScreen(navController: NavController) { val uriHandler = LocalUriHandler.current + var isDonationDialogOpen by remember { mutableStateOf(false) } + LargeTopBarScaffold( title = stringResource(R.string.settings), navigationIcon = { NavigateUpBtn(navController) }, @@ -47,12 +65,12 @@ fun SettingsScreen(navController: NavController) { description = stringResource(R.string.setting_appearance_secondary), onClick = { navController.navigate(NavRoutes.APPEARANCE) } ), -// SettingTile.ActionTile( -// leading = { SettingsTileIcon(R.drawable.favorite_24px) }, -// title = "Support", -// description = "If you enjoy the app, consider supporting its development", -// onClick = { uriHandler.openUri("https://github.com/sponsors/PranshulGG?frequency=one-time&sponsor=PranshulGG") } -// ) + SettingTile.ActionTile( + leading = { SettingsTileIcon(R.drawable.favorite_24px) }, + title = "Support", + description = "If you enjoy the app, consider supporting its development", + onClick = { isDonationDialogOpen = true } + ) ) ) @@ -101,4 +119,45 @@ fun SettingsScreen(navController: NavController) { ) } } + + DialogBasic( + show = isDonationDialogOpen, + title = "Donate", + dismissText = stringResource(R.string.action_cancel), + showOnlyDismissAction = true, + onConfirm = {}, + onDismiss = { isDonationDialogOpen = false }, + ) { + Column( + ) { + DonateListItem( + "Ko-fi", + "Ko-fi.com/pranshulgg", + R.drawable.kofi_symbol + ) { uriHandler.openUri("https://ko-fi.com/pranshulgg") } + DonateListItem( + "Liberapay", + "liberapay.com/PranshulGG", + R.drawable.liberapay_logo, + ) { uriHandler.openUri("https://liberapay.com/PranshulGG") } + DonateListItem( + "Github sponsors", + "github.com/sponsors/PranshulGG", + R.drawable.gitub_logo_colored, + ) { uriHandler.openUri("https://github.com/sponsors/PranshulGG?frequency=one-time&sponsor=PranshulGG") } + } + } +} + +@Composable +private fun DonateListItem(headline: String, description: String, icon: Int, onClick: () -> Unit) { + ListItem( + colors = ListItemDefaults.colors(containerColor = Color.Transparent), + leadingContent = { WeatherIconBox(icon, size = 28.dp) }, + headlineContent = { Text(headline) }, + supportingContent = { Text(description) }, + modifier = Modifier + .clickable(onClick = onClick) + .padding(horizontal = 14.dp) + ) } \ No newline at end of file From 74f1f9ca39b6dc4815140d9f759755a4adb7d276 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Wed, 5 Aug 2026 12:31:23 +0530 Subject: [PATCH 05/12] update logos --- app/src/main/res/drawable/gitub_logo_colored.png | Bin 0 -> 6223 bytes app/src/main/res/drawable/kofi_symbol.png | Bin 0 -> 4513 bytes app/src/main/res/drawable/liberapay_logo.png | Bin 0 -> 4204 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/drawable/gitub_logo_colored.png create mode 100644 app/src/main/res/drawable/kofi_symbol.png create mode 100644 app/src/main/res/drawable/liberapay_logo.png diff --git a/app/src/main/res/drawable/gitub_logo_colored.png b/app/src/main/res/drawable/gitub_logo_colored.png new file mode 100644 index 0000000000000000000000000000000000000000..d44393a070d940c0af64716cfce4173ebba13551 GIT binary patch literal 6223 zcmV-V7_jGwP)?hU4udHJK8U0WDv?(Rb+sB+6)UUsF_;qMgQ!G3BzvP@clCO#X@crI>LH*5 zC56G103Djm{Php&iiknfkAzg^ukSvjDp2$oOp(&6s0pGH6p9STxg9QH+u!4#2J z7|md-Pc)?_q%Ij!@nA4bOsDYQfngMb1?u76C1_F%rU|rqM$)`4L9ubDds3gd9AO#^ zrV;5-O~PmfHn3A6!Sop%>WzxQG%&4>PEilnN>HkrruhYz9}JJdG!PA>_x?HutE1dh zr~|434T8ZGm^QN|kY->Y<<6lFs0An}22&uqEu;w~vc-V`6%>Q%KpIFN!Tu33pn`b@ z+KUX?{Po3udkuyX)e3)o@%P28zh1PFAS!RILk%{aQ-^u zEM9jErVe~4$vPzIBNZUp-vV3*)d_=X3pTcCAafs17od&U{9Z$bZT^x#Vq=?zFlU2& zJ6239bU&NSwiO^6-U1xnJ;7j7+T4~vIt9_V95{RT2!jcKn%fdeoNc2iRj6n09E>yF zW71yIH~+0%3?-Uc>91>lPnusNXSQNuFNq?zfZ^Vgxr(VZ<8}px62)uguPduFccv;P zJ(5I*Z7)HT4s+|C%mkAUB{@Oz6WB|lG&z60wlcIcF_hDx+X4(FN>>3xL%XaiCJx;w zQ`rygvJEEP=O&?4fG9umV1y634(+lGCLc<2Jjo{z<;@|}zEgHRCLc<2h#NzREGSSf z$jojVRW`w->yu=`jrgG{0@mqHkdS&q*CIdNusADoZhB7W0zzw>B#^*s)T4eheVeXBsVLkd)`-o{cOF-cWS8cGWgQ6CP8RZhtS6GMsUAPxzIQxd_%P$CM#A(3#3KA3d&?HWWB zfnq3o7iY}NKN<^b6^+b;7 z#8@$L?;Fv0W-%U_5>+tiLj!np3DLObu|54an&!8r_8des6={Z7h(HvFyi{AF@s4$sX)5U{4Zs(?JxM(C^y~9*7XA1`&oc!-uDy9-?lb_YeP(QOF*D>X?<)p$$WaywJvRn={ zv<2#Z$$aEvK7Jy7Qt=J8(RYxF$$uiukk7W0$u=_T&oPD`RC`U1Tk~g|9OLnjrC9ko zl?ns(kh;k1V8lV*AHjnu!>61)pYqTw{dvwY%q(6LF49x^g~tm>@4p}Nwd-qZ!mH5h zZ#*nk4ZQ|TUdzQ8)7{%-)aDR_^k9bwCaIKW$it2Qp}#@|w0e>~OZzrW9qLNqr+$Bv z!ZYmkY0L#47OXbk_a))`HkQ}yU)K`(kg%U4prFB&*(ZS*d|I@R9@VH+1{GQ>lczo^ zHKf)G`_fvl z(6vW$NodQ@r9|ET7<5h20e&GbGyik{8mbW29EhloQb$k+ zIVhNx_4M@&L_`k`u9^<5m}E6_flQ^a0FjdAkgwvTO3q19a1r!f(M)t z(Rv3}O@{z1^SMnwDDD=T^j6RRbn zAoe}JCN+CiP5V?#eC!a>;j9Fc=v_7S3Z~`5!yBzAKr{?X!Bpyr51sX`n5^xID?l`i zzhO(SbFn%HlhFm0mOj;JT-NTb_kF6SJ{405dkPQ@!`exs&Eb8W^a&=5N1GHN3QQ{p zi`97NMcJK#NvHb?*z*EJ;h8*_9d#4D=<*l4R!mlx2o!y16Noyn8cbr=u}w~fNk5lGO7LndhFlY4hnOgod!h#82&U8y8z{8p>H-CgA)HvjEWuIHX(OXWA4@miO|!2GO`IS50es*-wH= zmkE@xX~7{Jjm_V4mH+Y;HmyAmd|kyX!sd6 zJ?Uw$3#NZy6RRbfnl!>KR!vWO+K+-s$9fizWMH*KlhdlnVz22*pJ}yXvU*O8)y5;m zX91fYWzT9bm9WR@tO(KMbRS&>d$tCX#r_g|OB5T6_hi}rACLCR`Ei~cb7F1Z&I$WV z6dQx@#Yg+*{!~nQMvS#k`p!_INLlN99=D%4*B;6hu;&s)ak6-C{^>KdgQtS7lqfZp?%Dey$zsLy6GUnG z1v?7)$FugvIU^j1(qgL0mrRn1semmU%28?@Y`G66YipReKaNu4V2jC$$$=;#26rhO zo2!_3q5vhz(tUeutzvQ@N|U8v`dfnOFWA9qiBe_i-nBNAV=z&wEZw`sGY}C)#^S6T z5yg!a6A{IS!9+yS;ZTl=55}X!S-fX0E*B_3l$HXo|Haw_pAhygDnM!(qip_w9aD1 zWbKzs=__E2$sUuR<=}cIN`l_21&onkvUqq}38FNVu*Wf&h~ielAPFW*j~{NZ&qS%P zc(49v^*pAMeI|;X-lHY#`E7BzK%)dv+)CK=%W98Flpu=R8`yMbIhfvoC~l{)>CW;{ z?%0pvOAtlK-^xBu_s4IM|?srMMKYDx`kcO zpXr;@>Kju+c?P1ml(6egGO1a|B1L6Lytsf>SKC>0Q9C|KuM{ zFj?=hSpI~fxV(pLk1D1c*v6`fCa3pc3EQ0fgTeHGRTE8(_uxt}IS{KRnvC|AO3;0g z^ylG^{s$xLCJNYA`Kij+AQ~CpfA?gmz;pSgee4N`bF7+Z0{)(xfuSV+WKcVpEFKuQ z&KI85L}Sra-s~;a{w!N!#q?C+uX7NMLqe$liK_Xg-D4_XdwNC zSq&!3d*;?T=PVtC=I<%lb}|FCJ<6WdV5&f?zG&G^bTGY_K7m$M?f=1G+N}T^loUX# zuS8F69?I#VaqKfaRkGhihtRcg-@v}oIyb8`;OicE`2)0$^qaU4j`k%VY%f9UJSm3O z1ycpuWbVU>kA0$E^aE`M+T{D{9~`azf$@hEboJVoo)w68&`_F#wmI23l+!*_1={AD zzu{Px(^d?nPHxuiuz0rNFSF0Iom7=q3@6%zq14&htl1Py6=;_xoY-@sNBlh@%S+~< zE-u&o;nAkQ&3$vdeDLKc7tI;hS`tu#x_GoduI<^Df9WfztB+htV4E(Uyaq$5kBu#( zZNYR2>O+c>_UL{}38ezm$Ht7=Hk6Y$n4HhVH(Eaq^>P9S${w5C2YIfm0G`-b zG3meX9n@FhuWLO7j4~xdH-E{#w>fAZ)uvDq+lF#t0osRDnO``x%acB8iT$L*Z0%tm zZTmktoD0JF>x?VK)29t?Sqe~s4z=~@>a7)%mRg*hJ4}Iky%W!MN|+w*#wsa{@4I@i zyM}UtvvXn0PzTfulnj}1^OppYtW)F2A&i}wa)b`J*fKZ=4)3C-O8{iXtptVS{C$72 z>o0Ywn8asLNCh~&i;~W^NgqjO+)7YrRhPfiwPNB?D8pL#>w;^aro#$pG@XtN>J&^u z*KCxCk3)R|o;2$J(?9zQbyXsPn$igX73zShK%-zFjjGcyPV@;TS-bHK(`(L)lG(zo zi?oCel}dlT@z*KR;QV!g`t>PbB4~n3uWP<5j5g7b zn)@rIqe>S3`pPQmFd9ZP)E`hKXbLA?KWO^~(;Ri#J2nZTx1rvgi3XH|R*DR%ZuIvo zRWie9dJBKwo^}1peS>MLCipA=qJlqGO4k&n_^4(HYFP^+$3}3tr}X}mo?FF>(4 z>2sg<3MS!y`3sC&X~-(k!FofPY%{pgOEz7*AwoPxt^VN){hHE5hb8ji`MS@)uum|R z824$SGD|hb!2IiymA&tghvvbha{X$)-?uk6H9cFs&`Uz7`QL0@r=fGxyU{zC#K=nr zKKmDSjuA}QLmNwlx>uJ}K(!vNU4T;4d5J(<*OlL^E-;>VV?B*TE3+|Q+nA(kN-mUy z^d|J?<_?7P?Dc-yE0}avsKPj;T))=s8zlyoX*kK6uh*##WtCWO>0188I;A&c)g2!6YKurn0~Qd(9%=hSODcq10eFMQ^X( zQsdBIDluKvw926lrv(DhbupB{~G0Fg~3*!2jXDxnRb!26s$YAS`r~DCJ|#r@h$M9lVbm5b};&&OOYSr8h66+C37wJs2pZc-$a^v5P_8MbKOjCqPbbjV`4-bP z!2aXHyD7P6(oDohMcW) zsE2NI&`uiM6=-OSkb6_x1{umVd`T^h@F^R_t2#XebYHpxS%7$6^cRy3c+E-4eX-@lZt8KC95VIet<$a8?z5OYB1>w zdy6=fA&=mtXgScKF2?T3j?(;I710ucLH5v5JlFs~*d$NenIxD*L~BegW&ar{TmD{K zg7)Ds(J2;V_n6vZIYawY7eZ3L9B3bBM-#2Dn=F_j>oKV9oq6;Pw*)b_|&el<;KF1hJBFbPA zT3QBs7W#o?w(gdTFexLKIvXCPXoE>;IE{7&%npUWZaK8049JKimJj{4q7EjZrDiPQ zB<5N@%|Mi%=JE1TZ_|lBm_&r(RG{8p$AF@gBoRs?iC_{DhLb4p5Kte7?m@|uR%B(m z92vu-fvKltLP;bOOd`^75{18{kthLmts!-)k8C=KJYl8@Bh&|;$qZo$qVAFkCGkHb zM#9OzNgd*S{PRn_?q@vwf2-US&BH8z>Gy8KzgwU_>EHz(o&jh`%aWMSq?DC11X1= zWiW|WQ=EM#%F&0EmjmpQZ7>N5C-$8vGY)l?^a&ZuI+z;TcjA%)N?nCIlqzJ-L@){c zWlA`G1yOor=$2(aX&p1cBy?yu1840h9S#PDZmUcMQ-ia1l!(v%dSzkgw#sBM39X(a zoY)wr*fdYYP4Z-b5X=TsLmT6)o+uWwyyZks&oIk;Fo{<6B)un-pHMV8hq_97Yqd&h zV=%R7?@2ZTbLNi5)bx_L7+5iwR#l) zW?fPRdV;~UgAVVwFq1-&VcUtdbxD0Om^x?;@1%l?C7@XPcjqv@3UwfH*wz7qsfU$- zsxY0q+|J(_n8S1`)O{o~+ev6*@-$q1D(=`gd(*?ReuDAu<+!evd|EP1X;}xUJ5H3`YvkUY5gDO;<|> z5~ar9v@?HQFApc7^b&NCfWM2mzhZwpJ<)c{hd$IkP1sw8QW(p+5&mttpDTZzGmt1d z`o@?oyUphDlX)QeJGkxmJCGq@2^!52Xfn&XUsU=_s-YM9$FlhD7wYvd6&K?TO9ST= t4?ln5{PojcH{3EpL_|bHL`2ld{{e5N2eIbZA}jy^002ovPDHLkV1h;~$Eg4S literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/kofi_symbol.png b/app/src/main/res/drawable/kofi_symbol.png new file mode 100644 index 0000000000000000000000000000000000000000..dd55a5e2d6ccfa5e526daae5cf4b5834705ff36b GIT binary patch literal 4513 zcmb_g^;;8;*BvloIAHV$VIu`5j1&|}N$H-%Xpm-tAPj|3qem#6(j_G*%@_^~Y4M{- zgNlSo*S@^}!+W1|pYxpaocqJQKi(uW6FnwIUPb@_z+|9*#{vML(!6YH2AWI9mjCI{ zB~d-F(9;4mkMaM!6hJRc!C(3DuS;^Jb;BQ44!O-i^XB~YFc zAWt9=GBPqK?xGZT5z0L-91a%~6B7~=^5DS(Pft$|4-Y##J6l^@LqkIY0|Ql6RcUEy z7!0;a6H5RDhSV@aI|n_9&LEVQy=WO2{4~C>xTB)qhz0;4JO+0(t-}BN z{pDkNArdkejPwNgdB;IqMWod*d)KpAir&FdZJwVGP6rHIC+oKYw1|3IK}WZVXn8l0 z#;@88F25s6x)^b=X{Agq@h4S5RjcUW5DuSB7=um8hD$1ITa!wA=8DqGS>tQPo|4^x z*)tDX-9A+oZqm9yyOav$yr7K^XL;9)s~w7ns+E7lg0615zyhxh^N%d~oTPSgS0lad zb2$6Td2_~qCP%d`jY`M7(%sXVdWfu0aZvGT8XD}Gywf(;S&AFd>fPg0!`~e!&ni?T zffSx4M3pn}-W~pK6A_b}&{qyE`9yb}MmZ-iZTS0OyJ3qWwRnv9fseg*UnP=vvMeVc z-$r1oUWWOsQhVR=n0~6WBa=OAD38sZX@%wIOowEM&{#a=S9&F+`?whatr98x%bPH6 z{wxrMy84RnD~4gLp>56rv!nMVebL9={x@^?S2uR7?f7q}LO*iQ)qDJv1?+F%`{$co z{!Zj?T58ewjo^#_f^T|iasLNtP9=Tu2ANY|XRI?C`IqUmS{Vf}e)v=1BsK$<{Vqto zd?qC{pMGO2=NK5nRVTm7ki`*)mul& zMLCvR0}C~$_4U8HFE}toam9zqxT)_}EEdzoGH<+1@YZ!B3Q=|;!AALPiDt9>Qu>S$G|MyB$bF_r^JoIY5X%C(`JQL5=Yx@n=BAsYi z`jD#_^DCQ z$q3NCk48klJlH6LVTGB7h{7p&zIm?gnf|5e-YD_~5@Egd5DU;6SBio5<=n`AOnzNM z@2R<->i$H`m)HjkTXs&%gACq_?~02A3Dn3xc6o^|e|$5or$Wtw&_tRv4F7SqVYm07 zpmD9U`s%R4_T3YG!-EQpDmzZ$&6T7??Qz!-Q0#7909Kzf4hd`$%kd}QwxbIcpLM^H zUz^)Yo+@KYC_8`TAo+?fOr+~n?TZP*a7Ef7nOo^2?%lsAQ+5_>!^tBCrK}GHA~xzN z`w3Xi)9bhvU_8V@D(4e{w2jvP5FMI)y5{|8^9Hk4hUAZE?h$WZzuN8hM?NKaPej@q z1c#}DmHUdu);)*MBCwCTi&F-KV1PzvKCSvifS(Ba9wT}zNcBd>E447+4AFJ?+nHl$ zzR3R!+3CV2MD5aU;mD8_%b*2gamZ^FFHP`Xt0;X~JLE>ux zHog}VOpb^-F_S@L_IqwN1hstqhlNp%mWUz(CjQ{Gi%;x)M}I;GcNiJ+r0lr9a zec0S+_n0gt!>x00beCu9wpY@U{4#IOMk|+9>+rjnn}l3uh=EYNmoBNcYRH1MVl`~i zscPue401)RIy2c+cNFgdVTTB9h=%?|478W5*3^7ilFer_Y;)YnV^YQ5?gwdKw_ zV78Vo4>_@=Tg9)_ag!>v1D>ZFX$iPiU&f0plyh_WBG@vBNfPgsg_h^*HMd0u8x3{k zbFQ1}4ZZ)stgcc~b`h~F-99YNo)5G&dt&-mt(~M^nvBcMzy96Mj-|kC*Vi+}w4O1` zlCgiRQP$Qf=q}j&0WD3X+O?Rqj*l9(=)$C!|BNCTFBIF!R>ng-cJtke4U4MnWcn1v zUkCMPpYv}^=WsZ%(v07TlYmZ1%cVF-N+@ghbh$qF3f;)pxoEC%)RDg27 zR9gJ9lkMXLxEJy%SaUO^_%n{V>HT|~sPID6s#LQxJjsJ5WFVB4He1|1*5eKWj_E}Z z#-6V(E<2MLm4!=ywW~$9gK4X9v~1U7Zj$Wqth0NAE6Y9!jPXgnZ1=5rJ8BmlJu^O$ z2yJ2TAaN(;0|q?}mWI=w?h`4MHGlmc2?Fk+Egn9rMEuwFL12f^iCKadtZGcSTomF8 z;D8o41)Seel|%VI79KDy?2|{qLh4C=aJW>}Lg! zTK!^6ChkNZ+!Ak~ysD?zJKr==-c9pGa;AMe*Ng4u;O`cpdta?P1268JkaV`PU9bYI zqb(U(zw!hsK-Gp!lnWNxDCcnv255PqIpj%Ue{GcK4~99Y-W|J}57k*~s{Ye9e*BT$ z`0i|3X2|b;(3`LI2_3UQ9s0SPN~`zBFPp?37lk{{WLlmoMvdcJamBj@PAH z@zbIf2v(=c3ckbix`Ut-jl_$weovfudj?|t@<~kHQux_Zp&KNOm_Rv;$VyQG=CQv7 z(`MpOj-6P>QA;bgVfAOO10g#oX<=l4#4UtiLV{$D*GDT@zK3TKV58zI_&y6C6w&kt zl^DynAL?9SaSaFxB2unHb-%$c8VhlU0yd9vNYEDO+EXUN!pC5KxamlolIR(5KPPrI z>)|9P;;IOkD>?Z$Jal`@~-nx#k>N8R(h*2 zOZ&cBc-iwkAV-u4<1d0ivtm-qGO#Z_Qcgl(oOT z0vqK2o0hw0VMHgeImX{Quqi#Y7pq>Rpowyn7^g%#N>ek&3BC%0&qu9m`}7a z0r%LN4GL3w$YDb};Q2{J0qtPAnFnB%ZID6Jw!a6d*ima}^o!gRoQgF+PsJ!Is_n*k zVMX?oM=s0_{dc#2g&iCoU;UX?U*L@V4RSo013#0iv=r!b?po>N%lwe1LF6p*>|OYhv#-g+w%;aP4M_X%5)XXdmi{mI92Ky-oXX5 zV5QDQ2d&_qX8idW(kSAL>kfCo2jAwXKB6sjbBSX;i|1YiWD;YIN|3n3j2pf1%~3YN zdm#w0EV1XUMebD4QyMYvNrwBhSdUyF;&NVhDwshzS)1CXRg-=7bKKE+D#@BEa5n)M zMHemj)l}RZWE4P?EGL$VMDXVzC9K7|GG$Vir9#7GwC!)Ps=hLcb1{jb_&$i`mgWpR zjU*y(zoe4((25k5`J!uXoIT^!Ik9P0sJQgBtvH?ul?;YJ)UEluVgk7}jI zuG#mnU|!IT%F|%yfHl~IhH`y|!MU?{eAJiPNdtUneRU)?RY))-Vf)C{bT7%xdZsP? zEp*8k#4vi);;7EtWqo@yU+27@Hb%|wdqyy*K?qdmzpPWI68?cba(V{e8Fwvp4RW&F`nHD`u7i6v&G=Tg4uVXVcx9Cb{X);zns*0>)(G}Do0KXnUc3b z3xjL4I?4PyI~YK%9%CFi-VI2CJ_@b>G>WD!_OOBfDGH4f?F9vycs}j$T#QrfrrKKU z$HWPB!eC}ns|Ji-s&mAfbl0YKM~ywG{31MT?K}a~DgG^)9ofQg{#>(Wep!v)Y9F-L z=|m7KHT6wId2iS1pe!<=KFck0w~@qr(g(<0cS&X#alBTk%p#4QEP8;aj^)VcX&y z{1VTPp5QCNNmR!0?Ul4q6`b(U%43C&Pc6dC;6Qz5+3h4j)gC$R;d^`SQu5R36zr^- z<$xE{{$Awlc-!NHKjcp*D!I8!f5?d$UW55VmuwoQ@Fn{=l$5>Z%|TEb-1|`@vAl{> zbBq|4y$>+TcuWjQPmr;<+Ns=0qG;dj8&V$U+F2X#YAA`~ITcU7d9mdFBWy&TGCLud z`bH+!^Iac5)2W`*2C9?1+uc{P!_qI$f9|Y&l-9p<*qtcyZ2&+u{(Gi}pIi0vkpM8z LF}c&M<&66uU~rXc literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/liberapay_logo.png b/app/src/main/res/drawable/liberapay_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e738da1b483e0bdc482ce96b072fa5f48ae4bc0a GIT binary patch literal 4204 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 Date: Wed, 5 Aug 2026 13:48:54 +0530 Subject: [PATCH 06/12] fix strings --- app/src/main/res/values-de-rDE/strings.xml | 9 +++++++-- app/src/main/res/values-zh-rTW/strings.xml | 5 ++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 3074b59fb..6ab27823e 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -320,5 +320,10 @@ Medium Wenig Unknown - - + + Delete Location + Are you sure you want to delete this location? + + + Alerts + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 04aac4ea1..b4cd77998 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -11,7 +11,7 @@ 降雨時長 現在 今天 - 請稍候 %1$D 分鐘 刷新後 + 請稍候 %1$d 分鐘 刷新後 發生錯誤。 請再試一次 月相 週日 @@ -321,5 +321,4 @@ Delete Location Are you sure you want to delete this location? Alerts - - + From 52ae155b737776900cb5f25f2ab4a4177110516c Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Wed, 5 Aug 2026 18:26:46 +0530 Subject: [PATCH 07/12] translation fixes --- app/build.gradle.kts | 15 +++++++++++++-- .../weather_master_app/feature/main/MainScreen.kt | 2 +- app/src/main/res/values-fi-rFI/strings.xml | 7 +++---- app/src/main/res/values-iw-rIL/strings.xml | 5 ++--- app/src/main/res/values-pt-rPT/strings.xml | 5 ++--- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5950e7d71..5e7624ad3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -32,6 +32,8 @@ val hasKeystore = keystoreFile.exists() val versionNameString = "3.8.0" +val playStore = false + android { namespace = "com.pranshulgg.weather_master_app" compileSdk { @@ -40,8 +42,11 @@ android { android.buildFeatures.buildConfig = true defaultConfig { - applicationId = - "com.pranshulgg.weather_master_app" // com.pranshulgg.weather_master for Google Play Store + applicationId = if (playStore) { + "com.pranshulgg.weather_master" + } else { + "com.pranshulgg.weather_master_app" + } minSdk = 26 targetSdk = 36 versionCode = 58 @@ -78,6 +83,12 @@ android { "APP_VERSION", "\"v${versionNameString}\"" ) + + buildConfigField( + "boolean", + "IS_PLAYSTORE_BUILD", + playStore.toString() + ) } signingConfigs { diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt index bfd9fe7af..54463546c 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/main/MainScreen.kt @@ -66,7 +66,7 @@ data class MainScreenUiState( val lastestVersionUrl: String = "https://github.com/PranshulGG/WeatherMaster/releases/latest", val isUnsupportedSourceDialogOpen: Boolean = false, val isChangelogSheetOpen: Boolean = false, - val isGooglePlayStoreRelease: Boolean = false // Set TRUE when building for play store + val isGooglePlayStoreRelease: Boolean = BuildConfig.IS_PLAYSTORE_BUILD ) @OptIn(ExperimentalMaterial3Api::class) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 6ccabb02c..c4a1edbc1 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -277,11 +277,11 @@ Onko sinulla säätietojen tarjoaja lisättäväksi? Voit toivoa sitä tästä Toivo tarjoajaa %1$s ja muut - Tuuli: + Tuuli: %1$s %1$s tuntia Tuloksia ei löytynyt Luvassa %1$s päivällä ja yöllä. - Päivällä luvassa poutaa, yöksi %2$s. + Päivällä luvassa %1$s, yöllä %2$s. Päivällä on luvassa sadetta noin kello %1$s %2$s todennäköisyydellä. Yöllä on %3$s todennäköisyys sateeseen noin kello %4$s. Päivällä on luvassa sadetta noin kello %1$s %2$s todennäköisyydellä. Yöllä on %1$s todennäköisyys sateeseen noin kello %2$s. @@ -324,5 +324,4 @@ Delete Location Are you sure you want to delete this location? Alerts - - + diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 88f31436f..6fd412a4e 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -183,7 +183,7 @@ יישום זה שולח התראה ברקע כאשר יש עדכוני מזג אוויר התראה %1$s שעות - שעה + %1$s שעה מיטוב הסוללה כבר בהתעלמות הגדרות נוספות מרווח זמן בין עדכונים @@ -332,5 +332,4 @@ Delete Location Are you sure you want to delete this location? Alerts - - + diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index f4eeffa62..65b1d2cb5 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -95,7 +95,7 @@ Apagar Não é possível eliminar o local padrão Aparência da aplicação - Sensação térmica + Sensação térmica %1$s Máx.: %1$s Mín.: %1$s Resultados da pesquisa fornecido por %1$s @@ -323,5 +323,4 @@ Delete Location Are you sure you want to delete this location? Alerts - - + From 16fa2366f0a4a223cb09e9a0ce8630529188b3a0 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Thu, 6 Aug 2026 09:28:21 +0530 Subject: [PATCH 08/12] Wrong temperature summary --- .../core/utils/weather/computing/summary/Headlines.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/core/utils/weather/computing/summary/Headlines.kt b/app/src/main/java/com/pranshulgg/weather_master_app/core/utils/weather/computing/summary/Headlines.kt index cf6c090fc..a328863bc 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/core/utils/weather/computing/summary/Headlines.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/core/utils/weather/computing/summary/Headlines.kt @@ -165,16 +165,16 @@ fun getHeadline( val tempMin = formatterTemperature(summaryData.temps.min) val tempSentence = when { - tempMax >= 35 -> + summaryData.temps.max >= 35 -> context.getString(R.string.summary_temp_template_extreme, "${tempMax}°", "${tempMin}°") - tempMax >= 25 -> + summaryData.temps.max >= 25 -> context.getString(R.string.summary_temp_template_warm, "${tempMax}°", "${tempMin}°") - tempMax >= 15 -> + summaryData.temps.max >= 15 -> context.getString(R.string.summary_temp_template_mild, "${tempMax}°", "${tempMin}°") - tempMax >= 5 -> + summaryData.temps.max >= 5 -> context.getString(R.string.summary_temp_template_cool, "${tempMax}°", "${tempMin}°") else -> From 430bd7d94ad5ad3fe2c35c95e18a0d0441189771 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Thu, 6 Aug 2026 20:32:08 +0530 Subject: [PATCH 09/12] fix dew point crashes --- .../screens/humidity/components/DewPointHourlyCard.kt | 8 ++++++-- .../screens/humidity/components/HumidityHourlyCard.kt | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt index 1d6d96bec..cf523dfac 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt @@ -32,6 +32,7 @@ import com.pranshulgg.weather_master_app.core.utils.formatters.to12HourTimeStrin import com.pranshulgg.weather_master_app.core.utils.formatters.to24HourTimeString import com.pranshulgg.weather_master_app.feature.shared.components.CardsHeader import kotlin.collections.map +import kotlin.isNaN import kotlin.math.max import kotlin.math.roundToInt @@ -90,8 +91,11 @@ fun DewPointHourlyCard( val percentage = ((item.dewPoint!!.minus(min)).div((max - min))).times( 100 - ).roundToInt() - val barHeight = max((percentage.div(100.0)).times(140), 5.0) + ).takeIf { !it.isNaN() } ?: 5.0 + val barHeight = max( + (percentage.div(100.0)).times(140), + 5.0 + ).takeIf { !it.isNaN() } ?: 5.0 val barColor = when { item.dewPoint < 0 -> Color(0xFF1565C0) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/HumidityHourlyCard.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/HumidityHourlyCard.kt index 971746f90..5cba30d27 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/HumidityHourlyCard.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/HumidityHourlyCard.kt @@ -69,7 +69,9 @@ fun HumidityHourlyCard(data: List, zoneId: String) { val item = data[index] - val barHeight = max((item.humidity!!.div(100.0)).times(140), 5.0) + val barHeight = + max((item.humidity!!.div(100.0)).times(140), 5.0).takeIf { !it.isNaN() } + ?: 5.0 val barColor = when { item.humidity < 20 -> Color(0xFFC62828) From a51335db2994c031b63d973b97201ba69b7c4e90 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Sat, 8 Aug 2026 11:09:35 +0530 Subject: [PATCH 10/12] improve intro screen --- .../weather_master_app/feature/intro/IntroScreen.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/intro/IntroScreen.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/intro/IntroScreen.kt index ed3976e93..c63ec4290 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/intro/IntroScreen.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/intro/IntroScreen.kt @@ -156,10 +156,14 @@ fun IntroScreen(navController: NavController) { contentPadding = ButtonDefaults.contentPaddingFor(btnSize), shapes = ButtonDefaults.shapes() ) { - Text("Enable Location", style = ButtonDefaults.textStyleFor(btnSize)) + Text( + if (isLoading) "Loading..." else "Enable Location", + style = ButtonDefaults.textStyleFor(btnSize) + ) } Gap(12.dp) OutlinedButton( + enabled = !isLoading, onClick = { navController.navigate(NavRoutes.SEARCH) }, From 4707619b9f7f5ddc7049d0c7e7556a08f2501196 Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Sat, 8 Aug 2026 20:15:03 +0530 Subject: [PATCH 11/12] crash fixes --- .../humidity/components/DewPointHourlyCard.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt b/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt index cf523dfac..25cd7de66 100644 --- a/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt +++ b/app/src/main/java/com/pranshulgg/weather_master_app/feature/blocks/screens/humidity/components/DewPointHourlyCard.kt @@ -1,6 +1,7 @@ package com.pranshulgg.weather_master_app.feature.blocks.screens.humidity.components import android.content.Context +import android.util.Log import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -91,11 +92,13 @@ fun DewPointHourlyCard( val percentage = ((item.dewPoint!!.minus(min)).div((max - min))).times( 100 - ).takeIf { !it.isNaN() } ?: 5.0 + ).takeIf { !it.isNaN() } ?: 0.0 + + val barHeight = max( (percentage.div(100.0)).times(140), 5.0 - ).takeIf { !it.isNaN() } ?: 5.0 + ) val barColor = when { item.dewPoint < 0 -> Color(0xFF1565C0) @@ -106,6 +109,15 @@ fun DewPointHourlyCard( else -> Color(0xFFC62828) } + // NEVER CRASH + val temperatureText = item.dewPoint + .takeIf { it.isFinite() } + ?.let { formatter(it) } + ?.takeIf { it.isFinite() } + ?.roundToInt() + ?.let { "$it°" } + ?: "—" + if (index == 0) Gap(horizontal = 16.dp) Column( @@ -134,7 +146,7 @@ fun DewPointHourlyCard( } Gap(5.dp) Text( - "${formatter(item.dewPoint)?.roundToInt()}°", + temperatureText, color = MaterialTheme.colorScheme.primary, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold From 3f2ba808d5ec3aa4b253073622f507b12d3dc48f Mon Sep 17 00:00:00 2001 From: PranshulGG Date: Sat, 8 Aug 2026 20:21:57 +0530 Subject: [PATCH 12/12] added missing strings closes #1013 --- app/src/main/res/values/strings.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 992e37242..51b244e05 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -395,6 +395,20 @@ Alerts + Dry and comfortable + Comfortable + Sticky + Muggy + Uncomfortable + + Requires restart + Latitude + Longitude + Support + If you enjoy the app, consider supporting its development + Your device language + System +