add app_review
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
|
||||
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,8 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/workspace.xml
|
||||
/.idea/libraries
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
@@ -0,0 +1,39 @@
|
||||
group 'com.appleeducate.appreview'
|
||||
version '1.0-SNAPSHOT'
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.2.0'
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 16
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
lintOptions {
|
||||
disable 'InvalidPackage'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'com.google.android.play:core:1.10.3'
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
android.enableJetifier=true
|
||||
android.useAndroidX=true
|
||||
org.gradle.jvmargs=-Xmx1536M
|
||||
@@ -0,0 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@@ -0,0 +1 @@
|
||||
rootProject.name = 'app_review'
|
||||
@@ -0,0 +1,3 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.appleeducate.appreview">
|
||||
</manifest>
|
||||
+158
@@ -0,0 +1,158 @@
|
||||
package com.appleeducate.appreview;
|
||||
|
||||
import android.app.Activity;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.android.play.core.review.ReviewInfo;
|
||||
import com.google.android.play.core.review.ReviewManager;
|
||||
import com.google.android.play.core.review.ReviewManagerFactory;
|
||||
import com.google.android.play.core.tasks.OnCompleteListener;
|
||||
import com.google.android.play.core.tasks.Task;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
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.MethodCall;
|
||||
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;
|
||||
|
||||
/** AppReviewPlugin */
|
||||
public class AppReviewPlugin implements FlutterPlugin, MethodCallHandler, ActivityAware {
|
||||
private static final String CHANNEL_NAME = "app_review";
|
||||
|
||||
private WeakReference<Activity> currentActivity;
|
||||
|
||||
private MethodChannel channel;
|
||||
|
||||
@Nullable
|
||||
private ReviewInfo reviewInfo;
|
||||
|
||||
public AppReviewPlugin() {
|
||||
}
|
||||
|
||||
/** Plugin registration. */
|
||||
public static void registerWith(Registrar registrar) {
|
||||
AppReviewPlugin simplePermissionsPlugin = new AppReviewPlugin();
|
||||
simplePermissionsPlugin.setupChannel(registrar.messenger());
|
||||
// registrar.addRequestPermissionsResultListener(simplePermissionsPlugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
|
||||
setupChannel(binding.getBinaryMessenger());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
|
||||
teardownChannel();
|
||||
}
|
||||
|
||||
private void setupChannel(BinaryMessenger messenger) {
|
||||
channel = new MethodChannel(messenger, CHANNEL_NAME);
|
||||
channel.setMethodCallHandler(this);
|
||||
}
|
||||
|
||||
private void teardownChannel() {
|
||||
channel.setMethodCallHandler(null);
|
||||
channel = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMethodCall(MethodCall call, @NonNull Result result) {
|
||||
String method = call.method;
|
||||
switch (method) {
|
||||
case "isRequestReviewAvailable":
|
||||
isRequestReviewAvailable(result);
|
||||
break;
|
||||
case "requestReview":
|
||||
requestReview(result);
|
||||
break;
|
||||
default:
|
||||
result.notImplemented();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void isRequestReviewAvailable(final Result result) {
|
||||
if (currentActivity == null || currentActivity.get() == null) {
|
||||
result.error("error", "Android activity not available", null);
|
||||
return;
|
||||
}
|
||||
ReviewManager manager = ReviewManagerFactory.create(currentActivity.get());
|
||||
Task<ReviewInfo> request = manager.requestReviewFlow();
|
||||
request.addOnCompleteListener(new OnCompleteListener<ReviewInfo>() {
|
||||
@Override
|
||||
public void onComplete(@NonNull Task<ReviewInfo> task) {
|
||||
if (task.isSuccessful()) {
|
||||
reviewInfo = task.getResult();
|
||||
result.success("1");
|
||||
} else {
|
||||
result.success("0");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void requestReview(final Result result) {
|
||||
if (currentActivity == null || currentActivity.get() == null) {
|
||||
result.error("error", "Android activity not available", null);
|
||||
return;
|
||||
}
|
||||
if (reviewInfo == null) {
|
||||
getReviewInfoAndRequestReview(result);
|
||||
return;
|
||||
}
|
||||
ReviewManager manager = ReviewManagerFactory.create(currentActivity.get());
|
||||
Task<Void> task = manager.launchReviewFlow(currentActivity.get(), reviewInfo);
|
||||
task.addOnCompleteListener(new OnCompleteListener<Void>() {
|
||||
@Override
|
||||
public void onComplete(@NonNull Task<Void> task) {
|
||||
result.success("Success: " + task.isSuccessful());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void getReviewInfoAndRequestReview(final Result result) {
|
||||
ReviewManager manager = ReviewManagerFactory.create(currentActivity.get());
|
||||
Task<ReviewInfo> request = manager.requestReviewFlow();
|
||||
request.addOnCompleteListener(new OnCompleteListener<ReviewInfo>() {
|
||||
@Override
|
||||
public void onComplete(@NonNull Task<ReviewInfo> task) {
|
||||
if (task.isSuccessful()) {
|
||||
reviewInfo = task.getResult();
|
||||
requestReview(result);
|
||||
} else {
|
||||
result.error("Requesting review not possible", null, null);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
|
||||
currentActivity = new WeakReference<>(binding.getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromActivityForConfigChanges() {
|
||||
onDetachedFromActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
|
||||
onAttachedToActivity(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromActivity() {
|
||||
currentActivity = null;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user