Android application compatible with ZX2C4's Pass command line application

Last update: Aug 14, 2022

Password Store

GitHub workflow Backers on Open Collective Sponsors on Open Collective

Download

Get it on Google Play Get it on F-Droid

Documentation

We're in the process of rewriting our documentation from scratch, and the work-in-progress state can be seen here. See the wiki for the old documentation.

Contributing

Want to contribute? See if you can find an issue you wanna close, then send a PR!

Interested in helping to translate Password Store? Contribute here!

Wanna test development builds to find bugs and offer feedback? Read the release channels documentation to get access!

Community

Ways to get in touch:

  • Github issues: Use it if you have a bug report, or you want to submit a feature request.
  • GitHub Discussions: Use it if you do not understand something, or want to discuss a feature request in more detail with all community members before pitching it to maintainers.

Contributors

This project exists thanks to all the people who contribute.

Opencollective

Backers

Thank you to all our backers! 🙏 [Become a backer]

Backers

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website.[Become a sponsor]

Triplebyte Applicative GmbH ScrapingBee Become a Sponsor

Google Play and the Google Play logo are trademarks of Google LLC.

GitHub

https://github.com/android-password-store/Android-Password-Store
Comments
  • 1. Request for documentation - setting up my mobile phone with git repo on my laptop

    Is your feature request related to a problem? Please describe. This is not a feature request. I am trying to understand how to do something and not sure where to start and what steps I should take to achieve it.

    Describe the solution you'd like I would like to have a step by step for achieving a simple task.

    Describe alternatives you've considered I installed OpenKeyChain but I don't know what to do with it and how it fits into the workflow.

    Additional context I set up pass on my ubuntu laptop by following the steps below:

    gpg2 --full-gen-key
    pass init [email protected]
    sudo apt-get install openssh-client openssh-server
    git init --bare ~/pass-repo
    pass git init
    pass git remote add origin ssh://[email protected]:/home/oren/pass-repo
    pass git push origin master
    

    I would also like to have my phone working with pass. Someone on another issue suggestion following:

    You need an OpenPGP provider (like OpenKeyChain) to supply the keys used to encrypt your passwords and an SSH key to access your git repo for syncing (or use passwords for that). The SSH key can be generated by the app (public part has to be added to ~/.ssh/authorized_keys on your laptop then) or imported from somewhere else.

    But I don't understand what to do. Can someone provide step by steps instructions for setting up my mobile phone with password store? I want my phone to read and save from and to the git repository on my laptop.

    Reviewed by oren at 2020-03-07 08:45
  • 2. [BUG] Versions 1.4.0 and 1.5.0 not updated on F-Droid

    F-Droid lists 1.3.3 as the latest version: https://f-droid.org/packages/com.zeapo.pwdstore/

    It seems the build metadata is not up to date. I don't know if this file is maintained by this project, or whether someone from F-Droid keeps it up to date.

    Reviewed by dutchgecko at 2020-03-03 09:50
  • 3. [BUG] symlinks are clobbered by the app

    Describe the bug A password will fail to decrypt if it is a soft link as opposed to a normal file.

    To Reproduce Steps to reproduce the behavior:

    1. Create a password that's a soft link to an existing password using ln -s <passwd>.gpg softlink.gpg
    2. Pull the repository on device
    3. Try to decrypt the password
    4. See error

    Expected behavior Password is decrypted and shown in the UI

    Device information (please complete the following information):

    • Device: Google Pixel 2
    • OS: Android R DP1
    • App version 1.6.0-SNAPSHOT

    Additional context

    Relevant log snippet

    E  onError getErrorId: 0
    E  onError getMessage: No valid OpenPGP encrypted or signed data found!
    
    Reviewed by msfjarvis at 2020-02-22 05:03
  • 4. Let SshKeyGenFragment use the Android Keystore

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [x] New feature
    • [x] Enhancement
    • [ ] Refactoring

    :scroll: Description

    Note: This is ready for review, but requires a patched SSHJ dependency since version 0.30.0 hasn't been released yet. Once it is and the review is done, I will remove the .jar and depend on the Maven repository.

    Implement an SSH auth method backed by an Android Keystore key and make SshKeyGenFragment generate such a key.

    In detail, this means the following:

    • SSH keys generated within the app are no longer kept in a simple file optionally encrypted with a passphrase, but rather in the Android Keystore optionally protected with the user's screen lock credential. On modern devices with a TEE this means that the private key will not be leaked even if the device is rooted or compromised remotely.
    • SSH key files with passphrases remain supported for users who prefer them, they just can't be generated from within the app anymore.
    • The offered key types are changed from RSA-2048 and RSA-4096 (default) to RSA-2048, RSA-3072 and P-384 (default) for the following reasons:
      • RSA-2048 is by far the most widely supported key type and reasonably fast. Although it is no longer recommended to be used for security needs that extend into the 2030s, this does not matter too much in the context of SSH authentication. It's a keep, but should not be the default.
      • RSA-3072 will remain secure for at least a decade or two and can't possibly be backdoored by the NSA, which likely appeals to a good part of our userbase.
      • RSA-4096, the previous default, is unreasonably slow. I am open to be convinced of its usefulness, but so far fail to see why this algorithm would ever be a good fit for authentication (I could see this being useful for long-term encryption though).
      • P-384 is both very fast and recommended for long-term security, which makes it a great default option. Of course not everybody will be happy with this (or any other NIST-supplied) curve, but for SSH authentication against a pass git repository, I don't see any actual issues.
    • Small changes were made to BiometricAuthenticator to fix one of two memory leaks.
    • I needed to duplicate some of SSHJ's code, but luckily its Apache 2.0 license is compatible with the GPL 3.

    Note: SSHJ so far doesn't support SHA-256/512 signatures with ssh-rsa key types. This will probably be fixed upstream at some point, which is why we allow these signature algorithms to be used with our Keystore keys. Again, in the context of SSH authentication, relying on SHA1 is not a major issue.

    :bulb: Motivation and Context

    We were not making use of the extensive Android capabilities around cryptography and had to rely on Jsch to generate SSH keys for us.

    :green_heart: How did you test it?

    I generated and used both RSA and EC keys, please do the same.

    :pencil: Checklist

    • [x] I formatted the code with the IDE's reformat action (Ctrl + Shift + L/Cmd + Shift + L)
    • [x] I reviewed submitted code

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

    Screenshots
    Reviewed by fmeum at 2020-05-28 16:05
  • 5. Can't open entries. Alt title: Xiaomi is trash

    Hey, Recently I have created new password and since then I am not able to open any of it.

    On the list of password I tap any of them and the app shows password view for like a 0.05 second and then goes back to password list. It does not ask for password to decrypt.

    I tried to change time of password show, but that didn't help.

    What could happen?

    Logcat
    :/ # logcat | grep com.zeapo.pwdstore
    05-28 00:32:59.317  1315  1315 D AccessibilityManagerService: Ignoring non-encryption-aware service ComponentInfo{com.zeapo.pwdstore/com.zeapo.pwdstore.autofill.AutofillService}
    05-28 00:33:01.450  1315  3079 V ProcessedPackagesJournal:    + com.zeapo.pwdstore
    05-28 00:33:01.578  1315  1397 D Boost   : hostingType=service, hostingName=com.zeapo.pwdstore/.autofill.AutofillService, callerPackage=android, isSystem=true, isBoostNeeded=false.
    05-28 00:33:01.579  1315  1397 I ActivityManager: Start proc 3218:com.zeapo.pwdstore/u0a145 for service com.zeapo.pwdstore/.autofill.AutofillService caller=android
    05-28 00:33:02.949  1315  1397 D Boost   : hostingType=service, hostingName=org.sufficientlysecure.keychain/.remote.OpenPgpService2, callerPackage=com.zeapo.pwdstore, isSystem=false, isBoostNeeded=false.
    05-28 00:33:02.954  1315  1397 I ActivityManager: Start proc 3614:org.sufficientlysecure.keychain:remote_api_2/u0a146 for service org.sufficientlysecure.keychain/.remote.OpenPgpService2 caller=com.zeapo.pwdstore
    05-28 09:18:53.153  2397  2397 I Timeline: Timeline: Activity_launch_request time:2851807 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:18:53.153  1315  3530 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:18:53.568  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:2852222
    05-28 09:18:57.458  3218  3218 I Timeline: Timeline: Activity_launch_request time:2856112 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:18:57.459  1315  5460 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:18:59.088  1315  2546 D PerfShielderService: com.zeapo.pwdstore|com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore|409|2856246475002|294|0|4
    05-28 09:18:59.089  3132 15251 W MiuiPerfServiceClient: interceptAndQueuing:3218|com.zeapo.pwdstore|409|294|unknown|null|com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore|2856246475002|Slow main thread|4
    05-28 09:18:59.267  3218  3218 I Timeline: Timeline: Activity_launch_request time:2857921 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:18:59.268  1315  1339 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:19:00.308  3218  3218 I Timeline: Timeline: Activity_launch_request time:2858962 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:19:00.309  1315  1339 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:19:01.672  3218  3218 I Timeline: Timeline: Activity_launch_request time:2860326 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:19:01.673  1315  4156 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:19:08.817  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5af5505 token=Token{44cc87c ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:19:08.821  1315  1842 W MiuiGesturePointerEventListener: add win = Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:19:09.351  1315  1842 W MiuiGesturePointerEventListener: resetClipWindow: w: Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore}
    05-28 09:19:09.352  1315  1842 W MiuiGesturePointerEventListener: destroy surface for win = Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} successfully
    05-28 09:23:04.278  2397  2397 I Timeline: Timeline: Activity_launch_request time:3102932 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:23:04.279  1315  4903 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:23:04.781  3218  3218 W Looper  : Slow Looper: Activity com.zeapo.pwdstore/.PasswordStore is 455ms late (wall=20ms running=0ms ClientTransaction{ lifecycleRequest=android.app.servertransaction.ResumeActivityItem }) because of 42 msg, msg 1 took 190ms (late=3013ms h=com.android.internal.os.HandlerCaller$MyHandler w=3), msg 26 took 184ms (late=1481ms h=com.android.internal.os.HandlerCaller$MyHandler w=3)
    05-28 09:23:05.143  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3103798
    05-28 09:23:05.724  3218  3218 I Timeline: Timeline: Activity_launch_request time:3104378 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:05.725  1315  2861 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:06.662  3218  3218 I Timeline: Timeline: Activity_launch_request time:3105316 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:06.662  1315  4156 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:07.233  3218  3218 I Timeline: Timeline: Activity_launch_request time:3105887 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:07.234  1315  2861 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:07.777  3218  3218 I Timeline: Timeline: Activity_launch_request time:3106431 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:07.777  1315  2861 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:08.330  3218  3218 I Timeline: Timeline: Activity_launch_request time:3106984 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:08.330  1315  4156 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:08.863  3218  3218 I Timeline: Timeline: Activity_launch_request time:3107517 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:08.863  1315  2861 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:10.781  3218  3218 I Timeline: Timeline: Activity_launch_request time:3109435 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:10.782  1315  4156 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:11.432  3218  3218 I Timeline: Timeline: Activity_launch_request time:3110086 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:11.432  1315  4903 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:14.968  3218  3218 I Timeline: Timeline: Activity_launch_request time:3113622 intent:Intent { cmp=com.zeapo.pwdstore/.SelectFolderActivity (has extras) }
    05-28 09:23:14.969  1315  2861 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.SelectFolderActivity (has extras)} from uid 10145
    05-28 09:23:15.478  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{73c9969 u0 com.zeapo.pwdstore/.SelectFolderActivity t5420} time:3114132
    05-28 09:23:17.345  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3115999
    05-28 09:23:18.408  3218  3218 I Timeline: Timeline: Activity_launch_request time:3117062 intent:Intent { cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:18.409  1315 17524 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:20.490  1315  4903 W NotificationService: Toast already killed. pkg=com.zeapo.pwdstore [email protected]
    05-28 09:23:21.370  3218  3218 I Timeline: Timeline: Activity_launch_request time:3120024 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:21.370  1315 17524 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:21.907  3218  3218 I Timeline: Timeline: Activity_launch_request time:3120561 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:21.908  1315  3530 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:22.451  3218  3218 I Timeline: Timeline: Activity_launch_request time:3121105 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:22.452  1315  2861 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:26.210  3218  3218 I Timeline: Timeline: Activity_launch_request time:3124865 intent:Intent { cmp=com.zeapo.pwdstore/.git.GitActivity (has extras) }
    05-28 09:23:26.211  1315  5709 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.git.GitActivity (has extras)} from uid 10145
    05-28 09:23:26.712  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{6bf13f4 u0 com.zeapo.pwdstore/.git.GitActivity t5420} time:3125366
    05-28 09:23:40.325  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3138979
    05-28 09:23:42.304  3218  3218 I Timeline: Timeline: Activity_launch_request time:3140958 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:42.304  1315 12752 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:43.289  3218  3218 I Timeline: Timeline: Activity_launch_request time:3141943 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:23:43.289  1315 12752 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:23:46.622  3218  3218 I Timeline: Timeline: Activity_launch_request time:3145276 intent:Intent { cmp=com.zeapo.pwdstore/.git.GitActivity (has extras) }
    05-28 09:23:46.623  1315  6665 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.git.GitActivity (has extras)} from uid 10145
    05-28 09:23:47.113  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{3617496 u0 com.zeapo.pwdstore/.git.GitActivity t5420} time:3145767
    05-28 09:24:01.550  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3160204
    05-28 09:24:02.521  3218  3218 I Timeline: Timeline: Activity_launch_request time:3161175 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:02.522  1315  8633 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:32.078  3218  3218 I Timeline: Timeline: Activity_launch_request time:3190732 intent:Intent { cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:32.079  1315  3370 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:32.532  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{269115e u0 com.zeapo.pwdstore/.crypto.PgpActivity t5420} time:3191186
    05-28 09:24:39.616  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3198270
    05-28 09:24:41.314  3218  3218 I Timeline: Timeline: Activity_launch_request time:3199968 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:41.315  1315  6665 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:42.055  3218  3218 I Timeline: Timeline: Activity_launch_request time:3200709 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:42.055  1315  6665 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:46.750  3218  3218 I Timeline: Timeline: Activity_launch_request time:3205404 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:46.751  1315  4903 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:55.375  3218  3218 I Timeline: Timeline: Activity_launch_request time:3214029 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:55.375  1315  6350 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:55.945  3218  3218 I Timeline: Timeline: Activity_launch_request time:3214600 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:55.946  1315 12752 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:56.582  3218  3218 I Timeline: Timeline: Activity_launch_request time:3215236 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:56.583  1315  6350 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:57.221  3218  3218 I Timeline: Timeline: Activity_launch_request time:3215875 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:24:57.222  1315  4903 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:24:57.800  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5af5505 token=Token{44cc87c ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:24:57.803  1315  1842 W MiuiGesturePointerEventListener: add win = Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:24:58.382  1315  1842 W MiuiGesturePointerEventListener: resetClipWindow: w: Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore}
    05-28 09:24:58.382  1315  1842 W MiuiGesturePointerEventListener: destroy surface for win = Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} successfully
    05-28 09:24:59.814  2397  2397 I Timeline: Timeline: Activity_launch_request time:3218469 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:24:59.815  1315  3370 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:25:00.204  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3218858
    05-28 09:25:01.916  3218  3218 I Timeline: Timeline: Activity_launch_request time:3220570 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:01.917  1315 17524 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:04.886  3218  3218 I Timeline: Timeline: Activity_launch_request time:3223540 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:04.887  1315 17524 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:07.463  3218  3218 I Timeline: Timeline: Activity_launch_request time:3226117 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:07.463  1315 17524 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:10.153  3218  3218 I Timeline: Timeline: Activity_launch_request time:3228807 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:10.153  1315 17524 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:15.717  3218  3218 I Timeline: Timeline: Activity_launch_request time:3234371 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:15.717  1315  3370 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:20.601  3218  3218 I Timeline: Timeline: Activity_launch_request time:3239256 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:20.602  1315  8633 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:22.034  3218  3218 I Timeline: Timeline: Activity_launch_request time:3240688 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:22.035  1315  2861 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:25.076  3218  3218 I Timeline: Timeline: Activity_launch_request time:3243730 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:25.077  1315  8633 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:29.149  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5af5505 token=Token{44cc87c ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:25:29.153  1315  1842 W MiuiGesturePointerEventListener: add win = Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:25:29.615  1315  1842 W MiuiGesturePointerEventListener: resetClipWindow: w: Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore}
    05-28 09:25:29.616  1315  1842 W MiuiGesturePointerEventListener: destroy surface for win = Window{640429 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} successfully
    05-28 09:25:42.701  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{468936f u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3261355
    05-28 09:25:43.181  3218  3218 I Timeline: Timeline: Activity_launch_request time:3261835 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:43.182  1315  2660 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:47.536  3218  3218 I Timeline: Timeline: Activity_launch_request time:3266191 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:47.537  1315  2660 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:50.851  3218  3218 I Timeline: Timeline: Activity_launch_request time:3269505 intent:Intent { cmp=com.zeapo.pwdstore/.UserPreference }
    05-28 09:25:50.854  1315  4156 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.UserPreference} from uid 10145
    05-28 09:25:51.436  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{5e294f u0 com.zeapo.pwdstore/.UserPreference t5420} time:3270090
    05-28 09:25:57.714  3218  3218 I Timeline: Timeline: Activity_launch_request time:3276369 intent:Intent { cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:57.715  1315  4156 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:58.669  3218  3218 I Timeline: Timeline: Activity_launch_request time:3277323 intent:Intent { cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:58.670  1315  6665 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:25:59.286  3218  3218 I Timeline: Timeline: Activity_launch_request time:3277940 intent:Intent { cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:25:59.287  1315  2660 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:26:01.868  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{1528de5 token=Token{ac7d8dc ActivityRecord{5e294f u0 com.zeapo.pwdstore/.UserPreference t5420}}} to mClosingAppTokens
    05-28 09:26:01.872  1315  1842 W MiuiGesturePointerEventListener: add win = Window{f67a6c8 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.UserPreference} to mScalingWindows
    05-28 09:26:02.233  1315  1842 W MiuiGesturePointerEventListener: resetClipWindow: w: Window{f67a6c8 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.UserPreference}
    05-28 09:26:02.234  1315  1842 W MiuiGesturePointerEventListener: destroy surface for win = Window{f67a6c8 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.UserPreference} successfully
    05-28 09:27:36.061 19042 19042 I Timeline: Timeline: Activity_launch_request time:3374715 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 pkg=com.zeapo.pwdstore cmp=com.zeapo.pwdstore/.PasswordStore }
    05-28 09:27:36.061  1315  6665 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 pkg=com.zeapo.pwdstore cmp=com.zeapo.pwdstore/.PasswordStore} from uid 10146
    05-28 09:27:36.774  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3375429
    05-28 09:27:37.383  3218  3218 I Timeline: Timeline: Activity_launch_request time:3376037 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:27:37.383  1315  4156 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:27:38.156  3218  3218 I Timeline: Timeline: Activity_launch_request time:3376810 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:27:38.159  1315  4156 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:27:39.055  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:27:39.058  1315  1842 W MiuiGesturePointerEventListener: add win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:27:39.423  1315  1842 W MiuiGesturePointerEventListener: resetClipWindow: w: Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore}
    05-28 09:27:39.423  1315  1842 W MiuiGesturePointerEventListener: destroy surface for win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} successfully
    05-28 09:30:01.867  2397  2397 I Timeline: Timeline: Activity_launch_request time:3520521 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:30:01.868  1315  2862 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:30:03.529  3218  3218 W Looper  : Slow Looper: Activity com.zeapo.pwdstore/.PasswordStore is 1638ms late (wall=2ms running=0ms ClientTransaction{ lifecycleRequest=android.app.servertransaction.ResumeActivityItem }) because of 128 msg, msg 10 took 170ms (late=1239ms h=com.android.internal.os.HandlerCaller$MyHandler w=3), msg 125 took 139ms (late=1945ms h=com.android.internal.os.HandlerCaller$MyHandler w=3)
    05-28 09:30:03.879  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3522533
    05-28 09:30:05.476  3218  3218 I Timeline: Timeline: Activity_launch_request time:3524130 intent:Intent { cmp=com.zeapo.pwdstore/.UserPreference }
    05-28 09:30:05.477  1315  8633 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.UserPreference} from uid 10145
    05-28 09:30:05.962  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{1abda u0 com.zeapo.pwdstore/.UserPreference t5420} time:3524616
    05-28 09:30:16.196  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3534850
    05-28 09:30:16.677  3218  3218 I Timeline: Timeline: Activity_launch_request time:3535331 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:30:16.678  1315  2862 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:30:18.997  3218  3218 I Timeline: Timeline: Activity_launch_request time:3537651 intent:Intent { cmp=com.zeapo.pwdstore/.UserPreference }
    05-28 09:30:18.998  1315  8633 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.UserPreference} from uid 10145
    05-28 09:30:19.495  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{d13db14 u0 com.zeapo.pwdstore/.UserPreference t5420} time:3538149
    05-28 09:30:37.946  3218  3218 I Timeline: Timeline: Activity_launch_request time:3556600 intent:Intent { cmp=com.zeapo.pwdstore/.autofill.AutofillPreferenceActivity }
    05-28 09:30:37.947  1315  8633 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/.autofill.AutofillPreferenceActivity} from uid 1014505-28 09:30:38.427  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{a798371 u0 com.zeapo.pwdstore/.autofill.AutofillPreferenceActivity t5420} time:3557081
    05-28 09:30:45.997  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{d13db14 u0 com.zeapo.pwdstore/.UserPreference t5420} time:3564651
    05-28 09:30:51.885  1315  1397 D Boost   : hostingType=activity, hostingName=com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity, callerPackage=com.zeapo.pwdstore, isSystem=false, isBoostNeeded=false.
    05-28 09:30:51.886  1315  1397 I ActivityManager: Start proc 19379:com.google.android.packageinstaller/u0a42 for activity com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity caller=com.zeapo.pwdstore
    05-28 09:30:53.580  3218  3218 I Timeline: Timeline: Activity_launch_request time:3572234 intent:Intent { cmp=com.zeapo.pwdstore/com.nononsenseapps.filepicker.FilePickerActivity (has extras) }
    05-28 09:30:53.592  1315  2862 I ActivityManager: START u0 {cmp=com.zeapo.pwdstore/com.nononsenseapps.filepicker.FilePickerActivity (has extras)} from uid 10145
    05-28 09:30:54.047  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{645b3e4 u0 com.zeapo.pwdstore/com.nononsenseapps.filepicker.FilePickerActivity t5420} time:3572701
    05-28 09:30:55.162  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{d13db14 u0 com.zeapo.pwdstore/.UserPreference t5420} time:3573816
    05-28 09:31:06.379  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3585033
    05-28 09:31:06.641  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:31:06.645  1315  1842 W MiuiGesturePointerEventListener: add win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:37:32.620  2397  2397 I Timeline: Timeline: Activity_launch_request time:3971274 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:37:32.623  1315  3531 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:37:33.078  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:3971732
    05-28 09:37:33.633  3218  3218 I Timeline: Timeline: Activity_launch_request time:3972287 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:37:33.633  1315  1341 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:37:34.377  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:37:34.380  1315  1842 W MiuiGesturePointerEventListener: add win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:39:07.316  2397  2397 I Timeline: Timeline: Activity_launch_request time:4065971 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:39:07.318  1315  4903 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:39:07.681  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:4066335
    05-28 09:39:08.140  3218  3218 I Timeline: Timeline: Activity_launch_request time:4066794 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:39:08.141  1315  4903 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:39:08.926  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:39:08.932  1315  1842 W MiuiGesturePointerEventListener: add win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:40:13.995  2397  2397 I Timeline: Timeline: Activity_launch_request time:4132649 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:40:13.996  1315  6350 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:40:14.384  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:4133039
    05-28 09:40:14.816  3218  3218 I Timeline: Timeline: Activity_launch_request time:4133470 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:40:14.817  1315  2612 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:40:15.417  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:40:15.419  1315  1842 W MiuiGesturePointerEventListener: add win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:43:06.002  2397  2397 I Timeline: Timeline: Activity_launch_request time:4304656 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:43:06.003  1315  5076 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:43:06.033  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.zeapo.pwdstore', mForegroundUid=10145, mForegroundPid=3218, mLastForegroundPackageName='com.miui.home', mLastForegroundUid=10034, mLastForegroundPid=2397, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0}
    05-28 09:43:06.045  3218  3218 D PASS    : Check, dir: /data/user/0/com.zeapo.pwdstore/files/store
    05-28 09:43:06.409  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:4305063
    05-28 09:43:07.207  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:43:07.210  1315  1842 W MiuiGesturePointerEventListener: add win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:43:07.427  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.android.systemui', mForegroundUid=1000, mForegroundPid=2130, mLastForegroundPackageName='com.zeapo.pwdstore', mLastForegroundUid=10145, mLastForegroundPid=3218, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0}
    05-28 09:43:09.487  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.zeapo.pwdstore', mForegroundUid=10145, mForegroundPid=3218, mLastForegroundPackageName='com.android.systemui', mLastForegroundUid=1000, mLastForegroundPid=2130, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0}
    05-28 09:43:09.500  3218  3218 D PASS    : Check, dir: /data/user/0/com.zeapo.pwdstore/files/store
    05-28 09:43:09.961  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420} time:4308615
    05-28 09:43:09.964   809  1669 W SurfaceFlinger: Attempting to set client state on removed layer: thumbnail anim: AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}}#0
    05-28 09:43:09.964   809  1669 W SurfaceFlinger: Attempting to destroy on removed layer: thumbnail anim: AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}}#0
    05-28 09:43:10.345  3218  3218 I Timeline: Timeline: Activity_launch_request time:4308999 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:43:10.346  1315  5076 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:43:10.488   809   809 D SurfaceFlinger: duplicate layer name: changing Surface(name=AppWindowToken{f48556c token=Token{d777e1f ActivityRecord{3c9ddbe u0 com.zeapo.pwdstore/.crypto.PgpActivity t5420}}})/@0xd5eb8b3 - animation-leash to Surface(name=AppWindowToken{f48556c token=Token{d777e1f ActivityRecord{3c9ddbe u0 com.zeapo.pwdstore/.crypto.PgpActivity t5420}}})/@0xd5eb8b3 - animation-leash#1
    05-28 09:43:10.493   809   809 D SurfaceFlinger: duplicate layer name: changing Surface(name=AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}})/@0xb1fb959 - animation-leash to Surface(name=AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}})/@0xb1fb959 - animation-leash#1
    05-28 09:43:10.499  3218  3218 D PASS    : Check, dir: /data/user/0/com.zeapo.pwdstore/files/store
    05-28 09:43:10.885   809  1338 W SurfaceFlinger: Attempting to set client state on removed layer: com.zeapo.pwdstore/com.zeapo.pwdstore.crypto.PgpActivity#0
    05-28 09:43:10.885   809  1338 W SurfaceFlinger: Attempting to destroy on removed layer: com.zeapo.pwdstore/com.zeapo.pwdstore.crypto.PgpActivity#0
    05-28 09:43:10.891   809  2761 W SurfaceFlinger: Attempting to set client state on removed layer: Surface(name=AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}})/@0xb1fb959 - animation-leash#1
    05-28 09:43:10.891   809  2761 W SurfaceFlinger: Attempting to destroy on removed layer: Surface(name=AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}})/@0xb1fb959 - animation-leash#1
    05-28 09:43:10.958  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{5dd0d7a token=Token{136f5a5 ActivityRecord{4e2079c u0 com.zeapo.pwdstore/.PasswordStore t5420}}} to mClosingAppTokens
    05-28 09:43:10.960  1315  1842 W MiuiGesturePointerEventListener: add win = Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:43:11.213  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.android.systemui', mForegroundUid=1000, mForegroundPid=2130, mLastForegroundPackageName='com.zeapo.pwdstore', mLastForegroundUid=10145, mLastForegroundPid=3218, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0}
    05-28 09:43:20.452  1315  5076 D ProcessManager: remove task: TaskRecord{b5c8453 #5420 A=com.zeapo.pwdstore U=0 StackId=16 sz=3}
    05-28 09:43:20.452  1315  5076 I ProcessManager: SwipeUpClean: kill com.zeapo.pwdstore Adj=100 State=4
    05-28 09:43:20.461  1315  5076 I ActivityManager: Killing 3218:com.zeapo.pwdstore/u0a145 (adj 100): SwipeUpClean
    05-28 09:43:20.501  1315  1676 W InputDispatcher: channel '6c64721 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
    05-28 09:43:20.501  1315  1676 E InputDispatcher: channel '6c64721 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore (server)' ~ Channel is unrecoverably broken and will be disposed!
    05-28 09:43:20.507  1315  2862 I WindowManager: WIN DEATH: Window{6c64721 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore}
    05-28 09:43:20.507  1315  2862 W InputDispatcher: Attempted to unregister already unregistered input channel '6c64721 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore (server)'
    05-28 09:43:20.511  1315  5460 I AutoStartManagerService: MIUILOG- Reject RestartService packageName :com.zeapo.pwdstore uid : 10145
    05-28 09:43:22.182  2397  2397 I Timeline: Timeline: Activity_launch_request time:4320836 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:43:22.183  1315  2862 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:43:22.201  1315  2862 D ActivityTrigger: activityStartTrigger: Activity is Triggerred in full screen ApplicationInfo{e6ce95a com.zeapo.pwdstore}
    05-28 09:43:22.201  1315  2862 E ActivityTrigger: activityStartTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:43:22.202  1315  2862 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:43:22.202  1315  2862 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:43:22.212  1315  2862 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:43:22.212  1315  2862 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:43:22.239  1315  1397 D Boost   : hostingType=activity, hostingName=com.zeapo.pwdstore/.PasswordStore, callerPackage=com.miui.home, isSystem=true, isBoostNeeded=false.
    05-28 09:43:22.240  1315  1397 I ActivityManager: Start proc 20798:com.zeapo.pwdstore/u0a145 for activity com.zeapo.pwdstore/.PasswordStore caller=com.miui.home
    05-28 09:43:22.277  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.zeapo.pwdstore', mForegroundUid=10145, mForegroundPid=20798, mLastForegroundPackageName='com.miui.home', mLastForegroundUid=10034, mLastForegroundPid=2397, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=1}
    05-28 09:43:22.378 20798 20798 D PASS    : Check, dir: /data/user/0/com.zeapo.pwdstore/files/store
    05-28 09:43:22.381 20798 20798 D REPO    : current path: /data/user/0/com.zeapo.pwdstore/files/store
    05-28 09:43:22.529  1315  1414 I ActivityManager: Displayed com.zeapo.pwdstore/.PasswordStore: +303ms
    05-28 09:43:22.590  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436} time:4321244
    05-28 09:43:22.591   809  1669 W SurfaceFlinger: Attempting to set client state on removed layer: Surface(name=AppWindowToken{3093f7c token=Token{500866f ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436}}})/@0x4d97fac - animation-leash#0
    05-28 09:43:22.591   809  1669 W SurfaceFlinger: Attempting to destroy on removed layer: Surface(name=AppWindowToken{3093f7c token=Token{500866f ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436}}})/@0x4d97fac - animation-leash#0
    05-28 09:43:22.700   809  1105 W SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen com.zeapo.pwdstore#0
    05-28 09:43:22.700   809  1105 W SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen com.zeapo.pwdstore#0
    05-28 09:43:23.073  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{3093f7c token=Token{500866f ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436}}} to mClosingAppTokens
    05-28 09:43:23.075  1315  1842 W MiuiGesturePointerEventListener: add win = Window{f0f262 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:43:23.267  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.android.systemui', mForegroundUid=1000, mForegroundPid=2130, mLastForegroundPackageName='com.zeapo.pwdstore', mLastForegroundUid=10145, mLastForegroundPid=20798, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0}
    05-28 09:44:25.288  2397  2397 I Timeline: Timeline: Activity_launch_request time:4383942 intent:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras) }05-28 09:44:25.289  1315  1341 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zeapo.pwdstore/.PasswordStore bnds=[838,1555][1006,1723] (has extras)} from uid 10034
    05-28 09:44:25.299  1315  1341 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:44:25.299  1315  1341 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:44:25.301  1315  1341 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:44:25.302  1315  1341 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:44:25.310  1315 12752 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:44:25.310  1315 12752 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:44:25.315  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.zeapo.pwdstore', mForegroundUid=10145, mForegroundPid=20798, mLastForegroundPackageName='com.miui.home', mLastForegroundUid=10034, mLastForegroundPid=2397, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0}
    05-28 09:44:25.330 20798 20798 D PASS    : Check, dir: /data/user/0/com.zeapo.pwdstore/files/store
    05-28 09:44:25.694  1315  1414 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436} time:4384348
    05-28 09:44:26.650 20798 20798 I Timeline: Timeline: Activity_launch_request time:4385304 intent:Intent { act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras) }
    05-28 09:44:26.651  1315  1339 I ActivityManager: START u0 {act=DECRYPT_PASS cmp=com.zeapo.pwdstore/.crypto.PgpActivity (has extras)} from uid 10145
    05-28 09:44:26.655  1315  1339 D ActivityTrigger: activityStartTrigger: Activity is Triggerred in full screen ApplicationInfo{e6ce95a com.zeapo.pwdstore}
    05-28 09:44:26.655  1315  1339 E ActivityTrigger: activityStartTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.crypto.PgpActivity/10302
    05-28 09:44:26.656  1315  1339 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:44:26.656  1315  1339 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.crypto.PgpActivity/10302
    05-28 09:44:26.662  1315  1339 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:44:26.662  1315  1339 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.crypto.PgpActivity/10302
    05-28 09:44:26.780  1315  1414 I ActivityManager: Displayed com.zeapo.pwdstore/.crypto.PgpActivity: +112ms
    05-28 09:44:26.817  1315 12752 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:44:26.817  1315 12752 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:44:26.817  1315 12752 D ActivityTrigger: activityResumeTrigger: The activity in ApplicationInfo{e6ce95a com.zeapo.pwdstore} is now in focus and seems to be in full-screen mode
    05-28 09:44:26.817  1315 12752 E ActivityTrigger: activityResumeTrigger: not whiteListedcom.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore/10302
    05-28 09:44:26.824   809   809 D SurfaceFlinger: duplicate layer name: changing Surface(name=AppWindowToken{526af69 token=Token{8a13df0 ActivityRecord{a606633 u0 com.zeapo.pwdstore/.crypto.PgpActivity t5436}}})/@0xefddf52 - animation-leash to Surface(name=AppWindowToken{526af69 token=Token{8a13df0 ActivityRecord{a606633 u0 com.zeapo.pwdstore/.crypto.PgpActivity t5436}}})/@0xefddf52 - animation-leash#1
    05-28 09:44:26.829   809   809 D SurfaceFlinger: duplicate layer name: changing Surface(name=AppWindowToken{3093f7c token=Token{500866f ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436}}})/@0x4d97fac - animation-leash to Surface(name=AppWindowToken{3093f7c token=Token{500866f ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436}}})/@0x4d97fac - animation-leash#1
    05-28 09:44:26.836 20798 20798 D PASS    : Check, dir: /data/user/0/com.zeapo.pwdstore/files/store
    05-28 09:44:27.201   809  2761 W SurfaceFlinger: Attempting to set client state on removed layer: com.zeapo.pwdstore/com.zeapo.pwdstore.crypto.PgpActivity#0
    05-28 09:44:27.201   809  2761 W SurfaceFlinger: Attempting to destroy on removed layer: com.zeapo.pwdstore/com.zeapo.pwdstore.crypto.PgpActivity#0
    05-28 09:44:27.402  1315  1842 W MiuiGesturePointerEventListener: add AppWindowToken{3093f7c token=Token{500866f ActivityRecord{94b954e u0 com.zeapo.pwdstore/.PasswordStore t5436}}} to mClosingAppTokens
    05-28 09:44:27.405  1315  1842 W MiuiGesturePointerEventListener: add win = Window{f0f262 u0 com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore} to mScalingWindows
    05-28 09:44:27.637  2130  2130 D RecentsImpl: startRecentsActivity runningTask: ComponentInfo{com.zeapo.pwdstore/com.zeapo.pwdstore.PasswordStore}
    05-28 09:44:27.670  4721  4738 D GameBoosterService: onGameStatusChange foreground:ForegroundInfo{mForegroundPackageName='com.android.systemui', mForegroundUid=1000, mForegroundPid=2130, mLastForegroundPackageName='com.zeapo.pwdstore', mLastForegroundUid=10145, mLastForegroundPid=20798, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0}
    
    Reviewed by mdczaplicki at 2019-05-28 07:34
  • 6. [BUG] OpenKeychain does not recognize the same key formats as GPG

    Whenever I save a password entry, I get the following error:

    "Found .gpg-id, but it contains an invalid key id, fingerprint or user ID."

    This can be reproduced by editing any existing entry or creating a new entry. Existing entries can be decrypted just fine.

    Oneplus 7 Pro, Android 10, Password Store 1.10.3.

    The only thing I can see that I'm doing that may diverge from the common case is that my key id is not a fully-formed email address ([email protected]), but simply [email protected]

    Reviewed by CaptainVonNutbar at 2020-08-06 16:41
  • 7. Google.... Autofill & Logo

    Today I've got two new issues with Google Play Store:

    • We are asked to remove android.permission.BIND_ACCESSIBILITY_SERVICE as we're not helping "users with disabilities"
    • We are "impersonating" an other application Lock App Lock Security Privacy

    For the first part, I've just made an appeal, I have 30 days before the application is unpublished.

    For the second one, can somebody make us a good logo? :)

    Reviewed by zeapo at 2017-11-11 08:58
  • 8. Add support for Oreo Autofill

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [x] New feature
    • [ ] Enhancement
    • [ ] Refactoring

    :scroll: Description

    This PR adds an Oreo Autofill service to Password Store that offers to fill forms and save credentials (username and password) in compatible apps and browsers. It allows users to

    • fill from Password Store entries, selected either via free search or via a matching system;
    • generate new credentials and save them in their repository;
    • save credentials they manually entered in login forms.

    The Autofill implementation aims to mitigate vulnerabilities present in many other password managers by strictly adhering to the following guidelines with regards to how it matches store entries to apps and websites:

    • If a trusted browser app (identified via package name and certificate hash) annotates a login form with a web domain, the eTLD + 1 (also called "canonical domain") is associated with all entries the user chooses to fill, generate or save.
    • If a login form does not originate from a website displayed in a trusted browser app, it is associated with the app itself (identified via package name and certificate hash). If, at any later point in time, the certificate hash changes, the user is warned about a potential phishing attempt.

    Browsers vary in their level of support for Autofill, which generally falls into one of the following four categories:

    1. No support: For whatever reason, some browsers (e.g. Opera) never trigger any Autofill requests.
    2. Single-origin support: Many browsers such as Chrome and its derivatives support Autofill in compatibility mode, but fail to report all web origins present on a page (such as in iframes). Since filling into non-visible form elements across origin boundaries is ripe for abuse, in such browsers Autofill is limited to filling a single password into the focused password field (plus a username). I hope that this strikes a decent balance between usability and security.
    3. Multi-origin support: Browsers with custom Autofill support or those that rely on WebViews correctly propagate origin information to all form elements, which allows the service to fill more aggressively - for example, it can offer to fill a registration form with a username and two new-password fields in a single action, regardless of focus. Mozilla browsers, Opera Mini/Touch, DuckDuckGo and the Tor Browser fall in this category.
    4. Save support: A few browsers have already added custom Autofill support and thus also provide submitted credentials for us to save. This e.g. works in Firefox Focus, Opera Mini/Touch and DuckDuckGo.

    Of course, in order to be really helpful, Password Store needs to detect login forms as precisely as possible. For this reason, I have implemented a Kotlin DSL for Autofill rules that aims to be accessible to a broad range of developers. Please let me know about your thoughts on this in particular.

    :bulb: Motivation and Context

    This fixes #410 and may supersede #551.

    I took #551 by @c4software as the starting point and would like to thank them very much for getting the ball rolling.

    :green_heart: How did you test it?

    I tested the service with many apps and websites. Since this is a big feature that can potentially interact with any app or website out there, this does of course require much more testing than I cannot take on myself.

    :pencil: Checklist

    • [x] I ran ./gradlew spotlessApply before submitting the PR
    • [x] I reviewed submitted code

    :crystal_ball: Next steps

    • [x] Decide on a naming convention to prevent confusion with Accessibility autofill
    • [ ] Add UI that introduces the user to the new Autofill API and allows to enable it from within the app
    • [x] (Optional) Add Autofill-specific settings to the Password Store settings screen
    • [ ] Test with various apps and websites and add Autofill rules to AutofillStrategy.kt
    • [ ] Verify the authenticity of the browser certificate hashes and the browser compatibility settings
    • [ ] Add translations (I can cover German if needed)

    :camera_flash: Screenshots / GIFs

    Screenshot_20200318-133737 Screenshot_20200318-133747 Screenshot_20200318-144805 Screenshot_20200318-144842 Screenshot_20200318-164602 Screenshot_20200318-153116 Screenshot_20200318-153122

    Reviewed by fmeum at 2020-03-18 15:56
  • 9. Begin work on API level 30 transition

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [ ] New feature
    • [ ] Enhancement
    • [ ] Refactoring
    • [ ] Dependency updates

    :scroll: Description

    API level 30 brings some changes with it that require non-trivial changes. So far, this PR only takes care of the easy parts, especially scoped storage will require more work.

    :bulb: Motivation and Context

    I thought it would be a good idea to have a tracking PR early on with which we can experiment.

    :green_heart: How did you test it?

    :pencil: Checklist

    • [ ] I formatted the code with the IDE's reformat action (Ctrl + Shift + L/Cmd + Shift + L)
    • [ ] I reviewed submitted code
    • [ ] I added a CHANGELOG entry if applicable

    :crystal_ball: Next steps

    :camera_flash: Screenshots / GIFs

    Reviewed by fmeum at 2020-07-23 09:54
  • 10. Refactor Git related activities

    :loudspeaker: Type of change

    • [ ] Bugfix
    • [x] New feature
    • [ ] Enhancement
    • [x] Refactoring

    :scroll: Description

    Completely refactor, rewrite and redesign everything that has anything to do with Git. This is very much WIP, and a lot of things are simply just gone. Bear with my timeline and feel free to assist.

    :bulb: Motivation and Context

    A lot of tech debt ripe for fixups here.

    Fixes #521 Fixes #629

    :green_heart: How did you test it?

    I prayed to the Lord Gabe like the true gamer I am.

    :pencil: Checklist

    • [ ] I ran ./gradlew spotlessApply before submitting the PR
    • [ ] I reviewed submitted code

    :crystal_ball: Next steps

    Finish this fucking thing

    :camera_flash: Screenshots / GIFs

    Details
    Reviewed by msfjarvis at 2020-04-02 20:44
  • 11. Support multiple password stores

    (This is already in the TODO section of the README.)

    In my case, I have a password store for my personal accounts and also use a password store shared with other people. I would be nice to be able to access both stores on my phone without having to combine them in any way.

    Reviewed by lverns at 2017-01-02 17:07
  • 12. [BUG] fednetbank.com autofill does not fill password

    Describe the bug

    Initially with fednetbank.com as folder name it only offered to generate password. Once I moved it as work/fednetbank.com it showed option to fill but it was empty even after choosing the correct entry. This site works fine on Firefox and browser pass extension on laptop.

    Steps to reproduce

    Steps to reproduce the behavior:

    1. Go to fednetbank.com
    2. Generate password
    3. And try to autofill
    4. The password field is empty.

    Expected behavior

    It should autofill password

    Screenshots

    No response

    Device information

    • Device: Redmi Note 4
    • OS: Carbon Rom
    • App version [e.g. 3.1.0]

    Additional context

    No response

    Reviewed by pravi at 2022-08-05 20:22
  • 13. [META] Clean up issues reported by Detekt

    We recently introduced Detekt to our CI suite and setup a baseline. Cleaning up the suppressed existing issues is a low effort, high value task that anyone can pick up without needing too much operational knowledge of how the app functions.

    Reviewed by msfjarvis at 2022-07-23 10:19
  • 14. [BUG] Delay searching password list

    Describe the bug

    I have roughly 1,300 passwords in my store, and when I fire up the UI (or try to use autofill) to search for a password, it takes a few seconds for the results to show up. I kinda expect filtering of the resultset to be instantaneous, and 1,300 entries isn't exactly a big search task even if search were to be done linearly, but the filesystem itself already does some sort of B-Tree, so this is a bit hard to understand.

    Steps to reproduce

    Steps to reproduce the behavior:

    1. Open the app, or engage autofill
    2. Enter search term into search field, e.g. "github"
    3. Wait 2–3 seconds before the list is refreshed

    Expected behavior

    As I hit 'g', I expect the list to hide all entries not containing a "g", and the "g" in matching entries to be boldened. When I hit "i", the list again updates instantaneously.

    Screenshots

    No response

    Device information

    • Device: Google Pixel 6 Pro
    • OS: GrapheneOS, Android 12
    • App version: 1.13.5

    Additional context

    No response

    Reviewed by madduck at 2022-07-22 08:39
  • 15. [BUG] attempting to decrypt password encrypted with subkey on smart card prompts for password

    Describe the bug

    My gpg setup is one where I have a Master key with C capabilities, and a subkey with E capabilities which only exists on a hardware key(yubikey). When attempting to use a password which was encrypted with this (passwordless) private subkey, the application prompts for a password (I'm assuming for the master key).

    Steps to reproduce

    Steps to reproduce the behavior:

    1. import public master-key
    2. Click on any password encrypted with the encryption sub-key for the imported master-key
    3. app prompts for password

    Expected behavior

    The application should either:

    1. detect that the master key doesn't have E(ncryption) capability, and check to see if a subkey has E capability, upon finding one prompt for the subkey. it should probably cache some config information for future operations.
    2. have a dedicated settings menu for indicating this kind of setup.

    Screenshots

    No response

    Device information

    • Device: Google Pixel 4aXL
    • OS: GrapheneOS Android 12
    • App version: Development build

    Additional context

    Most yubikey users who are using their device for gpg keys are probably using a setup extremely similar to this, as it was created following a popular guide on setting gpg up on a yubikey(or set of yubikeys). It's the third search result on google for "yubikey gpg", the first after the official documentation. It's probably safe to assume that if a user is using a gpg key stored on a yubikey with pass or a pass compatible tool, they are probably running the exact same setup.

    Reviewed by skewballfox at 2022-07-18 20:09
  • 16. [FEATURE] Allow using PGP key for SSH

    Is your feature request related to a problem? Please describe.

    With OpenKeychain it was possible to use your GPG key to authenticate over SSH, which is not supported with the PGPainless backend.

    Describe the solution you'd like

    Implement support for using a selected GPG key as the SSH authentication method.

    Describe alternatives you've considered

    N/A

    Additional context

    N/A

    Reviewed by skewballfox at 2022-07-18 19:31
  • 17. [FEATURE] Read only mode

    Is your feature request related to a problem? Please describe.

    Usually, I manage passwords on my computer and only need to access passwords on the phone. Actually, I do not really want to change anything in my store on the phone by accident.

    Further, git related actions are really slow on my phone, I constantly have to git clean to reduce the lag when searching or opening password files.

    Describe the solution you'd like

    A global read-only mode also removing all git related actions would be perfect. It would remedy my fear that I mess up my files using the touch screen (even though I know I can go back using git), and also the problems related to speed (I think there are various issues about this in the tracker).

    Describe alternatives you've considered

    Per-file read only mode. This would probably not have an impact on speed though.

    Additional context

    Thanks for considering this!

    Reviewed by dschrempf at 2022-07-05 12:52
An interactive command line interface to a transactional key value store
An interactive command line interface to a transactional key value store

Transactional Key-Value Store An interactive command line interface to a transactional key value store. Commands: SET <key> <value> // store the value

Jan 14, 2022
A starter project to build command-line tools in Kotlin Multiplatform
A starter project to build command-line tools in Kotlin Multiplatform

A starter project to build command-line tools in Kotlin Multiplatform Contains a re-implementation of a real world CLI tool: git-standup Installation

May 2, 2022
Event State Processor Generator plugin is compatible with IntelliJ and Android Studio.
Event State Processor Generator plugin is compatible with IntelliJ and Android Studio.

Event State Processor Generator plugin is compatible with IntelliJ and Android Studio. It provides source code generation for the EventStateProcessor Library to increase code productivity in Flutter apps development.

Dec 7, 2021
Native-Blur: a C++/Kotlin library for blur bitmaps and activity, mobile-ready, android compatible
Native-Blur: a C++/Kotlin library for blur bitmaps and activity, mobile-ready, android compatible

Native-Blur The Native-Blur is a C++/Kotlin libraray for blur bitmaps and activity, mobile-ready, android compatible, powered by Java Native Interface

Jul 11, 2022
An AutoValue extension that generates binary and source compatible equivalent Kotlin data classes of AutoValue models.
An AutoValue extension that generates binary and source compatible equivalent Kotlin data classes of AutoValue models.

AutoValue Kotlin auto-value-kotlin (AVK) is an AutoValue extension that generates binary-and-source-compatible, equivalent Kotlin data classes. This i

Aug 5, 2022
🧶 Library to handling files for persistent storage with Google Cloud Storage and Amazon S3-compatible server, made in Kotlin

?? Remi Library to handling files for persistent storage with Google Cloud Storage and Amazon S3-compatible server, made in Kotlin! Why is this built?

Jun 27, 2022
kotlin eval command for minestom

k Kotlin debugging evaulator in Minestom. Usage /k is shorthand, /ko is longhand requires the permission "k.ok" and "k.store" for running scripts and

Jun 20, 2022
🐹 Kotlin microservice to aid slash command creation for Nino.

slash-commands ?? .Kotlin microservice to aid slash command creation for Nino. More of this README will be fixed up once the first release is here. Li

Oct 1, 2021
🌨️ Simple, intuitive, and opinionated command handling library for Kord

??️ Snow Simple, intuitive, and opinionated command handling library for Kord Why? Since I maintain two Discord bots, both in Kotlin, Nino and Noel (p

Jan 16, 2022
Commands - Simple work in progress command framework

Commands Purpose commands is a performant, flexible, future-rich, and easy-to-us

Mar 19, 2022
A simple Android application to store daily notes in the internal database of the application

Simple Note App Note App is a simple Android application to store daily notes in the internal database of the application and can store an image or a

Jun 3, 2022
This is an example of a simple application with layered software base on clean-architecture as application architecture and mvvm as presentation architecture

This is an example of a simple application with layered software base on clean-architecture as application architecture and mvvm as presentation archi

Jul 2, 2021
Aug 11, 2022
🔥The Android Startup library provides a straightforward, performant way to initialize components at the application startup. Both library developers and app developers can use Android Startup to streamline startup sequences and explicitly set the order of initialization.
🔥The Android Startup library provides a straightforward, performant way to initialize components at the application startup. Both library developers and app developers can use Android Startup to streamline startup sequences and explicitly set the order of initialization.

??The Android Startup library provides a straightforward, performant way to initialize components at the application startup. Both library developers and app developers can use Android Startup to streamline startup sequences and explicitly set the order of initialization.

Aug 16, 2022
📒 NotyKT is a complete 💎Kotlin-stack (Backend + Android) 📱 application built to demonstrate the use of Modern development tools with best practices implementation🦸.
📒 NotyKT is a complete 💎Kotlin-stack (Backend + Android) 📱 application built to demonstrate the use of Modern development tools with best practices implementation🦸.

NotyKT ??️ NotyKT is the complete Kotlin-stack note taking ??️ application ?? built to demonstrate a use of Kotlin programming language in server-side

Aug 12, 2022
An Intentionally designed Vulnerable Android Application built in Kotlin.

?? InsecureShop InsecureShop is an Android application that is designed to be intentionally vulnerable. The aim of creating this app is to teach devel

Aug 9, 2022
A basic template ecommerce application with payment integration made using Android Architechture componets
A basic template ecommerce application with payment integration made using Android Architechture componets

ShopIt ShopIt is a basic template ecommerce application with payment integration(RazorPay), made using Android Architechture componets and Material Co

Nov 22, 2021
Android application in Kotlin to know the Chinese horoscope according to the date of birth

ZodiacoChino Aplicación Android en lenguaje Kotlin para saber el horóscopo chino según la fecha de nacimiento Esta aplicación solicita el nombre, fech

Nov 19, 2021