Initial Password Setup | Main Screen | Adding Pin | Adding Note |
---|---|---|---|
Android app (my first!) for securely storing pins and notes. After initial setup - where a password is used to encrypt the database - all auth is carried out using the users' fingerprint. This app was built for me. My requirements were:
- Be able to access a pin (e.g. bank pin) quickly and securely, without the need for a password.
- For pins, I only need a short key (e.g. the first letter of the bank name) to be able to identify its purpose.
- Be able to store other sensitive notes (e.g. passport details).
- Lock some pins/notes, so that fingerprint auth is required again to unlock them. This means I don't need to close the app every time it's sent to the background.
- Keep all notes in an encrypted database.
- No ads.
- JDK 8
- Android SDK 28
- Phone with fingerprint scanner
An SQLCipher database is used. Encryption is performed with a password on first-use of the app. The password itself is encrypted then stored in the app's shared preferences, and the encryption key is stored in the Android KeyStore. This is a one-off process: the encryption password is never asked for again, and cannot be changed.
Future access to the app requires a fingerprint. On successful auth, the password is decrypted and used to unlock the database.
JUnit5 tests are written for non-activity classes. If I take this any further, I'll probably use Roboelectric to write tests for activity classes.
- The action bar currently has no functionality.
- Two separate grids are used for pins and "other notes". If one of the grids is empty, the other doesn't resize to full-screen.
- App has only been tested on a Pixel 2. I have no current plans to adapt the UI for different screen sizes.
- Would be ideal to have auto-resizable TextViews, so that text fits nicely on the main page.
- Lock icon sometimes dissapears for notes after scrolling through them.
This app is not available on the Play Store. I don't have enough time to maintain it at a standard I'd be happy with.