@@ -21,14 +21,15 @@ import androidx.core.view.setPadding
2121import androidx.lifecycle.lifecycleScope
2222import com.android.volley.*
2323import com.android.volley.toolbox.Volley
24+ import com.google.android.gms.common.internal.safeparcel.SafeParcelableSerializer
25+ import com.google.firebase.dynamiclinks.internal.DynamicLinkData
2426import com.squareup.wire.Message
2527import com.squareup.wire.ProtoAdapter
2628import kotlinx.coroutines.CompletableDeferred
2729import okio.ByteString.Companion.decodeHex
2830import org.microg.gms.appinvite.*
2931import org.microg.gms.common.Constants
3032import org.microg.gms.utils.singleInstanceOf
31- import org.microg.gms.utils.toBase64
3233import java.util.*
3334
3435private const val TAG = " AppInviteActivity"
@@ -37,6 +38,7 @@ private const val APPINVITE_DEEP_LINK = "com.google.android.gms.appinvite.DEEP_L
3738private const val APPINVITE_INVITATION_ID = " com.google.android.gms.appinvite.INVITATION_ID"
3839private const val APPINVITE_OPENED_FROM_PLAY_STORE = " com.google.android.gms.appinvite.OPENED_FROM_PLAY_STORE"
3940private const val APPINVITE_REFERRAL_BUNDLE = " com.google.android.gms.appinvite.REFERRAL_BUNDLE"
41+ private const val DYNAMIC_LINK_DATA = " com.google.firebase.dynamiclinks.DYNAMIC_LINK_DATA"
4042
4143class AppInviteActivity : AppCompatActivity () {
4244 private val queue by lazy { singleInstanceOf { Volley .newRequestQueue(applicationContext) } }
@@ -71,6 +73,8 @@ class AppInviteActivity : AppCompatActivity() {
7173 }
7274
7375 private fun open (appInviteLink : MutateAppInviteLinkResponse ) {
76+ val dynamicLinkData = DynamicLinkData (appInviteLink.metadata?.info?.url, appInviteLink.data_?.intentData,
77+ (appInviteLink.data_?.app?.minAppVersion ? : 0 ).toInt(), System .currentTimeMillis(), null , null )
7478 val intent = Intent (Intent .ACTION_VIEW ).apply {
7579 addCategory(Intent .CATEGORY_DEFAULT )
7680 data = appInviteLink.data_?.intentData?.let { Uri .parse(it) }
@@ -83,17 +87,31 @@ class AppInviteActivity : AppCompatActivity() {
8387 APPINVITE_OPENED_FROM_PLAY_STORE to false
8488 )
8589 )
90+ putExtra(DYNAMIC_LINK_DATA , SafeParcelableSerializer .serializeToBytes(dynamicLinkData))
8691 }
8792 val fallbackIntent = Intent (Intent .ACTION_VIEW ).apply {
8893 addCategory(Intent .CATEGORY_DEFAULT )
8994 data = appInviteLink.data_?.fallbackUrl?.let { Uri .parse(it) }
9095 }
9196 val installedVersionCode = runCatching {
92- intent.resolveActivity(packageManager)?.let {
93- PackageInfoCompat .getLongVersionCode(packageManager.getPackageInfo(it.packageName, 0 ))
97+ if (appInviteLink.data_?.packageName != null ) {
98+ PackageInfoCompat .getLongVersionCode(packageManager.getPackageInfo(appInviteLink.data_.packageName, 0 ))
99+ } else {
100+ null
94101 }
95102 }.getOrNull()
96103 if (installedVersionCode != null && (appInviteLink.data_?.app?.minAppVersion == null || installedVersionCode >= appInviteLink.data_.app.minAppVersion)) {
104+ val componentName = intent.resolveActivity(packageManager)
105+ if (componentName == null ) {
106+ Log .w(TAG , " open resolve activity is null" )
107+ if (appInviteLink.data_?.packageName != null ) {
108+ val intentLaunch =
109+ packageManager.getLaunchIntentForPackage(appInviteLink.data_.packageName)
110+ if (intentLaunch != null ) {
111+ intent.setComponent(intentLaunch.component)
112+ }
113+ }
114+ }
97115 startActivity(intent)
98116 finish()
99117 } else {
0 commit comments