Browse Source

FileActionsBottomSheet: Display file name or file count as bottom sheet title

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 years ago
parent
commit
1aa248d1bf

+ 17 - 2
app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt

@@ -32,6 +32,7 @@ import androidx.lifecycle.ViewModelProvider
 import com.google.android.material.bottomsheet.BottomSheetDialogFragment
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.ViewModelFactory
+import com.owncloud.android.R
 import com.owncloud.android.databinding.FileActionsBottomSheetBinding
 import com.owncloud.android.databinding.FileActionsBottomSheetItemBinding
 import com.owncloud.android.datamodel.OCFile
@@ -39,7 +40,6 @@ import com.owncloud.android.ui.activity.ComponentsGetter
 import com.owncloud.android.utils.theme.ViewThemeUtils
 import javax.inject.Inject
 
-// TODO add file name
 // TODO add lock info (see FileLockingMenuCustomization)
 // TODO give events back
 // TODO drag handle (needs material 1.7.0)
@@ -77,8 +77,13 @@ class FileActionsBottomSheet private constructor() : BottomSheetDialogFragment()
 
         viewModel.uiState.observe(viewLifecycleOwner) { state ->
             when (state) {
-                is FileActionsViewModel.UiState.Loaded -> {
+                is FileActionsViewModel.UiState.LoadedForSingleFile -> {
                     displayActions(state.actions, inflater)
+                    displayTitle(state.titleFile)
+                }
+                is FileActionsViewModel.UiState.LoadedForMultipleFiles -> {
+                    displayActions(state.actions, inflater)
+                    displayTitle(state.fileCount)
                 }
                 FileActionsViewModel.UiState.Loading -> {
                     // TODO show spinner
@@ -105,6 +110,16 @@ class FileActionsBottomSheet private constructor() : BottomSheetDialogFragment()
         }
     }
 
+    private fun displayTitle(titleFile: OCFile?) {
+        titleFile?.decryptedFileName?.let {
+            binding.title.text = it
+        }
+    }
+
+    private fun displayTitle(fileCount: Int) {
+        binding.title.text = resources.getQuantityString(R.plurals.file_list__footer__file, fileCount, fileCount)
+    }
+
     private fun inflateActionView(inflater: LayoutInflater, action: FileAction): View {
         val itemBinding = FileActionsBottomSheetItemBinding.inflate(inflater, binding.fileActionsList, false)
             .apply {

+ 6 - 2
app/src/main/java/com/nextcloud/ui/fileactions/FileActionsViewModel.kt

@@ -40,7 +40,8 @@ class FileActionsViewModel @Inject constructor(
 
     sealed interface UiState {
         object Loading : UiState
-        class Loaded(val actions: List<FileAction>) : UiState
+        class LoadedForSingleFile(val actions: List<FileAction>, val titleFile: OCFile?) : UiState
+        class LoadedForMultipleFiles(val actions: List<FileAction>, val fileCount: Int) : UiState
     }
 
     private val _uiState: MutableLiveData<UiState> = MutableLiveData(UiState.Loading)
@@ -70,7 +71,10 @@ class FileActionsViewModel @Inject constructor(
         val availableActions = FileAction.SORTED_VALUES
             .filter { additionalFilter == null || it.id !in additionalFilter }
             .filter { it.id !in toHide }
-        _uiState.value = UiState.Loaded(availableActions)
+        _uiState.value = when (files.size) {
+            1 -> UiState.LoadedForSingleFile(availableActions, files.first())
+            else -> UiState.LoadedForMultipleFiles(availableActions, files.size)
+        }
     }
 
     fun onClick(action: FileAction) {

+ 18 - 4
app/src/main/res/layout/file_actions_bottom_sheet.xml

@@ -22,23 +22,37 @@
 
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <FrameLayout
+    <LinearLayout
         android:id="@+id/bottom_sheet"
-        android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:orientation="vertical"
         app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
+
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="@style/TextAppearance.Material3.HeadlineSmall"
+            android:lines="1"
+            android:ellipsize="middle"
+            android:padding="@dimen/standard_padding"
+            tools:text="Test file name which is very very very very very long.pdf" />
+
         <androidx.core.widget.NestedScrollView
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
+
             <LinearLayout
                 android:id="@+id/file_actions_list"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:orientation="vertical"/>
+                android:orientation="vertical" />
         </androidx.core.widget.NestedScrollView>
-    </FrameLayout>
+    </LinearLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>