License the project; add root README, website, and parked release CI

- Code: GPL-3.0-or-later (LICENSE, SPDX headers on all .kt/.aidl).
  Specs in docs/: CC-BY-4.0 (docs/LICENSE). Rationale in build-status.md;
  server decided GPL (not AGPL).
- Root README for the public repo.
- web/: Cloudflare Worker site for echo-lot.app. /apk resolves the newest
  APK from the Gitea latest-release API at request time (edge-cached 5 min),
  so tagging a release is the only publish step. /fdroid, /source, and a
  manual DOWNLOAD_URL fallback are wrangler vars.
- .gitea/workflows/release.yml: tag-driven (v*) signed semver APK builds for
  the future production app in echolot-app/. Parked; the prober is
  deliberately not CI-built.
- Fix UserService.kt: drop the explicit secondary constructor that
  conflicted with the implicit primary (never compiled before — first
  local build caught it). Prober now builds: :app:assembleDebug OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mrambossek
2026-07-30 09:15:35 +02:00
co-authored by Claude Opus 5
parent e3840f54fe
commit 6ddf013dfe
28 changed files with 1659 additions and 5 deletions
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
// IUserService.aidl
package app.echo_lot.prober.shizuku;
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober
import android.Manifest
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.export
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.bluetooth.BluetoothManager
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.system.Os
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
/** All probes the app runs, in display order. */
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.probe
import android.content.Context
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.shizuku
import android.content.ComponentName
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.shizuku
import kotlin.system.exitProcess
@@ -11,9 +14,7 @@ import kotlin.system.exitProcess
* implementing the AIDL Stub.
*/
class UserService : IUserService.Stub() {
// Required no-arg constructor for Shizuku UserService.
constructor()
// The implicit no-arg primary constructor is the one Shizuku requires.
override fun destroy() {
exitProcess(0)
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Echolot contributors
// SPDX-License-Identifier: GPL-3.0-or-later
package app.echo_lot.prober.ui
import androidx.compose.foundation.layout.Arrangement