aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AGENTS.md17
-rw-r--r--TODO.md6
-rw-r--r--app/build.gradle.kts4
-rw-r--r--app/src/main/res/values/colors_material3.xml54
-rw-r--r--gradle/libs.versions.toml2
5 files changed, 14 insertions, 69 deletions
diff --git a/AGENTS.md b/AGENTS.md
index 952af633..01f4a392 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -25,6 +25,9 @@ Debug"), so it installs next to upstream's `app.passwordstore` and never updates
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.
+minSdk is 31: GrapheneOS runs current Android only, and Android 12 has
+`UiModeManager.setApplicationNightMode`.
+
## Repository layout and remotes
- `master` is the only branch. Upstream's `develop` was renamed; do not recreate it.
@@ -144,13 +147,13 @@ cached passphrase) and Pixel 6 Pro on Android 17 (fill, save), all passed.
- `LaunchActivity` is exported and forwards `FILE_PATH` to `MainActivity` (not exported) only
after `isFileInRepo` checks it canonically resolves inside the store; `MainActivity` opens it as
`EntryRoute`, whose destination checks it again before decrypting.
-- Material Components (Views) stays after the Compose overhaul: the window themes derive from
- `Theme.Material3.DayNight` (the AppCompat activities need it), and the git operations' View
- dialogs (`BaseGitActivity`, `GitOperation`, `CredentialFinder` with
- `git_credential_layout.xml`, `BreakOutOfDetached`, `StoreActions`), `DynamicColors` and the
- `snackbar` helper use it. `oreo_autofill_dataset.xml` stays a layout: fill suggestions are
- `RemoteViews` drawn by the system. `fragment-ktx` is declared only to pin `androidx.fragment`
- (appcompat alone resolves an older one).
+- Window themes derive from the platform `android:Theme.Material.*.NoActionBar`, activities from
+ `FragmentActivity` (`BiometricPrompt` needs it). Git operations and store actions show dialogs and
+ snackbars through the activity-scoped `Prompts` ViewModel (`activity.prompts`), drawn by
+ `PromptHost`, which only `MainActivity` and `AutofillSaveActivity` host. AppCompat stays in the
+ APK through zxing (`CaptureManager`, `zxing_CaptureTheme`) and `androidx.biometric`;
+ `oreo_autofill_dataset.xml` stays a layout: fill suggestions are `RemoteViews` drawn by the
+ system.
- sshj gets Ed25519 keys from Bouncy Castle: `SshjConfig.kt` pins `KeyFactory.Ed25519` to it at
provider position 1. Conscrypt from Android 14 mainline updates serves that factory with keys
sshj maps to `KeyType.UNKNOWN` ("Don't know how to encode key"), breaking every Ed25519 host
diff --git a/TODO.md b/TODO.md
index 2dd6f365..f9832c0e 100644
--- a/TODO.md
+++ b/TODO.md
@@ -4,6 +4,6 @@ Open work after 0.2.0. Remove an item in the commit that finishes it.
## Features and UI
-- Git dialogs to Compose: the git operations' View dialogs (`BaseGitActivity`, `GitOperation`,
- `CredentialFinder`, `BreakOutOfDetached`, `StoreActions`) and the `snackbar` helper still use
- Material Components (Views). Moving them lets that dependency go.
+- QR scanner: `zxing-android-embedded` is the last thing keeping AppCompat in the APK
+ (`androidx.biometric` references it only on the fingerprint dialog path, unused at minSdk 31).
+ Replacing it would let AppCompat go.
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index cad899f9..9ad30d32 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -57,18 +57,16 @@ dependencies {
implementation(projects.ui.compose)
implementation(libs.androidx.activity)
implementation(libs.androidx.activity.compose)
- implementation(libs.androidx.appcompat)
implementation(libs.androidx.autofill)
implementation(libs.androidx.biometricKtx)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.documentfile)
- // Pins androidx.fragment (FragmentActivity, BiometricPrompt): appcompat alone resolves 1.5.4.
+ // FragmentActivity, which BiometricPrompt needs.
implementation(libs.androidx.fragment.ktx)
implementation(libs.androidx.hilt.navigation.compose)
implementation(libs.bundles.androidxLifecycle)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.lifecycle.runtime.compose)
- implementation(libs.androidx.material)
implementation(libs.androidx.navigation.compose)
implementation(libs.compose.ui.tooling)
implementation(libs.dagger.hilt.android)
diff --git a/app/src/main/res/values/colors_material3.xml b/app/src/main/res/values/colors_material3.xml
index ecd34921..47ffbc6a 100644
--- a/app/src/main/res/values/colors_material3.xml
+++ b/app/src/main/res/values/colors_material3.xml
@@ -5,59 +5,5 @@
<resources>
<color name="md_theme_light_primary">#006591</color>
- <color name="md_theme_light_onPrimary">#FFFFFF</color>
- <color name="md_theme_light_primaryContainer">#C7E6FF</color>
- <color name="md_theme_light_onPrimaryContainer">#001E30</color>
- <color name="md_theme_light_secondary">#4F606E</color>
- <color name="md_theme_light_onSecondary">#FFFFFF</color>
- <color name="md_theme_light_secondaryContainer">#D3E5F5</color>
- <color name="md_theme_light_onSecondaryContainer">#0B1D29</color>
- <color name="md_theme_light_tertiary">#006494</color>
- <color name="md_theme_light_onTertiary">#FFFFFF</color>
- <color name="md_theme_light_tertiaryContainer">#C8E6FF</color>
- <color name="md_theme_light_onTertiaryContainer">#001E31</color>
- <color name="md_theme_light_error">#BA1B1B</color>
- <color name="md_theme_light_errorContainer">#FFDAD4</color>
- <color name="md_theme_light_onError">#FFFFFF</color>
- <color name="md_theme_light_onErrorContainer">#410001</color>
- <color name="md_theme_light_background">#FCFCFF</color>
- <color name="md_theme_light_onBackground">#1A1C1E</color>
- <color name="md_theme_light_surface">#FCFCFF</color>
- <color name="md_theme_light_onSurface">#1A1C1E</color>
- <color name="md_theme_light_surfaceVariant">#DDE3EA</color>
- <color name="md_theme_light_onSurfaceVariant">#41474D</color>
- <color name="md_theme_light_outline">#72787E</color>
- <color name="md_theme_light_inverseOnSurface">#F0F0F3</color>
- <color name="md_theme_light_inverseSurface">#2E3133</color>
- <color name="md_theme_light_primaryInverse">#85CEFF</color>
- <color name="md_theme_dark_primary">#85CEFF</color>
- <color name="md_theme_dark_onPrimary">#00344E</color>
- <color name="md_theme_dark_primaryContainer">#004C6F</color>
- <color name="md_theme_dark_onPrimaryContainer">#C7E6FF</color>
- <color name="md_theme_dark_secondary">#B7C9D9</color>
- <color name="md_theme_dark_onSecondary">#21323E</color>
- <color name="md_theme_dark_secondaryContainer">#384956</color>
- <color name="md_theme_dark_onSecondaryContainer">#D3E5F5</color>
- <color name="md_theme_dark_tertiary">#8ACEFF</color>
- <color name="md_theme_dark_onTertiary">#003450</color>
- <color name="md_theme_dark_tertiaryContainer">#004B70</color>
- <color name="md_theme_dark_onTertiaryContainer">#C8E6FF</color>
- <color name="md_theme_dark_error">#FFB4A9</color>
- <color name="md_theme_dark_errorContainer">#930006</color>
- <color name="md_theme_dark_onError">#680003</color>
- <color name="md_theme_dark_onErrorContainer">#FFDAD4</color>
- <color name="md_theme_dark_background">#1A1C1E</color>
- <color name="md_theme_dark_onBackground">#E1E2E5</color>
- <color name="md_theme_dark_surface">#1A1C1E</color>
- <color name="md_theme_dark_onSurface">#E1E2E5</color>
- <color name="md_theme_dark_surfaceVariant">#41474D</color>
- <color name="md_theme_dark_onSurfaceVariant">#C1C7CE</color>
- <color name="md_theme_dark_outline">#8B9197</color>
- <color name="md_theme_dark_inverseOnSurface">#1A1C1E</color>
- <color name="md_theme_dark_inverseSurface">#E1E2E5</color>
- <color name="md_theme_dark_primaryInverse">#006591</color>
- <color name="seed">#003E5B</color>
- <color name="error">#BA1B1B</color>
- <!-- Multiselect color -->
</resources>
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index c0a37319..3439f128 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -14,7 +14,6 @@ android-desugarJdkLibs = "com.android.tools:desugar_jdk_libs:2.0.4"
androidx-activity = { module = "androidx.activity:activity", version.ref = "androidxActivity" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidxActivity" }
androidx-annotation = "androidx.annotation:annotation:1.8.2"
-androidx-appcompat = "androidx.appcompat:appcompat:1.7.0"
androidx-autofill = "androidx.autofill:autofill:1.3.0"
androidx-biometricKtx = "androidx.biometric:biometric-ktx:1.2.0-alpha05"
androidx-core-ktx = "androidx.core:core-ktx:1.13.1"
@@ -27,7 +26,6 @@ androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-ru
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" }
androidx-lifecycle-viewmodelKtx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycle" }
androidx-navigation-compose = "androidx.navigation:navigation-compose:2.8.9"
-androidx-material = "com.google.android.material:material:1.12.0"
aps-sublimeFuzzy = "com.github.android-password-store:sublime-fuzzy:2.3.4"
aps-zxingAndroidEmbedded = "com.github.android-password-store:zxing-android-embedded:4.2.1"
build-agp = { module = "com.android.tools.build:gradle", version.ref = "agp" }