Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
1e7bfb7
chore(upstream): record reviewed upstream baseline
pando85 Aug 29, 2026
e66e2b9
chore(upstream): add repeatable upstream audit script
pando85 Aug 29, 2026
bce8e6c
chore(upstream): add baseline update helper
pando85 Aug 29, 2026
cb9096e
chore(upstream): add guarded upstream PR adoption helper
pando85 Aug 29, 2026
651094c
docs(upstream): document selective reconciliation policy
pando85 Aug 29, 2026
7f2db3c
ci(upstream): audit upstream changes weekly
pando85 Aug 29, 2026
5068e49
chore(upstream): add one-time selective sync bootstrap
pando85 Aug 29, 2026
c05ac73
chore(upstream): classify generated PSL data explicitly
pando85 Aug 29, 2026
3856343
ci(upstream): run one-time selective sync bootstrap
pando85 Aug 29, 2026
c05b301
ci(upstream): resolve timestamp port semantically
pando85 Aug 29, 2026
3a647b0
ci(upstream): adapt contextual fast unlock to fork
pando85 Aug 29, 2026
02d0ffd
ci(upstream): adapt per-key unlock PIN isolation
pando85 Aug 29, 2026
b7f6fce
ci(upstream): preserve fork PIN dialog semantics
pando85 Aug 29, 2026
95c3710
chore(upstream): port upstream #936
github-actions[bot] Aug 29, 2026
be7ab99
chore(upstream): adapt upstream #938 timestamp lifecycle
github-actions[bot] Aug 29, 2026
cf1ba21
chore(upstream): port upstream #939
github-actions[bot] Aug 29, 2026
4db6ff4
chore(upstream): port upstream #941
github-actions[bot] Aug 29, 2026
a4d219d
chore(upstream): port upstream #942
github-actions[bot] Aug 29, 2026
cde76f9
chore(upstream): port upstream #1000
github-actions[bot] Aug 29, 2026
65d56b8
chore(upstream): adapt upstream #1000 fast unlock context
github-actions[bot] Aug 29, 2026
2f58428
chore(upstream): port upstream #1000
github-actions[bot] Aug 29, 2026
a18e6bd
chore(upstream): port upstream #1000
github-actions[bot] Aug 29, 2026
3b0e63f
chore(upstream): port upstream #1007
github-actions[bot] Aug 29, 2026
9076d2c
chore(upstream): port upstream #1011
github-actions[bot] Aug 29, 2026
3a04e81
chore(upstream): normalize upstream #1011 qualifier filename
github-actions[bot] Aug 29, 2026
1e5fbee
fix(crypto): isolate fast-unlock PINs per PGP identity
github-actions[bot] Aug 29, 2026
5ffe2e6
fix(crypto): adapt upstream #1011 PIN cancellation
github-actions[bot] Aug 29, 2026
b4c6522
chore(upstream): port upstream #1011
github-actions[bot] Aug 29, 2026
0702990
chore(upstream): port upstream #1011
github-actions[bot] Aug 29, 2026
89545bc
chore(upstream): port upstream #1011
github-actions[bot] Aug 29, 2026
b05ab8c
chore(upstream): port upstream #1011
github-actions[bot] Aug 29, 2026
696dffb
chore(upstream): port upstream #1014
github-actions[bot] Aug 29, 2026
747985d
chore(upstream): port upstream #1016
github-actions[bot] Aug 29, 2026
c9cb3f4
chore(upstream): port upstream #1022
github-actions[bot] Aug 29, 2026
7a3ccc3
chore(upstream): port upstream #1026
github-actions[bot] Aug 29, 2026
490e55a
chore(upstream): port upstream #1043
github-actions[bot] Aug 29, 2026
d023363
chore(autofill): refresh Public Suffix List from upstream
github-actions[bot] Aug 29, 2026
f8c3a78
chore(upstream): finalize recurring reconciliation tooling
github-actions[bot] Aug 29, 2026
c7e0b95
style: format selective upstream ports
github-actions[bot] Aug 29, 2026
3e58ed2
fix(upstream): qualify unlock PIN preference mode
pando85 Aug 29, 2026
52601bf
Fix unresolved MODE_PRIVATE reference in Android SDK 37
Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/upstream-sync-baseline
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
48ce3af5b4cd9b818d44edca4249a15d48e2170f
48 changes: 48 additions & 0 deletions .github/workflows/upstream-audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Audit upstream changes

on:
schedule:
- cron: "17 6 * * 1"
workflow_dispatch:

