diff --git a/android/build.gradle b/android/build.gradle index 6baa55d..2e1f57f 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -20,6 +20,7 @@ def isNewArchitectureEnabled() { apply plugin: "com.android.library" apply plugin: "kotlin-android" +apply plugin: "kotlin-parcelize" if (isNewArchitectureEnabled()) { apply plugin: "com.facebook.react" diff --git a/android/src/main/java/com/reactNativeQuickActions/AppShortcutsModule.kt b/android/src/main/java/com/reactNativeQuickActions/AppShortcutsModule.kt index 3ceba92..1a10968 100644 --- a/android/src/main/java/com/reactNativeQuickActions/AppShortcutsModule.kt +++ b/android/src/main/java/com/reactNativeQuickActions/AppShortcutsModule.kt @@ -6,7 +6,7 @@ import android.content.Intent import android.content.pm.ShortcutManager import android.net.Uri import android.os.Build -import android.os.PersistableBundle +import androidx.core.content.IntentCompat import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat @@ -22,7 +22,6 @@ import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.WritableMap import com.facebook.react.module.annotations.ReactModule import com.facebook.react.modules.core.DeviceEventManagerModule -import com.reactNativeQuickActions.ShortcutItem.Companion.fromPersistableBundle import com.reactNativeQuickActions.ShortcutItem.Companion.fromReadableArray @ReactModule(name = AppShortcutsModule.REACT_NAME) @@ -52,10 +51,9 @@ internal class AppShortcutsModule(reactContext: ReactApplicationContext) : React if (currentActivity != null) { val intent = currentActivity.intent if (ACTION_SHORTCUT == intent.action) { - val bundle = intent.getParcelableExtra(SHORTCUT_ITEM) - if (bundle != null) { - val item = fromPersistableBundle(bundle) - map = item.toWritableMap() + val shortcutItem: ShortcutItem? = IntentCompat.getParcelableExtra(intent, SHORTCUT_ITEM, ShortcutItem::class.java) + if (shortcutItem != null) { + map = shortcutItem.toWritableMap() } } } @@ -95,8 +93,11 @@ internal class AppShortcutsModule(reactContext: ReactApplicationContext) : React Intent(Intent.ACTION_VIEW, uri) } else { Intent(context, activity.javaClass) + .setAction(ACTION_SHORTCUT) } + intent.putExtra(SHORTCUT_ITEM, item) + return ShortcutInfoCompat.Builder(context, id) .setShortLabel(item.title) .setLongLabel(item.title) @@ -126,11 +127,7 @@ internal class AppShortcutsModule(reactContext: ReactApplicationContext) : React if (ACTION_SHORTCUT != intent.action || !isShortcutSupported) { return } - var item: ShortcutItem? = null - val bundle = intent.getParcelableExtra(SHORTCUT_ITEM) - if (bundle != null) { - item = fromPersistableBundle(bundle) - } + val item: ShortcutItem? = IntentCompat.getParcelableExtra(intent, SHORTCUT_ITEM, ShortcutItem::class.java) if (item != null) { reactApplicationContext .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) diff --git a/android/src/main/java/com/reactNativeQuickActions/ShortcutItem.kt b/android/src/main/java/com/reactNativeQuickActions/ShortcutItem.kt index aa321e0..a26cd3a 100644 --- a/android/src/main/java/com/reactNativeQuickActions/ShortcutItem.kt +++ b/android/src/main/java/com/reactNativeQuickActions/ShortcutItem.kt @@ -1,26 +1,19 @@ package com.reactNativeQuickActions -import android.os.PersistableBundle +import android.os.Parcelable import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableMap +import kotlinx.parcelize.Parcelize +@Parcelize data class ShortcutItem( val type: String? = null, val title: String, val icon: String? = null, val userInfo: UserInfo? = null -) { - - fun toPersistableBundle(): PersistableBundle { - val bundle = PersistableBundle() - bundle.putString("type", type) - bundle.putString("title", title) - bundle.putString("icon", icon) - bundle.putPersistableBundle("userInfo", userInfo!!.toPersistableBundle()) - return bundle - } +) : Parcelable { fun toWritableMap(): WritableMap { val map = Arguments.createMap() @@ -57,14 +50,5 @@ data class ShortcutItem( ) } - @JvmStatic - fun fromPersistableBundle(bundle: PersistableBundle): ShortcutItem { - return ShortcutItem( - type = bundle.getString("type"), - title = bundle.requireString("title"), - icon = bundle.getString("icon"), - userInfo = UserInfo.fromPersistableBundle(bundle.getPersistableBundle("userInfo")) - ) - } } } diff --git a/android/src/main/java/com/reactNativeQuickActions/UserInfo.kt b/android/src/main/java/com/reactNativeQuickActions/UserInfo.kt index 6352e86..83f39ec 100644 --- a/android/src/main/java/com/reactNativeQuickActions/UserInfo.kt +++ b/android/src/main/java/com/reactNativeQuickActions/UserInfo.kt @@ -1,18 +1,16 @@ package com.reactNativeQuickActions +import android.os.Parcelable import android.os.PersistableBundle import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableMap +import kotlinx.parcelize.Parcelize +@Parcelize data class UserInfo( val url: String? = null -) { - fun toPersistableBundle(): PersistableBundle { - val bundle = PersistableBundle() - bundle.putString("url", url) - return bundle - } +) : Parcelable { fun toWritableMap(): WritableMap { val map = Arguments.createMap()