Upon migrating my Obsidian vault to GrapheneOS, I stumbled upon an interesting issue.
Obsidian but also the GrapheneOS files app fail to create folders when the folder name starts with certain emojis (other emojis are fine).
Example that breaks: 🗑️ Test
Example that works: 🎵 Test
Logcat from the files app just shows: Failed to mkdir /storage/emulated/0/Obsidian/Main2/🗑️ Test
Both apps I tried didn't use storage scopes.
I'm uneducated on what GrapheneOS does under the hood in regards of file system handling, so I'm not even sure whether this is specific to GrapheneOS or not – any clue on how to identify where the issue originates from?
I'm on a Pixel 9, although I'd be surprised if it matters.
Raw logcat for reference:
type: logcat
osVersion: google/tokay/tokay:16/BP2A.250705.008/2025071900:user/release-keys
flags: dev options enabled
package: com.android.documentsui:36, targetSdk 36
buffers: main,system,crash,events,kernel
level: warn
--------- beginning of main
07-27 15:54:46.438 8563 8563 W WindowOnBackDispatcher: OnBackInvokedCallback is not enabled for the application.
07-27 15:54:46.438 8563 8563 W WindowOnBackDispatcher: Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
07-27 15:54:46.610 8563 8563 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=android.view.ViewRootImpl$$ExternalSyntheticLambda13@7040fb5
07-27 15:54:52.218 8563 8563 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=ImeCallback=ImeOnBackInvokedCallback@265001423 Callback=android.window.IOnBackInvokedCallback$Stub$Proxy@8ab70d0
07-27 15:54:52.218 8563 8563 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=android.view.ViewRootImpl$$ExternalSyntheticLambda13@28de0d3
07-27 15:54:52.232 8563 8679 W DocumentsContract: Failed to create document
07-27 15:54:52.232 8563 8679 W DocumentsContract: java.lang.IllegalStateException: Failed to mkdir /storage/emulated/0/Obsidian/Main2/🗑️ Test
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.os.Parcel.createExceptionOrNull(Parcel.java:3357)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.os.Parcel.createException(Parcel.java:3333)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.os.Parcel.readException(Parcel.java:3309)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:201)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:153)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.content.ContentProviderProxy.call(ContentProviderNative.java:764)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.content.ContentProviderClient.call(ContentProviderClient.java:610)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.content.ContentResolver.call(ContentResolver.java:2486)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.provider.DocumentsContract.createDocument(DocumentsContract.java:1380)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at com.android.documentsui.CreateDirectoryFragment$CreateDirectoryTask.doInBackground(CreateDirectoryFragment.java:159)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at com.android.documentsui.CreateDirectoryFragment$CreateDirectoryTask.doInBackground(CreateDirectoryFragment.java:140)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at android.os.AsyncTask$3.call(AsyncTask.java:394)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at java.util.concurrent.FutureTask.run(FutureTask.java:317)
07-27 15:54:52.232 8563 8679 W DocumentsContract: at com.android.documentsui.ProviderExecutor.run(ProviderExecutor.java:104)
07-27 15:54:52.232 8563 8679 W Documents: Failed to create directory
07-27 15:54:52.232 8563 8679 W Documents: java.lang.IllegalStateException: Failed to mkdir /storage/emulated/0/Obsidian/Main2/🗑️ Test
07-27 15:54:52.232 8563 8679 W Documents: at android.os.Parcel.createExceptionOrNull(Parcel.java:3357)
07-27 15:54:52.232 8563 8679 W Documents: at android.os.Parcel.createException(Parcel.java:3333)
07-27 15:54:52.232 8563 8679 W Documents: at android.os.Parcel.readException(Parcel.java:3309)
07-27 15:54:52.232 8563 8679 W Documents: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:201)
07-27 15:54:52.232 8563 8679 W Documents: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:153)
07-27 15:54:52.232 8563 8679 W Documents: at android.content.ContentProviderProxy.call(ContentProviderNative.java:764)
07-27 15:54:52.232 8563 8679 W Documents: at android.content.ContentProviderClient.call(ContentProviderClient.java:610)
07-27 15:54:52.232 8563 8679 W Documents: at android.content.ContentResolver.call(ContentResolver.java:2486)
07-27 15:54:52.232 8563 8679 W Documents: at android.provider.DocumentsContract.createDocument(DocumentsContract.java:1380)
07-27 15:54:52.232 8563 8679 W Documents: at com.android.documentsui.CreateDirectoryFragment$CreateDirectoryTask.doInBackground(CreateDirectoryFragment.java:159)
07-27 15:54:52.232 8563 8679 W Documents: at com.android.documentsui.CreateDirectoryFragment$CreateDirectoryTask.doInBackground(CreateDirectoryFragment.java:140)
07-27 15:54:52.232 8563 8679 W Documents: at android.os.AsyncTask$3.call(AsyncTask.java:394)
07-27 15:54:52.232 8563 8679 W Documents: at java.util.concurrent.FutureTask.run(FutureTask.java:317)
07-27 15:54:52.232 8563 8679 W Documents: at com.android.documentsui.ProviderExecutor.run(ProviderExecutor.java:104)
07-27 15:54:52.251 8563 8563 W WindowOnBackDispatcher: OnBackInvokedCallback is not enabled for the application.
07-27 15:54:52.251 8563 8563 W WindowOnBackDispatcher: Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
07-27 15:54:52.308 8563 8563 E ImeBackDispatcher: Ime callback not found. Ignoring unregisterReceivedCallback. callbackId: 265001423
07-27 15:54:52.338 8563 8563 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=ImeCallback=ImeOnBackInvokedCallback@265001423 Callback=android.window.IOnBackInvokedCallback$Stub$Proxy@13709de