Эх сурвалжийг харах

Merge pull request #3674 from nextcloud/file-attach-preview-handle-config

Fix: File Attachment Preview Dialog crashes ChatActivity
Marcel Hibbe 1 жил өмнө
parent
commit
5a42341cf3

+ 8 - 6
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -2976,11 +2976,13 @@ class ChatActivity :
                         filenamesWithLineBreaks.append(filename).append("\n")
                     }
 
-                    val newFragment: DialogFragment = FileAttachmentPreviewFragment.newInstance(
+                    val newFragment = FileAttachmentPreviewFragment.newInstance(
                         filenamesWithLineBreaks.toString(),
-                        filesToUpload,
-                        this::uploadFiles
+                        filesToUpload
                     )
+                    newFragment.setListener { files, caption ->
+                        uploadFiles(files, caption)
+                    }
                     newFragment.show(supportFragmentManager, FileAttachmentPreviewFragment.TAG)
                 } catch (e: IllegalStateException) {
                     context.resources?.getString(R.string.nc_upload_failed)?.let {
@@ -3050,11 +3052,11 @@ class ChatActivity :
                                 filenamesWithLineBreaks.append(filename).append("\n")
                             }
 
-                            val newFragment: DialogFragment = FileAttachmentPreviewFragment.newInstance(
+                            val newFragment = FileAttachmentPreviewFragment.newInstance(
                                 filenamesWithLineBreaks.toString(),
-                                filesToUpload,
-                                this::uploadFiles
+                                filesToUpload
                             )
+                            newFragment.setListener { files, caption -> uploadFiles(files, caption) }
                             newFragment.show(supportFragmentManager, FileAttachmentPreviewFragment.TAG)
                         } else {
                             UploadAndShareFilesWorker.requestStoragePermission(this)

+ 27 - 13
app/src/main/java/com/nextcloud/talk/ui/dialog/FileAttachmentPreviewFragment.kt

@@ -36,14 +36,10 @@ import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
 import javax.inject.Inject
 
 @AutoInjector(NextcloudTalkApplication::class)
-class FileAttachmentPreviewFragment(
-    filenames: String,
-    filesToUpload: MutableList<String>,
-    functionToCall: (files: MutableList<String>, caption: String) -> Unit
-) : DialogFragment() {
-    private val files = filenames
-    private val filesList = filesToUpload
-    private val uploadFiles = functionToCall
+class FileAttachmentPreviewFragment : DialogFragment() {
+    private lateinit var files: String
+    private lateinit var filesList: ArrayList<String>
+    private var uploadFiles: (files: MutableList<String>, caption: String) -> Unit = { _, _ -> }
     lateinit var binding: DialogFileAttachmentPreviewBinding
 
     @Inject
@@ -51,7 +47,17 @@ class FileAttachmentPreviewFragment(
 
     @Inject
     lateinit var viewThemeUtils: ViewThemeUtils
+
+    fun setListener(uploadFiles: (files: MutableList<String>, caption: String) -> Unit) {
+        this.uploadFiles = uploadFiles
+    }
+
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        arguments?.let {
+            files = it.getString(FILE_NAMES_ARG, "")
+            filesList = it.getStringArrayList(FILES_TO_UPLOAD_ARG)!!
+        }
+
         binding = DialogFileAttachmentPreviewBinding.inflate(LayoutInflater.from(context))
         return MaterialAlertDialogBuilder(requireContext()).setView(binding.root).create()
     }
@@ -88,12 +94,20 @@ class FileAttachmentPreviewFragment(
     }
 
     companion object {
+
+        private const val FILE_NAMES_ARG = "FILE_NAMES_ARG"
+        private const val FILES_TO_UPLOAD_ARG = "FILES_TO_UPLOAD_ARG"
+
         @JvmStatic
-        fun newInstance(
-            filenames: String,
-            filesToUpload: MutableList<String>,
-            functionToCall: (files: MutableList<String>, caption: String) -> Unit
-        ) = FileAttachmentPreviewFragment(filenames, filesToUpload, functionToCall)
+        fun newInstance(filenames: String, filesToUpload: MutableList<String>): FileAttachmentPreviewFragment {
+            val fileAttachmentFragment = FileAttachmentPreviewFragment()
+            val args = Bundle()
+            args.putString(FILE_NAMES_ARG, filenames)
+            args.putStringArrayList(FILES_TO_UPLOAD_ARG, ArrayList(filesToUpload))
+            fileAttachmentFragment.arguments = args
+            return fileAttachmentFragment
+        }
+
         val TAG: String = FilterConversationFragment::class.java.simpleName
     }
 }

+ 67 - 61
app/src/main/res/layout/dialog_file_attachment_preview.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Nextcloud Talk application
   ~
   ~ @author Julius Linus
@@ -18,85 +17,92 @@
   ~ You should have received a copy of the GNU General Public License
   ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
-    tools:background="@color/white"
-    tools:visibility="visible">
+    tools:background="@color/white">
 
-    <com.google.android.material.textview.MaterialTextView
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_margin="@dimen/standard_margin"
-        android:text="@string/nc_add_file"
-        android:textSize="@dimen/md_title_textsize" />
-
-    <com.google.android.material.divider.MaterialDivider
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
-
-    <ScrollView
-        android:layout_width="match_parent"
-        android:layout_height="100dp">
+        android:orientation="vertical">
 
         <com.google.android.material.textview.MaterialTextView
-            android:id="@+id/dialog_file_attachment_preview_filenames"
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_margin="@dimen/standard_margin"
-            android:textSize="@dimen/headline_text_size"
-            tools:text="a.png\nb.png\nc.png"/>
+            android:text="@string/nc_add_file"
+            android:textSize="@dimen/md_title_textsize" />
 
-    </ScrollView>
+        <com.google.android.material.divider.MaterialDivider
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
 
-    <com.google.android.material.textfield.TextInputLayout
-        android:id="@+id/dialog_file_attachment_preview_layout"
-        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_margin="@dimen/standard_margin">
+        <androidx.core.widget.NestedScrollView
+            android:layout_width="match_parent"
+            android:layout_height="100dp">
+
+            <com.google.android.material.textview.MaterialTextView
+                android:id="@+id/dialog_file_attachment_preview_filenames"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="@dimen/standard_margin"
+                android:textSize="@dimen/headline_text_size"
+                tools:text="a.png\nb.png\nc.png" />
 
-        <com.google.android.material.textfield.TextInputEditText
-            android:id="@+id/dialog_file_attachment_preview_caption"
+        </androidx.core.widget.NestedScrollView>
+
+        <com.google.android.material.textfield.TextInputLayout
+            android:id="@+id/dialog_file_attachment_preview_layout"
+            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:hint="@string/nc_caption"
-            android:maxLines="3"
-            tools:text="a.png\nb.png\nc.png"/>
+            android:layout_margin="@dimen/standard_margin">
 
-    </com.google.android.material.textfield.TextInputLayout>
+            <com.google.android.material.textfield.TextInputEditText
+                android:id="@+id/dialog_file_attachment_preview_caption"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/nc_caption"
+                android:maxLines="3"
+                tools:text="a.png\nb.png\nc.png" />
 
-    <com.google.android.material.divider.MaterialDivider
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
+        </com.google.android.material.textfield.TextInputLayout>
 
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/standard_half_margin"
-        android:gravity="end"
-        android:orientation="horizontal"
-        android:paddingStart="@dimen/dialog_padding"
-        android:paddingEnd="@dimen/dialog_padding"
-        android:paddingBottom="@dimen/dialog_padding_top_bottom">
-
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/button_close"
-            style="@style/Button.Borderless"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:minHeight="@dimen/min_size_clickable_area"
-            android:text="@string/nc_no" />
+        <com.google.android.material.divider.MaterialDivider
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
 
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/button_send"
-            style="@style/Button.Borderless"
-            android:layout_width="wrap_content"
+        <LinearLayout
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:minHeight="@dimen/min_size_clickable_area"
-            android:text="@string/nc_yes" />
+            android:layout_marginTop="@dimen/standard_half_margin"
+            android:gravity="end"
+            android:orientation="horizontal"
+            android:paddingStart="@dimen/dialog_padding"
+            android:paddingEnd="@dimen/dialog_padding"
+            android:paddingBottom="@dimen/dialog_padding_top_bottom">
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/button_close"
+                style="@style/Button.Borderless"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:minHeight="@dimen/min_size_clickable_area"
+                android:text="@string/nc_no" />
 
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/button_send"
+                style="@style/Button.Borderless"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:minHeight="@dimen/min_size_clickable_area"
+                android:text="@string/nc_yes" />
+
+        </LinearLayout>
     </LinearLayout>
-</LinearLayout>
+
+</ScrollView>