permissions:
contents: read
issues: write

jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

- name: Generate upstream reconciliation report
id: audit
shell: bash
run: scripts/upstream-audit.sh "$RUNNER_TEMP/upstream-audit.md"

- name: Create or update reconciliation issue
if: steps.audit.outputs.has_changes == 'true'
env:
GH_TOKEN: ${{ github.token }}
REPORT: ${{ runner.temp }}/upstream-audit.md
shell: bash
run: |
set -euo pipefail
issue_number="$(
gh issue list \
--state open \
--search '"Upstream reconciliation pending" in:title' \
--json number,title \
--jq '.[] | select(.title == "Upstream reconciliation pending") | .number' \
| head -n 1
)"

if [[ -n "$issue_number" ]]; then
gh issue edit "$issue_number" --body-file "$REPORT"
else
gh issue create \
--title "Upstream reconciliation pending" \
--body-file "$REPORT"
fi
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
android:installLocation="auto">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_LOCAL_NETWORK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Required by Autofill to verify the certificate hashes of packages -->
<uses-permission
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/app/passwordstore/Application.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import android.view.View
import android.view.WindowInsetsController
import androidx.appcompat.app.AppCompatDelegate
import app.passwordstore.injection.context.FilesDirPath
import app.passwordstore.injection.prefs.PGPPassphrases
import app.passwordstore.injection.prefs.SettingsPreferences
import app.passwordstore.ui.crypto.BasePGPActivity.Companion.cachedPassphrases
import app.passwordstore.util.coroutines.DispatcherProvider
Expand Down Expand Up @@ -46,6 +47,7 @@ class Application : android.app.Application(), SharedPreferences.OnSharedPrefere

@Inject @SettingsPreferences lateinit var prefs: SharedPreferences
@Inject @FilesDirPath lateinit var filesDirPath: String
@Inject @PGPPassphrases lateinit var persistentPassphrases: SharedPreferences
@Inject lateinit var dispatcherProvider: DispatcherProvider
@Inject lateinit var gitSettings: GitSettings
@Inject lateinit var proxyUtils: ProxyUtils
Expand All @@ -68,7 +70,7 @@ class Application : android.app.Application(), SharedPreferences.OnSharedPrefere
logcat { "Debug logging enabled." }
prefs.registerOnSharedPreferenceChangeListener(this)
setNightMode()
runMigrations(filesDirPath, prefs, gitSettings)
runMigrations(filesDirPath, prefs, gitSettings, persistentPassphrases)
proxyUtils.setDefaultProxy()
DynamicColors.applyToActivitiesIfAvailable(this)
setupScreenOffHandler()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package app.passwordstore.injection.prefs

import android.content.Context
import android.content.Context.MODE_PRIVATE
import android.content.SharedPreferences
import app.passwordstore.BuildConfig
import dagger.Module
Expand Down Expand Up @@ -34,16 +33,21 @@ class PreferenceModule {

@[Provides SettingsPreferences Reusable]
fun provideSettingsPreferences(@ApplicationContext context: Context): SharedPreferences {
return context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_preferences", MODE_PRIVATE)
return context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_preferences", 0)
}

@[Provides PGPPassphrases Reusable]
fun providePGPPassphrases(@ApplicationContext context: Context): SharedPreferences {
return context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_passphrases", MODE_PRIVATE)
return context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_passphrases", 0)
}

@[Provides UnlockPins Reusable]
fun provideUnlockPins(@ApplicationContext context: Context): SharedPreferences {
return context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_unlock_pins", 0)
}

@[Provides GitSecrets Reusable]
fun provideGitSecrets(@ApplicationContext context: Context): SharedPreferences {
return context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_git_secrets", MODE_PRIVATE)
return context.getSharedPreferences("${BuildConfig.APPLICATION_ID}_git_secrets", 0)
}
}
10 changes: 10 additions & 0 deletions app/src/main/java/app/passwordstore/injection/prefs/UnlockPins.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*
* Copyright © 2014-2026 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/

package app.passwordstore.injection.prefs

import javax.inject.Qualifier

@Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class UnlockPins
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class AutofillDecryptActivity : BasePGPActivity() {
requireKeysExist {
requireDecryptionKeysExist(PasswordRepository.getParentPath(filePath, repositoryPath)) { ids
->
getPersistentAndDecrypt(ids)
getPersistentAndDecrypt(ids, action = "autofill")
}
}
}
Expand Down
Loading