From 0ca10de1eed039aaf81c198b0a817b28a829ebfd Mon Sep 17 00:00:00 2001 From: Roman Zhilich Date: Thu, 5 Feb 2015 18:18:31 +0300 Subject: [PATCH] Workaround Amazon crash on Lollipop devices. #433 --- library/build.gradle | 2 +- .../java/org/onepf/oms/OpenIabHelper.java | 33 +++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/library/build.gradle b/library/build.gradle index 564e8664..716e1cc6 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -26,7 +26,7 @@ android { minSdkVersion project.minSdkVersion targetSdkVersion project.targetSdkVersion versionCode 10 - versionName '0.9.8.2' + versionName '0.9.8.5-SNAPSHOT' } lintOptions { diff --git a/library/src/main/java/org/onepf/oms/OpenIabHelper.java b/library/src/main/java/org/onepf/oms/OpenIabHelper.java index c0d67211..1f2ae280 100644 --- a/library/src/main/java/org/onepf/oms/OpenIabHelper.java +++ b/library/src/main/java/org/onepf/oms/OpenIabHelper.java @@ -58,6 +58,7 @@ import android.app.Activity; import android.content.ComponentName; import android.content.Context; +import android.content.ContextWrapper; import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.PackageManager; @@ -273,7 +274,27 @@ public Appstore get() { @NotNull @Override public Appstore get() { - return new AmazonAppstore(context); + return new AmazonAppstore(new ContextWrapper(context.getApplicationContext()){ + @Override + public Context getApplicationContext() { + return this; + } + + @Override + public ComponentName startService(final Intent intent) { + final List infos = getPackageManager().queryIntentServices(intent, 0); + if (infos.isEmpty()) { + return super.startService(intent); + } + final ResolveInfo serviceInfo = infos.get(0); + final String packageName = serviceInfo.serviceInfo.packageName; + final String className = serviceInfo.serviceInfo.name; + final ComponentName component = new ComponentName(packageName, className); + final Intent explicitIntent = new Intent(intent); + explicitIntent.setComponent(component); + return super.startService(explicitIntent); + } + }); } }); @@ -1148,11 +1169,11 @@ private void checkFortumo() { private void checkAmazon() { // As of Amazon In-App 2.0.1 PurchasingService.getUserData() crashes on Android API 21 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Logger.d("checkAmazon() Android Lollipop not supported, ignoring amazon wrapper."); - appStoreFactoryMap.remove(NAME_AMAZON); - return; - } +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// Logger.d("checkAmazon() Android Lollipop not supported, ignoring amazon wrapper."); +// appStoreFactoryMap.remove(NAME_AMAZON); +// return; +// } boolean amazonAvailable = false; try {