Sheed is a separate Android antivirus application. Its engineering problem is different from a typical content or utility app: the user must understand what is being protected, what the app can access, and what happens when a scan is running.
Make protection state explicit
Scanning should expose clear states such as ready, scanning, completed, and unable to continue. A lifecycle-aware state holder can keep those transitions consistent when the app is backgrounded or recreated.
Protect data at the boundary
Encryption, hashing, and decryption should live behind small interfaces with narrow responsibilities. UI code should request a security operation and render its result; it should not carry keys, algorithm details, or storage policy through the screen tree.
Design for interruption
Security work can be expensive. Handle cancellation, low storage, unavailable definitions, and partial results as first-class outcomes. Avoid claiming that a scan is complete when the process was interrupted.
The broader lesson applies to any Android security feature: make capability and uncertainty visible, minimize sensitive data exposure, and keep the security boundary easy to review.