Skip to content

Commit

Permalink
added missing throw
Browse files Browse the repository at this point in the history
  • Loading branch information
anggrayudi committed Jun 29, 2024
1 parent 279e94b commit 883c8de
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 55 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ captures/
# IntelliJ
*.iml
.idea
.kotlin

# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import com.afollestad.materialdialogs.customview.getCustomView
import com.afollestad.materialdialogs.input.input
import com.afollestad.materialdialogs.list.listItems
import com.anggrayudi.storage.SimpleStorageHelper
import com.anggrayudi.storage.callback.FolderConflictCallback
import com.anggrayudi.storage.callback.MultipleFilesConflictCallback
import com.anggrayudi.storage.callback.SingleFileConflictCallback
import com.anggrayudi.storage.callback.SingleFolderConflictCallback
import com.anggrayudi.storage.extension.launchOnUiThread
import com.anggrayudi.storage.file.baseName
import com.anggrayudi.storage.file.changeName
Expand Down Expand Up @@ -377,8 +377,8 @@ class MainActivity : AppCompatActivity() {

override fun onContentConflict(
destinationParentFolder: DocumentFile,
conflictedFiles: MutableList<FolderConflictCallback.FileConflict>,
action: FolderConflictCallback.FolderContentConflictAction
conflictedFiles: MutableList<SingleFolderConflictCallback.FileConflict>,
action: SingleFolderConflictCallback.FolderContentConflictAction
) {
handleFolderContentConflict(action, conflictedFiles)
}
Expand Down Expand Up @@ -480,7 +480,7 @@ class MainActivity : AppCompatActivity() {
}
}

