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

Fix: File Attachment Preview Dialog crashes ChatActivity
This commit is contained in:
Marcel Hibbe 2024-03-05 11:44:37 +01:00 committed by GitHub
commit 5a42341cf3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 111 additions and 89 deletions

View File

@ -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)

View File

@ -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
}
}

View File

@ -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">
<com.google.android.material.textview.MaterialTextView
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">
<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"/>
</ScrollView>
<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">
<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.textfield.TextInputLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content" />
tools:background="@color/white">
<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">
android:orientation="vertical">
<com.google.android.material.button.MaterialButton
android:id="@+id/button_close"
style="@style/Button.Borderless"
android:layout_width="wrap_content"
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/min_size_clickable_area"
android:text="@string/nc_no" />
android:layout_margin="@dimen/standard_margin"
android:text="@string/nc_add_file"
android:textSize="@dimen/md_title_textsize" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_send"
style="@style/Button.Borderless"
android:layout_width="wrap_content"
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<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" />
</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:minHeight="@dimen/min_size_clickable_area"
android:text="@string/nc_yes" />
android:layout_margin="@dimen/standard_margin">
<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.textfield.TextInputLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<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.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>