Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Plugin migration to post Flutter 1.12 (#240)
Co-authored-by: Marina González <marinagonzalez@mindapps.se>
- Loading branch information
1 parent
4268721
commit 4f40a37
Showing
3 changed files
with
211 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
137 changes: 113 additions & 24 deletions
137
android/src/main/java/com/dooboolab/flutterinapppurchase/FlutterInappPurchasePlugin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,52 +1,141 @@ | ||
package com.dooboolab.flutterinapppurchase; | ||
|
||
import android.app.Activity; | ||
import android.content.Context; | ||
import android.content.pm.PackageManager; | ||
|
||
import io.flutter.plugin.common.MethodCall; | ||
import java.util.ArrayList; | ||
|
||
import androidx.annotation.NonNull; | ||
import io.flutter.embedding.engine.plugins.FlutterPlugin; | ||
import io.flutter.embedding.engine.plugins.activity.ActivityAware; | ||
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; | ||
import io.flutter.plugin.common.BinaryMessenger; | ||
import io.flutter.plugin.common.MethodChannel; | ||
import io.flutter.plugin.common.MethodChannel.MethodCallHandler; | ||
import io.flutter.plugin.common.MethodChannel.Result; | ||
import io.flutter.plugin.common.PluginRegistry.Registrar; | ||
|
||
/** FlutterInappPurchasePlugin */ | ||
public class FlutterInappPurchasePlugin implements MethodCallHandler { | ||
static AndroidInappPurchasePlugin androidPlugin; | ||
static AmazonInappPurchasePlugin amazonPlugin; | ||
private static Registrar mRegistrar; | ||
public class FlutterInappPurchasePlugin implements FlutterPlugin, ActivityAware { | ||
|
||
private AndroidInappPurchasePlugin androidInappPurchasePlugin; | ||
private AmazonInappPurchasePlugin amazonInappPurchasePlugin; | ||
private Context context; | ||
private MethodChannel channel; | ||
|
||
private static boolean isAndroid; | ||
private static boolean isAmazon; | ||
|
||
@Override | ||
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { | ||
context = binding.getApplicationContext(); | ||
isAndroid = isPackageInstalled(context, "com.android.vending"); | ||
isAmazon = isPackageInstalled(context, "com.amazon.venezia"); | ||
|
||
if (isAndroid) { | ||
androidInappPurchasePlugin = new AndroidInappPurchasePlugin(); | ||
androidInappPurchasePlugin.setContext(context); | ||
|
||
setupMethodChannel(binding.getBinaryMessenger(), androidInappPurchasePlugin); | ||
|
||
} else if(isAmazon) { | ||
amazonInappPurchasePlugin = new AmazonInappPurchasePlugin(); | ||
amazonInappPurchasePlugin.setContext(context); | ||
|
||
setupMethodChannel(binding.getBinaryMessenger(), amazonInappPurchasePlugin); | ||
} | ||
} | ||
|
||
FlutterInappPurchasePlugin() { | ||
androidPlugin = new AndroidInappPurchasePlugin(); | ||
amazonPlugin = new AmazonInappPurchasePlugin(); | ||
@Override | ||
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { | ||
if (isPackageInstalled(context, "com.android.vending")) { | ||
tearDownChannel(); | ||
} else if(isPackageInstalled(context, "com.amazon.venezia")) { | ||
tearDownChannel(); | ||
} | ||
} | ||
|
||
// Plugin registration. | ||
/** Plugin registration. */ | ||
public static void registerWith(Registrar registrar) { | ||
mRegistrar = registrar; | ||
if(isPackageInstalled(mRegistrar.context(), "com.android.vending")) { | ||
androidPlugin.registerWith(registrar); | ||
} else if(isPackageInstalled(mRegistrar.context(), "com.amazon.venezia")) { | ||
amazonPlugin.registerWith(registrar); | ||
FlutterInappPurchasePlugin plugin = new FlutterInappPurchasePlugin(); | ||
if(isAndroid) { | ||
AndroidInappPurchasePlugin androidInappPurchasePlugin = new AndroidInappPurchasePlugin(); | ||
androidInappPurchasePlugin.setContext(registrar.context()); | ||
androidInappPurchasePlugin.setActivity(registrar.activity()); | ||
|
||
plugin.setupMethodChannel(registrar.messenger(), androidInappPurchasePlugin); | ||
plugin.setAndroidInappPurchasePlugin(androidInappPurchasePlugin); | ||
} else if(isAmazon) { | ||
AmazonInappPurchasePlugin amazonInappPurchasePlugin = new AmazonInappPurchasePlugin(); | ||
amazonInappPurchasePlugin.setContext(registrar.context()); | ||
amazonInappPurchasePlugin.setActivity(registrar.activity()); | ||
|
||
plugin.setupMethodChannel(registrar.messenger(), amazonInappPurchasePlugin); | ||
plugin.setAmazonInappPurchasePlugin(amazonInappPurchasePlugin); | ||
} | ||
} | ||
|
||
@Override | ||
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) { | ||
if (isPackageInstalled(context, "com.android.vending")) { | ||
androidInappPurchasePlugin.setActivity(binding.getActivity()); | ||
} else if(isPackageInstalled(context, "com.amazon.venezia")) { | ||
amazonInappPurchasePlugin.setActivity(binding.getActivity()); | ||
} | ||
} | ||
|
||
@Override | ||
public void onDetachedFromActivity() { | ||
if (isPackageInstalled(context, "com.android.vending")) { | ||
androidInappPurchasePlugin.setActivity(null); | ||
androidInappPurchasePlugin.onDetachedFromActivity(); | ||
} else if(isPackageInstalled(context, "com.amazon.venezia")) { | ||
amazonInappPurchasePlugin.setActivity(null); | ||
} | ||
} | ||
|
||
@Override | ||
public void onMethodCall(final MethodCall call, final Result result) { | ||
if(isPackageInstalled(mRegistrar.context(), "com.android.vending")) { | ||
androidPlugin.onMethodCall(call, result); | ||
} else if(isPackageInstalled(mRegistrar.context(), "com.amazon.venezia")) { | ||
amazonPlugin.onMethodCall(call, result); | ||
} else result.notImplemented(); | ||
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) { | ||
onAttachedToActivity(binding); | ||
} | ||
|
||
public static final boolean isPackageInstalled(Context ctx, String packageName) { | ||
@Override | ||
public void onDetachedFromActivityForConfigChanges() { | ||
onDetachedFromActivity(); | ||
} | ||
|
||
private static boolean isPackageInstalled(Context ctx, String packageName) { | ||
try { | ||
ctx.getPackageManager().getPackageInfo(packageName, 0); | ||
} catch (PackageManager.NameNotFoundException e) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
|
||
private void setupMethodChannel(BinaryMessenger messenger, MethodChannel.MethodCallHandler handler) { | ||
channel = new MethodChannel(messenger, "flutter_inapp"); | ||
channel.setMethodCallHandler(handler); | ||
setChannelByPlatform(channel); | ||
} | ||
|
||
private void tearDownChannel() { | ||
channel.setMethodCallHandler(null); | ||
channel = null; | ||
setChannelByPlatform(null); | ||
} | ||
|
||
private void setChannelByPlatform(MethodChannel channel) { | ||
if(isAndroid) { | ||
androidInappPurchasePlugin.setChannel(channel); | ||
} else if (isAmazon) { | ||
amazonInappPurchasePlugin.setChannel(channel); | ||
} | ||
} | ||
|
||
private void setAndroidInappPurchasePlugin(AndroidInappPurchasePlugin androidInappPurchasePlugin) { | ||
this.androidInappPurchasePlugin = androidInappPurchasePlugin; | ||
} | ||
|
||
private void setAmazonInappPurchasePlugin(AmazonInappPurchasePlugin amazonInappPurchasePlugin) { | ||
this.amazonInappPurchasePlugin = amazonInappPurchasePlugin; | ||
} | ||
} |