fixed silent crash when exiting after cancelled large transaction from item picking
This commit is contained in:
parent
3448a060db
commit
9aeb0a1fc3
3 changed files with 15 additions and 2 deletions
|
@ -56,6 +56,7 @@ import deckers.thibault.aves.channel.streams.MediaStoreStreamHandler
|
||||||
import deckers.thibault.aves.channel.streams.SettingsChangeStreamHandler
|
import deckers.thibault.aves.channel.streams.SettingsChangeStreamHandler
|
||||||
import deckers.thibault.aves.model.FieldMap
|
import deckers.thibault.aves.model.FieldMap
|
||||||
import deckers.thibault.aves.utils.LogUtils
|
import deckers.thibault.aves.utils.LogUtils
|
||||||
|
import deckers.thibault.aves.utils.anyCauseIs
|
||||||
import deckers.thibault.aves.utils.getParcelableExtraCompat
|
import deckers.thibault.aves.utils.getParcelableExtraCompat
|
||||||
import io.flutter.embedding.android.FlutterFragmentActivity
|
import io.flutter.embedding.android.FlutterFragmentActivity
|
||||||
import io.flutter.embedding.engine.FlutterEngine
|
import io.flutter.embedding.engine.FlutterEngine
|
||||||
|
@ -466,6 +467,7 @@ open class MainActivity : FlutterFragmentActivity() {
|
||||||
setResult(RESULT_OK, intent)
|
setResult(RESULT_OK, intent)
|
||||||
finish()
|
finish()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
setResult(RESULT_CANCELED)
|
||||||
if (e is SecurityException && intent.flags and Intent.FLAG_GRANT_WRITE_URI_PERMISSION != 0) {
|
if (e is SecurityException && intent.flags and Intent.FLAG_GRANT_WRITE_URI_PERMISSION != 0) {
|
||||||
// in some environments, providing the write flag yields a `SecurityException`:
|
// in some environments, providing the write flag yields a `SecurityException`:
|
||||||
// "UID XXXX does not have permission to content://XXXX"
|
// "UID XXXX does not have permission to content://XXXX"
|
||||||
|
@ -473,7 +475,7 @@ open class MainActivity : FlutterFragmentActivity() {
|
||||||
Log.i(LOG_TAG, "retry submitting picked items without FLAG_GRANT_WRITE_URI_PERMISSION")
|
Log.i(LOG_TAG, "retry submitting picked items without FLAG_GRANT_WRITE_URI_PERMISSION")
|
||||||
intent.flags = intent.flags and Intent.FLAG_GRANT_WRITE_URI_PERMISSION.inv()
|
intent.flags = intent.flags and Intent.FLAG_GRANT_WRITE_URI_PERMISSION.inv()
|
||||||
submitPickedItemsIntent(intent, result)
|
submitPickedItemsIntent(intent, result)
|
||||||
} else if (e is TransactionTooLargeException || e.cause is TransactionTooLargeException) {
|
} else if (e.anyCauseIs<TransactionTooLargeException>()) {
|
||||||
result.error("submitPickedItems-large", "transaction too large with ${intent.clipData?.itemCount} URIs", e)
|
result.error("submitPickedItems-large", "transaction too large with ${intent.clipData?.itemCount} URIs", e)
|
||||||
} else {
|
} else {
|
||||||
result.error("submitPickedItems-exception", "failed to pick ${intent.clipData?.itemCount} URIs", e)
|
result.error("submitPickedItems-exception", "failed to pick ${intent.clipData?.itemCount} URIs", e)
|
||||||
|
|
|
@ -39,6 +39,7 @@ import deckers.thibault.aves.model.FieldMap
|
||||||
import deckers.thibault.aves.utils.BitmapUtils
|
import deckers.thibault.aves.utils.BitmapUtils
|
||||||
import deckers.thibault.aves.utils.BitmapUtils.getBytes
|
import deckers.thibault.aves.utils.BitmapUtils.getBytes
|
||||||
import deckers.thibault.aves.utils.LogUtils
|
import deckers.thibault.aves.utils.LogUtils
|
||||||
|
import deckers.thibault.aves.utils.anyCauseIs
|
||||||
import deckers.thibault.aves.utils.getApplicationInfoCompat
|
import deckers.thibault.aves.utils.getApplicationInfoCompat
|
||||||
import deckers.thibault.aves.utils.queryIntentActivitiesCompat
|
import deckers.thibault.aves.utils.queryIntentActivitiesCompat
|
||||||
import io.flutter.plugin.common.MethodCall
|
import io.flutter.plugin.common.MethodCall
|
||||||
|
@ -307,7 +308,7 @@ class AppAdapterHandler(private val context: Context) : MethodCallHandler {
|
||||||
val started = safeStartActivityChooser(title, intent)
|
val started = safeStartActivityChooser(title, intent)
|
||||||
result.success(started)
|
result.success(started)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
if (e is TransactionTooLargeException || e.cause is TransactionTooLargeException) {
|
if (e.anyCauseIs<TransactionTooLargeException>()) {
|
||||||
result.error("share-large", "transaction too large with ${uriList.size} URIs", e)
|
result.error("share-large", "transaction too large with ${uriList.size} URIs", e)
|
||||||
} else {
|
} else {
|
||||||
result.error("share-exception", "failed to share ${uriList.size} URIs", e)
|
result.error("share-exception", "failed to share ${uriList.size} URIs", e)
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package deckers.thibault.aves.utils
|
||||||
|
|
||||||
|
inline fun <reified T : Throwable> Exception.anyCauseIs(): Boolean {
|
||||||
|
var cause: Throwable? = this
|
||||||
|
while (cause != null) {
|
||||||
|
if (cause is T) return true
|
||||||
|
cause = cause.cause
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
Loading…
Reference in a new issue