@@ -9,17 +9,15 @@ package com.fox2code.mmm.utils
99import android.annotation.SuppressLint
1010import android.app.Activity
1111import android.content.ActivityNotFoundException
12- import android.content.ContentResolver
1312import android.content.Context
1413import android.content.ContextWrapper
1514import android.content.Intent
1615import android.net.Uri
1716import android.os.Bundle
18- import android.os.Environment
1917import android.util.TypedValue
2018import android.widget.Toast
21- import androidx.activity.result.contract.ActivityResultContracts
2219import androidx.appcompat.app.AppCompatActivity
20+ import androidx.core.app.ActivityCompat.startActivityForResult
2321import androidx.core.app.ActivityOptionsCompat
2422import com.fox2code.mmm.BuildConfig
2523import com.fox2code.mmm.Constants
@@ -31,17 +29,11 @@ import com.fox2code.mmm.XHooks.Companion.isModuleActive
3129import com.fox2code.mmm.androidacy.AndroidacyActivity
3230import com.fox2code.mmm.installer.InstallerActivity
3331import com.fox2code.mmm.markdown.MarkdownActivity
34- import com.fox2code.mmm.utils.io.Files.Companion.closeSilently
35- import com.fox2code.mmm.utils.io.Files.Companion.copy
3632import com.fox2code.mmm.utils.io.net.Http.Companion.hasWebView
3733import com.topjohnwu.superuser.CallbackList
3834import com.topjohnwu.superuser.Shell
39- import com.topjohnwu.superuser.io.SuFileInputStream
4035import timber.log.Timber
4136import java.io.File
42- import java.io.FileOutputStream
43- import java.io.InputStream
44- import java.io.OutputStream
4537import java.net.URISyntaxException
4638
4739@Suppress(" unused" )
@@ -372,69 +364,15 @@ enum class IntentHelper {;
372364 callback.onReceived(destination, null , RESPONSE_ERROR )
373365 return
374366 }
375- val intent = Intent (Intent .ACTION_GET_CONTENT ).setType(" application/zip" )
376- intent.flags = intent.flags and Intent .FLAG_ACTIVITY_NEW_TASK .inv ()
377- intent.putExtra(Intent .EXTRA_ALLOW_MULTIPLE , false )
378- intent.putExtra(Intent .EXTRA_LOCAL_ONLY , false )
379- intent.addCategory(Intent .CATEGORY_OPENABLE )
380- compatActivity.registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { result ->
381- val resultCode = result.resultCode
382- val data: Intent ? = result.data
383- val uri = data?.data
384- if (uri == null || resultCode == Activity .RESULT_CANCELED ) {
385- if (BuildConfig .DEBUG ) Timber .d(" invalid uri received" )
386- callback.onReceived(destination, null , RESPONSE_ERROR )
387- return @registerForActivityResult
388- }
389- Timber .i(" FilePicker returned %s" , uri)
390- if (" http" == uri.scheme || " https" == uri.scheme) {
391- callback.onReceived(destination, uri, RESPONSE_URL )
392- return @registerForActivityResult
393- }
394- if (ContentResolver .SCHEME_FILE == uri.scheme || resultCode != Activity .RESULT_OK && resultCode != Activity .RESULT_FIRST_USER ) {
395- Toast .makeText(
396- compatActivity, R .string.file_picker_wierd, Toast .LENGTH_SHORT
397- ).show()
398- }
399- var inputStream: InputStream ? = null
400- var outputStream: OutputStream ? = null
401- var success = false
402- try {
403- if (ContentResolver .SCHEME_FILE == uri.scheme) {
404- var path = uri.path
405- if (path!! .startsWith(" /sdcard/" )) { // Fix file paths
406- path =
407- Environment .getExternalStorageDirectory().absolutePath + path.substring(
408- 7
409- )
410- }
411- inputStream = SuFileInputStream .open(
412- File (path).absoluteFile
413- )
414- } else {
415- inputStream = compatActivity.contentResolver.openInputStream(uri)
416- }
417- outputStream = FileOutputStream (destination)
418- if (inputStream != null ) {
419- copy(inputStream, outputStream)
420- }
421- Timber .i(" File saved at %s" , destination)
422- success = true
423- } catch (e: Exception ) {
424- Timber .e(e)
425- Toast .makeText(
426- compatActivity, R .string.file_picker_failure, Toast .LENGTH_SHORT
427- ).show()
428- } finally {
429- closeSilently(inputStream)
430- closeSilently(outputStream)
431- if (! success && destination.exists() && ! destination.delete()) Timber .e(" Failed to delete artefact!" )
432- }
433- callback.onReceived(
434- destination, uri, if (success) RESPONSE_FILE else RESPONSE_ERROR
435- )
436- }.launch(intent)
367+ // start file picker by registering for result. call callback with file and appropriate response
368+ // do not use startActivityForResult, it is deprecated
369+ val intent = Intent ()
370+ .setType(" application/zip" )
371+ .setAction(Intent .ACTION_GET_CONTENT )
437372
373+ startActivityForResult(
374+ compatActivity, intent, RESPONSE_FILE , null
375+ )
438376 }
439377
440378 fun openFileTo (compatActivity : AppCompatActivity , module : File , function : (File , Uri , Int ) -> Unit ) {
0 commit comments