diff options
| -rw-r--r-- | AGENTS.md | 17 | ||||
| -rw-r--r-- | TODO.md | 6 | ||||
| -rw-r--r-- | app/build.gradle.kts | 4 | ||||
| -rw-r--r-- | app/src/main/res/values/colors_material3.xml | 54 | ||||
| -rw-r--r-- | gradle/libs.versions.toml | 2 |
5 files changed, 14 insertions, 69 deletions
@@ -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 @@ -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" } |
