Skip to content

Commit 28caf8f

Browse files
committed
docs: update README with Google Play Open Beta badge, release tracks, and relocated architecture section
1 parent 40e47ae commit 28caf8f

2 files changed

Lines changed: 34 additions & 30 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ All notable changes to the BoxViewer project will be documented in this file.
1111

1212
### Added
1313
- **Expanded System Diagnostics**: System Diagnostics copy action now includes active home screen widget counts, system locale, app preferences, database state, and saved crash stack traces.
14-
- **7 New Locales Supported**: Prepared language picker and resource infrastructure for Czech (`cs`), Spanish (`es`), French (`fr`), Hungarian (`hu`), Italian (`it`), Dutch (`nl`), and Polish (`pl`).
14+
- **7 New Locales Added**: Integrated complete translations from POEditor for Czech (`cs`), Spanish (`es`), French (`fr`), Hungarian (`hu`), Italian (`it`), Dutch (`nl`), and Polish (`pl`), expanding in-app language picker and system locale support to 8 languages total.
1515

1616
## [0.50] - 2026-07-21
1717

README.md

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Crafted with **Kotlin** and **Jetpack Compose** following Material Design 3 guid
3434
* **📈 Rich Telemetry Analysis**: Deep telemetry streams visualization including units, last updated timestamps, coordinates, station type, and exposure type (indoor vs. outdoor).
3535
* **🔍 Smart Discovery Engine**: Locate public senseBoxes from the openSenseMap community using direct search by name/ID, location address auto-complete, or on-demand GPS discovery.
3636
* **🌡️ Local Unit Conversion**: Per-sensor unit switching for temperature (°C/°F/K), pressure (hPa/mbar/Pa/inHg/mmHg), and wind (m/s/km/h/mph/kn) performed entirely on-device.
37-
* **🌐 Multi-Language Support**: BoxViewer currently ships in English and German and is prepared for additional languages (see below)
37+
* **🌐 Multi-Language Support**: BoxViewer supports 8 languages (English, German, Czech, Spanish, French, Hungarian, Italian, Dutch, Polish) with POEditor translation integration.
3838
* **🔗 Quick Sharing & Deep Linking**: Generate local QR codes to share senseBox stations. Recipients scan the code or open a sharing web link to view the station directly inside the BoxViewer app.
3939
* **🔋 Battery & API-Friendly**: Seamless local SQLite caching (`SensorCacheEntity`) and awake-on-unlock widget refresh logic ensure you get fresh data without draining your battery or hammering openSenseMap servers.
4040
* **🔒 Privacy-First & De-Googled Friendly**: 100% free of Google Play Services (GMS) dependencies in the app code. Core functionality relies on the native Android `LocationManager` and direct openSenseMap APIs. Address search and location labels may use the device’s native geocoder (ROM-dependent backend) or an OpenStreetMap-based fallback; see the Privacy Policy for details. Zero telemetry, analytics, or third-party trackers.
@@ -45,21 +45,25 @@ Crafted with **Kotlin** and **Jetpack Compose** following Material Design 3 guid
4545

4646
## ⬇️ Download & Install
4747

48-
BoxViewer is distributed as an independent APK package and is compatible with Android 7.0 (API 24) and above.
48+
BoxViewer is compatible with Android 7.0 (API 24) and above and is distributed via Google Play as well as direct APK downloads.
4949

