cryptomator / cryptomator/android

Android: Storage permission immediately dropped on GrapheneOS

Open
#644 0 comments 0 reactions 0 assignees View on GitHub
type:bug
Dominant language
Kotlin
Stars
1.2k
Forks
216
PR merge metrics
No merged PRs in 30d

Description

### Please agree to the following

- [x] I have searched [existing issues](https://github.com/cryptomator/android/issues?q=) for duplicates
- [x] I agree to follow this project's [Code of Conduct](https://github.com/cryptomator/android/blob/develop/.github/CODE_OF_CONDUCT.md)

### Summary

On GrapheneOS, Cryptomator’s Android app instantly loses storage permission for a local vault folder upon granting it.

### System Setup

```markdown
GrapheneOS Android 17, Pixel 9 Pro XL

Cryptomator Android v1.12.3 (F-Droid)

Other software: Syncthing-Fork (vault directory is fully synced and Syncthing can read/write it fine)

Storage Scopes were enabled for the folder.

Internal shared storage

I can see the vault files are there when I navigate to it within Cryptomator.
```

### Cloud Type

Local storage

### Steps to Reproduce

1. "Tap here to create a new vault"
2. "Add existing vault"
3. select "Local storage"
4. Navigate to the Syncthing folder then the vault folder
5. select "Use this folder"
6. Prompt "Allow Cryptomator to access this folder? Allow access for [vaultname]" appears,
7. select "Allow"
8. Banner on the very bottom instantly appears: "Cryptomator has lost permission to access this location. Please select this folder again to restore this permission"
9. Select "Use this folder" again, same error (loop)

### Expected Behavior

Expect the vault to be added to Cryptomator

### Actual Behavior

See "Steps to Reproduce" error loop

### Reproducibility

Always

### Relevant Log Output

```shell
I 20260703043901.080 App Cryptomator v1.12.3 (3030) "F-Droid Main Repo Edition" started on android 17 / API37 using a Pixel 9 Pro XL
I 20260703043901.139 Database Configure v13
I 20260703043901.140 Database Open v13
I 20260703043901.179 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@5fc2333
I 20260703043901.279 App Cryptors service connected
I 20260703043901.280 App Cryptors service connected
I 20260703043901.281 App Auto upload service connected
I 20260703043904.355 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.SettingsActivity@cdaed5
I 20260703043928.751 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AutoUploadChooseVaultActivity@3ee0f68
I 20260703043932.401 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.SettingsActivity@cdaed5
I 20260703043940.219 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@5fc2333
I 20260703043943.542 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@7353e94
I 20260703043951.459 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.CloudConnectionListActivity@edf506b
I 20260703043953.385 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@7353e94
I 20260703043953.454 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.CreateVaultActivity@3dd77a9
I 20260703043957.135 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.BrowseFilesActivity@2fa2ad2
I 20260703044001.732 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.SetPasswordActivity@5154870
I 20260703044025.839 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@5fc2333
I 20260703044027.882 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.UnlockVaultActivity@40ed6
I 20260703044035.974 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@5fc2333
I 20260703044036.031 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.BrowseFilesActivity@ab5e29b
I 20260703044039.456 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@5fc2333
I 20260703044042.174 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@3b37374
I 20260703044051.289 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.UnlockVaultActivity@de2adaf
I 20260703044053.039 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@3b37374
I 20260703044101.438 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.SettingsActivity@60e9da3
I 20260703044144.845 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.SettingsActivity@60e9da3
I 20260703044146.551 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.VaultListActivity@3b37374
I 20260703044155.213 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@4e35bb2
I 20260703044156.688 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.CloudConnectionListActivity@9d834e1
I 20260703044158.682 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@4e35bb2
I 20260703044158.752 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@3f7f10f
E 20260703044158.753 AuthicateCloudPrester Permission revoked, ask to re-pick location
E 20260703044216.966 AuthicateCloudPrester Permission granted again
I 20260703044216.967 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@3f7f10f
I 20260703044217.024 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@4e35bb2
I 20260703044217.088 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@700511f
E 20260703044217.089 AuthicateCloudPrester Permission revoked, ask to re-pick location
E 20260703044223.693 AuthicateCloudPrester Permission granted again
I 20260703044223.695 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@700511f
I 20260703044223.757 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@4e35bb2
I 20260703044223.821 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@6f85bf8
E 20260703044223.821 AuthicateCloudPrester Permission revoked, ask to re-pick location
E 20260703044228.446 AuthicateCloudPrester Permission granted again
I 20260703044228.447 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@6f85bf8
I 20260703044228.504 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@4e35bb2
I 20260703044228.566 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@f842f2d
E 20260703044228.567 AuthicateCloudPrester Permission revoked, ask to re-pick location
E 20260703044242.473 AuthicateCloudPrester Permission granted again
I 20260703044242.475 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@f842f2d
I 20260703044242.529 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@4e35bb2
I 20260703044242.587 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@b616a4e
E 20260703044242.587 AuthicateCloudPrester Permission revoked, ask to re-pick location
E 20260703045019.644 AuthicateCloudPrester Permission granted again
I 20260703045019.651 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@b616a4e
I 20260703045019.672 CryptorsService ScreenLock received, destroying cryptors and shutting down service
I 20260703045019.776 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.ChooseCloudServiceActivity@4e35bb2
I 20260703045019.879 ActivityLifecycle onResume org.cryptomator.presentation.ui.activity.AuthenticateCloudActivity@d6e2b80
E 20260703045019.880 AuthicateCloudPrester Permission revoked, ask to re-pick location
```

### Anything else?

_No response_

Contributor guide

Open the contributing guide

Research direction

Start by tracing the AuthenticateCloudPrester permission handling shown in the log, then reproduce the folder-selection flow on GrapheneOS Android 17 with the listed Syncthing vault setup. Done means granting access no longer immediately triggers the permission-revoked loop and the local vault can be added.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, kotlin
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.