Skip to content

Releases: Laupin-ca/whispertether

v0.5.0-beta.2

v0.5.0-beta.2 Pre-release
Pre-release

Choose a tag to compare

@mr-d80 mr-d80 released this 27 Jun 00:32
136d44c

Added

  • Added SEO crawl/discovery artifacts for laupin.ca (distribution/robots.txt, distribution/sitemap.xml) plus a naming evaluation memo that keeps the app name stable while positioning the page as "Hotspot Helper for Android".

Changed

  • Renamed the app from "Hotspot Helper" to WhisperTether for a less-crowded branding/SEO position. A full clean rename: the laupin.ca distribution pages and site path (/apps/hotspot-helper/ → /apps/whispertether/, with recomputed JSON-LD CSP hashes), the Android package and app id (com.hotspothelper → ca.laupin.whispertether), all in-app visible strings and internal identifiers, the GitHub release-repo references (Laupin-ca/whispertether), the release/license scripts and runbook, and the release skill. The release asset is now whispertether-<version>.apk. Supersedes the earlier "keep the name" decision below. Out of scope by design: the on-disk DataStore filename and historical changelog entries.
  • Wired the laupin.ca "Buy a license" button to the live Lemon Squeezy hosted checkout (laupin.lemonsqueezy.com), replacing the disabled "Checkout URL pending" placeholder. The link is a plain outbound <a> so the page stays static and the .htaccess CSP is unchanged; the storefront is still completing registration, so the link may not yet take payment.
  • Reworked the laupin.ca app page around an install-first conversion flow, beta-accurate sideload copy, clearer Android/Shizuku requirements, stronger SEO metadata/SoftwareApplication JSON-LD, and a non-broken checkout-pending state until the owner supplies the Lemon Squeezy URL.
  • Updated the privacy page's example User-Agent from an old alpha build to the current beta build.

v0.5.0-beta.1

v0.5.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@mr-d80 mr-d80 released this 25 Jun 20:37

Added

  • laupin.ca app page now has a real "Buy a license" section: a $10 USD one-time purchase via a Lemon Squeezy hosted checkout (outbound link; the page stays static so the site CSP is unchanged), plus "after you buy" guidance to enter the key under About → License. Added a License screenshot slot and documented the required image files. The privacy policy now notes Lemon Squeezy handles payment data while the app itself remains offline with no account. (Key delivery is manual at launch; the checkout URL and screenshots are owner-supplied before go-live.)
  • License management for licensed users: the License screen now shows the active license (email + key), a button to copy the key, and a confirm-gated "Remove license" action. Removing a license falls back to the free trial (and re-locks if the trial has already ended). Closes the gap where a licensed user could not move their key to another device or recover after a signing-key rotation.

Fixed

  • Release APK now installs on Android 13/14 devices (e.g. Pixel 6). The release signing config produced a malformed v1 (JAR) signature alongside valid v2/v3 signatures; a present-but-invalid v1 block causes the modern installer to reject the APK rather than fall through to v2. Disabled v1 signing (enableV1Signing = false) — v2 has been the on-device standard since API 24 and minSdk is 26, so v1 added no compatibility while breaking installs. The signing certificate is unchanged.

