@@ -119,36 +119,19 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
119119
120120 fun onSelectIntent (intent : Intent ) {
121121 Timber .d(" onActivityResultOk" )
122- _openAsProject .value = intent.getBooleanExtra(" openProject" , false )
123- val selectedFilePayload = selectedFileIntentPayload(intent)
124- if (selectedFilePayload != null ) {
125- onSelectFilePayload(selectedFilePayload)
126- return
127- }
128- val fi = intent.serializableExtraCompat<FileItem >(" fileItem" )
129- if (fi != null ) {
130- onSelectFileItem(fi)
131- } else {
132- val displayName = intent.getStringExtra(" displayName" )
133- val uri = intent.parcelableExtraCompat<Uri >(" uri" )
134- ? : intent.extras.parcelableExtraCompat(Intent .EXTRA_STREAM )
135- ? : return
136- onSelectUri(uri, displayName)
137- }
138- }
122+ when (val selection = resolveIncomingSelection(intent)) {
123+ is IncomingSelection .CompactFile -> {
124+ _openAsProject .value = selection.openAsProject
125+ onSelectFilePayload(selection.payload)
126+ }
139127
140- private fun onSelectFileItem (fileItem : FileItem ) {
141- val file = fileItem.file ? : run {
142- Logger .e(TAG , " Failed to load fileItem: $fileItem " )
143- return @onSelectFileItem
128+ is IncomingSelection .UriSelection -> {
129+ _openAsProject .value = selection.openAsProject
130+ onSelectUri(selection.uri, selection.displayName)
131+ }
132+
133+ null -> return
144134 }
145- onSelectFilePayload(
146- SelectedFileIntentPayload (
147- filePath = file.absolutePath,
148- nativeFilePath = (fileItem as ? FileItemApp )?.nativeFile?.absolutePath,
149- projectType = fileItemTypeToProjectType(fileItem)
150- )
151- )
152135 }
153136
154137 private fun onSelectFilePayload (payload : SelectedFileIntentPayload ) {
@@ -515,21 +498,62 @@ private inline fun <reified T : Parcelable> Bundle?.parcelableExtraCompat(key: S
515498 }
516499}
517500
518- private inline fun <reified T : java.io.Serializable > Intent.serializableExtraCompat (key : String ): T ? {
519- return if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
520- getSerializableExtra(key, T ::class .java)
521- } else {
522- @Suppress(" DEPRECATION" )
523- getSerializableExtra(key) as ? T
524- }
525- }
526-
527501internal data class SelectedFileIntentPayload (
528502 val filePath : String ,
529503 val nativeFilePath : String? ,
530504 val projectType : String
531505)
532506
507+ internal sealed class IncomingSelection {
508+ data class CompactFile (
509+ val payload : SelectedFileIntentPayload ,
510+ val openAsProject : Boolean
511+ ) : IncomingSelection()
512+
513+ data class UriSelection (
514+ val uri : Uri ,
515+ val displayName : String? ,
516+ val openAsProject : Boolean
517+ ) : IncomingSelection()
518+ }
519+
520+ internal fun resolveIncomingSelection (intent : Intent ): IncomingSelection ? {
521+ return resolveIncomingSelection(
522+ openAsProject = intent.getBooleanExtra(" openProject" , false ),
523+ filePath = intent.getStringExtra(NewFileChooserActivity .EXTRA_FILE_PATH ),
524+ nativeFilePath = intent.getStringExtra(NewFileChooserActivity .EXTRA_NATIVE_FILE_PATH ),
525+ projectType = intent.getStringExtra(NewFileChooserActivity .EXTRA_PROJECT_TYPE ),
526+ uri = intent.parcelableExtraCompat(" uri" ),
527+ extraStreamUri = intent.extras.parcelableExtraCompat(Intent .EXTRA_STREAM ),
528+ displayName = intent.getStringExtra(" displayName" )
529+ )
530+ }
531+
532+ internal fun resolveIncomingSelection (
533+ openAsProject : Boolean ,
534+ filePath : String? ,
535+ nativeFilePath : String? ,
536+ projectType : String? ,
537+ uri : Uri ? ,
538+ extraStreamUri : Uri ? ,
539+ displayName : String?
540+ ): IncomingSelection ? {
541+ val selectedFilePayload = selectedFileIntentPayload(
542+ filePath = filePath,
543+ nativeFilePath = nativeFilePath,
544+ projectType = projectType
545+ )
546+ if (selectedFilePayload != null ) {
547+ return IncomingSelection .CompactFile (selectedFilePayload, openAsProject)
548+ }
549+ val incomingUri = uri ? : extraStreamUri ? : return null
550+ return IncomingSelection .UriSelection (
551+ uri = incomingUri,
552+ displayName = displayName,
553+ openAsProject = openAsProject
554+ )
555+ }
556+
533557internal fun selectedFileIntentPayload (intent : Intent ): SelectedFileIntentPayload ? {
534558 return selectedFileIntentPayload(
535559 filePath = intent.getStringExtra(NewFileChooserActivity .EXTRA_FILE_PATH ),
0 commit comments