Skip to content

Commit

Permalink
Pass input data as a hashmap in the standard worker builder
Browse files Browse the repository at this point in the history
  • Loading branch information
mendhak committed Mar 16, 2024
1 parent c826b57 commit 21abbfb
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

Expand Down Expand Up @@ -239,8 +240,20 @@ else if(appThemeSetting.equalsIgnoreCase("light")){

}

/**
* Returns a OneTimeWorkRequest with the given worker class and data map. The constraints are set to
* UNMETERED network type if the user has set the app to only send on wifi. Otherwise it is set to
* CONNECTED. The initial delay is set to 1 second to avoid the work being enqueued immediately.
* The backoff criteria is set to exponential with a 30 second initial delay.
* @param workerClass
* @param dataMap
* @return
*/
public static OneTimeWorkRequest getBasicOneTimeWorkRequest(Class workerClass, HashMap<String, Object> dataMap) {

public static OneTimeWorkRequest getBasicOneTimeWorkRequest(Class workerClass, Data data) {
androidx.work.Data.Builder dataBuilder = new Data.Builder();
dataBuilder.putAll(dataMap);
Data data = dataBuilder.build();

Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(PreferenceHelper.getInstance().shouldAutoSendOnWifiOnly() ? NetworkType.UNMETERED: NetworkType.CONNECTED)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,37 +42,12 @@ public CustomUrlWorker(@NonNull Context context, @NonNull WorkerParameters worke
@Override
public Result doWork() {

String callbackType = getInputData().getString("callbackType");
UploadEvents.BaseUploadEvent callbackEvent = new UploadEvents.CustomUrl();
UploadEvents.BaseUploadEvent callbackEvent = getCallbackEvent();
CustomUrlRequest[] urlRequests = getCustomUrlRequests(getInputData());

if(callbackType.equals("opengts")){
callbackEvent = new UploadEvents.OpenGTS();
}

CustomUrlRequest[] urlRequests;

String gpxFilePath = getInputData().getString("gpxFilePath");
String csvFilePath = getInputData().getString("csvFilePath");
if(!Strings.isNullOrEmpty(gpxFilePath)){
OpenGTSManager openGTSManager = new OpenGTSManager(PreferenceHelper.getInstance(), Systems.getBatteryInfo(AppSettings.getInstance()).BatteryLevel);
List<CustomUrlRequest> gpxCustomUrlRequests = openGTSManager.getCustomUrlRequestsFromGPX(new File(gpxFilePath));
urlRequests = gpxCustomUrlRequests.toArray(new CustomUrlRequest[0]);
}
else if(!Strings.isNullOrEmpty(csvFilePath)){
CustomUrlManager customUrlManager = new CustomUrlManager(PreferenceHelper.getInstance());
List<CustomUrlRequest> csvCustomUrlRequests = customUrlManager.getCustomUrlRequestsFromCSV(new File(csvFilePath));
urlRequests = csvCustomUrlRequests.toArray(new CustomUrlRequest[0]);
}
else {
String[] serializedRequests = getInputData().getStringArray("urlRequests");
if(serializedRequests == null){
EventBus.getDefault().post(callbackEvent.failed("No URL requests found", new Throwable("No URL requests found")));
return Result.failure();
}
urlRequests = new CustomUrlRequest[serializedRequests.length];
for (int i = 0; i < serializedRequests.length; i++) {
urlRequests[i] = Strings.deserializeFromJson(serializedRequests[i], CustomUrlRequest.class);
}
if(urlRequests == null || urlRequests.length == 0){
EventBus.getDefault().post(callbackEvent.failed("Nothing to process", new Throwable("Nothing to process")));
return Result.failure();
}

boolean success = true;
Expand Down Expand Up @@ -130,7 +105,7 @@ else if(!Strings.isNullOrEmpty(csvFilePath)){
}
else {
if(getRunAttemptCount() < getRetryLimit()){
LOG.warn(String.format("Custom URL: attempt %d failed, maximum %d attempts", getRunAttemptCount(), getRetryLimit()));
LOG.warn(String.format("Custom URL - attempt %d of %d failed, will retry", getRunAttemptCount(), getRetryLimit()));
return Result.retry();
}

Expand All @@ -139,6 +114,43 @@ else if(!Strings.isNullOrEmpty(csvFilePath)){
return Result.failure();
}
}

private CustomUrlRequest[] getCustomUrlRequests(Data inputData) {
CustomUrlRequest[] urlRequests = null;
String[] serializedRequests = inputData.getStringArray("urlRequests");
String gpxFilePath = inputData.getString("gpxFilePath");
String csvFilePath = inputData.getString("csvFilePath");

if(!Strings.isNullOrEmpty(gpxFilePath)){
OpenGTSManager openGTSManager = new OpenGTSManager(PreferenceHelper.getInstance(), Systems.getBatteryInfo(AppSettings.getInstance()).BatteryLevel);
List<CustomUrlRequest> gpxCustomUrlRequests = openGTSManager.getCustomUrlRequestsFromGPX(new File(gpxFilePath));
urlRequests = gpxCustomUrlRequests.toArray(new CustomUrlRequest[0]);
}
else if(!Strings.isNullOrEmpty(csvFilePath)){
CustomUrlManager customUrlManager = new CustomUrlManager(PreferenceHelper.getInstance());
List<CustomUrlRequest> csvCustomUrlRequests = customUrlManager.getCustomUrlRequestsFromCSV(new File(csvFilePath));
urlRequests = csvCustomUrlRequests.toArray(new CustomUrlRequest[0]);
}
else if(serializedRequests != null && serializedRequests.length > 0) {
urlRequests = new CustomUrlRequest[serializedRequests.length];
for (int i = 0; i < serializedRequests.length; i++) {
urlRequests[i] = Strings.deserializeFromJson(serializedRequests[i], CustomUrlRequest.class);
}
}
return urlRequests;
}

@NonNull
private UploadEvents.BaseUploadEvent getCallbackEvent() {
String callbackType = getInputData().getString("callbackType");
UploadEvents.BaseUploadEvent callbackEvent = new UploadEvents.CustomUrl();

if(!Strings.isNullOrEmpty(callbackType) && callbackType.equals("opengts")){
callbackEvent = new UploadEvents.OpenGTS();
}
return callbackEvent;
}

protected int getRetryLimit() {
return 3;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.io.Reader;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -51,12 +52,13 @@ public void uploadFile(List<File> files) {
foundFileToSend = true;

String tag = String.valueOf(Objects.hashCode(f.getName()));
Data data = new Data.Builder()
.putString("csvFilePath", f.getAbsolutePath())
.putString("callbackType", "customUrl")
.build();

OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, data);
HashMap<String, Object> dataMap = new HashMap<String, Object>() {{
put("csvFilePath", f.getAbsolutePath());
put("callbackType", "customUrl");
}};

OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, dataMap);
WorkManager.getInstance(AppSettings.getInstance())
.enqueueUniqueWork(tag, ExistingWorkPolicy.REPLACE, workRequest);

Expand Down Expand Up @@ -162,18 +164,16 @@ private String unApplyDecimalComma(String recordValue) {

public void sendByHttp(String url, String method, String body, String headers, String username, String password){

CustomUrlRequest request = new CustomUrlRequest(url, method,
body, headers, username, password);

CustomUrlRequest request = new CustomUrlRequest(url, method, body, headers, username, password);
String serializedRequest = Strings.serializeTojson(request);
String tag = String.valueOf(Objects.hashCode(serializedRequest));

Data data = new Data.Builder()
.putStringArray("urlRequests", new String[]{serializedRequest})
.putString("callbackType", "customUrl")
.build();
HashMap<String, Object> dataMap = new HashMap<String, Object>() {{
put("urlRequests", new String[]{serializedRequest});
put("callbackType", "customUrl");
}};

OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, data);
OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, dataMap);
WorkManager.getInstance(AppSettings.getInstance())
.enqueueUniqueWork(tag, ExistingWorkPolicy.REPLACE, workRequest);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,13 @@ public void uploadFile(List<File> files) {
for (File f : files) {
if (f.getName().endsWith(".gpx")) {
String tag = String.valueOf(Objects.hashCode(f.getName()));
Data data = new Data.Builder()
.putString("gpxFilePath", f.getAbsolutePath())
.putString("callbackType", "opengts")
.build();

OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, data);
HashMap<String, Object> dataMap = new HashMap<String, Object>(){{
put("gpxFilePath", f.getAbsolutePath());
put("callbackType", "opengts");
}};

OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, dataMap);
WorkManager.getInstance(AppSettings.getInstance())
.enqueueUniqueWork(tag, ExistingWorkPolicy.REPLACE, workRequest);

Expand Down Expand Up @@ -107,23 +108,20 @@ void sendByHttp(String deviceId, String accountName, SerializableLocation[] loca
serializedRequests[i] = Strings.serializeTojson(request);
}


String tag = String.valueOf(Objects.hashCode(serializedRequests));
Data data = new Data.Builder()
.putStringArray("urlRequests", serializedRequests)
.putString("callbackType", "opengts")
.build();

OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, data);
HashMap<String, Object> dataMap = new HashMap<String, Object>(){{
put("urlRequests", serializedRequests);
put("callbackType", "opengts");
}};

OneTimeWorkRequest workRequest = Systems.getBasicOneTimeWorkRequest(CustomUrlWorker.class, dataMap);
WorkManager.getInstance(AppSettings.getInstance())
.enqueueUniqueWork(tag, ExistingWorkPolicy.REPLACE, workRequest);


}




/**
* Encode a location as GPRMC string data.
* <p/>
Expand Down

0 comments on commit 21abbfb

Please sign in to comment.