Security

  • Rotated the license-signing Ed25519 key from the development key to a production key generated offline (private half held only in the owner's secret store, never in the repo). The earlier development key's private half had been exposed during implementation, so it could not be used for real sales. This is the license-signing key (signs license keys), not the APK-signing certificate, which is unchanged. No real licenses had been issued, so nothing in the field is affected.

v0.4.0-beta.1

v0.4.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@mr-d80 mr-d80 released this 10 Jun 03:11

Fixed

  • Hotspot started by the app via the Shizuku binder path now hands out DHCP leases on stricter OEM tethering stacks. The hidden-ITetheringConnector request was missing connectivityScope = CONNECTIVITY_SCOPE_GLOBAL, leaving it at the invalid default 0. Lenient stacks (e.g. Pixel) tolerated this, but stricter OEM stacks brought up only the Wi-Fi AP radio (SSID visible, clients could associate) without starting the downstream DHCP server, so connected devices never received an IP address. Toggling the hotspot off/on from system settings worked because that path builds the request with the correct scope.

v0.3.0-alpha.2

v0.3.0-alpha.2 Pre-release
Pre-release

Choose a tag to compare

@mr-d80 mr-d80 released this 21 May 00:21

Added

  • Release distribution automation script (scripts/release/Publish-Release.ps1) and accompanying skill (.claude/skills/release/SKILL.md).
  • Setup checklist now shows a separate "Developer options" row (reads Settings.Global.development_settings_enabled) above the existing "Wireless debugging" row, making the prerequisite relationship explicit. Previously both states were collapsed into a single mislabelled row.

Fixed

  • "Developer options" checklist row was actually reading adb_wifi_enabled (the Wireless Debugging sub-toggle) and mislabelling it as Developer Options. The row is now correctly labelled "Wireless debugging".
  • "Check for updates now" button on the About screen was disabled whenever the "Automatic checks" toggle was off. Manual checks now always run regardless of the toggle. UpdateChecker.forceRefresh() also no longer returns early when automatic checks are disabled.
  • Shizuku setup guide Section 3 now notes that the Play Store build may take a minute or two to finish starting on first launch, and that the success-indicator wording varies between the Play Store and direct-download builds.

Changed

  • SettingsRepositoryTest now uses an in-memory DataStore<Preferences> instead of a file-backed one. Removes the Windows .tmp → real-file rename race that required the -PskipWindowsDataStoreFlakes Gradle workaround. The workaround property and its note in docs/Development/release-process.md have been removed.

v0.3.0-alpha.1

v0.3.0-alpha.1 Pre-release
Pre-release

Choose a tag to compare

@mr-d80 mr-d80 released this 20 May 07:13

Hotspot Helper v0.3.0-alpha.1

First self-distributed release. Bundles the release-signing infrastructure,
the in-app update checker, and the laupin.ca-hosted download / install /
privacy pages into a coherent, externally-installable slice.

This is a pre-release alpha. Sideload at your own risk. Requires
Shizuku — the in-app setup guide walks you
through every step.

Install

  • First time: laupin.ca/apps/hotspot-helper/ has the
    full install walkthrough including the Shizuku setup, the
    allow-unknown-sources flow, and screenshots.
  • Direct APK:
    hotspot-helper-0.3.0-alpha.1.apk
    (download to your Android device and open).
  • Existing installs: the in-app update banner will surface this release
    automatically on the next launch.

Verifying the download

SHA-256 of hotspot-helper-0.3.0-alpha.1.apk:

e4e6cd8703e332b9d814acb977c533e8aa1eedc01d9e1b123f28ce0e250ad58c

Also published at
laupin.ca/apps/hotspot-helper/latest.apk.sha256.

What's new

Added

  • Release signing configured for v1+v2+v3 schemes. Builds reproducibly
    signed when app/keystore.properties (or the matching env vars) is
    populated.
  • In-app update checker. Polls laupin.ca/apps/hotspot-helper/updates.json
    on launch; surfaces a dismissible banner when a newer release is
    available. Toggle from About → Updates.
  • About → Updates diagnostic line so silent fetch failures are visible
    ("Last check: 2m ago — Up to date" / "Failed (network)" /
    "Failed (server response)").
  • About screen now has a Privacy section linking to the full privacy
    policy on laupin.ca.
  • targetSdk raised to 36.
  • INTERNET permission for the update check (the only outbound network
    use).
  • A growing collection of JVM unit tests across the new update package.

Changed

  • Release build no longer minifies (Shizuku binder path relies on
    reflection that R8 default rules would strip).

Fixed

  • MainActivity.openShizuku now imports ActivityNotFoundException
    (the exception was caught without the import, masking a clean release
    build failure under debug incremental compilation).
  • Several pre-existing exception-handling and intent-mutation niggles
    surfaced during the self-distribution work, all noted in
    CHANGELOG.md.

Privacy

No analytics. No telemetry. No user account. One outbound HTTPS request
to check for updates, which you can disable.
Full privacy policy.

Requirements

  • Android 8.0 (API 26) or newer. Tested on Android 16.
  • Shizuku running on the same device.
  • Developer Options → Wireless Debugging enabled (Shizuku prerequisite).
  • A paired Bluetooth device to use as the automation trigger.