diff --git a/plugin.xml b/plugin.xml
index e998bb2..46ff786 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -8,13 +8,28 @@
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -23,6 +38,8 @@
+
+
@@ -32,10 +49,16 @@
-
-
+
+
+
-
+
+
+
+
+
+
diff --git a/src/android/src/main/AndroidManifest.xml b/src/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..f9572c8
--- /dev/null
+++ b/src/android/src/main/AndroidManifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/android/CDVRoam.java b/src/android/src/main/java/com/roam/cordova/CDVRoam.java
similarity index 88%
rename from src/android/CDVRoam.java
rename to src/android/src/main/java/com/roam/cordova/CDVRoam.java
index 371b62e..b0149d9 100644
--- a/src/android/CDVRoam.java
+++ b/src/android/src/main/java/com/roam/cordova/CDVRoam.java
@@ -1,15 +1,11 @@
package com.roam.cordova;
-import android.Manifest;
import android.app.Activity;
-import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
-import android.os.Build;
-import android.provider.Settings;
-import androidx.annotation.NonNull;
+import android.util.Log;
import com.google.gson.GsonBuilder;
import com.roam.sdk.Roam;
@@ -26,21 +22,16 @@
import com.roam.sdk.service.RoamReceiver;
import org.apache.cordova.CallbackContext;
-import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
-import org.apache.cordova.CordovaWebView;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
-import org.json.JSONObject;
public class CDVRoam extends CordovaPlugin {
private static CallbackContext locationCallbackContext;
private static CallbackContext eventsCallbackContext;
private static CallbackContext errorCallbackContext;
- private static CallbackContext permissionCallbackContext;
- private Activity context;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
@@ -58,7 +49,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
return true;
case "requestLocationPermission":
- this.requestLocationPermission(callbackContext);
+ this.requestLocationPermission();
return true;
case "checkLocationServices":
@@ -66,7 +57,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
return true;
case "requestLocationServices":
- this.requestLocationServices(callbackContext);
+ this.requestLocationServices();
return true;
case "checkBackgroundLocationPermission":
@@ -74,7 +65,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
return true;
case "requestBackgroundLocationPermission":
- this.requestBackgroundLocationPermission(callbackContext);
+ this.requestBackgroundLocationPermission();
return true;
case "getDeviceToken":
@@ -123,6 +114,15 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
this.toggleEvents(geofenceEvents, tripEvents, locationEvents, movingGeofenceEvents, callbackContext);
return true;
+ case "setForegroundNotification":
+ boolean enabled = args.getBoolean(0);
+ String notificationTitle = args.getString(1);
+ String notificationDescription = args.getString(2);
+ String notificationIcon = args.getString(3);
+ String notificationActivity = args.getString(4);
+ this.setForegroundNotification(enabled, notificationTitle, notificationDescription, notificationIcon, notificationActivity);
+ return true;
+
case "getEventsStatus":
this.getEventsStatus(callbackContext);
return true;
@@ -161,7 +161,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
case "startTrackingDistanceInterval":
int distance = args.getInt(0);
int stationary = args.getInt(1);
- String dDesiredAccuracy = args.getString(3);
+ String dDesiredAccuracy = args.getString(2);
this.startTrackingDistanceInterval(distance, stationary, dDesiredAccuracy);
case "publishAndSave":
@@ -232,10 +232,8 @@ private void checkLocationPermission(CallbackContext callbackContext) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, status));
}
- private void requestLocationPermission(CallbackContext callbackContext) {
- permissionCallbackContext = callbackContext;
- String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
- cordova.requestPermissions(this, Roam.REQUEST_CODE_LOCATION_PERMISSION, permissions);
+ private void requestLocationPermission() {
+ Roam.requestLocationPermission(cordova.getActivity());
}
private void checkLocationServices(CallbackContext callbackContext) {
@@ -243,9 +241,8 @@ private void checkLocationServices(CallbackContext callbackContext) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, status));
}
- private void requestLocationServices(CallbackContext callbackContext) {
- permissionCallbackContext = callbackContext;
- cordova.startActivityForResult(this, new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), Roam.REQUEST_CODE_LOCATION_ENABLED);
+ private void requestLocationServices() {
+ Roam.requestLocationServices(cordova.getActivity());
}
private void checkBackgroundLocationPermission(CallbackContext callbackContext) {
@@ -253,22 +250,34 @@ private void checkBackgroundLocationPermission(CallbackContext callbackContext)
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, status));
}
- private void requestBackgroundLocationPermission(CallbackContext callbackContext) {
- permissionCallbackContext = callbackContext;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- String[] permissions = {Manifest.permission.ACCESS_BACKGROUND_LOCATION};
- cordova.requestPermissions(this, Roam.REQUEST_CODE_BACKGROUND_LOCATION_PERMISSION, permissions);
- } else {
- permissionCallbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, "UNKNOWN"));
- }
+ private void requestBackgroundLocationPermission() {
+ Roam.requestBackgroundLocationPermission(cordova.getActivity());
}
private void getDeviceToken(CallbackContext callbackContext) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, Roam.getDeviceToken()));
}
+ private void setForegroundNotification(boolean enabled, String title, String description, String image, String activity){
+ Log.e("TAG", "setForegroundNotification: " + enabled + title + description + image + activity);
+ try{
+ String[] split = image.split("/");
+ String firstSubString = split[0];
+ String secondSubString = split[1];
+ int resId = cordova.getActivity().getResources()
+ .getIdentifier(
+ secondSubString,
+ firstSubString,
+ cordova.getActivity().getPackageName()
+ );
+ Roam.setForegroundNotification(enabled, title, description, resId, activity);
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
private void createUser(String description, final CallbackContext callbackContext) {
- Roam.createUser(description, new RoamCallback() {
+ Roam.createUser(description,null, new RoamCallback() {
@Override
public void onSuccess(RoamUser roamUser) {
String serializedUser = new GsonBuilder().create().toJson(roamUser);
@@ -387,13 +396,13 @@ public void onFailure(RoamError roamError) {
private void updateCurrentLocation(int accuracy, String desiredAccuracy) {
switch (desiredAccuracy) {
case "MEDIUM":
- Roam.updateCurrentLocation(RoamTrackingMode.DesiredAccuracy.MEDIUM, accuracy);
+ Roam.updateCurrentLocation(RoamTrackingMode.DesiredAccuracy.MEDIUM, accuracy, null);
break;
case "LOW":
- Roam.updateCurrentLocation(RoamTrackingMode.DesiredAccuracy.LOW, accuracy);
+ Roam.updateCurrentLocation(RoamTrackingMode.DesiredAccuracy.LOW, accuracy, null);
break;
default:
- Roam.updateCurrentLocation(RoamTrackingMode.DesiredAccuracy.HIGH, accuracy);
+ Roam.updateCurrentLocation(RoamTrackingMode.DesiredAccuracy.HIGH, accuracy, null);
break;
}
}
@@ -458,16 +467,29 @@ private void startTracking(String trackingMode){
switch (trackingMode) {
case "ACTIVE":
Roam.startTracking(RoamTrackingMode.ACTIVE);
+ startReceiverService();
break;
case "BALANCED":
Roam.startTracking(RoamTrackingMode.BALANCED);
+ startReceiverService();
break;
case "PASSIVE":
Roam.startTracking(RoamTrackingMode.PASSIVE);
+ startReceiverService();
break;
}
}
+ private void startReceiverService(){
+ Activity activity = cordova.getActivity();
+ activity.startService(new Intent(activity, RoamCDVService.class));
+ }
+
+ private void stopReceiverService(){
+ Activity activity = cordova.getActivity();
+ activity.stopService(new Intent(activity, RoamCDVService.class));
+ }
+
private void startTrackingTimeInterval(int timeInterval, String desiredAccuracy) {
RoamTrackingMode.Builder builder = new RoamTrackingMode.Builder(timeInterval);
switch (desiredAccuracy) {
@@ -482,6 +504,7 @@ private void startTrackingTimeInterval(int timeInterval, String desiredAccuracy)
break;
}
Roam.startTracking(builder.build());
+ startReceiverService();
}
private void startTrackingDistanceInterval(int distance, int stationary, String desiredAccuracy) {
@@ -498,12 +521,15 @@ private void startTrackingDistanceInterval(int distance, int stationary, String
break;
}
Roam.startTracking(builder.build());
+ startReceiverService();
}
private void stopTracking() {
Roam.stopTracking();
+ stopReceiverService();
}
+
public void publishAndSave() {
RoamPublish roamPublish = new RoamPublish.Builder().build();
Roam.publishAndSave(roamPublish);
diff --git a/src/android/src/main/java/com/roam/cordova/RoamCDVService.java b/src/android/src/main/java/com/roam/cordova/RoamCDVService.java
new file mode 100644
index 0000000..8399610
--- /dev/null
+++ b/src/android/src/main/java/com/roam/cordova/RoamCDVService.java
@@ -0,0 +1,56 @@
+package com.roam.cordova;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Build;
+import android.os.IBinder;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+
+public class RoamCDVService extends Service {
+
+ private CDVRoam.RoamCordovaReceiver roamCordovaReceiver;
+
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ register();
+ }
+
+ private void register() {
+ roamCordovaReceiver = new CDVRoam.RoamCordovaReceiver();
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction("com.roam.android.RECEIVED");
+ registerReceiver(roamCordovaReceiver, intentFilter);
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ return START_STICKY;
+ }
+
+ private void unRegister() {
+ if (roamCordovaReceiver != null) {
+ unregisterReceiver(roamCordovaReceiver);
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ unRegister();
+ super.onDestroy();
+ }
+}
diff --git a/src/android/roam-sdk.gradle b/src/android/src/main/java/com/roam/cordova/roam-sdk.gradle
similarity index 70%
rename from src/android/roam-sdk.gradle
rename to src/android/src/main/java/com/roam/cordova/roam-sdk.gradle
index 0dd6584..1cfbac9 100644
--- a/src/android/roam-sdk.gradle
+++ b/src/android/src/main/java/com/roam/cordova/roam-sdk.gradle
@@ -5,5 +5,5 @@ repositories {
}
}
dependencies {
- implementation 'com.roam.sdk:roam-android:0.0.3'
+ implementation 'com.roam.sdk:roam-android:0.1.1'
}
\ No newline at end of file
diff --git a/www/roam.js b/www/roam.js
index 08985a5..e45e00d 100644
--- a/www/roam.js
+++ b/www/roam.js
@@ -14,24 +14,24 @@ roam.checkLocationPermission = function(callback) {
exec( callback, null, 'roam', "checkLocationPermission",[]);
};
-roam.requestLocationPermission = function(callback) {
- exec( callback, null, 'roam', "requestLocationPermission",[]);
+roam.requestLocationPermission = function() {
+ exec( null, null, 'roam', "requestLocationPermission",[]);
};
roam.checkLocationServices = function(callback) {
exec( callback, null, 'roam', "checkLocationServices",[]);
};
-roam.requestLocationServices = function(callback) {
- exec( callback, null, 'roam', "requestLocationServices",[]);
+roam.requestLocationServices = function() {
+ exec( null, null, 'roam', "requestLocationServices",[]);
};
roam.checkBackgroundLocationPermission = function(callback) {
exec( callback, null, 'roam', "checkBackgroundLocationPermission",[]);
};
-roam.requestBackgroundLocationPermission = function(callback) {
- exec( callback, null, 'roam', "requestBackgroundLocationPermission",[]);
+roam.requestBackgroundLocationPermission = function() {
+ exec( null, null, 'roam', "requestBackgroundLocationPermission",[]);
};
roam.getDeviceToken = function(callback) {
@@ -42,6 +42,12 @@ roam.createUser = function(description, success, error) {
exec( success, error, 'roam', "createUser",[description]);
};
+roam.setForegroundNotification = function(enabled, title, description, icon, activity){
+ exec( null, null, 'roam', "setForegroundNotification",[enabled, title, description, icon, activity]);
+}
+
+
+
roam.setDescription = function(description, success, error) {
exec( success, error, 'roam', "setDescription",[description]);
};
@@ -102,6 +108,14 @@ roam.startTracking = function(trackingMode) {
exec( null, null, 'roam', "startTracking",[trackingMode]);
};
+roam.startTrackingTimeInterval = function(timeInterval, desiredAccuracy){
+ exec( null, null, 'roam', "startTrackingTimeInterval",[timeInterval, desiredAccuracy]);
+}
+
+roam.startTrackingDistanceInterval = function(distance, stationary, desiredAccuracy){
+ exec( null, null, 'roam', "startTrackingDistanceInterval",[distance, stationary, desiredAccuracy]);
+}
+
roam.publishAndSave = function() {
exec( null, null, 'roam', "publishAndSave",[]);
};