50-
### 🧪 Google Play Open Testing
51-
* **[Join Open Testing on Google Play](https://play.google.com/store/apps/details?id=de.nichu42.boxviewer)**: Open testing builds may receive new features and fixes earlier than stable GitHub release APKs.
50+
### 🧪 Google Play (Open Beta)
51+
<a href="https://play.google.com/store/apps/details?id=de.nichu42.boxviewer">
52+
<img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" height="80" />
53+
</a>
5254

53-
### 🚀 Direct Download
54-
You can download stable APKs directly from GitHub — no account required:
55+
* Opt-in directly on Google Play to test the latest beta builds (no sign-up or approval required).
5556

56-
* **[Download Stable APKs](https://github.com/nichu42/boxviewer/releases)**: Recommended for most users. Contains vetted, officially tagged stable releases.
57+
### 🚀 Direct Download & GitHub Releases
58+
You can download APK packages directly from the **[GitHub Releases](https://github.com/nichu42/boxviewer/releases)** page:
59+
* **Latest Releases**: Official stable releases, tested and recommended for general use.
60+
* **Pre-Releases**: Early test builds (Open Beta) published in parallel with the Google Play Open Testing track for users who prefer to try the newest features immediately.
5761

5862
### 🔄 Automatic Updates with Obtainium
59-
To receive automatic updates on de-googled systems, we recommend using **[Obtainium](https://obtainium.imranr.dev/)**:
60-
1. Copy the GitHub repository link: `https://github.com/nichu42/boxviewer`
61-
2. Open Obtainium and select **Add App**.
62-
3. Paste the URL and click **Add** to start tracking releases.
63+
To receive automatic updates on de-googled ROMs or without Google Play Services, we recommend using **[Obtainium](https://obtainium.imranr.dev/)**:
64+
1. Copy the repository URL: `https://github.com/nichu42/boxviewer`
65+
2. Open Obtainium, tap **Add App**, and paste the URL.
66+
3. Obtainium will automatically track GitHub releases (including pre-releases if enabled).
6367

6468
---
6569

@@ -74,24 +78,6 @@ BoxViewer is developed with love as an open-source project. If you are happy wit
7478

7579
---
7680

77-
<details>
78-
<summary>🛠️ <b>Technical Architecture & Tech Stack (For Developers)</b></summary>
79-
<br>
80-
81-
BoxViewer adheres to the strict guidelines of modern Android architecture (MVVM / Clean Architecture style) enabling clean decoupling between database layers, networking models, and the UI.
82-
83-
* **UI Framework**: [Jetpack Compose](https://developer.android.com/jetcompose) (declarative UI with type-safe compose navigation).
84-
* **Architecture**: `ViewModel` + `StateFlow` + structured asynchronous coroutine builders (`lifecycleScope`, `collectAsStateWithLifecycle`).
85-
* **Local Persistence Layer**: [Room Database](https://developer.android.com/training/data-storage/room) using Kotlin Symbol Processing (KSP) compilation to persist configurations, widgets, and offline caches.
86-
* **Networking Server-Client**: [Retrofit 3](https://square.github.io/retrofit/) coupled with [OkHttp 5](https://square.github.io/okhttp/) and [Moshi](https://github.com/square/moshi) to carry out efficient JSON processing of the openSenseMap API.
87-
* **Asynchrony Core**: Kotlin [Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) & [Flow](https://kotlinlang.org/docs/flow.html).
88-
* **QR Code Utilities**: [ZXing Core](https://github.com/zxing/zxing) barcode image processing library for local generation of station QR sharing codes.
89-
* **Core Security Integration**: Secrets Gradle Plugin configured with safe `.env` runtime configurations to decouple keys and configurations from version-control processes.
90-
* **Local Testing Ecosystem**: Fully integrated [Robolectric](https://robolectric.org/) testing suites running on high-speed headless JVM surfaces combined with [Roborazzi](https://github.com/takahirom/roborazzi) for visual screenshot regression testing.
91-
</details>
92-
93-
---
94-
9581
## 🌍 Data, Geocoding & Attribution
9682

9783
### openSenseMap API
@@ -143,6 +129,24 @@ For more details on translating and how the sync workflow works, check our [CONT
143129

144130
---
145131

132+
<details>
133+
<summary>🛠️ <b>Technical Architecture & Tech Stack (For Developers)</b></summary>
134+
<br>
135+
136+
BoxViewer adheres to modern Android architecture guidelines (MVVM / Clean Architecture) with clean decoupling between database, networking, and presentation layers.
137+
138+
* **UI Framework**: [Jetpack Compose](https://developer.android.com/jetcompose) (declarative UI with type-safe Compose Navigation).
139+
* **Architecture**: `ViewModel` + `StateFlow` + structured asynchronous coroutines (`lifecycleScope`, `collectAsStateWithLifecycle`).
140+
* **Local Persistence Layer**: [Room Database](https://developer.android.com/training/data-storage/room) compiled with KSP to manage configurations, widgets, and offline caches.
141+
* **Networking**: [Retrofit 3](https://square.github.io/retrofit/) with [OkHttp 5](https://square.github.io/okhttp/) and [Moshi](https://github.com/square/moshi) for JSON parsing of the openSenseMap API.
142+
* **Asynchrony**: Kotlin [Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) & [Flow](https://kotlinlang.org/docs/flow.html).
143+
* **QR Code Generation**: [ZXing Core](https://github.com/zxing/zxing) library for local station QR code generation.
144+
* **Configuration & Secrets**: Secrets Gradle Plugin using `.env` runtime configurations to decouple build configuration.
145+
* **Testing Suite**: [Robolectric](https://robolectric.org/) JVM testing combined with [Roborazzi](https://github.com/takahirom/roborazzi) for visual screenshot regression testing.
146+
</details>
147+
148+
---
149+
146150
## 📜 Copyright & License Info
147151

148152
**Copyright (C) 2026 nichu42 and contributors**

0 commit comments

Comments
 (0)