From 6856d3d1cf5e1bf4f929f4891e6acb306030043d Mon Sep 17 00:00:00 2001 From: cagryinside Date: Sun, 14 Jul 2019 13:31:59 -0700 Subject: [PATCH 1/2] Fix #1000 - Update record when a user leaves the study --- .../travelbehavior/TravelBehaviorManager.java | 62 ++++++++++------ ...OptOutTravelBehaviorParticipantWorker.java | 73 +++++++++++++++++++ .../android/ui/PreferencesActivity.java | 1 + .../src/main/res/values/donottranslate.xml | 2 + 4 files changed, 114 insertions(+), 24 deletions(-) create mode 100644 onebusaway-android/src/main/java/org/onebusaway/android/travelbehavior/io/worker/OptOutTravelBehaviorParticipantWorker.java 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..7562b8bdb 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/a/mail.usf.edu/macros/s/AKfycbzPwMeJV0DFCjWjHJDuXOA95KtYIuoRbnDWXFSQQhTDk9zOhn1h/exec + https://github.com/OneBusAway/onebusaway-android From 47eba86fbd31820bb85c1621250abdd4cfc0aa54 Mon Sep 17 00:00:00 2001 From: Sean Barbeau Date: Mon, 15 Jul 2019 12:48:32 -0400 Subject: [PATCH 2/2] Update to production opt-out URL --- onebusaway-android/src/main/res/values/donottranslate.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/onebusaway-android/src/main/res/values/donottranslate.xml b/onebusaway-android/src/main/res/values/donottranslate.xml index 7562b8bdb..2b9c29bad 100644 --- a/onebusaway-android/src/main/res/values/donottranslate.xml +++ b/onebusaway-android/src/main/res/values/donottranslate.xml @@ -81,7 +81,7 @@ https://script.google.com/macros/s/AKfycbyUnU7wYhGk_Y6UyEjQ0ePNn9avA3jA7QqDHI2PzKg2RYftrj9x/exec - https://script.google.com/a/mail.usf.edu/macros/s/AKfycbzPwMeJV0DFCjWjHJDuXOA95KtYIuoRbnDWXFSQQhTDk9zOhn1h/exec + https://script.google.com/macros/s/AKfycbyrCNQluXQHpMZt-jYqjdmV9CLT43sSCeGcIS1yNJtWB5LCtSOw/exec https://github.com/OneBusAway/onebusaway-android @@ -248,4 +248,4 @@ FeedbackText request_battery_optimizations_key - \ No newline at end of file +