diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index cfdcd92..72d9d97 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/app/src/main/java/com/app/simplitend/apputils/AppUtil.java b/app/src/main/java/com/app/simplitend/apputils/AppUtil.java
index 5550be7..9c20911 100644
--- a/app/src/main/java/com/app/simplitend/apputils/AppUtil.java
+++ b/app/src/main/java/com/app/simplitend/apputils/AppUtil.java
@@ -96,6 +96,7 @@ public abstract class AppUtil {
public static final String CG_REGISTRATION_COMPLETE = "cg_registration_complete";
public static final String PATIENT_UID = "patient_uid";
+
public static final String IS_PATIENT_LOGGED_IN = "patient_logged_in";
public static final String WHITE_LISTED_CONTACTS = "white_listed_contacts";
@@ -502,12 +503,21 @@ public abstract class AppUtil {
title = patient_name + " requested for directions to home";
body = "Current location:";
- String senior_address = intent.getStringExtra(NOTIFICATION_SENIOR_ADDRESS_KEY);
+ String doh_distance = intent.getStringExtra(NOTIFICATION_SENIOR_ADDRESS_KEY);
+
+ try {
+ double distance = Double.parseDouble(doh_distance);
+ if (distance == 0) throw new Exception();
+
+ doh_distance = distance + " miles away from home";
+ }catch (Exception e){
+ doh_distance = "Unable to locate";
+ }
setupBottomSheet(binding,
R.drawable.img_directioin_requested,
title, body,
- senior_address, "Call senior",
+ doh_distance, "Call senior",
v -> {
CaregiverDataCache.getCaregiverData(context, (careGiverData -> {
bsd.dismiss();
@@ -681,7 +691,8 @@ public abstract class AppUtil {
setWhiteListedContacts(context, null);
// geofence details clear
- updatePatientGeofence(context, null, null, null, null);
+ updatePatientGeofence(context, null, null, null, null, null);
+ updatePatientGeofenceChatsCred(context, -1, -1);
// removing geofence of same tag
removeGeofence(context);
@@ -807,8 +818,42 @@ public abstract class AppUtil {
private static final String PATIENT_GEOFENCE_RADIUS_UNIT = "patient_geofence_radius_unit";
private static final String PATIENT_GEOFENCE_LATITUDE = "patient_geofence_latitude";
private static final String PATIENT_GEOFENCE_LONGITUDE = "patient_geofence_longitude";
+ private static final String PATIENT_GEOFENCE_MESSAGE = "patient_geofence_message";
- public static void updatePatientGeofence(Context context, String lat, String lng, String radius, String radius_unit) {
+ private static final String PATIENT_GEOFENCE_CG_ID = "pg_cg_uid";
+ private static final String PATIENT_GEOFENCE_CHANNEL_ID = "pg_channel_uid";
+
+ public static void updatePatientGeofenceChatsCred(Context context,
+ int cg_id,
+ int channel_id){
+ SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+
+ editor.putInt(PATIENT_GEOFENCE_CG_ID, cg_id);
+ editor.putInt(PATIENT_GEOFENCE_CHANNEL_ID, channel_id);
+
+ editor.apply();
+ }
+
+ // return array of size 3
+ // index content
+ // 0 -> patient_id
+ // 1 -> caregiver_id
+ // 2 -> channel_id
+ @NonNull
+ public static int[] getPatientGeofenceChatCred(Context context){
+ SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
+ return new int[]{sp.getInt(PATIENT_UID, -1),
+ sp.getInt(PATIENT_GEOFENCE_CG_ID, -1),
+ sp.getInt(PATIENT_GEOFENCE_CHANNEL_ID, -1)};
+ }
+
+ public static void updatePatientGeofence(Context context,
+ String lat,
+ String lng,
+ String radius,
+ String radius_unit,
+ String message) {
SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
@@ -816,6 +861,7 @@ public abstract class AppUtil {
editor.putString(PATIENT_GEOFENCE_LONGITUDE, lng);
editor.putString(PATIENT_GEOFENCE_RADIUS, radius);
editor.putString(PATIENT_GEOFENCE_RADIUS_UNIT, radius_unit);
+ editor.putString(PATIENT_GEOFENCE_MESSAGE, message);
editor.apply();
Log.d(GEOFENCE_TAG, "updatePatientGeofence: UPDATED");
@@ -836,6 +882,11 @@ public abstract class AppUtil {
return sp.getString(PATIENT_GEOFENCE_RADIUS_UNIT, null);
}
+ public static String getPatientGeofenceMessage(Context context) {
+ SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
+ return sp.getString(PATIENT_GEOFENCE_MESSAGE, null);
+ }
+
public static void setWhiteListedContacts(Context context, List contactList){
Set contactSet;
diff --git a/app/src/main/java/com/app/simplitend/apputils/NotificationService.java b/app/src/main/java/com/app/simplitend/apputils/NotificationService.java
index b8aba65..4d030cb 100644
--- a/app/src/main/java/com/app/simplitend/apputils/NotificationService.java
+++ b/app/src/main/java/com/app/simplitend/apputils/NotificationService.java
@@ -82,12 +82,18 @@ public class NotificationService implements INotificationServiceExtension {
double lat = extras.getDouble("lat");
double lng = extras.getDouble("lng");
double radius = extras.getDouble("radius");
+ String message;
+ try {
+ message = extras.getString("message");
+ } catch (JSONException e) {
+ message = null;
+ }
Log.d(GEOFENCE_TAG, "DATA RECEIVED WITH NOTIFICATION : Lat/Lng: " + lat + "," + lng + " Radius: " + radius);
if (radius >= 0){
addGeoFence(new LatLng(lat, lng),
- radius, iNotificationReceivedEvent.getContext());
+ radius, message, iNotificationReceivedEvent.getContext());
}
}catch (Exception e){
Log.e(GEOFENCE_TAG, "COULDN'T CREATE GEOFENCE: " + e);
@@ -100,7 +106,7 @@ public class NotificationService implements INotificationServiceExtension {
}
@RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
- private void addGeoFence(@NonNull LatLng latLng, double GEOFENCING_RADIUS , Context context) {
+ private void addGeoFence(@NonNull LatLng latLng, double GEOFENCING_RADIUS, String message, Context context) {
AppUtil.removeGeofence(context);
GeoFenceHelper geoFenceHelper = new GeoFenceHelper(context);
@@ -123,7 +129,7 @@ public class NotificationService implements INotificationServiceExtension {
.addOnSuccessListener(aVoid -> {
Log.d(GEOFENCE_TAG, "Geofence added successfully.");
AppUtil.updatePatientGeofence(context, latLng.latitude+"", latLng.longitude+"",
- GEOFENCING_RADIUS+"", "kms");
+ GEOFENCING_RADIUS+"", "kms", message);
})
.addOnFailureListener(e -> Log.d(GEOFENCE_TAG, "onFailure: Geofence couldn't be added: " + e.getLocalizedMessage() + " " + latLng + " Radius: " + GEOFENCING_RADIUS));
diff --git a/app/src/main/java/com/app/simplitend/apputils/RetrofitHelper.java b/app/src/main/java/com/app/simplitend/apputils/RetrofitHelper.java
index 32d823a..7af21f3 100644
--- a/app/src/main/java/com/app/simplitend/apputils/RetrofitHelper.java
+++ b/app/src/main/java/com/app/simplitend/apputils/RetrofitHelper.java
@@ -11,8 +11,13 @@ import retrofit2.converter.gson.GsonConverterFactory;
public abstract class RetrofitHelper {
// urls
+
+ // Testing BASE URL
private static final String BASE_URL = "https://simplitend.betadelivery.com/";
+ // Staging BASE URL
+// private static final String BASE_URL = "https://simplitendapp.betadelivery.com/";
+
public static final String CREATE_CONTACT = "api/contact-create";
public static final String UPDATE_CONTACT = "api/patient-contact-update/";
diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java
index 1eb087a..076fc01 100644
--- a/app/src/main/java/com/app/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java
+++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java
@@ -40,8 +40,8 @@ public class CaregiverMainViewModel extends ViewModel {
public String ongoingActivityText, upcomingActivityText;
public String upcomingReminderText, dailyReminderText;
- public List remindersList;
- public List activityList;
+ public static List remindersList;
+ public static List activityList;
public CaregiverMainViewModel(){
this.cgHomeRepository = CgHomeRepository.getHomeRepository();
diff --git a/app/src/main/java/com/app/simplitend/cg_geofencing/CgGeoFencingActivity.java b/app/src/main/java/com/app/simplitend/cg_geofencing/CgGeoFencingActivity.java
index 19ce07f..953cd78 100644
--- a/app/src/main/java/com/app/simplitend/cg_geofencing/CgGeoFencingActivity.java
+++ b/app/src/main/java/com/app/simplitend/cg_geofencing/CgGeoFencingActivity.java
@@ -164,7 +164,7 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
protected void onDestroy() {
super.onDestroy();
if (careGiverData != null) {
- SocketHelper.getInstance().removeLocationUpdateListener(careGiverData.patientId+"");
+ SocketHelper.getInstance().removeLocationUpdateListener(careGiverData.patientId + "");
}
SocketHelper.getInstance().closeConnection();
@@ -172,20 +172,20 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
private void establishSocketConnection() {
CaregiverDataCache.getCaregiverData(this, (careGiverData1 -> {
- if (careGiverData1 != null){
+ if (careGiverData1 != null) {
this.careGiverData = careGiverData1;
SocketHelper socketHelper = SocketHelper.getInstance();
socketHelper.establishConnection(null);
Log.d(LOCATION_REQUEST_TAG, "CG STARTED LISTENING TO LOCATION UPDATES");
- socketHelper.getLocationUpdates(careGiverData1.patientId+"", new SocketHelper.Callback() {
+ socketHelper.getLocationUpdates(careGiverData1.patientId + "", new SocketHelper.Callback() {
@Override
public void onMessageReceived(Location result) {
Log.d(LOCATION_REQUEST_TAG, "LOCATION RECEIVED: " + result);
- if (result != null){
+ if (result != null) {
// running on main thread
- new Handler(Looper.getMainLooper()).post(()-> {
+ new Handler(Looper.getMainLooper()).post(() -> {
pat_cur_latLng = new LatLng(result.getLatitude(), result.getLongitude());
updateCurrentLocationPatientMarker();
updatePatientCurrentLocationDetails();
@@ -224,11 +224,10 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
}
}
- if (geoFenceDetails.type == null){
+ if (geoFenceDetails.type == null) {
// default
geofence_bs_binding.unitSpinner.selectItemByIndex(1);
- }
- else if (MILES.equals(geoFenceDetails.type)) {
+ } else if (MILES.equals(geoFenceDetails.type)) {
geofence_bs_binding.unitSpinner.selectItemByIndex(1);
radius = radius / 1609.34f;
} else {
@@ -262,10 +261,10 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
binding.backBtn.setOnClickListener(v -> onBackPressed());
binding.changeBtn.setOnClickListener(v -> {
- if (binding.search.getVisibility() == View.VISIBLE){
+ if (binding.search.getVisibility() == View.VISIBLE) {
binding.search.setVisibility(View.GONE);
binding.changeBtn.setText(getString(R.string.change));
- }else{
+ } else {
binding.changeBtn.setText(getString(R.string.close_));
binding.search.setVisibility(View.VISIBLE);
}
@@ -282,7 +281,7 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
});
geofence_bs_binding.cancelSetGf.setOnClickListener(v -> {
- if (bottomSheetDialog != null){
+ if (bottomSheetDialog != null) {
bottomSheetDialog.dismiss();
}
});
@@ -313,21 +312,22 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
getString(R.string.ok), ((dialogInterface, i) -> {
updatePatientAddress();
}),
- "Cancel", ((dialogInterface, i) -> {}));
+ "Cancel", ((dialogInterface, i) -> {
+ }));
} else {
Toast.makeText(this, "Cannot update address.", Toast.LENGTH_SHORT).show();
}
});
binding.homeLocationBtn.setOnClickListener(v -> {
- if (mMap != null && home_loc_marker != null){
+ if (mMap != null && home_loc_marker != null) {
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(home_loc_marker.getPosition(), 16));
isTrackingSenior = false;
}
});
binding.cgLocationBtn.setOnClickListener(v -> {
- if (mMap != null && curr_loc_marker != null){
+ if (mMap != null && curr_loc_marker != null) {
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(curr_loc_marker.getPosition(), 16));
isTrackingSenior = true;
}
@@ -338,7 +338,7 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
if (patientData == null) return;
try {
- if (pat_cur_latLng != null){
+ if (pat_cur_latLng != null) {
// calculating distance
LatLng homeLatLng = new LatLng(Double.parseDouble(patientData.lat),
Double.parseDouble(patientData.lng));
@@ -353,9 +353,9 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
double distance = homeL.distanceTo(currL);
distance /= 1609.34; // converting to Miles
- if (distance <= 0.015){
+ if (distance <= 0.015) {
binding.distanceAwayTxt.setText(patientData.first_name + " is at Home");
- }else{
+ } else {
binding.distanceAwayTxt.setText(String.format(patientData.first_name + " is %.2f miles away", distance));
}
}
@@ -366,19 +366,19 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
StringBuilder senior_address = new StringBuilder("");
- if (patientData.address_line1 != null){
+ if (patientData.address_line1 != null) {
senior_address.append(patientData.address_line1).append(", ");
}
- if (patientData.city != null){
+ if (patientData.city != null) {
senior_address.append(patientData.city).append(", ");
}
- if (patientData.state != null){
+ if (patientData.state != null) {
senior_address.append(patientData.state).append(", ");
}
- if (patientData.country != null){
+ if (patientData.country != null) {
senior_address.append(patientData.country).append(".");
}
@@ -403,19 +403,18 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
Map body = new HashMap<>();
- String addressLine;
- addressLine = (address.getThoroughfare() != null ? address.getThoroughfare() : address.getSubThoroughfare());
-
- if (addressLine == null || addressLine.isEmpty()){
- addressLine = "";
- if (address.getMaxAddressLineIndex() >= 0 && address.getAddressLine(0) != null){
- String[] addressLines = address.getAddressLine(0).split(",");
- for (int i = 0; i < Math.min(2, addressLines.length); i++) {
- addressLine = addressLine.concat(addressLines[i]);
- }
+ String addressLine = "";
+ if (address.getMaxAddressLineIndex() >= 0 && address.getAddressLine(0) != null) {
+ String[] addressLines = address.getAddressLine(0).split(",");
+ for (int i = 0; i < Math.min(1, addressLines.length); i++) {
+ addressLine = addressLine.concat(addressLines[i]);
}
}
+ if (addressLine.isEmpty()){
+ addressLine = (address.getThoroughfare() != null ? address.getThoroughfare() : address.getSubThoroughfare());
+ }
+
body.put("town", (address.getSubLocality() != null ? address.getSubLocality() : address.getLocality()));
body.put("street", addressLine);
body.put("state", address.getAdminArea());
@@ -529,7 +528,7 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
updateCurrentLocationPatientMarker();
mMap.setOnMapClickListener(latLng1 -> {
- if (binding.search.getVisibility() != View.VISIBLE){
+ if (binding.search.getVisibility() != View.VISIBLE) {
// search bar is not visible
// user is not intending to change the home location
return;
@@ -548,7 +547,7 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
}
private void updateCurrentLocationPatientMarker() {
- if (pat_cur_latLng != null){
+ if (pat_cur_latLng != null) {
String name;
if (patientData != null) name = patientData.first_name;
else name = "Senior's location";
@@ -562,7 +561,7 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
if (curr_loc_marker != null) curr_loc_marker.remove();
curr_loc_marker = mMap.addMarker(options);
- if (isTrackingSenior){
+ if (isTrackingSenior) {
mMap.animateCamera(CameraUpdateFactory.newLatLng(pat_cur_latLng));
}
}
@@ -621,7 +620,6 @@ public class CgGeoFencingActivity extends AppCompatActivity implements OnMapRead
private void registerMapSearchResultLauncher() {
// initializing places
-
// Initialize the SDK
Places.initialize(this, getString(R.string.GOOGLE_MAPS_API_KEY));
diff --git a/app/src/main/java/com/app/simplitend/locationupdates/DefaultLocationClient.java b/app/src/main/java/com/app/simplitend/locationupdates/DefaultLocationClient.java
index 1a5abe1..dc92668 100644
--- a/app/src/main/java/com/app/simplitend/locationupdates/DefaultLocationClient.java
+++ b/app/src/main/java/com/app/simplitend/locationupdates/DefaultLocationClient.java
@@ -51,7 +51,6 @@ public class DefaultLocationClient implements LocationClient{
}
locationRequest = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, interval)
- .setMinUpdateIntervalMillis(2000) // get fasted updates if available every 2 sec
.build();
locationCallback = new LocationCallback() {
diff --git a/app/src/main/java/com/app/simplitend/locationupdates/LocationService.java b/app/src/main/java/com/app/simplitend/locationupdates/LocationService.java
index 54822c6..050d00f 100644
--- a/app/src/main/java/com/app/simplitend/locationupdates/LocationService.java
+++ b/app/src/main/java/com/app/simplitend/locationupdates/LocationService.java
@@ -15,6 +15,7 @@ import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import com.app.simplitend.R;
+import com.app.simplitend.patient_dashboard.chats.SocketHelper;
import com.app.simplitend.patientgeofencing.PatientLocationUpdatesReceiver;
import com.google.android.gms.location.LocationServices;
@@ -35,6 +36,8 @@ public class LocationService extends Service implements LocationClient.DefaultLo
super.onCreate();
locationClient = new DefaultLocationClient(this,
LocationServices.getFusedLocationProviderClient(this));
+
+ SocketHelper.getInstance().establishConnection(null);
}
@Override
@@ -60,9 +63,12 @@ public class LocationService extends Service implements LocationClient.DefaultLo
stopForeground(true);
stopSelf();
removeLocationUpdates();
+ SocketHelper.getInstance().closeConnection();
}
private void startLocationUpdates(int minInterval){
+ SocketHelper.getInstance().establishConnection(null);
+
Notification notification = new NotificationCompat.Builder(this, LOCATION_NOTIFICATION_CHANNEL_ID)
.setContentTitle("SimpliTend is sharing your current location")
.setSmallIcon(R.mipmap.ic_launcher_round)
@@ -89,6 +95,7 @@ public class LocationService extends Service implements LocationClient.DefaultLo
stopForeground(true);
stopSelf();
removeLocationUpdates();
+ SocketHelper.getInstance().closeConnection();
}
public void removeLocationUpdates(){
diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/DirectionToHomeActivity.java b/app/src/main/java/com/app/simplitend/patient_dashboard/DirectionToHomeActivity.java
index a9db7d4..559272c 100644
--- a/app/src/main/java/com/app/simplitend/patient_dashboard/DirectionToHomeActivity.java
+++ b/app/src/main/java/com/app/simplitend/patient_dashboard/DirectionToHomeActivity.java
@@ -48,7 +48,6 @@ import com.google.maps.android.PolyUtil;
import com.google.maps.model.DirectionsResult;
import com.google.maps.model.DirectionsRoute;
-import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -123,13 +122,30 @@ public class DirectionToHomeActivity extends AppCompatActivity
startActivity(intent);
- String current_address = AppUtil.getCompleteAddress(this, pat_lat, pat_lng);
- if (current_address == null){
- current_address = "Unable to locate";
+// String current_address = AppUtil.getCompleteAddress(this, pat_lat, pat_lng);
+// if (current_address == null){
+// current_address = "Unable to locate";
+// }
+
+ double distance;
+ try {
+
+ Location homeLocation = new Location("homeLatLng");
+ homeLocation.setLatitude(pat_lat);
+ homeLocation.setLongitude(pat_lng);
+
+ Location currLocation = new Location("currentLocation");
+ currLocation.setLatitude(pat_cur_lat);
+ currLocation.setLongitude(pat_cur_lng);
+
+ distance = homeLocation.distanceTo(currLocation);
+ distance /= 1609; // converting to miles
+ }catch (Exception e){
+ distance = 0;
}
viewModel.notifyRequestedDirections(AppUtil.getPatientUid(this)+"",
- current_address,
+ String.format(Locale.getDefault(),"%.2f", distance),
AppUtil.getPatientToken(this));
});
diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java b/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java
index 403c24d..c64c5bf 100644
--- a/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java
+++ b/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java
@@ -100,7 +100,7 @@ public class PatientMainViewModel extends ViewModel {
return;
}
- addGeoFence(latLng, radius, activity, geoFenceDetails.type);
+ addGeoFence(latLng, radius, activity, geoFenceDetails.type, geoFenceDetails.message);
}
}
@@ -134,7 +134,7 @@ public class PatientMainViewModel extends ViewModel {
}
@RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
- private void addGeoFence(@NonNull LatLng latLng, float GEOFENCING_RADIUS , Activity activity, String unit) {
+ private void addGeoFence(@NonNull LatLng latLng, float GEOFENCING_RADIUS , Activity activity, String unit, String message) {
AppUtil.removeGeofence(activity);
GeoFenceHelper geoFenceHelper = new GeoFenceHelper(activity);
@@ -157,7 +157,7 @@ public class PatientMainViewModel extends ViewModel {
.addOnSuccessListener(aVoid -> {
Log.d(GEOFENCE_TAG, "Geofence added successfully. " + latLng + " Radius: " + GEOFENCING_RADIUS + " meters");
AppUtil.updatePatientGeofence(activity, latLng.latitude+"", latLng.longitude+"",
- GEOFENCING_RADIUS+"", unit);
+ GEOFENCING_RADIUS+"", unit, message);
})
.addOnFailureListener(e -> {
Log.d(GEOFENCE_TAG, "onFailure: Geofence couldn't be added: " + e.getLocalizedMessage() + " " + latLng + " Radius: " + GEOFENCING_RADIUS);
diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/chats/ChatFragment.java b/app/src/main/java/com/app/simplitend/patient_dashboard/chats/ChatFragment.java
index 1ac48ce..d8369ba 100644
--- a/app/src/main/java/com/app/simplitend/patient_dashboard/chats/ChatFragment.java
+++ b/app/src/main/java/com/app/simplitend/patient_dashboard/chats/ChatFragment.java
@@ -110,12 +110,12 @@ public class ChatFragment extends Fragment implements SocketHelper.Callback= 4) {
String received_sender_id = (String) args[1];
String message_txt = (String) args[2];
diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java
index f5a466e..168b05d 100644
--- a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java
+++ b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java
@@ -32,7 +32,6 @@ import androidx.navigation.Navigation;
import com.app.simplitend.R;
import com.app.simplitend.appblocking.FUAActivity;
import com.app.simplitend.apputils.AppUtil;
-import com.app.simplitend.apputils.CaregiverDataCache;
import com.app.simplitend.apputils.Constants;
import com.app.simplitend.apputils.PatientDataCache;
import com.app.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel;
@@ -139,6 +138,36 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
this.patientData = patientData;
setDetails();
+
+ // updating chats credentials to send message when geofence is triggered when patient is out of geofence
+ // to send message to patient on behalf of caregiver
+
+ if (patientData != null && patientData.link_id == null){
+ PatientDataCache.setPatientData(null); // to load new fresh data
+ }
+
+ try {
+ PatientDataCache.getPatientData(requireContext(), (patientData1 -> {
+ try {
+ if (patientData != null){
+ int cg_id = Integer.parseInt(patientData.caregiverId);
+ int channel_id = Integer.parseInt(patientData.link_id);
+
+ AppUtil.updatePatientGeofenceChatsCred(
+ requireContext(),
+ cg_id,
+ channel_id
+ );
+ }
+
+ }catch (Exception e){
+ // do nothing
+ }
+ }), false);
+ } catch (Exception e) {
+ // do nothing
+ }
+
}), true);
PatientDataCache.getContactList(requireContext(), "Bearer " + AppUtil.getPatientToken(requireContext()),
diff --git a/app/src/main/java/com/app/simplitend/patientgeofencing/GeoFenceBroadcastReceiver.java b/app/src/main/java/com/app/simplitend/patientgeofencing/GeoFenceBroadcastReceiver.java
index 186c019..b4af6ce 100644
--- a/app/src/main/java/com/app/simplitend/patientgeofencing/GeoFenceBroadcastReceiver.java
+++ b/app/src/main/java/com/app/simplitend/patientgeofencing/GeoFenceBroadcastReceiver.java
@@ -1,22 +1,28 @@
package com.app.simplitend.patientgeofencing;
+import static com.app.simplitend.locationupdates.LocationService.LOCATION_INTERVAL_BASE_TIME;
+import static com.app.simplitend.locationupdates.LocationService.LOCATION_UPDATE_MIN_INTERVAL;
+import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_TAG;
+
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
+import android.os.AsyncTask;
import android.util.Log;
-import com.app.simplitend.locationupdates.LocationService;
-import com.google.android.gms.location.Geofence;
-import com.google.android.gms.location.GeofencingEvent;
+import androidx.annotation.NonNull;
+
import com.app.simplitend.apputils.AppUtil;
import com.app.simplitend.apputils.RetrofitHelper;
import com.app.simplitend.caregiverdashboard.mvvm.NotificationApiService;
+import com.app.simplitend.locationupdates.LocationService;
+import com.app.simplitend.patient_dashboard.chats.SocketHelper;
+import com.app.simplitend.patient_dashboard.chats.mvvm.Message;
import com.app.simplitend.welcome.welcomepatient.mvvm.models.CallResponse;
-
-import static com.app.simplitend.locationupdates.LocationService.LOCATION_INTERVAL_BASE_TIME;
-import static com.app.simplitend.locationupdates.LocationService.LOCATION_UPDATE_MIN_INTERVAL;
-import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_TAG;
+import com.google.android.gms.location.Geofence;
+import com.google.android.gms.location.GeofencingEvent;
+import com.onesignal.OneSignal;
import java.util.HashMap;
import java.util.Locale;
@@ -31,14 +37,12 @@ public class GeoFenceBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
-
+
if (geofencingEvent == null || geofencingEvent.hasError()) {
Log.d(GEOFENCE_TAG, "onReceive: Couldn't add geofence");
return;
}
- Log.d(GEOFENCE_TAG, "onReceive: " + intent.getExtras());
-
int transition_type = geofencingEvent.getGeofenceTransition();
Location location = geofencingEvent.getTriggeringLocation();
@@ -63,7 +67,7 @@ public class GeoFenceBroadcastReceiver extends BroadcastReceiver {
distance = homeLocation.distanceTo(location);
distance /= 1609; // converting to miles
- }catch (Exception e){
+ } catch (Exception e) {
distance = 0;
}
@@ -75,17 +79,104 @@ public class GeoFenceBroadcastReceiver extends BroadcastReceiver {
Log.d(GEOFENCE_TAG, "onReceive: ENTER");
Intent locationServiceIntent = new Intent(context, LocationService.class);
locationServiceIntent.setAction(LocationService.ACTION_START_LOCATION_UPDATES);
- locationServiceIntent.putExtra(LOCATION_UPDATE_MIN_INTERVAL, LOCATION_INTERVAL_BASE_TIME
- );
+ locationServiceIntent.putExtra(LOCATION_UPDATE_MIN_INTERVAL, LOCATION_INTERVAL_BASE_TIME);
context.startService(locationServiceIntent);
break;
case Geofence.GEOFENCE_TRANSITION_EXIT:
Log.d(GEOFENCE_TAG, "onReceive: EXIT");
- notifyOutOfGeofence(context, String.format(Locale.getDefault(),"%.2f", distance));
+ notifyOutOfGeofence(context, String.format(Locale.getDefault(), "%.2f", distance));
+
+ notifyPatient(context);
break;
}
}
+ private void notifyPatient(Context context) {
+ Log.d(GEOFENCE_TAG, "notifyPatient: SENDING MESSAGE TO SENIOR PHONE FROM CAREGIVER PHONE");
+
+ String message = AppUtil.getPatientGeofenceMessage(context);
+ if (message == null || message.trim().isEmpty()) {
+ message = "You are too far from home";
+ }
+
+ int[] chatsCred = AppUtil.getPatientGeofenceChatCred(context);
+ if (chatsCred[0] == -1 || chatsCred[1] == -1 || chatsCred[2] == -1) {
+ Log.d(GEOFENCE_TAG, "notifyPatient: CANNOT SEND MESSAGE AS EITHER PAT_ID, CG_ID OR CHANNEL_ID IS NOT AVAILABLE");
+ return;
+ }
+
+ // sending message
+ new SendMessageTask(message, chatsCred[0], chatsCred[1], chatsCred[2]).execute();
+ }
+
+ public static class SendMessageTask extends AsyncTask {
+ @NonNull
+ private final String message;
+ private final int patientId, cg_id, channel_id;
+
+ public SendMessageTask(@NonNull String message, int patientId, int cg_id, int channel_id) {
+ this.patientId = patientId;
+ this.cg_id = cg_id;
+ this.channel_id = channel_id;
+ this.message = message;
+ }
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ SocketHelper socketHelper = SocketHelper.getInstance();
+
+ socketHelper.getMessage(new SocketHelper.Callback() {
+ @Override
+ public void onMessageReceived(Message result) {
+ Log.d(GEOFENCE_TAG, "doInBackground: MESSAGE SENT");
+ socketHelper.stopMessages(channel_id + "");
+ socketHelper.closeConnection();
+ }
+
+ @Override
+ public void onMessageSentSuccessfully() {
+ socketHelper.stopMessages(channel_id + "");
+ socketHelper.closeConnection();
+ }
+
+ @Override
+ public void onError(Exception e) {
+ Log.d(GEOFENCE_TAG, "doInBackground: MESSAGE NOT SENT " + e);
+ socketHelper.stopMessages(channel_id + "");
+ socketHelper.closeConnection();
+ }
+ }, cg_id + "", channel_id + "", patientId + "", null);
+
+ if (socketHelper.isConnected()) {
+ Log.d(GEOFENCE_TAG, "doInBackground: ALREADY CONNECTED TO SOCKET");
+ socketHelper.sendMessage(message, cg_id + "", patientId + "", channel_id + "");
+ } else {
+ Log.d(GEOFENCE_TAG, "doInBackground: CONNECTING TO SOCKET");
+
+ socketHelper.establishConnection(new SocketHelper.SockCallBack() {
+ @Override
+ public void onSocketConnected() {
+ Log.d(GEOFENCE_TAG, "doInBackground: SOCKET CONNECTED");
+ socketHelper.sendMessage(message, cg_id + "", patientId + "", channel_id + "");
+ }
+
+ @Override
+ public void onConnectionError(Exception e) {
+ Log.d(GEOFENCE_TAG, "doInBackground: SOCKET CONNECTION ERROR " + e);
+ }
+
+ @Override
+ public void onDisconnected() {
+ Log.d(GEOFENCE_TAG, "doInBackground: SOCKET DISCONNECTED");
+ }
+ });
+
+ }
+
+ return null;
+ }
+ }
+
private void notifyOutOfGeofence(Context context, String senior_address) {
Log.d(GEOFENCE_TAG, "Sending notification to patient");
Log.d(GEOFENCE_TAG, "Current location: " + senior_address);
@@ -95,27 +186,26 @@ public class GeoFenceBroadcastReceiver extends BroadcastReceiver {
body.put("patient_id", AppUtil.getPatientUid(context) + "");
body.put("address", senior_address);
- apiService.notifyOutOfGeoFence(body, "Bearer " + AppUtil.getPatientToken(context))
- .enqueue(new Callback>() {
- @Override
- public void onResponse(Call> call, Response> response) {
- if (response.code() == 200){
- Log.d(GEOFENCE_TAG, "OUT OF GEOFENCE NOTIFICATION SENT SUCCESSFULLY.");
- }else{
- Log.d(GEOFENCE_TAG, "Couldn't notify patient " + response.message());
- }
- }
+ apiService.notifyOutOfGeoFence(body, "Bearer " + AppUtil.getPatientToken(context)).enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ if (response.code() == 200) {
+ Log.d(GEOFENCE_TAG, "OUT OF GEOFENCE NOTIFICATION SENT SUCCESSFULLY.");
+ } else {
+ Log.d(GEOFENCE_TAG, "Couldn't notify patient " + response.message());
+ }
+ }
- @Override
- public void onFailure(Call> call, Throwable t) {
- Log.d(GEOFENCE_TAG, "Couldn't notify patient due to " + t);
- }
- });
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ Log.d(GEOFENCE_TAG, "Couldn't notify patient due to " + t);
+ }
+ });
// getting faster location updates as patient is out of geofence
Intent intent = new Intent(context, LocationService.class);
intent.setAction(LocationService.ACTION_START_LOCATION_UPDATES);
- intent.putExtra(LOCATION_UPDATE_MIN_INTERVAL, 10 * 1000); // every 10 seconds
+ intent.putExtra(LOCATION_UPDATE_MIN_INTERVAL, 5 * 1000); // every 5 seconds
context.startService(intent);
}
diff --git a/app/src/main/java/com/app/simplitend/patientgeofencing/PatientLocationUpdatesReceiver.java b/app/src/main/java/com/app/simplitend/patientgeofencing/PatientLocationUpdatesReceiver.java
index 22271b3..89dd9be 100644
--- a/app/src/main/java/com/app/simplitend/patientgeofencing/PatientLocationUpdatesReceiver.java
+++ b/app/src/main/java/com/app/simplitend/patientgeofencing/PatientLocationUpdatesReceiver.java
@@ -3,6 +3,7 @@ package com.app.simplitend.patientgeofencing;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.location.Address;
import android.location.Location;
import android.os.AsyncTask;
import android.util.Log;
@@ -39,13 +40,13 @@ public class PatientLocationUpdatesReceiver extends BroadcastReceiver {
int patient_id = AppUtil.getPatientUid(context);
String token = AppUtil.getPatientToken(context);
- if (patient_id != -1 && token != null){
+ if (patient_id != -1 && token != null) {
updateRemoteCurrLocation(location, patient_id,
"Bearer " + token);
- }else{
- Log.e(LOCATION_REQUEST_TAG, "CANNOT UPDATE REMOTE LOCATION AS PATIENT_ID OR TOKEN IS -1 OR NULL RESP." );
+ } else {
+ Log.e(LOCATION_REQUEST_TAG, "CANNOT UPDATE REMOTE LOCATION AS PATIENT_ID OR TOKEN IS -1 OR NULL RESP.");
}
- }else{
+ } else {
Log.e(LOCATION_REQUEST_TAG, "LOCATION RECEIVED IS NULL");
}
}
@@ -55,7 +56,7 @@ public class PatientLocationUpdatesReceiver extends BroadcastReceiver {
PatientProfileAPIService apiService = RetrofitHelper.getRetrofit().create(PatientProfileAPIService.class);
Map body = new HashMap<>();
- body.put("patient_id", patient_id+"");
+ body.put("patient_id", patient_id + "");
body.put("lat", location.getLatitude() + "");
body.put("lng", location.getLongitude() + "");
@@ -63,13 +64,13 @@ public class PatientLocationUpdatesReceiver extends BroadcastReceiver {
.enqueue(new Callback>() {
@Override
public void onResponse(Call> call, Response> response) {
- if (response.body() != null){
- if (response.code() == 200 && response.body().error_code == 0){
+ if (response.body() != null) {
+ if (response.code() == 200 && response.body().error_code == 0) {
Log.d(LOCATION_REQUEST_TAG, "LOCATION REMOTE UPDATED.");
- }else{
+ } else {
Log.e(LOCATION_REQUEST_TAG, "LOCATION REMOTE UPDATE FAILED" + response.body().message);
}
- }else{
+ } else {
Log.e(LOCATION_REQUEST_TAG, "LOCATION REMOTE UPDATE FAILED" + response.message());
}
}
@@ -83,11 +84,11 @@ public class PatientLocationUpdatesReceiver extends BroadcastReceiver {
new UpdateRemoteLocationTask(patient_id + "").execute(location);
}
- public static class UpdateRemoteLocationTask extends AsyncTask{
+ public static class UpdateRemoteLocationTask extends AsyncTask {
@NonNull
private final String patientId;
- public UpdateRemoteLocationTask(@NonNull String patientId){
+ public UpdateRemoteLocationTask(@NonNull String patientId) {
this.patientId = patientId;
}
@@ -95,53 +96,44 @@ public class PatientLocationUpdatesReceiver extends BroadcastReceiver {
protected Void doInBackground(Location... locations) {
SocketHelper socketHelper = SocketHelper.getInstance();
- if (socketHelper.isConnected()){
- Log.d(LOCATION_REQUEST_TAG, "doInBackground: ALREADY CONNECTED TO SOCKET");
- socketHelper.getLocationUpdates(patientId, null);
- socketHelper.sendLocationUpdates(locations[0], patientId);
- }else{
- Log.d(LOCATION_REQUEST_TAG, "doInBackground: CONNECTING TO SOCKET");
- socketHelper.getLocationUpdates(patientId, new SocketHelper.Callback() {
- @Override
- public void onMessageReceived(Location result) {
- Log.d(LOCATION_REQUEST_TAG, "LOCATION SENT " + result);
- socketHelper.removeLocationUpdateListener(patientId);
- socketHelper.closeConnection();
- }
+ Log.d(LOCATION_REQUEST_TAG, "doInBackground: CONNECTING TO SOCKET");
- @Override
- public void onMessageSentSuccessfully() {
- socketHelper.removeLocationUpdateListener(patientId);
- socketHelper.closeConnection();
- }
+ socketHelper.getLocationUpdates(patientId, new SocketHelper.Callback() {
+ @Override
+ public void onMessageReceived(Location result) {
+ Log.d(LOCATION_REQUEST_TAG, "LOCATION SENT " + result);
+ socketHelper.removeLocationUpdateListener(patientId);
+ }
- @Override
- public void onError(Exception e) {
- Log.e(LOCATION_REQUEST_TAG, "LOCATION SENDING PROBLEM", e);
- socketHelper.removeLocationUpdateListener(patientId);
- socketHelper.closeConnection();
- }
- });
+ @Override
+ public void onMessageSentSuccessfully() {
+ socketHelper.removeLocationUpdateListener(patientId);
+ }
- socketHelper.establishConnection(new SocketHelper.SockCallBack() {
- @Override
- public void onSocketConnected() {
- Log.d(LOCATION_REQUEST_TAG, "doInBackground: SOCKET CONNECTED");
- socketHelper.sendLocationUpdates(locations[0], patientId);
- }
+ @Override
+ public void onError(Exception e) {
+ Log.e(LOCATION_REQUEST_TAG, "LOCATION SENDING PROBLEM", e);
+ socketHelper.removeLocationUpdateListener(patientId);
+ }
+ });
- @Override
- public void onConnectionError(Exception e) {
- Log.d(LOCATION_REQUEST_TAG, "doInBackground: SOCKET CONNECTION ERROR");
- }
+ socketHelper.establishConnection(new SocketHelper.SockCallBack() {
+ @Override
+ public void onSocketConnected() {
+ Log.d(LOCATION_REQUEST_TAG, "doInBackground: SOCKET CONNECTED");
+ socketHelper.sendLocationUpdates(locations[0], patientId);
+ }
- @Override
- public void onDisconnected() {
- Log.d(LOCATION_REQUEST_TAG, "doInBackground: SOCKET DISCONNECTED");
- }
- });
+ @Override
+ public void onConnectionError(Exception e) {
+ Log.d(LOCATION_REQUEST_TAG, "doInBackground: SOCKET CONNECTION ERROR" + e);
+ }
- }
+ @Override
+ public void onDisconnected() {
+ Log.d(LOCATION_REQUEST_TAG, "doInBackground: SOCKET DISCONNECTED");
+ }
+ });
return null;
}
diff --git a/app/src/main/java/com/app/simplitend/patientprofile/medreminder/ReminderFragment.java b/app/src/main/java/com/app/simplitend/patientprofile/medreminder/ReminderFragment.java
index 0f813f8..0813a6d 100644
--- a/app/src/main/java/com/app/simplitend/patientprofile/medreminder/ReminderFragment.java
+++ b/app/src/main/java/com/app/simplitend/patientprofile/medreminder/ReminderFragment.java
@@ -16,6 +16,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.app.simplitend.R;
import com.app.simplitend.apputils.AppUtil;
+import com.app.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel;
import com.app.simplitend.databinding.RemindersFragmentBinding;
import com.app.simplitend.patientprofile.ProfileContracts;
import com.app.simplitend.patientprofile.medreminder.mvvm.ReminderAdapter;
@@ -327,6 +328,13 @@ public class ReminderFragment extends Fragment implements RecyclerTouchListener.
if (reminderResultList != null && reminderResultList.size() > 0) {
// reminders are present
+
+ // updating global list of reminders
+ if (reminderViewModel.selected_dow == 0){
+ // only updating global list of reminders with current day's reminder list
+ CaregiverMainViewModel.remindersList = reminderResultList;
+ }
+
binding.remindersRv.setVisibility(View.VISIBLE);
binding.noData.setVisibility(View.GONE);
diff --git a/app/src/main/java/com/app/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java b/app/src/main/java/com/app/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java
index cc1154f..0c5414b 100644
--- a/app/src/main/java/com/app/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java
+++ b/app/src/main/java/com/app/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java
@@ -136,7 +136,7 @@ public class ReminderAdapter extends RecyclerView.Adapter 0) {
// reminders are present
+
+ // updating global list of activities for today's day
+ if (routineViewModel.selected_dow == 0) {
+ CaregiverMainViewModel.activityList = routineList;
+ }
+
binding.routineRv.setVisibility(View.VISIBLE);
binding.noData.setVisibility(View.GONE);
diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/SignInFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/SignInFragment.java
index 95eb96d..66b440f 100644
--- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/SignInFragment.java
+++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/SignInFragment.java
@@ -186,7 +186,6 @@ public class SignInFragment extends Fragment implements WelcomeContracts.Registe
public void onResponse(PatientData patientResult, String token) {
// caching user data
PatientDataCache.setPatientData(patientResult);
-
AppUtil.savePatientData(token, patientResult.patientId, requireContext(), true);
progressDialog.dismiss();
diff --git a/app/src/main/res/drawable/ic_cup.png b/app/src/main/res/drawable/ic_cup.png
deleted file mode 100644
index df2110a..0000000
Binary files a/app/src/main/res/drawable/ic_cup.png and /dev/null differ
diff --git a/app/src/main/res/drawable/ic_med_cup.png b/app/src/main/res/drawable/ic_med_cup.png
new file mode 100644
index 0000000..e961f65
Binary files /dev/null and b/app/src/main/res/drawable/ic_med_cup.png differ