From 5159ad7c82ee476d2d37f0af9ed36af7d84e453e Mon Sep 17 00:00:00 2001 From: KajalBari Date: Wed, 13 Mar 2024 19:21:12 +0530 Subject: [PATCH] work pc 2 --- .idea/deploymentTargetDropDown.xml | 15 ++- app/src/main/AndroidManifest.xml | 3 +- .../com/app/simplitend/apputils/AppUtil.java | 5 +- .../apputils/BottomNotificationActivity.java | 106 +++++++++++++++--- .../app/simplitend/apputils/Constants.java | 2 + .../fragments/MyPatientFragment.java | 2 +- .../patient_dashboard/DashBoardActivity.java | 1 + .../FoodReminderReceiver.java | 36 ------ .../FoodReminderNotifyingService.java | 76 +++++++++++++ .../FoodReminderYesReceiver.java | 25 +++++ .../{ => foodreminders}/FoodScheduler.java | 63 ++++++++--- .../fragments/PatientDashboardFragment.java | 15 ++- 12 files changed, 278 insertions(+), 71 deletions(-) delete mode 100644 app/src/main/java/com/app/simplitend/patient_dashboard/FoodReminderReceiver.java create mode 100644 app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderNotifyingService.java create mode 100644 app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderYesReceiver.java rename app/src/main/java/com/app/simplitend/patient_dashboard/{ => foodreminders}/FoodScheduler.java (67%) diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 0c0c338..66de1a5 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -3,7 +3,20 @@ - + + + + + + + + + + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4c9c65b..11ea82f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -260,7 +260,8 @@ android:resource="@xml/file_paths" /> - + + \ No newline at end of file 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 046dec9..c52633d 100644 --- a/app/src/main/java/com/app/simplitend/apputils/AppUtil.java +++ b/app/src/main/java/com/app/simplitend/apputils/AppUtil.java @@ -29,6 +29,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.RawRes; @@ -41,7 +42,7 @@ import com.app.simplitend.databinding.AlertDialogBinding; import com.app.simplitend.databinding.DecisionBottomsheetBinding; import com.app.simplitend.databinding.DoneBottomsheetBinding; import com.app.simplitend.locationupdates.LocationService; -import com.app.simplitend.patient_dashboard.FoodScheduler; +import com.app.simplitend.patient_dashboard.foodreminders.FoodScheduler; import com.app.simplitend.patient_dashboard.PatientMainViewModel; import com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.models.ContactData; import com.app.simplitend.welcome.welcomepatient.mvvm.models.PatientData; @@ -315,7 +316,7 @@ public abstract class AppUtil { } } - public static void dialPhone(Context activity, String phone_number) { + public static void dialPhone(Activity activity, String phone_number) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone_number, null)); if (activity != null) activity.startActivity(intent); diff --git a/app/src/main/java/com/app/simplitend/apputils/BottomNotificationActivity.java b/app/src/main/java/com/app/simplitend/apputils/BottomNotificationActivity.java index e2b1f3d..89b91ea 100644 --- a/app/src/main/java/com/app/simplitend/apputils/BottomNotificationActivity.java +++ b/app/src/main/java/com/app/simplitend/apputils/BottomNotificationActivity.java @@ -8,13 +8,16 @@ import static com.app.simplitend.apputils.AppUtil.MEDICATION_REFILL_NOTIFICATION import static com.app.simplitend.apputils.AppUtil.SOS_NOTIFICATIONS; import static com.app.simplitend.apputils.AppUtil.getCgNotificationPref; import static com.app.simplitend.apputils.Constants.ACTIVITY_EXTRA_KEY; +import static com.app.simplitend.apputils.Constants.MEAL_REMINDER; import static com.app.simplitend.apputils.Constants.MEDICATION_REFILL; import static com.app.simplitend.apputils.Constants.REMINDER_EXTRA_KEY; import static com.app.simplitend.apputils.NotificationService.CONTENT_TYPE_KEY; import static com.app.simplitend.apputils.NotificationService.NOTIFICATION_CONTENT_ID_KEY; import static com.app.simplitend.apputils.NotificationService.NOTIFICATION_SENIOR_ADDRESS_KEY; import static com.app.simplitend.locationupdates.LocationService.EXTRA_BATTERY_PERCENTAGE; +import static com.app.simplitend.patient_dashboard.foodreminders.FoodReminderYesReceiver.WHICH_FOOD_REMINDER; +import android.Manifest; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -22,6 +25,8 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -30,18 +35,31 @@ import com.app.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel; import com.app.simplitend.chats.ChatsActivity; import com.app.simplitend.databinding.BottomSheetAlertBinding; import com.app.simplitend.patient_dashboard.PatientMainViewModel; +import com.app.simplitend.patient_dashboard.foodreminders.FoodReminderNotifyingService; import com.app.simplitend.patientprofile.medreminder.mvvm.models.ReminderResult; import com.app.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails; +import com.app.simplitend.welcome.welcomepatient.mvvm.models.CallResponse; import com.bumptech.glide.Glide; import com.google.android.material.bottomsheet.BottomSheetDialog; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; import java.util.Objects; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + public class BottomNotificationActivity extends AppCompatActivity { + private ActivityResultLauncher callPermission; + private String selected_phone_number = null; + + private BottomSheetDialog bsd = null; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -52,6 +70,14 @@ public class BottomNotificationActivity extends AppCompatActivity { // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // } + callPermission = registerForActivityResult(new ActivityResultContracts.RequestPermission(), + isGranted -> { + if (selected_phone_number == null) return; + + if (bsd != null) bsd.dismiss(); + AppUtil.callPhone(this, selected_phone_number); + }); + if (AppUtil.getCgToken(this) != null){ // handle caregiver bottom sheets handleCaregiverBottomSheets(); @@ -154,7 +180,7 @@ public class BottomNotificationActivity extends AppCompatActivity { if (content_type == null) return; - BottomSheetDialog bsd = new BottomSheetDialog(context, R.style.BottomSheetDialog); + bsd = new BottomSheetDialog(context, R.style.BottomSheetDialog); BottomSheetAlertBinding binding = BottomSheetAlertBinding.inflate(LayoutInflater.from(context)); bsd.setContentView(binding.getRoot()); @@ -209,13 +235,13 @@ public class BottomNotificationActivity extends AppCompatActivity { senior_distance, "Call senior", v -> { CaregiverDataCache.getCaregiverData(context, (careGiverData -> { - bsd.dismiss(); if (careGiverData == null || careGiverData.patientDetails == null) { Toast.makeText(context, "Couldn't load data", Toast.LENGTH_SHORT).show(); return; } - AppUtil.dialPhone(context, careGiverData.patientDetails.phone_number); + selected_phone_number = careGiverData.patientDetails.phone_number; + callPermission.launch(Manifest.permission.CALL_PHONE); }), true); }); @@ -336,13 +362,13 @@ public class BottomNotificationActivity extends AppCompatActivity { doh_distance, "Call senior", v -> { CaregiverDataCache.getCaregiverData(context, (careGiverData -> { - bsd.dismiss(); if (careGiverData == null || careGiverData.patientDetails == null) { Toast.makeText(context, "Couldn't load data", Toast.LENGTH_SHORT).show(); return; } - AppUtil.dialPhone(context, careGiverData.patientDetails.phone_number); + selected_phone_number = careGiverData.patientDetails.phone_number; + callPermission.launch(Manifest.permission.CALL_PHONE); }), true); }); @@ -364,13 +390,13 @@ public class BottomNotificationActivity extends AppCompatActivity { null, "Call senior", v -> { CaregiverDataCache.getCaregiverData(context, (careGiverData -> { - bsd.dismiss(); if (careGiverData == null || careGiverData.patientDetails == null) { Toast.makeText(context, "Couldn't load data", Toast.LENGTH_SHORT).show(); return; } - AppUtil.dialPhone(context, careGiverData.patientDetails.phone_number); + selected_phone_number = careGiverData.patientDetails.phone_number; + callPermission.launch(Manifest.permission.CALL_PHONE); }), true); }); @@ -417,6 +443,26 @@ public class BottomNotificationActivity extends AppCompatActivity { bsd.show(); break; + + case MEAL_REMINDER: + setUpCgBottomSheet(binding, + R.drawable.img_out_of_geo, + title, body, + null, "Call senior", + v -> { + CaregiverDataCache.getCaregiverData(context, (careGiverData -> { + if (careGiverData == null || careGiverData.patientDetails == null) { + Toast.makeText(context, "Couldn't load data", Toast.LENGTH_SHORT).show(); + return; + } + + selected_phone_number = careGiverData.patientDetails.phone_number; + callPermission.launch(Manifest.permission.CALL_PHONE); + }), true); + }); + + bsd.show(); + break; } // already returning @@ -442,7 +488,7 @@ public class BottomNotificationActivity extends AppCompatActivity { if (content_type == null) return; - BottomSheetDialog bsd = new BottomSheetDialog(context, R.style.BottomSheetDialog); + bsd = new BottomSheetDialog(context, R.style.BottomSheetDialog); BottomSheetAlertBinding binding = BottomSheetAlertBinding.inflate(LayoutInflater.from(context)); bsd.setContentView(binding.getRoot()); @@ -466,7 +512,7 @@ public class BottomNotificationActivity extends AppCompatActivity { null, "Close", view -> { bsd.dismiss(); finish(); - }); + }, null, null); bsd.show(); break; @@ -515,7 +561,7 @@ public class BottomNotificationActivity extends AppCompatActivity { routine_description, "Close", view -> { bsd.dismiss(); finish(); - }); + }, null, null); bsd.show(); break; @@ -563,10 +609,36 @@ public class BottomNotificationActivity extends AppCompatActivity { description, "Close", view -> { bsd.dismiss(); finish(); - }); + },null, null); bsd.show(); break; + case MEAL_REMINDER: + setUpSeniorBottomSheet(binding, + R.drawable.img_medication_time, + "Meal reminder", title, + null, "No", view -> { + bsd.dismiss(); + int which_meal = intent.getIntExtra(WHICH_FOOD_REMINDER, -1); + if (which_meal == -1) return; + + FoodReminderNotifyingService.NotificationsApiService apiService = RetrofitHelper.getRetrofit().create(FoodReminderNotifyingService.NotificationsApiService.class); + Map requestBody = new HashMap<>(); + requestBody.put("patient_id", AppUtil.getPatientUid(this)); + requestBody.put("meal_type", which_meal); + + apiService.sendMealNotification("Bearer " + AppUtil.getPatientToken(this), requestBody) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) {} + @Override + public void onFailure(Call> call, Throwable t) {} + }); + }, "Yes",view -> { + bsd.dismiss(); + }); + bsd.show(); + break; } } @@ -574,7 +646,9 @@ public class BottomNotificationActivity extends AppCompatActivity { int img_res, String title, String description_title, String description, String btn_text, - View.OnClickListener btn_clickListener) { + View.OnClickListener btn_clickListener, + String close_txt, + View.OnClickListener close_clickListener) { // binding.image.setImageResource(img_res); Glide.with(binding.image) .load(img_res) @@ -583,7 +657,13 @@ public class BottomNotificationActivity extends AppCompatActivity { binding.descriptionTitle.setText(description_title); binding.description.setText(description); - binding.close.setVisibility(View.GONE); + if (close_clickListener == null){ + binding.close.setVisibility(View.GONE); + }else{ + binding.close.setVisibility(View.VISIBLE); + binding.close.setText(close_txt); + binding.close.setOnClickListener(close_clickListener); + } binding.btn.setText(btn_text); binding.btn.setOnClickListener(btn_clickListener); diff --git a/app/src/main/java/com/app/simplitend/apputils/Constants.java b/app/src/main/java/com/app/simplitend/apputils/Constants.java index 05b33fa..b6703e8 100644 --- a/app/src/main/java/com/app/simplitend/apputils/Constants.java +++ b/app/src/main/java/com/app/simplitend/apputils/Constants.java @@ -17,4 +17,6 @@ public abstract class Constants { public static final String ACTIVITY_EXTRA_KEY = "activity_extra_key"; public static final String MEDICATION_REFILL = "medication_refill"; + + public static final String MEAL_REMINDER = "meals_time_reminder"; } \ No newline at end of file diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java index cab5062..692ac7c 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java @@ -164,7 +164,7 @@ public class MyPatientFragment extends Fragment implements CgHomeContracts.GetGe binding.phoneNumber.setOnClickListener(v -> { if (careGiverData != null && careGiverData.patientDetails != null) { - AppUtil.dialPhone(requireActivity(), careGiverData.patientDetails.phone_number); + AppUtil.callPhone(requireActivity(), careGiverData.patientDetails.phone_number); } }); diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java b/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java index a4dd3e2..f2f7adc 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java @@ -29,6 +29,7 @@ import com.app.simplitend.apputils.Constants; import com.app.simplitend.apputils.PatientDataCache; import com.app.simplitend.caregiverdashboard.mvvm.CgHomeContracts; import com.app.simplitend.caregiverdashboard.mvvm.models.GeoFenceDetails; +import com.app.simplitend.patient_dashboard.foodreminders.FoodScheduler; import io.socket.client.IO; import io.socket.client.Socket; diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/FoodReminderReceiver.java b/app/src/main/java/com/app/simplitend/patient_dashboard/FoodReminderReceiver.java deleted file mode 100644 index 6fe1e3e..0000000 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/FoodReminderReceiver.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.app.simplitend.patient_dashboard; - -import static com.app.simplitend.patient_dashboard.FoodScheduler.FOOD_REMINDER_NOTIFICATION_ID; - -import android.app.NotificationManager; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.util.Log; -import android.widget.Toast; - -public class FoodReminderReceiver extends BroadcastReceiver { - - private static final String TAG = "FoodScheduler"; - - public static final String REMINDER_ACTION = "reminder_action"; - public static final String WHICH_FOOD_REMINDER = "which_food_reminder"; - - @Override - public void onReceive(Context context, Intent intent) { - int which_meal = intent.getIntExtra(WHICH_FOOD_REMINDER, -1); - int action = intent.getIntExtra(REMINDER_ACTION, -1); - - Log.d(TAG, "onReceive: " + which_meal + " " + action); - - if (which_meal != -1 && action != -1){ - if (action == 1){ - // user clicked on yes - Toast.makeText(context, "Yes", Toast.LENGTH_SHORT).show(); - }else{ - // user clicked on no - Toast.makeText(context, "No", Toast.LENGTH_SHORT).show(); - } - } - } -} diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderNotifyingService.java b/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderNotifyingService.java new file mode 100644 index 0000000..2288c35 --- /dev/null +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderNotifyingService.java @@ -0,0 +1,76 @@ +package com.app.simplitend.patient_dashboard.foodreminders; + +import static com.app.simplitend.patient_dashboard.foodreminders.FoodReminderYesReceiver.WHICH_FOOD_REMINDER; +import static com.app.simplitend.patient_dashboard.foodreminders.FoodScheduler.FOOD_REMINDER_NOTIFICATION_ID; + +import android.app.NotificationManager; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.app.simplitend.apputils.AppUtil; +import com.app.simplitend.apputils.RetrofitHelper; +import com.app.simplitend.welcome.welcomepatient.mvvm.models.CallResponse; + +import java.util.HashMap; +import java.util.Map; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.http.Body; +import retrofit2.http.Header; +import retrofit2.http.POST; + +public class FoodReminderNotifyingService extends Service { + + private static final String TAG = "FoodScheduler"; + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + int which_meal = intent.getIntExtra(WHICH_FOOD_REMINDER, -1); + + if (which_meal != -1){ + Log.d(TAG, "NO clicked for " + which_meal); + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.cancel(FOOD_REMINDER_NOTIFICATION_ID + which_meal); + + NotificationsApiService apiService = RetrofitHelper.getRetrofit().create(NotificationsApiService.class); + + Map body = new HashMap<>(); + body.put("patient_id", AppUtil.getPatientUid(this)); + body.put("meal_type", which_meal); + + apiService.sendMealNotification("Bearer " + AppUtil.getPatientToken(this), body) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + Log.d(TAG, "onResponse: " + response); + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.d(TAG, "onFailure: " + t); + } + }); + + } + return super.onStartCommand(intent, flags, startId); + } + + public interface NotificationsApiService{ + + @POST("api/send-notification-to-caregiver-meals-time") + Call> sendMealNotification(@Header("Authorization") String token, @Body Map body); + } +} diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderYesReceiver.java b/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderYesReceiver.java new file mode 100644 index 0000000..f9325da --- /dev/null +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodReminderYesReceiver.java @@ -0,0 +1,25 @@ +package com.app.simplitend.patient_dashboard.foodreminders; + +import static com.app.simplitend.patient_dashboard.foodreminders.FoodScheduler.FOOD_REMINDER_NOTIFICATION_ID; + +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +public class FoodReminderYesReceiver extends BroadcastReceiver { + + private static final String TAG = "FoodScheduler"; + public static final String WHICH_FOOD_REMINDER = "which_food_reminder"; + + @Override + public void onReceive(Context context, Intent intent) { + int which = intent.getIntExtra(WHICH_FOOD_REMINDER, -1); + if (which != -1){ + Log.d(TAG, "YES clicked for : " + which); + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.cancel(FOOD_REMINDER_NOTIFICATION_ID + which); + } + } +} diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/FoodScheduler.java b/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodScheduler.java similarity index 67% rename from app/src/main/java/com/app/simplitend/patient_dashboard/FoodScheduler.java rename to app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodScheduler.java index 2c535fa..f4faeb2 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/FoodScheduler.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/foodreminders/FoodScheduler.java @@ -1,9 +1,11 @@ -package com.app.simplitend.patient_dashboard; +package com.app.simplitend.patient_dashboard.foodreminders; import static android.content.Context.NOTIFICATION_SERVICE; +import static com.app.simplitend.apputils.Constants.MEAL_REMINDER; +import static com.app.simplitend.apputils.NotificationService.CONTENT_TYPE_KEY; +import static com.app.simplitend.apputils.NotificationService.NOTIFICATION_TITLE_KEY; import static com.app.simplitend.locationupdates.LocationService.FOOD_REMINDER_NOTIFICATION_CHANNEL_ID; -import static com.app.simplitend.patient_dashboard.FoodReminderReceiver.REMINDER_ACTION; -import static com.app.simplitend.patient_dashboard.FoodReminderReceiver.WHICH_FOOD_REMINDER; +import static com.app.simplitend.patient_dashboard.foodreminders.FoodReminderYesReceiver.WHICH_FOOD_REMINDER; import android.app.Notification; import android.app.NotificationManager; @@ -21,6 +23,8 @@ import androidx.work.Worker; import androidx.work.WorkerParameters; import com.app.simplitend.R; +import com.app.simplitend.apputils.BottomNotificationActivity; +import com.app.simplitend.patient_dashboard.PatientMainViewModel; import java.util.Calendar; import java.util.concurrent.TimeUnit; @@ -39,9 +43,9 @@ public abstract class FoodScheduler { , lunchMeal, dinnerMeal; static { - breakFastMeal = new Meal(FOOD_TIME.BREAK_FAST, 21, 8); - lunchMeal = new Meal(FOOD_TIME.LUNCH, 20, 23); - dinnerMeal = new Meal(FOOD_TIME.DINNER, 20, 24); + breakFastMeal = new Meal(FOOD_TIME.BREAK_FAST, 18, 56); + lunchMeal = new Meal(FOOD_TIME.LUNCH, 18, 57); + dinnerMeal = new Meal(FOOD_TIME.DINNER, 19, 17); } public static void scheduleFoodReminders(Context context){ @@ -112,18 +116,17 @@ public abstract class FoodScheduler { } private static void showNotification(Context context, String title, int which){ - Intent yesIntent = new Intent(context, FoodReminderReceiver.class); - yesIntent.putExtra(REMINDER_ACTION, 1); + Intent yesIntent = new Intent(context, FoodReminderYesReceiver.class); yesIntent.putExtra(WHICH_FOOD_REMINDER, which); - Intent noIntent = new Intent(context, FoodReminderReceiver.class); - noIntent.putExtra(REMINDER_ACTION, 0); + + Intent noIntent = new Intent(context, FoodReminderNotifyingService.class); noIntent.putExtra(WHICH_FOOD_REMINDER, which); Notification notification = new Notification.Builder(context, FOOD_REMINDER_NOTIFICATION_CHANNEL_ID) .setContentTitle(title) .setSmallIcon(R.mipmap.ic_launcher_round) - .addAction(new Notification.Action.Builder(null, "Yes", PendingIntent.getBroadcast(context, FOOD_REMINDER_NOTIFICATION_ID, yesIntent, PendingIntent.FLAG_IMMUTABLE)).build()) - .addAction(new Notification.Action.Builder(null, "No", PendingIntent.getBroadcast(context, FOOD_REMINDER_NOTIFICATION_ID, noIntent, PendingIntent.FLAG_IMMUTABLE)).build()) + .addAction(new Notification.Action.Builder(null, "Yes", PendingIntent.getBroadcast(context, which, yesIntent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT)).build()) + .addAction(new Notification.Action.Builder(null, "No", PendingIntent.getService(context, which, noIntent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT)).build()) .setPriority(Notification.PRIORITY_HIGH) .build(); @@ -143,8 +146,18 @@ public abstract class FoodScheduler { @NonNull @Override public Result doWork() { - showNotification(context, "Have you done your breakfast?", 0); scheduleAt(context, breakFastMeal.hours, breakFastMeal.minutes, FOOD_TIME.BREAK_FAST); + if (PatientMainViewModel.remindersList == null){ + // app is not open + showNotification(context, "Have you done your breakfast?", 0); + }else { + Intent intent = new Intent(context, BottomNotificationActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(CONTENT_TYPE_KEY, MEAL_REMINDER); + intent.putExtra(WHICH_FOOD_REMINDER, 0); + intent.putExtra(NOTIFICATION_TITLE_KEY, "Did you have your breakfast?"); + context.startActivity(intent); + } return Result.success(); } } @@ -161,8 +174,18 @@ public abstract class FoodScheduler { @NonNull @Override public Result doWork() { - showNotification(context, "Have you done your lunch?", 1); scheduleAt(context, lunchMeal.hours, lunchMeal.minutes, FOOD_TIME.LUNCH); + if (PatientMainViewModel.remindersList == null){ + // app is not open + showNotification(context, "Have you done your lunch?", 1); + }else { + Intent intent = new Intent(context, BottomNotificationActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(CONTENT_TYPE_KEY, MEAL_REMINDER); + intent.putExtra(WHICH_FOOD_REMINDER, 1); + intent.putExtra(NOTIFICATION_TITLE_KEY, "Did you have your lunch?"); + context.startActivity(intent); + } return Result.success(); } } @@ -179,8 +202,18 @@ public abstract class FoodScheduler { @NonNull @Override public Result doWork() { - showNotification(context, "Have you done your dinner?", 2); scheduleAt(context, dinnerMeal.hours, dinnerMeal.minutes, FOOD_TIME.DINNER); + if (PatientMainViewModel.remindersList == null){ + // app is not open + showNotification(context, "Have you done your dinner?", 2); + }else { + Intent intent = new Intent(context, BottomNotificationActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(CONTENT_TYPE_KEY, MEAL_REMINDER); + intent.putExtra(WHICH_FOOD_REMINDER, 2); + intent.putExtra(NOTIFICATION_TITLE_KEY, "Did you have your dinner?"); + context.startActivity(intent); + } return Result.success(); } } 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 78ee188..dd87597 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 @@ -11,6 +11,7 @@ import static com.app.simplitend.patient_dashboard.NotificationsActivity.USER_TO import static com.app.simplitend.patient_dashboard.fragments.CallsActivity.CALL_CONTACT_LIST_KEY; import static com.app.simplitend.patient_dashboard.fragments.CallsActivity.IS_50_CONTACTS_VIEW; +import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; @@ -26,6 +27,8 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; @@ -88,6 +91,8 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac private BroadcastReceiver notification_receiver; + private ActivityResultLauncher callPermissionLauncher; + // date suffixes String[] suffixes = // 0 1 2 3 4 5 6 7 8 9 @@ -124,6 +129,13 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac reminderViewModel = new ViewModelProvider(requireActivity()).get(ReminderViewModel.class); routineViewModel = new ViewModelProvider(requireActivity()).get(RoutineViewModel.class); + callPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), + isGranted -> { + if (patientData == null) return; + + AppUtil.callPhone(requireActivity(), patientData.phone_number); + }); + initViews(); clickEvents(); @@ -369,8 +381,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac Log.d(CALL_BLOCKING_WORk, "CALL BLOCKING DISABLED"); } - AppUtil.callPhone(requireActivity(), phone_number); - + callPermissionLauncher.launch(Manifest.permission.CALL_PHONE); }), true); });