From 0fb606f17808e85e7888f569cd6b8c478a8b045a Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 9 Sep 2026 08:45:49 +0200 Subject: [PATCH 1/4] refactor(conflict-dialog): dialog determination Signed-off-by: alperozturk96 --- .../ui/activity/ConflictsResolveActivityIT.kt | 4 +- .../ui/activity/ConflictsResolveActivity.kt | 6 +- .../ui/dialog/ConflictsResolveDialog.kt | 113 +++--------------- .../conflict/ConflictResolveDialogFactory.kt | 103 ++++++++++++++++ .../ui/dialog/parcel/ConflictDialogData.kt | 66 +++------- 5 files changed, 142 insertions(+), 150 deletions(-) create mode 100644 app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt diff --git a/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt b/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt index a115f79b1308..77fe4fdb9d9f 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt +++ b/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt @@ -26,9 +26,9 @@ import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile import com.owncloud.android.db.OCUpload import com.owncloud.android.ui.dialog.ConflictsResolveDialog -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.newInstance import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener +import com.owncloud.android.ui.dialog.conflict.ConflictResolveDialogFactory import com.owncloud.android.utils.EspressoIdlingResource import com.owncloud.android.utils.FileStorageUtils import com.owncloud.android.utils.ScreenshotTest @@ -69,7 +69,7 @@ class ConflictsResolveActivityIT : AbstractIT() { launchActivity(intent).use { scenario -> var dialog: ConflictsResolveDialog? = null scenario.onActivity { sut -> - dialog = newInstance( + dialog = ConflictResolveDialogFactory().forNormal( storageManager.getDecryptedPath(existingFile), targetContext, newFile, diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt index 9df9ce325ab4..292bf97461ea 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt @@ -37,9 +37,9 @@ import com.owncloud.android.files.services.NameCollisionPolicy import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation import com.owncloud.android.lib.resources.files.model.RemoteFile -import com.owncloud.android.ui.dialog.ConflictsResolveDialog import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener +import com.owncloud.android.ui.dialog.conflict.ConflictResolveDialogFactory import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileStorageUtils import kotlinx.coroutines.Dispatchers @@ -273,7 +273,7 @@ class ConflictsResolveActivity : } val (ft, _) = prepareDialogTransaction() - ConflictsResolveDialog.newInstance( + ConflictResolveDialogFactory().forOffline( context = this, leftFile = offlineOperation, rightFile = newFile!! @@ -307,7 +307,7 @@ class ConflictsResolveActivity : private fun showFileConflictDialog(remotePath: String) { val (ft, user) = prepareDialogTransaction() if (existingFile != null && storageManager.fileExists(remotePath) && newFile != null) { - ConflictsResolveDialog.newInstance( + ConflictResolveDialogFactory().forNormal( title = storageManager.getDecryptedPath(existingFile!!), context = this, leftFile = newFile!!, diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt index b8c65143760a..a0cfa113d336 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt @@ -17,7 +17,6 @@ import androidx.fragment.app.DialogFragment import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.client.account.User -import com.nextcloud.client.database.entity.OfflineOperationEntity import com.nextcloud.client.di.Injectable import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument @@ -28,8 +27,7 @@ import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile import com.owncloud.android.datamodel.SyncedFolderProvider import com.owncloud.android.ui.adapter.localFileList.LocalFileThumbnailBinder -import com.owncloud.android.ui.dialog.parcel.ConflictDialogData -import com.owncloud.android.ui.dialog.parcel.ConflictFileData +import com.owncloud.android.ui.dialog.parcel.ConflictDialogType import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.MimeTypeUtil import com.owncloud.android.utils.theme.ViewThemeUtils @@ -47,7 +45,7 @@ class ConflictsResolveDialog : var listener: OnConflictDecisionMadeListener? = null private var positiveButton: MaterialButton? = null - private var data: ConflictDialogData? = null + private lateinit var dialogType: ConflictDialogType private var user: User? = null private var leftDataFile: File? = null private var rightDataFile: OCFile? = null @@ -113,7 +111,8 @@ class ConflictsResolveDialog : val bundle = savedInstanceState ?: arguments if (bundle != null) { - data = bundle.getParcelableArgument(ARG_CONFLICT_DATA, ConflictDialogData::class.java) + dialogType = bundle.getParcelableArgument(ARG_CONFLICT_DATA, ConflictDialogType::class.java) + ?: throw IllegalArgumentException("$ARG_CONFLICT_DATA is required") leftDataFile = bundle.getSerializableArgument(ARG_LEFT_FILE, File::class.java) rightDataFile = bundle.getParcelableArgument(ARG_RIGHT_FILE, OCFile::class.java) user = bundle.getParcelableArgument(ARG_USER, User::class.java) @@ -127,7 +126,7 @@ class ConflictsResolveDialog : override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.run { - putParcelable(ARG_CONFLICT_DATA, data) + putParcelable(ARG_CONFLICT_DATA, dialogType) } } @@ -156,20 +155,20 @@ class ConflictsResolveDialog : .setNegativeButton(R.string.common_cancel) { _: DialogInterface?, _: Int -> listener?.conflictDecisionMade(Decision.CANCEL) } - .setTitle(data?.dialogTitle) + .setTitle(dialogType.data.dialogTitle) private fun okButtonClick() { binding.run { - val isDialogTitleNotExists = (data?.dialogTitle == null) + val isDialogTypeOffline = (dialogType is ConflictDialogType.Offline) val decision = when { leftCheckbox.isChecked && rightCheckbox.isChecked -> - if (isDialogTitleNotExists) Decision.KEEP_BOTH_FOLDER else Decision.KEEP_BOTH + if (isDialogTypeOffline) Decision.KEEP_BOTH_FOLDER else Decision.KEEP_BOTH leftCheckbox.isChecked -> - if (isDialogTitleNotExists) Decision.KEEP_OFFLINE_FOLDER else Decision.KEEP_LOCAL + if (isDialogTypeOffline) Decision.KEEP_OFFLINE_FOLDER else Decision.KEEP_LOCAL rightCheckbox.isChecked -> - if (isDialogTitleNotExists) Decision.KEEP_SERVER_FOLDER else Decision.KEEP_SERVER + if (isDialogTypeOffline) Decision.KEEP_SERVER_FOLDER else Decision.KEEP_SERVER else -> null } @@ -180,8 +179,9 @@ class ConflictsResolveDialog : private fun setupUI() { binding.run { - data?.let { - val (leftData, rightData) = it.checkboxData + dialogType.data.let { + val leftData = it.localFile + val rightData = it.serverFile headline.visibility = if (it.headline == null) { View.GONE @@ -269,88 +269,9 @@ class ConflictsResolveDialog : } companion object { - private const val ARG_CONFLICT_DATA = "CONFLICT_DATA" - private const val ARG_LEFT_FILE = "LEFT_FILE" - private const val ARG_RIGHT_FILE = "RIGHT_FILE" - private const val ARG_USER = "USER" - - @JvmStatic - fun newInstance( - title: String, - context: Context, - leftFile: OCFile, - rightFile: OCFile, - user: User? - ): ConflictsResolveDialog { - val file = File(leftFile.storagePath) - val conflictData = getFileConflictData(title, file, rightFile, context) - - val bundle = Bundle().apply { - putParcelable(ARG_CONFLICT_DATA, conflictData) - putSerializable(ARG_LEFT_FILE, file) - putParcelable(ARG_RIGHT_FILE, rightFile) - putParcelable(ARG_USER, user) - } - - return ConflictsResolveDialog().apply { - arguments = bundle - } - } - - fun newInstance(context: Context, leftFile: OfflineOperationEntity, rightFile: OCFile): ConflictsResolveDialog { - val conflictData = getFolderConflictData(leftFile, rightFile, context) - - val bundle = Bundle().apply { - putParcelable(ARG_CONFLICT_DATA, conflictData) - putParcelable(ARG_RIGHT_FILE, rightFile) - } - - return ConflictsResolveDialog().apply { - arguments = bundle - } - } - - @Suppress("MagicNumber") - private fun getFolderConflictData( - offlineOperation: OfflineOperationEntity, - rightFile: OCFile, - context: Context - ): ConflictDialogData { - val leftTitle = context.getString(R.string.prefs_synced_folders_local_path_title) - val leftTimestamp = - DisplayUtils.getRelativeTimestamp(context, offlineOperation.createdAt?.times(1000L) ?: 0) - val leftFileSize = DisplayUtils.bytesToHumanReadable(0) - val leftCheckBoxData = ConflictFileData(leftTitle, leftTimestamp.toString(), leftFileSize) - - val rightTitle = context.getString(R.string.prefs_synced_folders_remote_path_title) - val rightTimestamp = DisplayUtils.getRelativeTimestamp(context, rightFile.modificationTimestamp) - val rightFileSize = DisplayUtils.bytesToHumanReadable(rightFile.fileLength) - val rightCheckBoxData = ConflictFileData(rightTitle, rightTimestamp.toString(), rightFileSize) - - val title = context.getString(R.string.conflict_folder_headline) - val description = context.getString(R.string.conflict_message_description_for_folder) - return ConflictDialogData(null, title, description, Pair(leftCheckBoxData, rightCheckBoxData)) - } - - private fun getFileConflictData( - title: String, - leftFile: File, - rightFile: OCFile, - context: Context - ): ConflictDialogData { - val leftTitle = context.getString(R.string.conflict_local_file) - val leftTimestamp = DisplayUtils.getRelativeTimestamp(context, leftFile.lastModified()) - val leftFileSize = DisplayUtils.bytesToHumanReadable(leftFile.length()) - val leftCheckBoxData = ConflictFileData(leftTitle, leftTimestamp.toString(), leftFileSize) - - val rightTitle = context.getString(R.string.conflict_server_file) - val rightTimestamp = DisplayUtils.getRelativeTimestamp(context, rightFile.modificationTimestamp) - val rightFileSize = DisplayUtils.bytesToHumanReadable(rightFile.fileLength) - val rightCheckBoxData = ConflictFileData(rightTitle, rightTimestamp.toString(), rightFileSize) - - val headline = context.getString(R.string.choose_which_file) - val description = context.getString(R.string.conflict_message_description) - return ConflictDialogData(title, headline, description, Pair(leftCheckBoxData, rightCheckBoxData)) - } + const val ARG_CONFLICT_DATA = "CONFLICT_DATA" + const val ARG_LEFT_FILE = "LEFT_FILE" + const val ARG_RIGHT_FILE = "RIGHT_FILE" + const val ARG_USER = "USER" } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt new file mode 100644 index 000000000000..a4c3a6101fe4 --- /dev/null +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt @@ -0,0 +1,103 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.owncloud.android.ui.dialog.conflict + +import android.content.Context +import android.os.Bundle +import com.nextcloud.client.account.User +import com.nextcloud.client.database.entity.OfflineOperationEntity +import com.owncloud.android.R +import com.owncloud.android.datamodel.OCFile +import com.owncloud.android.ui.dialog.ConflictsResolveDialog +import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_CONFLICT_DATA +import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_LEFT_FILE +import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_RIGHT_FILE +import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_USER +import com.owncloud.android.ui.dialog.parcel.ConflictDialogData +import com.owncloud.android.ui.dialog.parcel.ConflictDialogType +import com.owncloud.android.ui.dialog.parcel.ConflictFileData +import com.owncloud.android.utils.DisplayUtils +import java.io.File + +class ConflictResolveDialogFactory { + fun forOffline(context: Context, leftFile: OfflineOperationEntity, rightFile: OCFile): ConflictsResolveDialog { + val leftTitle = context.getString(R.string.prefs_synced_folders_local_path_title) + val leftTimestamp = + DisplayUtils.getRelativeTimestamp(context, leftFile.createdAt?.times(1000L) ?: 0) + val leftFileSize = DisplayUtils.bytesToHumanReadable(0) + val leftCheckBoxData = ConflictFileData(leftTitle, leftTimestamp.toString(), leftFileSize) + + val rightTitle = context.getString(R.string.prefs_synced_folders_remote_path_title) + val rightTimestamp = DisplayUtils.getRelativeTimestamp(context, rightFile.modificationTimestamp) + val rightFileSize = DisplayUtils.bytesToHumanReadable(rightFile.fileLength) + val rightCheckBoxData = ConflictFileData(rightTitle, rightTimestamp.toString(), rightFileSize) + + val title = context.getString(R.string.conflict_folder_headline) + val description = context.getString(R.string.conflict_message_description_for_folder) + val data = ConflictDialogType.Offline( + ConflictDialogData( + null, + title, + description, + leftCheckBoxData, + rightCheckBoxData + ) + ) + + val bundle = Bundle().apply { + putParcelable(ARG_CONFLICT_DATA, data) + putParcelable(ARG_RIGHT_FILE, rightFile) + } + + return ConflictsResolveDialog().apply { + arguments = bundle + } + } + + fun forNormal( + title: String, + context: Context, + leftFile: OCFile, + rightFile: OCFile, + user: User? + ): ConflictsResolveDialog { + val file = File(leftFile.storagePath) + val leftTitle = context.getString(R.string.conflict_local_file) + val leftTimestamp = DisplayUtils.getRelativeTimestamp(context, file.lastModified()) + val leftFileSize = DisplayUtils.bytesToHumanReadable(file.length()) + val leftCheckBoxData = ConflictFileData(leftTitle, leftTimestamp.toString(), leftFileSize) + + val rightTitle = context.getString(R.string.conflict_server_file) + val rightTimestamp = DisplayUtils.getRelativeTimestamp(context, rightFile.modificationTimestamp) + val rightFileSize = DisplayUtils.bytesToHumanReadable(rightFile.fileLength) + val rightCheckBoxData = ConflictFileData(rightTitle, rightTimestamp.toString(), rightFileSize) + + val headline = context.getString(R.string.choose_which_file) + val description = context.getString(R.string.conflict_message_description) + val data = ConflictDialogType.Normal( + ConflictDialogData( + title, + headline, + description, + leftCheckBoxData, + rightCheckBoxData + ) + ) + + val bundle = Bundle().apply { + putParcelable(ARG_CONFLICT_DATA, data) + putSerializable(ARG_LEFT_FILE, file) + putParcelable(ARG_RIGHT_FILE, rightFile) + putParcelable(ARG_USER, user) + } + + return ConflictsResolveDialog().apply { + arguments = bundle + } + } +} diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt b/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt index cca5ae12ec55..e7299dfdc858 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt @@ -7,59 +7,27 @@ package com.owncloud.android.ui.dialog.parcel -import android.os.Parcel import android.os.Parcelable -import com.nextcloud.utils.extensions.readParcelableCompat +import kotlinx.parcelize.Parcelize -data class ConflictDialogData( - val dialogTitle: String?, - val headline: String?, - val description: String, - val checkboxData: Pair -) : Parcelable { - constructor(parcel: Parcel) : this( - parcel.readString() ?: "", - parcel.readString() ?: "", - parcel.readString() ?: "", - checkboxData = Pair( - parcel.readParcelableCompat(ConflictFileData::class.java.classLoader) ?: ConflictFileData("", "", ""), - parcel.readParcelableCompat(ConflictFileData::class.java.classLoader) ?: ConflictFileData("", "", "") - ) - ) - - override fun writeToParcel(parcel: Parcel, flags: Int) { - parcel.writeString(dialogTitle) - parcel.writeString(headline) - parcel.writeString(description) - parcel.writeParcelable(checkboxData.first, flags) - parcel.writeParcelable(checkboxData.second, flags) - } +sealed interface ConflictDialogType : Parcelable { + val data: ConflictDialogData - override fun describeContents(): Int = 0 + @Parcelize + data class Offline(override val data: ConflictDialogData) : ConflictDialogType - companion object CREATOR : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel): ConflictDialogData = ConflictDialogData(parcel) - override fun newArray(size: Int): Array = arrayOfNulls(size) - } + @Parcelize + data class Normal(override val data: ConflictDialogData) : ConflictDialogType } -data class ConflictFileData(val title: String, val timestamp: String, val fileSize: String) : Parcelable { - constructor(parcel: Parcel) : this( - parcel.readString() ?: "", - parcel.readString() ?: "", - parcel.readString() ?: "" - ) - - override fun writeToParcel(parcel: Parcel, flags: Int) { - parcel.writeString(title) - parcel.writeString(timestamp) - parcel.writeString(fileSize) - } - - override fun describeContents(): Int = 0 +@Parcelize +data class ConflictDialogData( + val dialogTitle: String?, + val headline: String?, + val description: String, + val localFile: ConflictFileData, + val serverFile: ConflictFileData +) : Parcelable - companion object CREATOR : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel): ConflictFileData = ConflictFileData(parcel) - override fun newArray(size: Int): Array = arrayOfNulls(size) - } -} +@Parcelize +data class ConflictFileData(val title: String, val timestamp: String, val fileSize: String) : Parcelable From f5142b350097bcd5949dc393c947867470774a7e Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 9 Sep 2026 09:03:25 +0200 Subject: [PATCH 2/4] simplify Signed-off-by: alperozturk96 --- .../ui/activity/ConflictsResolveActivityIT.kt | 2 +- .../ui/activity/ConflictsResolveActivity.kt | 4 +- .../ui/dialog/ConflictsResolveDialog.kt | 82 ++++++---------- .../conflict/ConflictResolveDialogFactory.kt | 98 +++++++++---------- .../ui/dialog/parcel/ConflictDialogData.kt | 11 ++- 5 files changed, 84 insertions(+), 113 deletions(-) diff --git a/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt b/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt index 77fe4fdb9d9f..8c221b081f45 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt +++ b/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt @@ -69,7 +69,7 @@ class ConflictsResolveActivityIT : AbstractIT() { launchActivity(intent).use { scenario -> var dialog: ConflictsResolveDialog? = null scenario.onActivity { sut -> - dialog = ConflictResolveDialogFactory().forNormal( + dialog = ConflictResolveDialogFactory.forNormal( storageManager.getDecryptedPath(existingFile), targetContext, newFile, diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt index 292bf97461ea..ea8d7b45c3bf 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt @@ -273,7 +273,7 @@ class ConflictsResolveActivity : } val (ft, _) = prepareDialogTransaction() - ConflictResolveDialogFactory().forOffline( + ConflictResolveDialogFactory.forOffline( context = this, leftFile = offlineOperation, rightFile = newFile!! @@ -307,7 +307,7 @@ class ConflictsResolveActivity : private fun showFileConflictDialog(remotePath: String) { val (ft, user) = prepareDialogTransaction() if (existingFile != null && storageManager.fileExists(remotePath) && newFile != null) { - ConflictResolveDialogFactory().forNormal( + ConflictResolveDialogFactory.forNormal( title = storageManager.getDecryptedPath(existingFile!!), context = this, leftFile = newFile!!, diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt index a0cfa113d336..ce5739a3df00 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt @@ -108,26 +108,13 @@ class ConflictsResolveDialog : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val bundle = savedInstanceState ?: arguments - - if (bundle != null) { - dialogType = bundle.getParcelableArgument(ARG_CONFLICT_DATA, ConflictDialogType::class.java) - ?: throw IllegalArgumentException("$ARG_CONFLICT_DATA is required") - leftDataFile = bundle.getSerializableArgument(ARG_LEFT_FILE, File::class.java) - rightDataFile = bundle.getParcelableArgument(ARG_RIGHT_FILE, OCFile::class.java) - user = bundle.getParcelableArgument(ARG_USER, User::class.java) - } else { - activity?.let { - DisplayUtils.showSnackMessage(it, R.string.failed_to_create_conflict_dialog) - } - } - } - - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - outState.run { - putParcelable(ARG_CONFLICT_DATA, dialogType) + val bundle = requireArguments() + dialogType = requireNotNull(bundle.getParcelableArgument(ARG_CONFLICT_DATA, ConflictDialogType::class.java)) { + "$ARG_CONFLICT_DATA is required, create this dialog through ConflictResolveDialogFactory" } + leftDataFile = bundle.getSerializableArgument(ARG_LEFT_FILE, File::class.java) + rightDataFile = bundle.getParcelableArgument(ARG_RIGHT_FILE, OCFile::class.java) + user = bundle.getParcelableArgument(ARG_USER, User::class.java) } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -155,7 +142,7 @@ class ConflictsResolveDialog : .setNegativeButton(R.string.common_cancel) { _: DialogInterface?, _: Int -> listener?.conflictDecisionMade(Decision.CANCEL) } - .setTitle(dialogType.data.dialogTitle) + .setTitle(dialogType.dialogTitle) private fun okButtonClick() { binding.run { @@ -178,35 +165,26 @@ class ConflictsResolveDialog : } private fun setupUI() { + val data = dialogType.data + binding.run { - dialogType.data.let { - val leftData = it.localFile - val rightData = it.serverFile - - headline.visibility = if (it.headline == null) { - View.GONE - } else { - View.VISIBLE - } - headline.text = it.headline - - description.text = it.description - - leftCheckbox.text = leftData.title - leftTimestamp.text = leftData.timestamp - leftFileSize.text = leftData.fileSize - - rightCheckbox.text = rightData.title - rightTimestamp.text = rightData.timestamp - rightFileSize.text = rightData.fileSize - - if (leftDataFile != null && rightDataFile != null && user != null) { - setThumbnailsForFileConflicts() - } else { - val folderIcon = MimeTypeUtil.getDefaultFolderIcon(requireContext(), viewThemeUtils) - leftThumbnail.setImageDrawable(folderIcon) - rightThumbnail.setImageDrawable(folderIcon) - } + headline.text = data.headline + description.text = data.description + + leftCheckbox.text = data.localFile.title + leftTimestamp.text = data.localFile.timestamp + leftFileSize.text = data.localFile.fileSize + + rightCheckbox.text = data.serverFile.title + rightTimestamp.text = data.serverFile.timestamp + rightFileSize.text = data.serverFile.fileSize + + if (leftDataFile != null && rightDataFile != null && user != null) { + setThumbnailsForFileConflicts() + } else { + val folderIcon = MimeTypeUtil.getDefaultFolderIcon(requireContext(), viewThemeUtils) + leftThumbnail.setImageDrawable(folderIcon) + rightThumbnail.setImageDrawable(folderIcon) } } } @@ -269,9 +247,9 @@ class ConflictsResolveDialog : } companion object { - const val ARG_CONFLICT_DATA = "CONFLICT_DATA" - const val ARG_LEFT_FILE = "LEFT_FILE" - const val ARG_RIGHT_FILE = "RIGHT_FILE" - const val ARG_USER = "USER" + internal const val ARG_CONFLICT_DATA = "CONFLICT_DATA" + internal const val ARG_LEFT_FILE = "LEFT_FILE" + internal const val ARG_RIGHT_FILE = "RIGHT_FILE" + internal const val ARG_USER = "USER" } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt index a4c3a6101fe4..54917a59c866 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt @@ -9,6 +9,7 @@ package com.owncloud.android.ui.dialog.conflict import android.content.Context import android.os.Bundle +import androidx.annotation.StringRes import com.nextcloud.client.account.User import com.nextcloud.client.database.entity.OfflineOperationEntity import com.owncloud.android.R @@ -24,39 +25,26 @@ import com.owncloud.android.ui.dialog.parcel.ConflictFileData import com.owncloud.android.utils.DisplayUtils import java.io.File -class ConflictResolveDialogFactory { - fun forOffline(context: Context, leftFile: OfflineOperationEntity, rightFile: OCFile): ConflictsResolveDialog { - val leftTitle = context.getString(R.string.prefs_synced_folders_local_path_title) - val leftTimestamp = - DisplayUtils.getRelativeTimestamp(context, leftFile.createdAt?.times(1000L) ?: 0) - val leftFileSize = DisplayUtils.bytesToHumanReadable(0) - val leftCheckBoxData = ConflictFileData(leftTitle, leftTimestamp.toString(), leftFileSize) +object ConflictResolveDialogFactory { - val rightTitle = context.getString(R.string.prefs_synced_folders_remote_path_title) - val rightTimestamp = DisplayUtils.getRelativeTimestamp(context, rightFile.modificationTimestamp) - val rightFileSize = DisplayUtils.bytesToHumanReadable(rightFile.fileLength) - val rightCheckBoxData = ConflictFileData(rightTitle, rightTimestamp.toString(), rightFileSize) + private const val SECONDS_TO_MILLIS = 1000L + private const val UNKNOWN_FOLDER_SIZE = 0L - val title = context.getString(R.string.conflict_folder_headline) - val description = context.getString(R.string.conflict_message_description_for_folder) - val data = ConflictDialogType.Offline( - ConflictDialogData( - null, - title, - description, - leftCheckBoxData, - rightCheckBoxData - ) + fun forOffline(context: Context, leftFile: OfflineOperationEntity, rightFile: OCFile): ConflictsResolveDialog { + val data = ConflictDialogData( + headline = context.getString(R.string.conflict_folder_headline), + description = context.getString(R.string.conflict_message_description_for_folder), + localFile = context.conflictFileData( + titleId = R.string.prefs_synced_folders_local_path_title, + timestamp = (leftFile.createdAt ?: 0L) * SECONDS_TO_MILLIS, + fileLength = UNKNOWN_FOLDER_SIZE + ), + serverFile = context.conflictFileData(R.string.prefs_synced_folders_remote_path_title, rightFile) ) - val bundle = Bundle().apply { - putParcelable(ARG_CONFLICT_DATA, data) + return createDialog(ConflictDialogType.Offline(data)) { putParcelable(ARG_RIGHT_FILE, rightFile) } - - return ConflictsResolveDialog().apply { - arguments = bundle - } } fun forNormal( @@ -66,38 +54,40 @@ class ConflictResolveDialogFactory { rightFile: OCFile, user: User? ): ConflictsResolveDialog { - val file = File(leftFile.storagePath) - val leftTitle = context.getString(R.string.conflict_local_file) - val leftTimestamp = DisplayUtils.getRelativeTimestamp(context, file.lastModified()) - val leftFileSize = DisplayUtils.bytesToHumanReadable(file.length()) - val leftCheckBoxData = ConflictFileData(leftTitle, leftTimestamp.toString(), leftFileSize) - - val rightTitle = context.getString(R.string.conflict_server_file) - val rightTimestamp = DisplayUtils.getRelativeTimestamp(context, rightFile.modificationTimestamp) - val rightFileSize = DisplayUtils.bytesToHumanReadable(rightFile.fileLength) - val rightCheckBoxData = ConflictFileData(rightTitle, rightTimestamp.toString(), rightFileSize) - - val headline = context.getString(R.string.choose_which_file) - val description = context.getString(R.string.conflict_message_description) - val data = ConflictDialogType.Normal( - ConflictDialogData( - title, - headline, - description, - leftCheckBoxData, - rightCheckBoxData - ) + val localFile = File(leftFile.storagePath) + val data = ConflictDialogData( + headline = context.getString(R.string.choose_which_file), + description = context.getString(R.string.conflict_message_description), + localFile = context.conflictFileData( + titleId = R.string.conflict_local_file, + timestamp = localFile.lastModified(), + fileLength = localFile.length() + ), + serverFile = context.conflictFileData(R.string.conflict_server_file, rightFile) ) - val bundle = Bundle().apply { - putParcelable(ARG_CONFLICT_DATA, data) - putSerializable(ARG_LEFT_FILE, file) + return createDialog(ConflictDialogType.Normal(title, data)) { + putSerializable(ARG_LEFT_FILE, localFile) putParcelable(ARG_RIGHT_FILE, rightFile) putParcelable(ARG_USER, user) } + } + + private fun Context.conflictFileData(@StringRes titleId: Int, file: OCFile): ConflictFileData = + conflictFileData(titleId, file.modificationTimestamp, file.fileLength) - return ConflictsResolveDialog().apply { - arguments = bundle + private fun Context.conflictFileData(@StringRes titleId: Int, timestamp: Long, fileLength: Long): ConflictFileData = + ConflictFileData( + title = getString(titleId), + timestamp = DisplayUtils.getRelativeTimestamp(this, timestamp).toString(), + fileSize = DisplayUtils.bytesToHumanReadable(fileLength) + ) + + private fun createDialog(type: ConflictDialogType, putFiles: Bundle.() -> Unit): ConflictsResolveDialog = + ConflictsResolveDialog().apply { + arguments = Bundle().apply { + putParcelable(ARG_CONFLICT_DATA, type) + putFiles() + } } - } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt b/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt index e7299dfdc858..c08beff9453b 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt @@ -12,18 +12,21 @@ import kotlinx.parcelize.Parcelize sealed interface ConflictDialogType : Parcelable { val data: ConflictDialogData + val dialogTitle: String? @Parcelize - data class Offline(override val data: ConflictDialogData) : ConflictDialogType + data class Offline(override val data: ConflictDialogData) : ConflictDialogType { + override val dialogTitle: String? + get() = null + } @Parcelize - data class Normal(override val data: ConflictDialogData) : ConflictDialogType + data class Normal(override val dialogTitle: String, override val data: ConflictDialogData) : ConflictDialogType } @Parcelize data class ConflictDialogData( - val dialogTitle: String?, - val headline: String?, + val headline: String, val description: String, val localFile: ConflictFileData, val serverFile: ConflictFileData From 906836dec621306af986d56038765e25e5ea7227 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 9 Sep 2026 09:08:37 +0200 Subject: [PATCH 3/4] move to data classes to model package Signed-off-by: alperozturk96 --- .../ui/dialog/ConflictsResolveDialog.kt | 2 +- .../conflict/ConflictResolveDialogFactory.kt | 6 +++--- .../conflict/model/ConflictDialogData.kt | 19 +++++++++++++++++++ .../model/ConflictDialogType.kt} | 15 ++------------- .../dialog/conflict/model/ConflictFileData.kt | 14 ++++++++++++++ 5 files changed, 39 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictDialogData.kt rename app/src/main/java/com/owncloud/android/ui/dialog/{parcel/ConflictDialogData.kt => conflict/model/ConflictDialogType.kt} (58%) create mode 100644 app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictFileData.kt diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt index ce5739a3df00..64b69ecf3530 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt @@ -27,7 +27,7 @@ import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile import com.owncloud.android.datamodel.SyncedFolderProvider import com.owncloud.android.ui.adapter.localFileList.LocalFileThumbnailBinder -import com.owncloud.android.ui.dialog.parcel.ConflictDialogType +import com.owncloud.android.ui.dialog.conflict.model.ConflictDialogType import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.MimeTypeUtil import com.owncloud.android.utils.theme.ViewThemeUtils diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt index 54917a59c866..a22011d262b1 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt @@ -19,9 +19,9 @@ import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_CONFL import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_LEFT_FILE import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_RIGHT_FILE import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_USER -import com.owncloud.android.ui.dialog.parcel.ConflictDialogData -import com.owncloud.android.ui.dialog.parcel.ConflictDialogType -import com.owncloud.android.ui.dialog.parcel.ConflictFileData +import com.owncloud.android.ui.dialog.conflict.model.ConflictDialogData +import com.owncloud.android.ui.dialog.conflict.model.ConflictDialogType +import com.owncloud.android.ui.dialog.conflict.model.ConflictFileData import com.owncloud.android.utils.DisplayUtils import java.io.File diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictDialogData.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictDialogData.kt new file mode 100644 index 000000000000..686ab9d1312c --- /dev/null +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictDialogData.kt @@ -0,0 +1,19 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.owncloud.android.ui.dialog.conflict.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class ConflictDialogData( + val headline: String, + val description: String, + val localFile: ConflictFileData, + val serverFile: ConflictFileData +) : Parcelable diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictDialogType.kt similarity index 58% rename from app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt rename to app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictDialogType.kt index c08beff9453b..05b42c89f181 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictDialogType.kt @@ -1,11 +1,11 @@ /* * Nextcloud - Android Client * - * SPDX-FileCopyrightText: 2024 Alper Ozturk + * SPDX-FileCopyrightText: 2026 Alper Ozturk * SPDX-License-Identifier: AGPL-3.0-or-later */ -package com.owncloud.android.ui.dialog.parcel +package com.owncloud.android.ui.dialog.conflict.model import android.os.Parcelable import kotlinx.parcelize.Parcelize @@ -23,14 +23,3 @@ sealed interface ConflictDialogType : Parcelable { @Parcelize data class Normal(override val dialogTitle: String, override val data: ConflictDialogData) : ConflictDialogType } - -@Parcelize -data class ConflictDialogData( - val headline: String, - val description: String, - val localFile: ConflictFileData, - val serverFile: ConflictFileData -) : Parcelable - -@Parcelize -data class ConflictFileData(val title: String, val timestamp: String, val fileSize: String) : Parcelable diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictFileData.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictFileData.kt new file mode 100644 index 000000000000..57b2c118158c --- /dev/null +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/model/ConflictFileData.kt @@ -0,0 +1,14 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.owncloud.android.ui.dialog.conflict.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class ConflictFileData(val title: String, val timestamp: String, val fileSize: String) : Parcelable From 30494030e2a4182cfb550936ee28e74d57c63335 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 9 Sep 2026 09:12:19 +0200 Subject: [PATCH 4/4] move ConflictsResolveDialog to conflict package Signed-off-by: alperozturk96 --- .../ui/activity/ConflictsResolveActivityIT.kt | 6 +++--- .../com/nextcloud/client/di/ComponentsModule.java | 2 +- .../ui/activity/ConflictsResolveActivity.kt | 4 ++-- .../conflict/ConflictResolveDialogFactory.kt | 15 +++++---------- .../{ => conflict}/ConflictsResolveDialog.kt | 2 +- 5 files changed, 12 insertions(+), 17 deletions(-) rename app/src/main/java/com/owncloud/android/ui/dialog/{ => conflict}/ConflictsResolveDialog.kt (99%) diff --git a/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt b/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt index 8c221b081f45..a7e549a74fc4 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt +++ b/app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.kt @@ -25,9 +25,9 @@ import com.owncloud.android.R import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile import com.owncloud.android.db.OCUpload -import com.owncloud.android.ui.dialog.ConflictsResolveDialog -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener +import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog +import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog.Decision +import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog.OnConflictDecisionMadeListener import com.owncloud.android.ui.dialog.conflict.ConflictResolveDialogFactory import com.owncloud.android.utils.EspressoIdlingResource import com.owncloud.android.utils.FileStorageUtils diff --git a/app/src/main/java/com/nextcloud/client/di/ComponentsModule.java b/app/src/main/java/com/nextcloud/client/di/ComponentsModule.java index f1a2ac752b30..6710289ad52e 100644 --- a/app/src/main/java/com/nextcloud/client/di/ComponentsModule.java +++ b/app/src/main/java/com/nextcloud/client/di/ComponentsModule.java @@ -79,7 +79,7 @@ import com.owncloud.android.ui.dialog.ChooseRichDocumentsTemplateDialogFragment; import com.owncloud.android.ui.dialog.ChooseTemplateDialogFragment; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; -import com.owncloud.android.ui.dialog.ConflictsResolveDialog; +import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog; import com.owncloud.android.ui.dialog.CreateAlbumDialogFragment; import com.owncloud.android.ui.dialog.CreateFolderDialogFragment; import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment; diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt index ea8d7b45c3bf..5f9d0caed0db 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt @@ -37,8 +37,8 @@ import com.owncloud.android.files.services.NameCollisionPolicy import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation import com.owncloud.android.lib.resources.files.model.RemoteFile -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener +import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog.Decision +import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog.OnConflictDecisionMadeListener import com.owncloud.android.ui.dialog.conflict.ConflictResolveDialogFactory import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileStorageUtils diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt index a22011d262b1..9a6fd6a32a98 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictResolveDialogFactory.kt @@ -14,11 +14,6 @@ import com.nextcloud.client.account.User import com.nextcloud.client.database.entity.OfflineOperationEntity import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile -import com.owncloud.android.ui.dialog.ConflictsResolveDialog -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_CONFLICT_DATA -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_LEFT_FILE -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_RIGHT_FILE -import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Companion.ARG_USER import com.owncloud.android.ui.dialog.conflict.model.ConflictDialogData import com.owncloud.android.ui.dialog.conflict.model.ConflictDialogType import com.owncloud.android.ui.dialog.conflict.model.ConflictFileData @@ -43,7 +38,7 @@ object ConflictResolveDialogFactory { ) return createDialog(ConflictDialogType.Offline(data)) { - putParcelable(ARG_RIGHT_FILE, rightFile) + putParcelable(ConflictsResolveDialog.ARG_RIGHT_FILE, rightFile) } } @@ -67,9 +62,9 @@ object ConflictResolveDialogFactory { ) return createDialog(ConflictDialogType.Normal(title, data)) { - putSerializable(ARG_LEFT_FILE, localFile) - putParcelable(ARG_RIGHT_FILE, rightFile) - putParcelable(ARG_USER, user) + putSerializable(ConflictsResolveDialog.ARG_LEFT_FILE, localFile) + putParcelable(ConflictsResolveDialog.ARG_RIGHT_FILE, rightFile) + putParcelable(ConflictsResolveDialog.ARG_USER, user) } } @@ -86,7 +81,7 @@ object ConflictResolveDialogFactory { private fun createDialog(type: ConflictDialogType, putFiles: Bundle.() -> Unit): ConflictsResolveDialog = ConflictsResolveDialog().apply { arguments = Bundle().apply { - putParcelable(ARG_CONFLICT_DATA, type) + putParcelable(ConflictsResolveDialog.ARG_CONFLICT_DATA, type) putFiles() } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictsResolveDialog.kt similarity index 99% rename from app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt rename to app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictsResolveDialog.kt index 64b69ecf3530..84f5c4d1b848 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictsResolveDialog.kt @@ -4,7 +4,7 @@ * SPDX-FileCopyrightText: 2024 Alper Ozturk * SPDX-License-Identifier: AGPL-3.0-or-later */ -package com.owncloud.android.ui.dialog +package com.owncloud.android.ui.dialog.conflict import android.app.Dialog import android.content.Context