private fun createFolderCallback() = object : FolderConflictCallback(uiScope) {
private fun createFolderCallback() = object : SingleFolderConflictCallback(uiScope) {
override fun onParentConflict(destinationFolder: DocumentFile, action: ParentFolderConflictAction, canMerge: Boolean) {
handleParentFolderConflict(destinationFolder, action, canMerge)
}
Expand Down Expand Up @@ -667,7 +667,7 @@ class MainActivity : AppCompatActivity() {
.message(text = "Folder \"${currentSolution.target.name}\" already exists in destination. What's your action?")
.checkBoxPrompt(text = "Apply to all") { doForAll = it }
.listItems(items = mutableListOf("Replace", "Merge", "Create New", "Skip Duplicate").apply { if (!canMerge) remove("Merge") }) { _, index, _ ->
currentSolution.solution = FolderConflictCallback.ConflictResolution.entries[if (!canMerge && index > 0) index + 1 else index]
currentSolution.solution = SingleFolderConflictCallback.ConflictResolution.entries[if (!canMerge && index > 0) index + 1 else index]
newSolution.add(currentSolution)
if (doForAll) {
conflictedFolders.forEach { it.solution = currentSolution.solution }
Expand Down Expand Up @@ -698,7 +698,7 @@ class MainActivity : AppCompatActivity() {
.message(text = "File \"${currentSolution.target.name}\" already exists in destination. What's your action?")
.checkBoxPrompt(text = "Apply to all") { doForAll = it }
.listItems(items = mutableListOf("Replace", "Create New", "Skip Duplicate")) { _, index, _ ->
currentSolution.solution = FolderConflictCallback.ConflictResolution.entries[if (index > 0) index + 1 else index]
currentSolution.solution = SingleFolderConflictCallback.ConflictResolution.entries[if (index > 0) index + 1 else index]
newSolution.add(currentSolution)
if (doForAll) {
conflictedFiles.forEach { it.solution = currentSolution.solution }
Expand All @@ -711,33 +711,37 @@ class MainActivity : AppCompatActivity() {
.show()
}

private fun handleParentFolderConflict(destinationFolder: DocumentFile, action: FolderConflictCallback.ParentFolderConflictAction, canMerge: Boolean) {
private fun handleParentFolderConflict(
destinationFolder: DocumentFile,
action: SingleFolderConflictCallback.ParentFolderConflictAction,
canMerge: Boolean
) {
MaterialDialog(this)
.cancelable(false)
.title(text = "Conflict Found")
.message(text = "Folder \"${destinationFolder.name}\" already exists in destination. What's your action?")
.listItems(items = mutableListOf("Replace", "Merge", "Create New", "Skip Duplicate").apply { if (!canMerge) remove("Merge") }) { _, index, _ ->
val resolution = FolderConflictCallback.ConflictResolution.entries[if (!canMerge && index > 0) index + 1 else index]
val resolution = SingleFolderConflictCallback.ConflictResolution.entries[if (!canMerge && index > 0) index + 1 else index]
action.confirmResolution(resolution)
if (resolution == FolderConflictCallback.ConflictResolution.SKIP) {
if (resolution == SingleFolderConflictCallback.ConflictResolution.SKIP) {
Toast.makeText(this, "Skipped duplicate folders & files", Toast.LENGTH_SHORT).show()
}
}
.show()
}

private fun handleFolderContentConflict(
action: FolderConflictCallback.FolderContentConflictAction,
conflictedFiles: MutableList<FolderConflictCallback.FileConflict>
action: SingleFolderConflictCallback.FolderContentConflictAction,
conflictedFiles: MutableList<SingleFolderConflictCallback.FileConflict>
) {
val newSolution = ArrayList<FolderConflictCallback.FileConflict>(conflictedFiles.size)
val newSolution = ArrayList<SingleFolderConflictCallback.FileConflict>(conflictedFiles.size)
askSolution(action, conflictedFiles, newSolution)
}

private fun askSolution(
action: FolderConflictCallback.FolderContentConflictAction,
conflictedFiles: MutableList<FolderConflictCallback.FileConflict>,
newSolution: MutableList<FolderConflictCallback.FileConflict>
action: SingleFolderConflictCallback.FolderContentConflictAction,
conflictedFiles: MutableList<SingleFolderConflictCallback.FileConflict>,
newSolution: MutableList<SingleFolderConflictCallback.FileConflict>
) {
val currentSolution = conflictedFiles.removeFirstOrNull()
if (currentSolution == null) {
Expand Down
7 changes: 7 additions & 0 deletions storage/src/main/java/com/anggrayudi/storage/SimpleStorage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,13 @@ class SimpleStorage private constructor(private val wrapper: ComponentWrapper) {
if (requestCodeCreateFile == 0) {
requestCodeCreateFile = DEFAULT_REQUEST_CODE_CREATE_FILE
}

if (setOf(requestCodeFilePicker, requestCodeFolderPicker, requestCodeStorageAccess, requestCodeCreateFile).size < 4) {
throw IllegalArgumentException(
"Request codes must be unique. File picker=$requestCodeFilePicker, Folder picker=$requestCodeFolderPicker, " +
"Storage access=$requestCodeStorageAccess, Create file=$requestCodeCreateFile"
)
}
}

private fun saveUriPermission(root: Uri) = try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.anggrayudi.storage.callback

import androidx.annotation.UiThread
import androidx.documentfile.provider.DocumentFile
import com.anggrayudi.storage.callback.FolderConflictCallback.ConflictResolution
import com.anggrayudi.storage.callback.SingleFileConflictCallback.FileConflictAction
import com.anggrayudi.storage.callback.SingleFolderConflictCallback.ConflictResolution
import com.anggrayudi.storage.result.FolderErrorCode
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.CoroutineScope
Expand Down Expand Up @@ -49,8 +49,8 @@ abstract class MultipleFilesConflictCallback @OptIn(DelicateCoroutinesApi::class
@UiThread
open fun onContentConflict(
destinationParentFolder: DocumentFile,
conflictedFiles: MutableList<FolderConflictCallback.FileConflict>,
action: FolderConflictCallback.FolderContentConflictAction
conflictedFiles: MutableList<SingleFolderConflictCallback.FileConflict>,
action: SingleFolderConflictCallback.FolderContentConflictAction
) {
action.confirmResolution(conflictedFiles)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import kotlinx.coroutines.GlobalScope
* Created on 3/1/21
* @author Anggrayudi H
*/
abstract class FolderConflictCallback @OptIn(DelicateCoroutinesApi::class) @JvmOverloads constructor(
abstract class SingleFolderConflictCallback @OptIn(DelicateCoroutinesApi::class) @JvmOverloads constructor(
var uiScope: CoroutineScope = GlobalScope
) {

Expand Down
Loading

0 comments on commit 883c8de

Please sign in to comment.