Skip to content

Commit

Permalink
🔀 Merge pull request #131 from vinceglb/127-when-swiping-bottom-sheet…
Browse files Browse the repository at this point in the history
…-in-ios-the-event-not-generated

🐛 Fix "swiping bottom sheet in iOS the event is not generated"
  • Loading branch information
vinceglb authored Oct 4, 2024
2 parents 2385d9e + cddefaf commit e6eda05
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package io.github.vinceglb.filekit.core

import io.github.vinceglb.filekit.core.util.DocumentPickerDelegate
import io.github.vinceglb.filekit.core.util.PhPickerDelegate
import io.github.vinceglb.filekit.core.util.PhPickerDismissDelegate
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
Expand All @@ -23,6 +24,7 @@ import platform.UIKit.UIDocumentPickerViewController
import platform.UIKit.UISceneActivationStateForegroundActive
import platform.UIKit.UIWindow
import platform.UIKit.UIWindowScene
import platform.UIKit.presentationController
import platform.UniformTypeIdentifiers.UTType
import platform.UniformTypeIdentifiers.UTTypeContent
import platform.UniformTypeIdentifiers.UTTypeFolder
Expand All @@ -35,6 +37,7 @@ public actual object FileKit {
// Create a reference to the picker delegate to prevent it from being garbage collected
private lateinit var documentPickerDelegate: DocumentPickerDelegate
private lateinit var phPickerDelegate: PhPickerDelegate
private lateinit var phPickerDismissDelegate: PhPickerDismissDelegate

public actual suspend fun <Out> pickFile(
type: PickerType,
Expand Down Expand Up @@ -111,7 +114,7 @@ public actual object FileKit {

// Create a picker controller
val pickerController = UIDocumentPickerViewController(
forExportingURLs = listOf(fileUrl)
forExportingURLs = listOf(fileUrl),
)

// Set the initial directory
Expand Down Expand Up @@ -144,8 +147,9 @@ public actual object FileKit {
)

// Create a picker controller
val pickerController =
UIDocumentPickerViewController(forOpeningContentTypes = contentTypes)
val pickerController = UIDocumentPickerViewController(
forOpeningContentTypes = contentTypes,
)

// Set the initial directory
initialDirectory?.let { pickerController.directoryURL = NSURL.fileURLWithPath(it) }
Expand Down Expand Up @@ -175,6 +179,9 @@ public actual object FileKit {
phPickerDelegate = PhPickerDelegate(
onFilesPicked = continuation::resume
)
phPickerDismissDelegate = PhPickerDismissDelegate(
onFilesPicked = continuation::resume
)

// Define configuration
val configuration = PHPickerConfiguration(sharedPhotoLibrary())
Expand Down Expand Up @@ -202,6 +209,7 @@ public actual object FileKit {
// Create a picker controller
val controller = PHPickerViewController(configuration = configuration)
controller.delegate = phPickerDelegate
controller.presentationController?.delegate = phPickerDismissDelegate

// Present the picker controller
UIApplication.sharedApplication.firstKeyWindow?.rootViewController?.presentViewController(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.github.vinceglb.filekit.core.util

import platform.PhotosUI.PHPickerResult
import platform.UIKit.UIAdaptivePresentationControllerDelegateProtocol
import platform.UIKit.UIPresentationController
import platform.darwin.NSObject

internal class PhPickerDismissDelegate(
private val onFilesPicked: (List<PHPickerResult>) -> Unit
) : NSObject(),
UIAdaptivePresentationControllerDelegateProtocol {
override fun presentationControllerDidDismiss(presentationController: UIPresentationController) {
onFilesPicked(listOf())
}
}

0 comments on commit e6eda05

Please sign in to comment.