I had an issue where Signal never created backups, even when I manually tried to make one.
The logs reveal the following:
01-16 00:54:39.725 8241 8299 I GenericForegroundServic: [startForegroundTask] Task: Creating Signal backup…, ID: 12
01-16 00:54:39.734 8241 8241 D GenericForegroundServic: [onCreate]
01-16 00:54:39.734 8241 8241 D GenericForegroundServic: [onStartCommand] Action: start
01-16 00:54:39.734 8241 8241 I GenericForegroundServic: [onStartCommand] Adding entry: ChannelId: backups_v2, ID: 12, Progress: 0/0 determinate
01-16 00:54:39.735 8241 8299 W NotificationController: Tried to update the progress, but the service was no longer bound!
01-16 00:54:39.736 8241 8241 I JobSchedulerScheduler: Waking due to job: 0
01-16 00:54:39.736 8241 8241 D GenericForegroundServic: [onBind]
01-16 00:54:39.737 8241 8241 I NotificationController: [onServiceConnected] Name: ComponentInfo{org.thoughtcrime.securesms/org.thoughtcrime.securesms.service.GenericForegroundService}
01-16 00:54:39.738 8241 8241 I GenericForegroundServic: handleReplace() ChannelId: backups_v2, ID: 12, Progress: 0/0 indeterminate
01-16 00:54:39.750 2978 3302 E MediaProvider: Creating or writing to a non-default top level directory is not allowed!
01-16 00:54:39.750 8241 8299 D NotificationController: [close] Unbinding service.
01-16 00:54:39.751 8241 8299 D GenericForegroundServic: [stopForegroundTask] ID: 12
01-16 00:54:39.752 8241 8299 I GenericForegroundServic: Stopping foreground service id=12
01-16 00:54:39.754 8241 8299 W BaseJob : [JOB::a0f417d3-7fdb-4847-ac28-55125c1f8082][LocalBackupJob] Encountered a failing exception. (Time Since Submission: 39 ms, Lifespan: Immortal, Run Attempt: 1/3, Queue: __LOCAL_BACKUP__)
01-16 00:54:39.754 8241 8299 W BaseJob : org.thoughtcrime.securesms.database.NoExternalStorageException
01-16 00:54:39.754 8241 8299 W BaseJob : at org.thoughtcrime.securesms.util.StorageUtil.getOrCreateBackupDirectory(StorageUtil.java:138)
01-16 00:54:39.754 8241 8299 W BaseJob : at org.thoughtcrime.securesms.jobs.LocalBackupJob.onRun(LocalBackupJob.java:103)
01-16 00:54:39.754 8241 8299 W BaseJob : at org.thoughtcrime.securesms.jobs.BaseJob.run(BaseJob.java:31)
01-16 00:54:39.754 8241 8299 W BaseJob : at org.thoughtcrime.securesms.jobmanager.JobRunner.run(JobRunner.java:86)
01-16 00:54:39.754 8241 8299 W BaseJob : at org.thoughtcrime.securesms.jobmanager.JobRunner.run(JobRunner.java:49)
01-16 00:54:39.754 8241 8299 W JobRunner: [JOB::a0f417d3-7fdb-4847-ac28-55125c1f8082][LocalBackupJob][1] Job failed. (Time Since Submission: 40 ms, Lifespan: Immortal, Run Attempt: 1/3, Queue: __LOCAL_BACKUP__)
After reading a couple GitHub threads and briefly checking the source code, the issue seems to be that Signal has access to the backup directory but isn't allowed to write to it for whatever reason.
After bruteforcing adb commands (and probably messing things up in the process), the following fixed the issue for me:
adb shell cmd appops set org.thoughtcrime.securesms MANAGE_EXTERNAL_STORAGE allow