diff --git a/onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/TravelBehaviorManager.java b/onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/TravelBehaviorManager.java
index 5651697b3..cfe7be9df 100644
--- a/onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/TravelBehaviorManager.java
+++ b/onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/TravelBehaviorManager.java
@@ -15,30 +15,6 @@
*/
package org.onebusaway.android.travelbehavior;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.text.Html;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.Patterns;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.Toast;
-
-import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.work.Constraints;
-import androidx.work.Data;
-import androidx.work.NetworkType;
-import androidx.work.OneTimeWorkRequest;
-import androidx.work.WorkInfo;
-import androidx.work.WorkManager;
-
import com.google.android.gms.location.ActivityRecognition;
import com.google.android.gms.location.ActivityTransition;
import com.google.android.gms.location.ActivityTransitionRequest;
@@ -57,6 +33,7 @@
import org.onebusaway.android.travelbehavior.io.task.ArrivalAndDepartureDataSaverTask;
import org.onebusaway.android.travelbehavior.io.task.DestinationReminderDataSaverTask;
import org.onebusaway.android.travelbehavior.io.task.TripPlanDataSaverTask;
+import org.onebusaway.android.travelbehavior.io.worker.OptOutTravelBehaviorParticipantWorker;
import org.onebusaway.android.travelbehavior.io.worker.RegisterTravelBehaviorParticipantWorker;
import org.onebusaway.android.travelbehavior.receiver.TransitionBroadcastReceiver;
import org.onebusaway.android.travelbehavior.utils.TravelBehaviorFirebaseIOUtils;
@@ -65,12 +42,36 @@
import org.onebusaway.android.util.PreferenceUtils;
import org.opentripplanner.api.model.TripPlan;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.text.Html;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.Patterns;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Toast;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
+import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.work.Constraints;
+import androidx.work.Data;
+import androidx.work.NetworkType;
+import androidx.work.OneTimeWorkRequest;
+import androidx.work.WorkInfo;
+import androidx.work.WorkManager;
+
public class TravelBehaviorManager {
private static final String TAG = "TravelBehaviorManager";
@@ -338,6 +339,19 @@ public static void optOutUser() {
PreferenceUtils.saveBoolean(TravelBehaviorConstants.USER_OPT_IN, false);
}
+ public static void optOutUserOnServer() {
+ String uid = PreferenceUtils.getString(TravelBehaviorConstants.USER_ID);
+ Data myData = new Data.Builder()
+ .putString(TravelBehaviorConstants.USER_ID, uid)
+ .build();
+
+ OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(
+ OptOutTravelBehaviorParticipantWorker.class)
+ .setInputData(myData)
+ .build();
+ WorkManager.getInstance().enqueue(workRequest);
+ }
+
public static void optInUser(String uid) {
PreferenceUtils.saveString(TravelBehaviorConstants.USER_ID, uid);
PreferenceUtils.saveBoolean(TravelBehaviorConstants.USER_OPT_IN, true);
diff --git a/onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/io/worker/OptOutTravelBehaviorParticipantWorker.java b/onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/io/worker/OptOutTravelBehaviorParticipantWorker.java
new file mode 100644
index 000000000..34b7ae8ab
--- /dev/null
+++ b/onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/io/worker/OptOutTravelBehaviorParticipantWorker.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2019 University of South Florida
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onebusaway.android.travelbehavior.io.worker;
+
+import org.apache.commons.io.IOUtils;
+import org.onebusaway.android.R;
+import org.onebusaway.android.app.Application;
+import org.onebusaway.android.io.ObaConnection;
+import org.onebusaway.android.io.ObaDefaultConnectionFactory;
+import org.onebusaway.android.travelbehavior.constants.TravelBehaviorConstants;
+
+import android.content.Context;
+import android.net.Uri;
+import android.util.Log;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import androidx.annotation.NonNull;
+import androidx.work.Worker;
+import androidx.work.WorkerParameters;
+
+public class OptOutTravelBehaviorParticipantWorker extends Worker {
+
+ private static final String TAG = "OptOutTravelUser";
+
+
+ public OptOutTravelBehaviorParticipantWorker(@NonNull Context context,
+ @NonNull WorkerParameters workerParams) {
+ super(context, workerParams);
+ }
+
+ @NonNull
+ @Override
+ public Result doWork() {
+ String uid = getInputData().getString(TravelBehaviorConstants.USER_ID);
+ optOutUser(uid);
+ return Result.success();
+ }
+
+ private void optOutUser(String uid) {
+ Uri uri = buildUri(uid);
+ try {
+ ObaConnection connection = ObaDefaultConnectionFactory.getInstance().newConnection(uri);
+ Reader reader = connection.get();
+ String result = IOUtils.toString(reader);
+ if (TravelBehaviorConstants.PARTICIPANT_SERVICE_RESULT.equals(result)) {
+ Log.d(TAG, "Opt-out user success");
+ }
+ } catch (IOException e) {
+ Log.e(TAG, e.toString());
+ }
+ }
+
+ private Uri buildUri(String uid) {
+ return Uri.parse(Application.get().getResources().getString(R.string.
+ travel_behavior_participants_opt_out_url)).buildUpon().
+ appendQueryParameter("id", uid).build();
+ }
+}
diff --git a/onebusaway-android/src/main/java/org/onebusaway/android/ui/PreferencesActivity.java b/onebusaway-android/src/main/java/org/onebusaway/android/ui/PreferencesActivity.java
index b594c54cf..cd1667a6c 100644
--- a/onebusaway-android/src/main/java/org/onebusaway/android/ui/PreferencesActivity.java
+++ b/onebusaway-android/src/main/java/org/onebusaway/android/ui/PreferencesActivity.java
@@ -464,6 +464,7 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
new TravelBehaviorManager(this, getApplicationContext()).
stopCollectingData();
TravelBehaviorManager.optOutUser();
+ TravelBehaviorManager.optOutUserOnServer();
}
} else if (preference.equals(mLeftHandMode) && newValue instanceof Boolean) {
diff --git a/onebusaway-android/src/main/res/values/donottranslate.xml b/onebusaway-android/src/main/res/values/donottranslate.xml
index 70e643bb9..2b9c29bad 100644
--- a/onebusaway-android/src/main/res/values/donottranslate.xml
+++ b/onebusaway-android/src/main/res/values/donottranslate.xml
@@ -81,6 +81,8 @@
https://script.google.com/macros/s/AKfycbyUnU7wYhGk_Y6UyEjQ0ePNn9avA3jA7QqDHI2PzKg2RYftrj9x/exec
+ https://script.google.com/macros/s/AKfycbyrCNQluXQHpMZt-jYqjdmV9CLT43sSCeGcIS1yNJtWB5LCtSOw/exec
+
https://github.com/OneBusAway/onebusaway-android
@@ -246,4 +248,4 @@
FeedbackText
request_battery_optimizations_key
-
\ No newline at end of file
+