-
Notifications
You must be signed in to change notification settings - Fork 190
/
Copy pathAppRate.java
74 lines (70 loc) · 3.17 KB
/
AppRate.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package org.pushandplay.cordova.apprate;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.LOG;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import android.app.Activity;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageManager;
import android.content.pm.ApplicationInfo;
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.Task;
public class AppRate extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
try {
if (action.equals("isNativePromptAvailable")) {
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, true);
callbackContext.sendPluginResult(pluginResult);
return true;
}
if (action.equals("getAppVersion")) {
PackageManager packageManager = this.cordova.getActivity().getPackageManager();
callbackContext.success(packageManager.getPackageInfo(this.cordova.getActivity().getPackageName(), 0).versionName);
return true;
}
if (action.equals("getAppTitle")) {
PackageManager packageManager = this.cordova.getActivity().getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(this.cordova.getActivity().getApplicationContext().getApplicationInfo().packageName, 0);
final String applicationName = (String) (applicationInfo != null ? packageManager.getApplicationLabel(applicationInfo) : "Unknown");
callbackContext.success(applicationName);
return true;
}
if (action.equals("launchReview")) {
Activity activity = this.cordova.getActivity();
ReviewManager manager = ReviewManagerFactory.create(activity);
Task<ReviewInfo> request = manager.requestReviewFlow();
request.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
LOG.d("AppRate", "request review success");
ReviewInfo reviewInfo = task.getResult();
Task<Void> flow = manager.launchReviewFlow(activity, reviewInfo);
flow.addOnCompleteListener(launchTask -> {
if (task.isSuccessful()) {
LOG.d("AppRate", "launch review success");
callbackContext.success();
} else {
Exception error = task.getException();
LOG.d("AppRate", "Failed to launch review", error);
callbackContext.error("Failed to launch review - " + error.getMessage());
}
});
} else {
Exception error = task.getException();
LOG.d("AppRate", "Failed to launch review", error);
callbackContext.error("Failed to launch review flow - " + error.getMessage());
}
});
return true;
}
return false;
} catch (NameNotFoundException e) {
callbackContext.success("N/A");
return true;
}
}
}