Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build Fix #12111

Merged
merged 4 commits into from
Oct 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import java.io.File
import java.security.SecureRandom
import java.util.AbstractList
import java.util.Vector
import javax.inject.Inject

class FileDownloader : Service(), OnDatatransferProgressListener, OnAccountsUpdateListener {
Expand Down Expand Up @@ -184,54 +183,75 @@ class FileDownloader : Service(), OnDatatransferProgressListener, OnAccountsUpda
if (!intent.hasExtra(EXTRA_USER) || !intent.hasExtra(EXTRA_FILE)) {
Copy link
Collaborator Author

@alperozturk96 alperozturk96 Oct 31, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix Function onStartCommand has 3 return statements which exceeds the limit of 2.

Log_OC.e(TAG, "Not enough information provided in intent")
return START_NOT_STICKY
} else {
val user = intent.getParcelableExtra<User>(EXTRA_USER)
val file = intent.getParcelableExtra<OCFile>(EXTRA_FILE)
val behaviour = intent.getStringExtra(OCFileListFragment.DOWNLOAD_BEHAVIOUR)
var downloadType: DownloadType? = DownloadType.DOWNLOAD
if (intent.hasExtra(DOWNLOAD_TYPE)) {
downloadType = intent.getSerializableExtra(DOWNLOAD_TYPE) as DownloadType?
}
val activityName = intent.getStringExtra(SendShareDialog.ACTIVITY_NAME)
val packageName = intent.getStringExtra(SendShareDialog.PACKAGE_NAME)
conflictUploadId = intent.getLongExtra(ConflictsResolveActivity.EXTRA_CONFLICT_UPLOAD_ID, -1)
val requestedDownloads: AbstractList<String> = Vector()
try {
val newDownload = DownloadFileOperation(
user,
file,
behaviour,
activityName,
packageName,
baseContext,
downloadType
)
newDownload.addDatatransferProgressListener(this)
newDownload.addDatatransferProgressListener(mBinder as FileDownloaderBinder?)
val putResult = mPendingDownloads.putIfAbsent(
user!!.accountName,
file!!.remotePath,
newDownload
)
if (putResult != null) {
val downloadKey = putResult.first
requestedDownloads.add(downloadKey)
sendBroadcastNewDownload(newDownload, putResult.second)
} // else, file already in the queue of downloads; don't repeat the request
} catch (e: IllegalArgumentException) {
Log_OC.e(TAG, "Not enough information provided in intent: " + e.message)
return START_NOT_STICKY
}
if (requestedDownloads.size > 0) {
val msg = mServiceHandler!!.obtainMessage()
msg.arg1 = startId
msg.obj = requestedDownloads
mServiceHandler!!.sendMessage(msg)
}

val user = intent.getParcelableExtra<User>(EXTRA_USER)
val file = intent.getParcelableExtra<OCFile>(EXTRA_FILE)
val behaviour = intent.getStringExtra(OCFileListFragment.DOWNLOAD_BEHAVIOUR)
var downloadType: DownloadType? = DownloadType.DOWNLOAD
if (intent.hasExtra(DOWNLOAD_TYPE)) {
downloadType = intent.getSerializableExtra(DOWNLOAD_TYPE) as DownloadType?
}
val activityName = intent.getStringExtra(SendShareDialog.ACTIVITY_NAME)
val packageName = intent.getStringExtra(SendShareDialog.PACKAGE_NAME)
conflictUploadId = intent.getLongExtra(ConflictsResolveActivity.EXTRA_CONFLICT_UPLOAD_ID, -1)

val requestedDownloads = handleDownloadRequest(user, file, behaviour, downloadType, activityName, packageName)

if (requestedDownloads.isNotEmpty()) {
val msg = mServiceHandler?.obtainMessage()
msg?.arg1 = startId
msg?.obj = requestedDownloads
msg?.let {
mServiceHandler?.sendMessage(it)
}
}

return START_NOT_STICKY
}

@Suppress("LongParameterList")
private fun handleDownloadRequest(
user: User?,
file: OCFile?,
behaviour: String?,
downloadType: DownloadType?,
activityName: String?,
packageName: String?
): List<String> {
val requestedDownloads: MutableList<String> = ArrayList()

if (user == null || file == null) {
return requestedDownloads
}

try {
val newDownload = DownloadFileOperation(
user,
file,
behaviour,
activityName,
packageName,
baseContext,
downloadType
)
newDownload.addDatatransferProgressListener(this)
newDownload.addDatatransferProgressListener(mBinder as FileDownloaderBinder?)

val putResult = mPendingDownloads.putIfAbsent(user.accountName, file.remotePath, newDownload)

if (putResult != null) {
val downloadKey = putResult.first
requestedDownloads.add(downloadKey)
sendBroadcastNewDownload(newDownload, putResult.second)
}
} catch (e: IllegalArgumentException) {
Log_OC.e(TAG, "Not enough information provided in intent: " + e.message)
}

return requestedDownloads
}

/**
* Provides a binder object that clients can use to perform operations on the queue of downloads,
* excepting the addition of new files.
Expand Down Expand Up @@ -286,13 +306,9 @@ class FileDownloader : Service(), OnDatatransferProgressListener, OnAccountsUpda
if (download != null) {
download.cancel()
} else {
if (mCurrentDownload != null && currentUser.isPresent &&
mCurrentDownload!!
.remotePath
.startsWith(file.remotePath) && account.name == currentUser.get().accountName
) {
mCurrentDownload!!.cancel()
}
mCurrentDownload?.takeIf {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix This condition is too complex (4). Defined complexity threshold for conditions is set to '4'

it.remotePath.startsWith(file.remotePath) && account.name == currentUser?.get()?.accountName
}?.cancel()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -399,31 +399,34 @@ open class FolderPickerActivity :
}

override fun onClick(v: View) {
if (v == mCancelBtn) {
finish()
} else if (v == mCopyBtn || v == mMoveBtn) {
val i = intent
val resultData = Intent()
resultData.putExtra(EXTRA_FOLDER, listOfFilesFragment!!.currentFile)
val targetFiles = i.getParcelableArrayListExtra<Parcelable>(EXTRA_FILES)
if (targetFiles != null) {
resultData.putParcelableArrayListExtra(EXTRA_FILES, targetFiles)
}
when (v) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix Function onClick is nested too deeply.

mCancelBtn -> finish()
mCopyBtn, mMoveBtn -> copyOrMove(v)
}
}

mTargetFilePaths.let {
if (it != null) {
if (v == mCopyBtn) {
fileOperationsHelper.moveOrCopyFiles(OperationsService.ACTION_COPY_FILE, it, file)
} else {
fileOperationsHelper.moveOrCopyFiles(OperationsService.ACTION_MOVE_FILE, it, file)
}
}
private fun copyOrMove(v: View) {
val i = intent
val resultData = Intent()
resultData.putExtra(EXTRA_FOLDER, listOfFilesFragment?.currentFile)

i.getParcelableArrayListExtra<Parcelable>(EXTRA_FILES)?.let { targetFiles ->
resultData.putParcelableArrayListExtra(EXTRA_FILES, targetFiles)
}

resultData.putStringArrayListExtra(EXTRA_FILE_PATHS, it)
mTargetFilePaths?.let {
val action = when (v) {
mCopyBtn -> OperationsService.ACTION_COPY_FILE
mMoveBtn -> OperationsService.ACTION_MOVE_FILE
else -> throw IllegalArgumentException("Unknown operation")
}
setResult(RESULT_OK, resultData)
finish()

fileOperationsHelper.moveOrCopyFiles(action, it, file)
resultData.putStringArrayListExtra(EXTRA_FILE_PATHS, it)
}

setResult(RESULT_OK, resultData)
finish()
}

override fun onRemoteOperationFinish(operation: RemoteOperation<*>?, result: RemoteOperationResult<*>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,27 +64,22 @@ open class ConfirmationDialogFragment : DialogFragment(), Injectable {
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
var messageArguments = requireArguments().getStringArray(ARG_MESSAGE_ARGUMENTS)
val messageArguments = requireArguments().getStringArray(ARG_MESSAGE_ARGUMENTS) ?: arrayOf<String>()
val titleId = requireArguments().getInt(ARG_TITLE_ID, -1)
val messageId = requireArguments().getInt(ARG_MESSAGE_RESOURCE_ID, -1)
val positiveButtonTextId = requireArguments().getInt(ARG_POSITIVE_BTN_RES, -1)
val negativeButtonTextId = requireArguments().getInt(ARG_NEGATIVE_BTN_RES, -1)
val neutralButtonTextId = requireArguments().getInt(ARG_NEUTRAL_BTN_RES, -1)

if (messageArguments == null) {
messageArguments = arrayOf<String?>()
}
@Suppress("SpreadOperator")
val message = getString(messageId, *messageArguments)

val builder = MaterialAlertDialogBuilder(requireActivity())
.setTitle(if (titleId == 0) { R.string.dialog_alert_title } else { titleId })
.setIcon(com.owncloud.android.R.drawable.ic_warning)
.setIconAttribute(R.attr.alertDialogIcon)
.setMessage(String.format(getString(messageId), messageArguments))
.setMessage(message)

if (titleId == 0) {
builder.setTitle(R.string.dialog_alert_title)
} else if (titleId != -1) {
builder.setTitle(titleId)
}
if (positiveButtonTextId != -1) {
builder.setPositiveButton(positiveButtonTextId) { dialog: DialogInterface, _: Int ->
mListener?.onConfirmation(tag)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,27 +24,20 @@ import android.os.Build
import android.os.Bundle
import android.os.storage.StorageManager
import androidx.annotation.RequiresApi
import com.nextcloud.client.di.Injectable
import com.owncloud.android.R
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener
import com.owncloud.android.ui.fragment.OCFileListFragment
import com.owncloud.android.utils.DisplayUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
import javax.inject.Inject

/**
* Dialog requiring confirmation when a file/folder is too "big" to be synchronized/downloaded on device.
*/
class SyncFileNotEnoughSpaceDialogFragment :
ConfirmationDialogFragment(),
ConfirmationDialogFragmentListener,
Injectable {
private var targetFile: OCFile? = null
ConfirmationDialogFragmentListener {

@JvmField
@Inject
var viewThemeUtils: ViewThemeUtils? = null
private var targetFile: OCFile? = null

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
targetFile = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Expand All @@ -62,7 +55,7 @@ class SyncFileNotEnoughSpaceDialogFragment :
/**
* (Only if file is a folder), will access the destination folder to allow user to choose what to synchronize
*/
override fun onConfirmation(callerTag: String) {
override fun onConfirmation(callerTag: String?) {
val frag = targetFragment as OCFileListFragment?

if (frag != null && targetFile != null) {
Expand All @@ -73,15 +66,15 @@ class SyncFileNotEnoughSpaceDialogFragment :
/**
* Will abort/cancel the process (is neutral to "hack" android button position ._.)
*/
override fun onNeutral(callerTag: String) {
override fun onNeutral(callerTag: String?) {
// Nothing
}

/**
* Will access to storage manager in order to empty useless files
*/
@RequiresApi(api = Build.VERSION_CODES.N_MR1)
override fun onCancel(callerTag: String) {
override fun onCancel(callerTag: String?) {
val storageIntent = Intent(StorageManager.ACTION_MANAGE_STORAGE)
startActivityForResult(storageIntent, REQUEST_CODE_STORAGE)
}
Expand Down
Loading