aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AGENTS.md13
-rw-r--r--README.md7
-rw-r--r--app/build.gradle.kts2
-rw-r--r--app/src/debug/res/values/strings.xml8
-rw-r--r--app/src/main/res/values/strings.xml2
5 files changed, 23 insertions, 9 deletions
diff --git a/AGENTS.md b/AGENTS.md
index 619123c3..0222ad6b 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -4,17 +4,20 @@ Guidance for AI coding agents (Claude Code, opencode, etc) working in this repos
## What this is
-Maintained fork of Android Password Store, an Android client for `pass`
+HardenedPass: a maintained fork of Android Password Store, an Android client for `pass`
(OpenPGP-encrypted files in a git repository). Upstream
(`android-password-store/Android-Password-Store`) was archived in October 2024; the fork
-started in November 2026 from upstream's last commit. Kotlin, Gradle, about 18k lines.
+started in November 2026 from upstream's last commit. Kotlin, Gradle, about 18k lines. The
+goal is to work flawlessly on GrapheneOS: no Google Play Services, no telemetry.
Modules: `app` (UI, git sync, autofill service), `autofill-parser`, `crypto:common`,
`crypto:pgpainless`, `format:common`, `passgen:diceware`, `passgen:random`, `ui:compose`,
`coroutine-utils`. Build conventions live in `build-logic/`.
-The app name and `applicationId` (`app.passwordstore`) are still upstream's on purpose. Do not
-rename them unless asked: it is tied to the release-signing decision (see Releases).
+`applicationId` is `xyz.danix.hardenedpass` (debug: `.debug` suffix, label "HardenedPass
+Debug"), so it installs next to upstream's `app.passwordstore` and never updates over it. The
+Kotlin package stays `app.passwordstore`; renaming it is churn with no user-visible effect.
+Keep "GrapheneOS" out of the app name: it is that project's trademark.
## Repository layout and remotes
@@ -82,7 +85,7 @@ real device with a trusted browser (e.g. Firefox) instead:
e2e server over USB; serve a local login page the same way (`python3 -m http.server` on
127.0.0.1, `adb reverse` its port). Nothing is exposed on the network.
- Record `settings get secure autofill_service` and `global stay_on_while_plugged_in` first,
- restore both afterwards, then `adb uninstall app.passwordstore.debug`, delete the pushed
+ restore both afterwards, then `adb uninstall xyz.danix.hardenedpass.debug`, delete the pushed
keys from Download and `adb reverse --remove-all`.
- Set `svc power stayon usb` before driving: if the screen locks, taps land on the lock
screen's PIN pad. Check `dumpsys window | grep mCurrentFocus` (and `isKeyguardShowing`)
diff --git a/README.md b/README.md
index 2e04034b..8c452f90 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,9 @@
-# Password Store
+# HardenedPass
An Android client for [pass](https://www.passwordstore.org/), the standard Unix password manager.
Passwords are stored as OpenPGP-encrypted files in a git repository, so the same store works with
-`pass` on the desktop and with this app on the phone.
+`pass` on the desktop and with this app on the phone. HardenedPass aims to work flawlessly on
+GrapheneOS: it needs no Google Play Services and sends no telemetry.
This is a maintained fork of
[android-password-store/Android-Password-Store](https://github.com/android-password-store/Android-Password-Store),
@@ -17,6 +18,8 @@ Android Password Store authors.
- Bouncy Castle 1.86 and PGPainless 1.7.8, fixing known Bouncy Castle advisories.
- Decrypt screen no longer reachable by other apps with arbitrary file paths.
- No build scans uploaded to third-party services.
+- No crash reporting (Sentry) and no Google Play Services; a single FOSS build.
+- Own application ID (`xyz.danix.hardenedpass`): installs next to upstream instead of over it.
## Building
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 0105bd4e..872f79dd 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -19,7 +19,7 @@ android {
namespace = "app.passwordstore"
defaultConfig {
- applicationId = "app.passwordstore"
+ applicationId = "xyz.danix.hardenedpass"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml
new file mode 100644
index 00000000..5c8ed051
--- /dev/null
+++ b/app/src/debug/res/values/strings.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2026 Danilo M. <danix@danix.xyz>
+ ~ SPDX-License-Identifier: GPL-3.0-only
+ -->
+<resources>
+ <string name="app_name" translatable="false">HardenedPass Debug</string>
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b3f3e71c..0584a1f2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,7 +11,7 @@
</plurals>
<!-- Activity names -->
- <string name="app_name" translatable="false">Password Store</string>
+ <string name="app_name" translatable="false">HardenedPass</string>
<string name="action_settings">Settings</string>
<string name="dialog_delete_title">Directory already exists</string>