diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt index 8093789646..fe2d224b62 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt @@ -30,6 +30,7 @@ import androidx.navigationevent.compose.LocalNavigationEventDispatcherOwner import kotlinx.coroutines.launch import org.signal.core.ui.compose.ComposeFragment import org.signal.core.ui.compose.Launchers +import org.signal.core.ui.util.StorageUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsKeyEducationScreen @@ -167,7 +168,7 @@ private fun rememberChooseBackupLocationLauncher(backStack: NavBackStack SignalStore.backup.newLocalBackupsDirectory = uri.toString() backStack.add(LocalBackupsNavKey.YOUR_RECOVERY_KEY) - Toast.makeText(context, context.getString(R.string.OnDeviceBackupsFragment__directory_selected, uri), Toast.LENGTH_SHORT).show() + Toast.makeText(context, context.getString(R.string.OnDeviceBackupsFragment__directory_selected, StorageUtil.getDisplayPath(context, uri)), Toast.LENGTH_SHORT).show() } else { Log.w(TAG, "Unified backup location selection cancelled or failed") } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsViewModel.kt index 883607e442..e8509f6eea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsViewModel.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.components.settings.app.backups.local import android.content.Context +import android.net.Uri import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.Dispatchers @@ -16,6 +17,7 @@ import kotlinx.coroutines.withContext import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode +import org.signal.core.ui.util.StorageUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.backup.BackupPassphrase @@ -50,7 +52,7 @@ class LocalBackupsViewModel : ViewModel(), BackupKeyCredentialManagerHandler { private val internalSettingsState = MutableStateFlow( LocalBackupsSettingsState( backupsEnabled = SignalStore.backup.newLocalBackupsEnabled, - folderDisplayName = SignalStore.backup.newLocalBackupsDirectory + folderDisplayName = getDisplayName(AppDependencies.application, SignalStore.backup.newLocalBackupsDirectory) ) ) @@ -70,7 +72,7 @@ class LocalBackupsViewModel : ViewModel(), BackupKeyCredentialManagerHandler { viewModelScope.launch { SignalStore.backup.newLocalBackupsDirectoryFlow.collect { directory -> - internalSettingsState.update { it.copy(folderDisplayName = directory) } + internalSettingsState.update { it.copy(folderDisplayName = getDisplayName(applicationContext, directory)) } } } @@ -167,6 +169,13 @@ class LocalBackupsViewModel : ViewModel(), BackupKeyCredentialManagerHandler { } } +private fun getDisplayName(context: Context, directoryUri: String?): String? { + if (directoryUri == null) { + return null + } + return StorageUtil.getDisplayPath(context, Uri.parse(directoryUri)) +} + private fun calculateLastBackupTimeString(context: Context, lastBackupTimestamp: Long): String { return if (lastBackupTimestamp > 0) { val relativeTime = DateUtils.getDatelessRelativeTimeSpanFormattedDate( diff --git a/core/ui/src/main/java/org/signal/core/ui/util/StorageUtil.java b/core/ui/src/main/java/org/signal/core/ui/util/StorageUtil.java index bf8425987f..f43cd364d7 100644 --- a/core/ui/src/main/java/org/signal/core/ui/util/StorageUtil.java +++ b/core/ui/src/main/java/org/signal/core/ui/util/StorageUtil.java @@ -11,7 +11,6 @@ import android.provider.MediaStore; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.core.content.ContextCompat; import org.signal.core.ui.CoreUiDependencies; @@ -91,12 +90,15 @@ public class StorageUtil { return backups; } - @RequiresApi(24) public static @NonNull String getDisplayPath(@NonNull Context context, @NonNull Uri uri) { String lastPathSegment = Objects.requireNonNull(uri.getLastPathSegment()); String backupVolume = lastPathSegment.replaceFirst(":.*", ""); String backupName = lastPathSegment.replaceFirst(".*:", ""); + if (Build.VERSION.SDK_INT < 24) { + return backupName; + } + StorageManager storageManager = ContextCompat.getSystemService(context, StorageManager.class); List storageVolumes = storageManager.getStorageVolumes(); StorageVolume storageVolume = null;