Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
3f5aa8b
Implement the new card in the Profile screen for the subscription (#805)
PavlosTze Nov 27, 2025
f2ee0cf
Feature/fe 2044 plans (#823)
PavlosTze Dec 1, 2025
0d23eb8
Fixed the placement of meteoblue logo
PavlosTze Dec 3, 2025
f74fb11
Merge branch 'main' into feature/hyperlocal-upsell
PavlosTze Dec 9, 2025
e944e27
Show powered by weatherxm logo instead of the text we had before
PavlosTze Dec 9, 2025
4276c9e
WIP - Integrate the purchaseToken in the API request
PavlosTze Dec 10, 2025
0ff61e8
Finalize the integration of the purchaseToken in the API and the isPr…
PavlosTze Dec 10, 2025
d877e55
Fix the discrepancies between the premium data and the default ones
PavlosTze Dec 10, 2025
19df83b
Bump version
PavlosTze Dec 11, 2025
4dabdeb
Fix the STOPSHIP comment
PavlosTze Dec 11, 2025
7702e89
Minor detekt fixes
PavlosTze Dec 11, 2025
782e5a6
More fixes
PavlosTze Dec 11, 2025
674b1bd
Reverse the position of powered by and hyperlocal
PavlosTze Dec 12, 2025
28c0173
Replace the RangeSlider with a custom compose component to better dra…
PavlosTze Dec 14, 2025
df18517
Chages in the Hyperlocal Prompt card and in the Powered by card
PavlosTze Dec 17, 2025
ef90a4a
Support of two different endpoints in Forecast (no UI yet)
PavlosTze Dec 20, 2025
430514f
Add the two tabs in the forecast tab of the device details
PavlosTze Dec 20, 2025
1f1273f
Fix powered by visibility in forecast fragment
PavlosTze Dec 22, 2025
d798bda
Fixes on forecast tab. Add the two tabs in forecast details.
PavlosTze Dec 22, 2025
913210e
Fix in forecast details
PavlosTze Dec 22, 2025
a583fcb
Fixes in forecast tab in hourlies to set probability to visible when …
PavlosTze Dec 22, 2025
df4c4e4
WIP: Add premium gradient color in temperature bar in forecast tab
PavlosTze Dec 23, 2025
41f4457
WIP paint the weather icons in the daily forecast in the forecast tab…
PavlosTze Dec 23, 2025
e70eda0
Add gradient in the charts in forecast details in premium tab
PavlosTze Dec 23, 2025
cf67847
Fix the forecast tab color at onResume
PavlosTze Dec 23, 2025
a533ba2
Replace the DailyTileForecastAdapter with a composable one, in order …
PavlosTze Dec 24, 2025
7bf7076
Change the prompt CTA text
PavlosTze Jan 8, 2026
3b823ca
Update the texts in the profile tab
PavlosTze Jan 10, 2026
b1f2a63
Redesign the top bar, the bottom bar and add the selector at the top …
PavlosTze Jan 12, 2026
71bc34d
Redesign the subscription management screen
PavlosTze Jan 13, 2026
b5b0a4d
Fix detekt
PavlosTze Jan 13, 2026
29419be
Fixes
PavlosTze Jan 13, 2026
22ac4d9
Implement the UI changes when downgrading and the new dialog before d…
PavlosTze Jan 13, 2026
c82263d
Bump version to release in closed testing
PavlosTze Jan 13, 2026
31d82e1
Fixed the downgrade dialog by using a custom composable
PavlosTze Jan 14, 2026
8efc637
Fix test code
PavlosTze Jan 14, 2026
5217bd7
Hide the tab selectors and keep only the monthly subscription
PavlosTze Feb 5, 2026
4b90511
Add precipitation in pro forecast
PavlosTze Feb 13, 2026
d4755c4
Fetch forecast again if the user went to the manage subscription scre…
PavlosTze Feb 13, 2026
90e395d
Hide premium implementation for Solana users
PavlosTze Feb 16, 2026
e72819c
Bump version
PavlosTze Feb 16, 2026
695b55a
Redesign FreePlanView and PremiumPlanView for hyperlocal upsell
eeVoskos Feb 18, 2026
47af1a1
Fix UI contrast issues in manage subscription screen
eeVoskos Feb 19, 2026
4cd5f9d
Minor fixes
PavlosTze Feb 19, 2026
a9de7d2
Fix unit tests
PavlosTze Feb 19, 2026
6f77f85
Bump version
PavlosTze Feb 19, 2026
4a14cce
Drive PremiumPlanView UI decisions from offer tags
eeVoskos Feb 21, 2026
6ad9261
Update dependencies and free trial threshold
eeVoskos Feb 21, 2026
9b84b9e
Bump version code
eeVoskos Feb 21, 2026
a4b7758
Update free trial threshold strings
eeVoskos Feb 22, 2026
6761a74
feat: Update app version code
eeVoskos Feb 22, 2026
1aeaf04
Update app/src/main/java/com/weatherxm/service/BillingService.kt
eeVoskos Feb 27, 2026
e42c147
Update app/src/main/java/com/weatherxm/service/BillingService.kt
eeVoskos Feb 27, 2026
9099a15
Update app/src/test/java/com/weatherxm/ui/forecastdetails/ForecastDet…
eeVoskos Feb 27, 2026
3e0caea
Minor fixes
eeVoskos Feb 27, 2026
7258da2
Changed default build variant
eeVoskos Feb 27, 2026
e3a2188
Add inspection suppression for signing configuration in build script
eeVoskos Feb 27, 2026
1c544f5
Add unstable API usage suppression for locale filters
eeVoskos Feb 27, 2026
fc26087
Fix detekt violations across billing, subscription UI, and test files
eeVoskos Feb 27, 2026
e34c912
Update tag sorting logic in build script
eeVoskos Feb 27, 2026
1e8e7ba
Update test data for wallet rewards in DeviceDetailsViewModelTest
eeVoskos Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/on-main-firebase-distribution.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ env:
ORG_GRADLE_PROJECT_DEBUG_KEY_PASSWORD: ${{ secrets.DEBUG_KEY_PASSWORD }}
# Firebase distribution on tech team group
ORG_GRADLE_PROJECT_FIREBASE_TEST_GROUP: ${{ secrets.FIREBASE_TECH_TEAM_TEST_GROUP }}
# The base 64 encoded RSA public key found in Google Play Console
ORG_GRADLE_PROJECT_BASE64_ENCODED_RSA_PUBLIC_KEY: ${{ secrets.BASE64_ENCODED_RSA_PUBLIC_KEY }}
# Gradle config
GRADLE_USER_HOME: ${GITHUB_WORKSPACE}/.gradle
GLOBAL_GRADLE_CACHE: gradle-cache-${GITHUB_REPOSITORY}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/on-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ env:
ORG_GRADLE_PROJECT_RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
# Firebase distribution on tech team group
ORG_GRADLE_PROJECT_FIREBASE_TEST_GROUP: ${{ secrets.FIREBASE_TECH_TEAM_TEST_GROUP }}
# The base 64 encoded RSA public key found in Google Play Console
ORG_GRADLE_PROJECT_BASE64_ENCODED_RSA_PUBLIC_KEY: ${{ secrets.BASE64_ENCODED_RSA_PUBLIC_KEY }}
# Gradle config
GRADLE_USER_HOME: ${GITHUB_WORKSPACE}/.gradle
GLOBAL_GRADLE_CACHE: gradle-cache-${GITHUB_REPOSITORY}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/on-qa-firebase-distribution.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ env:
ORG_GRADLE_PROJECT_DEBUG_KEY_PASSWORD: ${{ secrets.DEBUG_KEY_PASSWORD }}
# Firebase distribution only on QA Group
ORG_GRADLE_PROJECT_FIREBASE_TEST_GROUP: ${{ secrets.FIREBASE_QA_TEST_GROUP }}
# The base 64 encoded RSA public key found in Google Play Console
ORG_GRADLE_PROJECT_BASE64_ENCODED_RSA_PUBLIC_KEY: ${{ secrets.BASE64_ENCODED_RSA_PUBLIC_KEY }}
# Gradle config
GRADLE_USER_HOME: ${GITHUB_WORKSPACE}/.gradle
GLOBAL_GRADLE_CACHE: gradle-cache-${GITHUB_REPOSITORY}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/production-distribution.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ env:
ORG_GRADLE_PROJECT_RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
# Firebase distribution on tech team group
ORG_GRADLE_PROJECT_FIREBASE_TEST_GROUP: ${{ secrets.FIREBASE_TECH_TEAM_TEST_GROUP }}
# The base 64 encoded RSA public key found in Google Play Console
ORG_GRADLE_PROJECT_BASE64_ENCODED_RSA_PUBLIC_KEY: ${{ secrets.BASE64_ENCODED_RSA_PUBLIC_KEY }}
# Gradle config
GRADLE_USER_HOME: ${GITHUB_WORKSPACE}/.gradle
GLOBAL_GRADLE_CACHE: gradle-cache-${GITHUB_REPOSITORY}
Expand Down
18 changes: 16 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ fun getVersionGitTags(isSolana: Boolean, printForDebugging: Boolean = false): Li
return grgit.tag.list().filter {
it.name.matches(versionTagsRegex)
}.sortedBy {
it.dateTime
it.dateTime ?: it.commit.dateTime
}.map {
if (printForDebugging) {
println("${it.name} --- (${it.dateTime})")
Expand Down Expand Up @@ -89,16 +89,22 @@ android {
applicationId = "com.weatherxm.app"
minSdk = 28
targetSdk = 36
versionCode = 30 + getVersionGitTags(isSolana = false).size
versionCode = 44 + getVersionGitTags(isSolana = false).size
versionName = getLastVersionGitTag(false, skipTagsLogging)

androidResources {
// Keeps language resources for only the locales specified below.
@Suppress("UnstableApiUsage")
localeFilters += listOf("en")
}
// Resource value fields
resValue("string", "mapbox_access_token", getStringProperty("MAPBOX_ACCESS_TOKEN"))
resValue("string", "mapbox_style", getStringProperty("MAPBOX_STYLE"))
resValue(
"string",
"base64_encoded_pub_key",
getStringProperty("BASE64_ENCODED_RSA_PUBLIC_KEY")
)

// Instrumented Tests
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
Expand Down Expand Up @@ -138,6 +144,7 @@ android {
}
create("remote") {
dimension = "mode"
isDefault = true
}
create("mock") {
val apiURL = getFlavorProperty("API_URL", "remotemock.env")
Expand Down Expand Up @@ -194,6 +201,7 @@ android {
}
}
create("prod") {
isDefault = true
val apiURL = getFlavorProperty("API_URL", "production.env")
val claimDAppUrl = getFlavorProperty("CLAIM_APP_URL", "production.env")
val mixpanelToken = getFlavorProperty("MIXPANEL_TOKEN", "production.env")
Expand Down Expand Up @@ -265,6 +273,8 @@ android {
manifestPlaceholders["crashlyticsEnabled"] = true
}
getByName("debug") {
isDefault = true
//noinspection WrongGradleMethod
signingConfigs.firstOrNull { it.name == "debug-config" }?.let {
signingConfig = it
}
Expand Down Expand Up @@ -559,6 +569,7 @@ dependencies {

// Animations
implementation(libs.lottie)
implementation(libs.lottie.compose)

// Charts
implementation(libs.mpAndroidCharts)
Expand Down Expand Up @@ -624,4 +635,7 @@ dependencies {

// Markdown Renderer
implementation(libs.markdown.renderer)

// Billing
implementation(libs.billing)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"address": "Athens, GR",
"tz": "Europe/Athens",
"date": "2025-07-24",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -410,6 +411,7 @@
"address": "Athens, GR",
"tz": "Europe/Athens",
"date": "2025-07-25",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -792,6 +794,7 @@
{
"tz": "Europe/Athens",
"date": "2025-07-26",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{
"tz": "Europe/Athens",
"date": "2024-04-11",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -408,6 +409,7 @@
{
"tz": "Europe/Athens",
"date": "2021-12-21",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -790,6 +792,7 @@
{
"tz": "Europe/Athens",
"date": "2021-12-20",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -1172,6 +1175,7 @@
{
"tz": "Europe/Athens",
"date": "2021-12-23",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -1554,6 +1558,7 @@
{
"tz": "Europe/Athens",
"date": "2021-12-24",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -1936,6 +1941,7 @@
{
"tz": "Europe/Athens",
"date": "2021-12-25",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down Expand Up @@ -2318,6 +2324,7 @@
{
"tz": "Europe/Athens",
"date": "2021-12-26",
"isPremium": false,
"hourly": [
{
"precipitation": 0,
Expand Down
Loading