Repository navigation
Work with Android's lock screen instead of around it - #61
Merged
Merged
Conversation
Only Android's PIN protects the R1's data (storage encrypted with the PIN, guessing limited by Android); robotOS's recovery cover can be bypassed. This makes robotOS behave well once a PIN is set. - The button does nothing while Android is locked except wake the lock screen and silence a ringing R1, so nobody can reach Hermes without the PIN. - Tap-to-sleep uses the sleep key, so Android's "lock after screen timeout" applies. With device admin on it used lockNow(), which would have demanded the PIN after every tap. lockNow() remains for lost mode and as the fallback without root. - The recovery screen offers "Open with this R1's PIN" when the host can't confirm a wake (#45). It uses Android's own PIN confirmation, so robotOS never stores the PIN and Android's guess limits apply. It never opens a lost, revoked or cleared R1, and the host's next answer still applies. - Tests reset DeviceActivity's shared cover state between cases. - INSTALL.md walks through the PIN, the 15-minute lock delay and device admin; HUB.md explains the protection model. Release notes for 0.6.7. Closes #45
This was referenced Oct 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Only Android's PIN protects an R1's data: storage is encrypted with a key tied to the PIN, and Android throttles guesses. robotOS's recovery cover can be bypassed through debugging, safe mode or other Android screens. This makes robotOS behave well once a PIN is set, and documents the setup.
pressGate()routes a press toLOCKEDwhenKeyguardManager.isDeviceLocked. The press then only wakes the lock screen and still silences a ringing R1. Each ignored press is recorded in the event log.ScreenPolicy.sleepNow()uses the root sleep key first, so Android's "lock after screen timeout" applies. Previously, once device admin was active, every tap calledlockNow(), which locks immediately and would have demanded the PIN on every wake.lockNow()remains for lost mode and as the no-root fallback.createConfirmDeviceCredentialIntent. OnRESULT_OK,WorkspaceClient.confirmedByOwner()confirms the current fence ticket, grace included.DeviceActivity.resetForTest()clears the static cover state between cases. Two existing tests had been passing only because of state left over from earlier cases.Validation:
Closes #45