From 55ef83e93afd3806605401725f3bca2482690fd1 Mon Sep 17 00:00:00 2001 From: ADITYA Date: Mon, 24 Jul 2023 09:57:58 +0530 Subject: [PATCH] . --- .../PatientProfileAPIService.java | 34 ++ .../patientprofile/ProfileContracts.java | 34 +- .../medicalinfo/AddMedicalInfoFragment.java | 199 ++++++-- .../medicalinfo/MedicalInfoFragment.java | 88 +++- .../medicalinfo/mvvm/MedicalInfo.java | 20 - .../mvvm/MedicalInfoViewModel.java | 33 ++ .../mvvm/MedicalIntoRepository.java | 97 ++++ .../medicalinfo/mvvm/MedicationInfo.java | 20 + .../medreminder/AddReminderFragment.java | 32 +- .../medreminder/ReminderFragment.java | 11 - .../medreminder/mvvm/ReminderAdapter.java | 4 +- .../setuproutine/AddRoutineFragment.java | 225 ++++++++-- .../setuproutine/RoutineFragment.java | 424 ++++++++++++------ .../setuproutine/mvvm/RoutineAdapter.java | 60 ++- .../setuproutine/mvvm/RoutineDetails.java | 44 ++ .../setuproutine/mvvm/RoutineViewModel.java | 91 +++- .../setuproutine/mvvm/RoutinesRepository.java | 125 ++++++ .../forgotpin/CheckMailFragment.java | 42 +- app/src/main/res/drawable/main_icon.xml | 6 +- .../main/res/layout/check_mail_fragment.xml | 1 + .../main/res/layout/medical_into_fragment.xml | 23 +- .../res/layout/profile_progress_fragment.xml | 18 +- .../main/res/layout/reminders_fragment.xml | 19 - app/src/main/res/layout/routine_fragment.xml | 72 +-- .../main/res/layout/routine_viewholder.xml | 4 +- app/src/main/res/layout/welcome_fragment.xml | 60 +-- app/src/main/res/raw/country_n_states.json | 8 +- app/src/main/res/values/strings.xml | 1 + 28 files changed, 1381 insertions(+), 414 deletions(-) delete mode 100644 app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfo.java create mode 100644 app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfoViewModel.java create mode 100644 app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalIntoRepository.java create mode 100644 app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicationInfo.java create mode 100644 app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutineDetails.java create mode 100644 app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutinesRepository.java diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/PatientProfileAPIService.java b/app/src/main/java/com/ssb/simplitend/patientprofile/PatientProfileAPIService.java index c5b24f1..56c6131 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/PatientProfileAPIService.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/PatientProfileAPIService.java @@ -1,13 +1,16 @@ package com.ssb.simplitend.patientprofile; +import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicationInfo; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.FreqNMedTypeResult; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.Reminder; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.ReminderResult; +import com.ssb.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails; import com.ssb.simplitend.welcome.mvvm.models.CallResponse; import java.util.List; import java.util.Map; +import okhttp3.RequestBody; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; @@ -38,4 +41,35 @@ public interface PatientProfileAPIService { @Header("patientReminderId") int patient_reminder_id, @Header("Authorization") String token); + + // medical information apis + + @Multipart + @POST("api/patient-medical-details-store/{id}") + Call> addNUpdateMedicalInfo(@PartMap Map body, + @Path("id") int patient_id, + @Header("Authorization") String token); + + @GET("api/get-medical-details/{id}") + Call> getMedicalInfo(@Path("id") int patient_id, + @Header("Authorization") String token); + + + // routines apis + + @GET("api/get-routine-details/{id}") + Call>> getRoutines(@Path("id") int patient_id, + @Query("weekday") int week_day, + @Header("Authorization") String token); + + @POST("api/patient-routine-store/{id}") + Call> addNUpdateRoutine(@Path("id") int patient_id, + @Body RoutineDetails routineDetails, + @Header("Authorization") String token); + + @POST("api/patient-routine-delete") + Call> deleteRoutine(@Header("patientId") int patient_id, + @Header("patientRoutineId") int patient_routine_id, + @Header("Authorization") String token); + } diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileContracts.java b/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileContracts.java index b34f600..85b8bf8 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileContracts.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileContracts.java @@ -1,7 +1,9 @@ package com.ssb.simplitend.patientprofile; +import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicationInfo; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.FreqNMedTypeResult; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.ReminderResult; +import com.ssb.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails; import java.util.List; @@ -27,9 +29,39 @@ public interface ProfileContracts { } interface ReminderDeleteCallback{ - void onReminderDeleted(int adapterPostion); + void onReminderDeleted(int adapterPosition); void onReminderDeleteFailed(Throwable t, String message); } + interface AddMedicalIntoCallback{ + void onMedicalInfoAdded(MedicationInfo medicationInfo); + + void onMedicalInfoAddFailed(Throwable t, String message); + } + + interface GetMedicationInfoCallback{ + void onMedicalInfoFetched(MedicationInfo medicationInfo); + + void onMedicationInfoFetchedFailed(Throwable t, String message); + } + + interface GetRoutinesCallback{ + void onRoutinesFetched(List routineList); + + void onRoutinesFetchedFailed(Throwable t, String message); + } + + interface RoutineDeleteCallback{ + void onRoutineDeleted(int adapterPosition); + + void onRoutineDeleteFailed(Throwable t, String message); + } + + interface AddNUpdateRoutineCallback{ + void onRoutineAdded(RoutineDetails medicationInfo); + + void onRoutineAddFailed(Throwable t, String message); + } + } diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java index 23861df..d3117b3 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java @@ -1,27 +1,43 @@ package com.ssb.simplitend.patientprofile.medicalinfo; +import android.app.ProgressDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; import com.ssb.simplitend.apputils.ProfileProgress; -import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicalInfo; import com.ssb.simplitend.databinding.AddMedicalInfoBinding; +import com.ssb.simplitend.patientprofile.ProfileContracts; +import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicalInfoViewModel; +import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicationInfo; -public class AddMedicalInfoFragment extends Fragment { +import java.util.HashMap; +import java.util.Map; + +import okhttp3.MediaType; +import okhttp3.RequestBody; + +public class AddMedicalInfoFragment extends Fragment implements + ProfileContracts.AddMedicalIntoCallback { // view binding protected AddMedicalInfoBinding binding; - private MedicalInfo medicalInfo; + private MedicalInfoViewModel medicalInfoViewModel; + + private ProgressDialog progressDialog; + + private MedicationInfo medicalInfo; public static final String MEDICAL_INFO_KEY = "medical_info"; public AddMedicalInfoFragment(){ @@ -33,6 +49,8 @@ public class AddMedicalInfoFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = AddMedicalInfoBinding.inflate(inflater, container, false); + medicalInfoViewModel = new ViewModelProvider(requireActivity()).get(MedicalInfoViewModel.class); + initViews(); clickEvents(); @@ -41,24 +59,24 @@ public class AddMedicalInfoFragment extends Fragment { } private void initViews() { + progressDialog = new ProgressDialog(requireContext()); + Bundle bundle = getArguments(); - if (bundle != null){ - medicalInfo = (MedicalInfo) bundle.getSerializable(MEDICAL_INFO_KEY); - if (medicalInfo != null){ - binding.title.setText(getString(R.string.edit_medical_information)); - setLayoutInfo(); - } + if (bundle != null && bundle.getSerializable(MEDICAL_INFO_KEY) != null){ + medicalInfo = (MedicationInfo) bundle.getSerializable(MEDICAL_INFO_KEY); + setLayoutInfo(); } + } private void setLayoutInfo() { if (medicalInfo == null) return; binding.diagnosis.setText(medicalInfo.diagnosis); - binding.primaryDoc.setText(medicalInfo.primary_doc); - binding.docContact.setText(medicalInfo.doc_contact); - binding.hospitalPref.setText(medicalInfo.hospital_pref); + binding.primaryDoc.setText(medicalInfo.primary_care_doctor); + binding.docContact.setText(medicalInfo.doctor_phone_number); + binding.hospitalPref.setText(medicalInfo.hospital_preference); binding.allergies.setText(medicalInfo.allergies); binding.dietRestrict.setText(medicalInfo.diet_restriction); @@ -72,26 +90,145 @@ public class AddMedicalInfoFragment extends Fragment { binding.addBtn.setOnClickListener(v -> { ProfileProgress.MEDICAL_INFO_ADDED = true; - if (medicalInfo != null){ - // save changes animation - - AppUtil.showSOSDecision(requireContext(), - getString(R.string.make_changes), getString(R.string.yes), getString(R.string.no), - v2 -> { - // yes click - AppUtil.showAnimateDBS(requireContext(), getString(R.string.changes_successful), - R.raw.done_anim_primary, 3000, - v4 -> { - Navigation.findNavController(v).popBackStack(); - }); - - }, v3 -> { - // no click - }); - - }else{ - Navigation.findNavController(v).popBackStack(); + if (allOkay()){ + if (medicalInfo != null){ + AppUtil.showSOSDecision(requireContext(), + getString(R.string.make_changes), getString(R.string.yes), getString(R.string.no), + yes -> { + // yes click + addMedicationInfo(); + }, no -> { + // no click + }); + }else{ + addMedicationInfo(); + } } }); } + + private void addMedicationInfo() { + + progressDialog.setTitle("Please wait"); + progressDialog.setMessage("while we add your medical information."); + progressDialog.setCancelable(false); + progressDialog.show(); + + Map body = new HashMap<>(); + + RequestBody diagnosis_body = RequestBody.create(binding.diagnosis.getText().toString().trim(), + MediaType.parse("text/plain")); + body.put("diagnosis", diagnosis_body); + + RequestBody primary_doc_body = RequestBody.create(binding.primaryDoc.getText().toString().trim(), + MediaType.parse("text/plain")); + body.put("primary_care_doctor", primary_doc_body); + + RequestBody doc_contact_body = RequestBody.create(binding.docContact.getText().toString().trim(), + MediaType.parse("text/plain")); + body.put("doctor_phone_number", doc_contact_body); + + RequestBody hospital_pref_body = RequestBody.create(binding.hospitalPref.getText().toString().trim(), + MediaType.parse("text/plain")); + body.put("hospital_preference", hospital_pref_body); + + RequestBody allergies_body = RequestBody.create(binding.allergies.getText().toString().trim(), + MediaType.parse("text/plain")); + body.put("allergies", allergies_body); + + RequestBody diet_restriction_body = RequestBody.create(binding.dietRestrict.getText().toString().trim(), + MediaType.parse("text/plain")); + body.put("diet_restriction", diet_restriction_body); + + RequestBody is_update_body; + if (medicalInfo == null){ + // intent is to add medical info + // thus, is_update is 0 + + is_update_body = RequestBody.create("0", + MediaType.parse("text/plain")); + + }else{ + // intent is to update info + // thus, is_update is 1 + + is_update_body = RequestBody.create("1", + MediaType.parse("text/plain")); + } + + body.put("is_update", is_update_body); + + String token = "Bearer " + AppUtil.getUserToken(requireContext()); + + medicalInfoViewModel.addNUpdateMedicalInfo(body, + AppUtil.getPatientUid(requireContext()), + token, + this); + + } + + private boolean allOkay() { + boolean allOkay = true; + + if (binding.diagnosis.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.diagnosis.setError("Required"); + } + + if (binding.primaryDoc.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.primaryDoc.setError("Required"); + } + + if (binding.docContact.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.docContact.setError("Required"); + } + + if (binding.hospitalPref.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.hospitalPref.setError("Required"); + } + + if (binding.allergies.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.allergies.setError("Required"); + } + + if (binding.dietRestrict.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.dietRestrict.setError("Required"); + } + + return allOkay; + } + + @Override + public void onMedicalInfoAdded(MedicationInfo medicationInfo) { + progressDialog.dismiss(); + + if (this.medicalInfo == null){ + Toast.makeText(requireContext(), "Medical information added successfully", Toast.LENGTH_SHORT).show(); + Navigation.findNavController(binding.getRoot()).popBackStack(R.id.medicalInfoFragment, false); + }else{ + AppUtil.showAnimateDBS(requireContext(), getString(R.string.changes_successful), + R.raw.done_anim_primary, 3000, + yes -> { + Navigation.findNavController(binding.getRoot()).popBackStack(R.id.medicalInfoFragment, false); + }); + } + } + + @Override + public void onMedicalInfoAddFailed(Throwable t, String message) { + progressDialog.dismiss(); + + AppUtil.showAlert(requireContext(), + getString(R.string.something_went_wrong), + message, + getString(R.string.ok), + ((dialog, which) -> { + dialog.dismiss(); + }), null, null); + } } diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/MedicalInfoFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/MedicalInfoFragment.java index b7fca8d..ea88424 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/MedicalInfoFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/MedicalInfoFragment.java @@ -1,25 +1,39 @@ package com.ssb.simplitend.patientprofile.medicalinfo; +import static com.ssb.simplitend.patientprofile.medicalinfo.AddMedicalInfoFragment.MEDICAL_INFO_KEY; + +import android.app.ProgressDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.AppUtil; import com.ssb.simplitend.apputils.ProfileProgress; import com.ssb.simplitend.databinding.MedicalIntoFragmentBinding; -import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicalInfo; +import com.ssb.simplitend.patientprofile.ProfileContracts; +import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicalInfoViewModel; +import com.ssb.simplitend.patientprofile.medicalinfo.mvvm.MedicationInfo; -public class MedicalInfoFragment extends Fragment { +public class MedicalInfoFragment extends Fragment implements ProfileContracts.GetMedicationInfoCallback { // view binding protected MedicalIntoFragmentBinding binding; + private MedicalInfoViewModel medicalInfoViewModel; + + private ProgressDialog progressDialog; + + private MedicationInfo medicationInfo; + public MedicalInfoFragment(){ // required empty const. } @@ -29,6 +43,8 @@ public class MedicalInfoFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = MedicalIntoFragmentBinding.inflate(inflater, container, false); + medicalInfoViewModel = new ViewModelProvider(requireActivity()).get(MedicalInfoViewModel.class); + initViews(); clickEvents(); @@ -37,17 +53,18 @@ public class MedicalInfoFragment extends Fragment { } private void initViews() { + progressDialog = new ProgressDialog(requireContext()); - if (ProfileProgress.MEDICAL_INFO_ADDED){ - binding.medicalInfo.setVisibility(View.VISIBLE); - binding.noData.setVisibility(View.GONE); - binding.addMedInfo.setVisibility(View.GONE); - }else{ - binding.noData.setVisibility(View.VISIBLE); - binding.medicalInfo.setVisibility(View.GONE); - binding.addMedInfo.setVisibility(View.VISIBLE); - } + // loading medical info + progressDialog.setTitle("Please wait.."); + progressDialog.setMessage("while we load your medical information."); + progressDialog.setCancelable(false); + progressDialog.show(); + String token = "Bearer " + AppUtil.getUserToken(requireContext()); + + medicalInfoViewModel.getMedicalInfo(AppUtil.getPatientUid(requireContext()), + token, this); } private void clickEvents() { @@ -61,16 +78,53 @@ public class MedicalInfoFragment extends Fragment { binding.editBtn.setOnClickListener(v -> { - Bundle bundle = new Bundle(); - MedicalInfo medicalInfo = new MedicalInfo("Cognitive impairment and memeory loss.", - "Dr. Sandeep Kanojia", "+63456398456", "Baycrest Health Sciences", - "Latex allergy", "Lorum ipsum dummy is simple dummy"); - bundle.putSerializable(AddMedicalInfoFragment.MEDICAL_INFO_KEY, medicalInfo); + if (medicationInfo != null){ + Bundle bundle = new Bundle(); + + bundle.putSerializable(MEDICAL_INFO_KEY, medicationInfo); + + Navigation.findNavController(v).navigate(R.id.action_medicalInfoFragment_to_addMedicalInfoFragment, bundle); + } - Navigation.findNavController(v).navigate(R.id.action_medicalInfoFragment_to_addMedicalInfoFragment, bundle); }); binding.done.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); } + + private void loadMedicalInfo(MedicationInfo medicationInfo) { + binding.diagnosis.setText(medicationInfo.diagnosis); + binding.primaryDoc.setText(medicationInfo.primary_care_doctor); + binding.docContact.setText(medicationInfo.doctor_phone_number); + binding.hospitalPref.setText(medicationInfo.hospital_preference); + binding.allergies.setText(medicationInfo.allergies); + binding.dietRestrict.setText(medicationInfo.diet_restriction); + } + + @Override + public void onMedicalInfoFetched(MedicationInfo medicationInfo) { + this.medicationInfo = medicationInfo; + progressDialog.dismiss(); + + if (medicationInfo != null){ + binding.medicalInfo.setVisibility(View.VISIBLE); + binding.noData.setVisibility(View.GONE); + binding.addMedInfo.setVisibility(View.GONE); + binding.editBtn.setVisibility(View.VISIBLE); + + loadMedicalInfo(medicationInfo); + }else{ + binding.noData.setVisibility(View.VISIBLE); + binding.medicalInfo.setVisibility(View.GONE); + binding.addMedInfo.setVisibility(View.VISIBLE); + binding.editBtn.setVisibility(View.GONE); + } + } + + @Override + public void onMedicationInfoFetchedFailed(Throwable t, String message) { + progressDialog.dismiss(); + + Toast.makeText(requireContext(), "Couldn't load medical information.", Toast.LENGTH_SHORT).show(); + } } diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfo.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfo.java deleted file mode 100644 index 1ff6531..0000000 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfo.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ssb.simplitend.patientprofile.medicalinfo.mvvm; - -import java.io.Serializable; - -public class MedicalInfo implements Serializable { - - public String diagnosis, primary_doc, doc_contact, hospital_pref - , allergies, diet_restriction; - - public MedicalInfo() {} - - public MedicalInfo(String diagnosis, String primary_doc, String doc_contact, String hospital_pref, String allergies, String diet_restriction) { - this.diagnosis = diagnosis; - this.primary_doc = primary_doc; - this.doc_contact = doc_contact; - this.hospital_pref = hospital_pref; - this.allergies = allergies; - this.diet_restriction = diet_restriction; - } -} diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfoViewModel.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfoViewModel.java new file mode 100644 index 0000000..6f2a90b --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalInfoViewModel.java @@ -0,0 +1,33 @@ +package com.ssb.simplitend.patientprofile.medicalinfo.mvvm; + +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModel; + +import com.ssb.simplitend.patientprofile.ProfileContracts; + +import java.util.Map; + +import okhttp3.RequestBody; + +public class MedicalInfoViewModel extends ViewModel { + + private final MedicalIntoRepository medicalIntoRepository; + + public MedicalInfoViewModel(){ + medicalIntoRepository = MedicalIntoRepository.getMedicalIntoRepository(); + } + + public void addNUpdateMedicalInfo(Map body, + int patient_id, + String token, + @NonNull ProfileContracts.AddMedicalIntoCallback medicalIntoCallback){ + medicalIntoRepository.addNUpdateMedicalInfo(body, patient_id, token, medicalIntoCallback); + } + + public void getMedicalInfo(int patient_id, + String token, + @NonNull ProfileContracts.GetMedicationInfoCallback medicationInfoCallback){ + medicalIntoRepository.getMedicalInfo(patient_id, token, medicationInfoCallback); + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalIntoRepository.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalIntoRepository.java new file mode 100644 index 0000000..f797f53 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicalIntoRepository.java @@ -0,0 +1,97 @@ +package com.ssb.simplitend.patientprofile.medicalinfo.mvvm; + +import android.util.Log; + +import androidx.annotation.NonNull; + +import com.ssb.simplitend.apputils.RetrofitHelper; +import com.ssb.simplitend.patientprofile.PatientProfileAPIService; +import com.ssb.simplitend.patientprofile.ProfileContracts; +import com.ssb.simplitend.welcome.mvvm.models.CallResponse; + +import java.util.Map; + +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class MedicalIntoRepository { + + private static final String TAG = "MedicalIntoRepository"; + + private static MedicalIntoRepository medicalIntoRepository; + + private PatientProfileAPIService apiService; + + private MedicalIntoRepository(){ + apiService = RetrofitHelper.getRetrofit().create(PatientProfileAPIService.class); + } + + public static synchronized MedicalIntoRepository getMedicalIntoRepository(){ + if (medicalIntoRepository == null){ + medicalIntoRepository = new MedicalIntoRepository(); + } + + return medicalIntoRepository; + } + + public void addNUpdateMedicalInfo(Map body, + int patient_id, + String token, + @NonNull ProfileContracts.AddMedicalIntoCallback medicalIntoCallback){ + + apiService.addNUpdateMedicalInfo(body, patient_id, token) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.body() != null){ + if (response.body().status != 200 || response.body().result == null){ + medicalIntoCallback.onMedicalInfoAddFailed(new Exception(), response.body().message); + return; + } + + medicalIntoCallback.onMedicalInfoAdded(response.body().result); + }else{ + medicalIntoCallback.onMedicalInfoAddFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + medicalIntoCallback.onMedicalInfoAddFailed(new Exception(), "Please try again later."); + Log.e(TAG, "onFailure: ", t); + } + }); + + } + + public void getMedicalInfo(int patient_id, + String token, + @NonNull ProfileContracts.GetMedicationInfoCallback medicationInfoCallback){ + + apiService.getMedicalInfo(patient_id, token) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.body() != null){ + if (response.body().status != 200){ + medicationInfoCallback.onMedicationInfoFetchedFailed(new Exception(), response.body().message); + return; + } + + medicationInfoCallback.onMedicalInfoFetched(response.body().result); + }else{ + medicationInfoCallback.onMedicationInfoFetchedFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + medicationInfoCallback.onMedicationInfoFetchedFailed(new Exception(), "Please try again later."); + } + }); + + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicationInfo.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicationInfo.java new file mode 100644 index 0000000..0e5d3c7 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medicalinfo/mvvm/MedicationInfo.java @@ -0,0 +1,20 @@ +package com.ssb.simplitend.patientprofile.medicalinfo.mvvm; + +import java.io.Serializable; + +public class MedicationInfo implements Serializable { + public String patient_xid; + public String diagnosis; + public String primary_care_doctor; + public String doctor_phone_number; + public String hospital_preference; + public String allergies; + public String diet_restriction; + public String updated_at; + public String created_at; + public int id; + + public String is_update; + + public MedicationInfo(){} +} diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/AddReminderFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/AddReminderFragment.java index aac2d42..1ce84ce 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/AddReminderFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/AddReminderFragment.java @@ -111,8 +111,21 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh AppUtil.closeKeyboard(requireActivity()); if (allOkay()) { - adReminder(); + + if (reminder != null){ + AppUtil.showSOSDecision(requireContext(), getString(R.string.make_changes), + getString(R.string.yes), getString(R.string.no), + v1 -> { + // yes click + adReminder(); + }, v2 -> { + // no click + }); + }else{ + adReminder(); + } } + }); } @@ -585,18 +598,11 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh } else { - AppUtil.showSOSDecision(requireContext(), getString(R.string.make_changes), - getString(R.string.yes), getString(R.string.no), - v1 -> { - // yes click - AppUtil.showAnimateDBS(requireContext(), - getString(R.string.changes_successful), R.raw.done_anim_primary, - 3000, v3 -> { - // here v3 is null - Navigation.findNavController(binding.getRoot()).popBackStack(R.id.reminderFragment, false, true); - }); - }, v2 -> { - // no click + AppUtil.showAnimateDBS(requireContext(), + getString(R.string.changes_successful), R.raw.done_anim_primary, + 3000, v3 -> { + // here v3 is null + Navigation.findNavController(binding.getRoot()).popBackStack(R.id.reminderFragment, false, true); }); } } diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/ReminderFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/ReminderFragment.java index db82838..41d5f20 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/ReminderFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/ReminderFragment.java @@ -21,7 +21,6 @@ import com.ssb.simplitend.databinding.RemindersFragmentBinding; import com.ssb.simplitend.patientprofile.ProfileContracts; import com.ssb.simplitend.patientprofile.medreminder.mvvm.ReminderAdapter; import com.ssb.simplitend.patientprofile.medreminder.mvvm.ReminderViewModel; -import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.Reminder; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.ReminderResult; import java.util.ArrayList; @@ -108,16 +107,6 @@ public class ReminderFragment extends Fragment implements RecyclerTouchListener. binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); - binding.editBtn.setOnClickListener(v -> { - Bundle bundle = new Bundle(); - Reminder reminder = new Reminder("Vitamin D3", "05:00 PM", "5 Capsules"); - - bundle.putSerializable(AddReminderFragment.REMINDER_KEY, reminder); - - Navigation.findNavController(binding.getRoot()) - .navigate(R.id.action_reminderFragment_to_addReminderFragment, bundle); - }); - } private void loadReminderList(int day_of_week){ diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java b/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java index 60ea5c7..ec9749a 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/medreminder/mvvm/ReminderAdapter.java @@ -23,12 +23,12 @@ public class ReminderAdapter extends ListAdapter DIFF_CALLBACK = new DiffUtil.ItemCallback() { @Override public boolean areItemsTheSame(@NonNull ReminderResult oldItem, @NonNull ReminderResult newItem) { - return oldItem.id == newItem.id; + return false; } @Override public boolean areContentsTheSame(@NonNull ReminderResult oldItem, @NonNull ReminderResult newItem) { - return oldItem.equals(newItem); + return false; } }; diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/AddRoutineFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/AddRoutineFragment.java index 1b1526d..2392490 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/AddRoutineFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/AddRoutineFragment.java @@ -1,6 +1,7 @@ package com.ssb.simplitend.patientprofile.setuproutine; import android.annotation.SuppressLint; +import android.app.ProgressDialog; import android.app.TimePickerDialog; import android.os.Bundle; import android.view.LayoutInflater; @@ -9,23 +10,30 @@ import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.content.res.AppCompatResources; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; import com.ssb.simplitend.databinding.AddRoutineFragmentBinding; -import com.ssb.simplitend.patientprofile.setuproutine.mvvm.Routine; +import com.ssb.simplitend.patientprofile.ProfileContracts; +import com.ssb.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails; +import com.ssb.simplitend.patientprofile.setuproutine.mvvm.RoutineViewModel; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Date; import java.util.Locale; +import java.util.Objects; -public class AddRoutineFragment extends Fragment implements CompoundButton.OnCheckedChangeListener{ +public class AddRoutineFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, + ProfileContracts.AddNUpdateRoutineCallback { // view binding protected AddRoutineFragmentBinding binding; @@ -33,7 +41,11 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe private boolean[] week_state; public static final String ROUTINE_KEY = "routine_key"; - private Routine routine; + private RoutineDetails routine; + + private RoutineViewModel routineViewModel; + + private ProgressDialog progressDialog; public AddRoutineFragment() { // required empty const. @@ -44,6 +56,8 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = AddRoutineFragmentBinding.inflate(inflater, container, false); + routineViewModel = new ViewModelProvider(requireActivity()).get(RoutineViewModel.class); + initViews(); clickEvents(); @@ -54,10 +68,14 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe @SuppressLint("ClickableViewAccessibility") private void initViews() { + progressDialog = new ProgressDialog(requireContext()); + + setUpWeekSelection(); + Bundle bundle = getArguments(); - if (bundle != null){ - routine = (Routine) bundle.getSerializable(ROUTINE_KEY); + if (bundle != null && bundle.getSerializable(ROUTINE_KEY) != null){ + routine = (RoutineDetails) bundle.getSerializable(ROUTINE_KEY); setLayoutDetails(); } @@ -83,42 +101,158 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe binding.title.setText(getString(R.string.edit_routine)); binding.addRoutine.setText(getString(R.string.save)); - binding.routineName.setText(routine.routine_name); + binding.routineName.setText(routine.routine_title); binding.routineDescription.setText(routine.routine_description); - binding.startTime.setText(routine.start_time_str); - binding.endTime.setText(routine.end_time_str); + SimpleDateFormat input_sdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); + SimpleDateFormat output_sdf = new SimpleDateFormat("hh:mm a", Locale.getDefault()); + + String start_time, end_time; + + try { + Date start_date = input_sdf.parse(routine.routine_start_time); + start_time = output_sdf.format(Objects.requireNonNull(start_date)); + + Date end_date = input_sdf.parse(routine.routine_end_time); + end_time = output_sdf.format(Objects.requireNonNull(end_date)); + } catch (Exception e) { + start_time = routine.routine_start_time; + end_time = routine.routine_end_time; + } + + binding.startTime.setText(start_time); + binding.endTime.setText(end_time); + + binding.startTime.setHint(routine.routine_start_time); + binding.endTime.setHint(routine.routine_end_time); + + setSelectionState(0, week_state[0] = routine.sun.equals("1")); + setSelectionState(1, week_state[1] = routine.mon.equals("1")); + setSelectionState(2, week_state[2] = routine.tue.equals("1")); + setSelectionState(3, week_state[3] = routine.wed.equals("1")); + setSelectionState(4, week_state[4] = routine.thu.equals("1")); + setSelectionState(5, week_state[5] = routine.fri.equals("1")); + setSelectionState(6, week_state[6] = routine.sat.equals("1")); } private void clickEvents() { binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); - binding.startTime.setOnClickListener(v -> getTime(binding.startTime)); - binding.endTime.setOnClickListener(v -> getTime(binding.endTime)); + binding.startTime.setOnClickListener(v -> { + AppUtil.closeKeyboard(requireActivity()); + getTime(binding.startTime); + }); + binding.endTime.setOnClickListener(v -> { + AppUtil.closeKeyboard(requireActivity()); + getTime(binding.endTime); + }); binding.addRoutine.setOnClickListener(v -> { - if (routine == null){ - Navigation.findNavController(v).popBackStack(R.id.routineFragment, false, true); - }else{ - AppUtil.showSOSDecision(requireContext(), getString(R.string.make_changes), - getString(R.string.yes), getString(R.string.no), - v1 -> { - // yes click - AppUtil.showAnimateDBS(requireContext(), - getString(R.string.changes_successful), R.raw.done_anim_primary, - 3000, v3 -> { - // here v3 is null - Navigation.findNavController(v).popBackStack(R.id.routineFragment, false, true); - }); - }, v2 -> { - // no click - }); + AppUtil.closeKeyboard(requireActivity()); + + if (allOkay()) { + + if (routine != null){ + AppUtil.showSOSDecision(requireContext(), getString(R.string.make_changes), + getString(R.string.yes), getString(R.string.no), + v1 -> { + // yes click + addRoutine(); + }, v2 -> { + // no click + }); + }else{ + addRoutine(); + } } }); - setUpWeekSelection(); + } + private void addRoutine() { + + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we save your reminder."); + progressDialog.setCancelable(false); + progressDialog.show(); + + RoutineDetails routineDetails = new RoutineDetails(); + + routineDetails.routine_title = binding.routineName.getText().toString().trim(); + routineDetails.routine_description = binding.routineDescription.getText().toString().trim(); + + // saving the actual format of time i.e. HH:mm:ss as hint + // and saving the formatted time as text i.e. hh:mm a + routineDetails.routine_start_time = binding.startTime.getHint().toString(); + routineDetails.routine_end_time = binding.endTime.getHint().toString(); + + routineDetails.sun = week_state[0] ? "1" : "0"; + routineDetails.mon = week_state[1] ? "1" : "0"; + routineDetails.tue = week_state[2] ? "1" : "0"; + routineDetails.wed = week_state[3] ? "1" : "0"; + routineDetails.thu = week_state[4] ? "1" : "0"; + routineDetails.fri = week_state[5] ? "1" : "0"; + routineDetails.sat = week_state[6] ? "1" : "0"; + + if (routine != null) { + // this intent is to update the reminder + routineDetails.is_update = 1; + routineDetails.patientRoutineId = routine.id; + } else { + routineDetails.is_update = 0; + } + + String token = "Bearer " + AppUtil.getUserToken(requireContext()); + + routineViewModel.addNUpdateRoutine(AppUtil.getPatientUid(requireContext()), + routineDetails, + token, + this); + + } + + private boolean allOkay() { + boolean allOkay = true; + + if (binding.routineName.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.routineName.setError("Required"); + } + + if (binding.routineDescription.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.routineDescription.setError("Required"); + } + + if (binding.startTime.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.startTime.setError("Required"); + } + + if (binding.endTime.getText().toString().trim().isEmpty()){ + allOkay = false; + binding.endTime.setError("Required"); + } + + if (allOkay) { + boolean anyOneSelected = false; + for (int i = 0; i < week_state.length; i++) { + if (week_state[i]) { + // this week day is selected + anyOneSelected = true; + break; + } + } + + if (!anyOneSelected) { + // none are selected + allOkay = false; + Toast.makeText(requireContext(), "Select a week day.", Toast.LENGTH_SHORT).show(); + } + } + + return allOkay; } // set selection and un-selection of week day @@ -151,9 +285,11 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe cal.set(Calendar.MINUTE, minute); SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a", Locale.getDefault()); + SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); String selected_time = sdf.format(cal.getTime()); textView.setText(selected_time); + textView.setHint(sdf2.format(cal.getTime())); }, calendar.getTime().getHours(), calendar.getTime().getMinutes(), false); @@ -265,4 +401,39 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe setSelectionState(i, week_state[i] = isChecked); } } + + + // add update routine callback + @Override + public void onRoutineAdded(RoutineDetails medicationInfo) { + progressDialog.dismiss(); + + if (this.routine == null) { + Toast.makeText(requireContext(), "Routine added successfully.", Toast.LENGTH_SHORT).show(); + + Navigation.findNavController(binding.getRoot()) + .popBackStack(R.id.routineFragment, false, true); + + } else { + + AppUtil.showAnimateDBS(requireContext(), + getString(R.string.changes_successful), R.raw.done_anim_primary, + 3000, v3 -> { + // here v3 is null + Navigation.findNavController(binding.getRoot()).popBackStack(R.id.routineFragment, false, true); + }); + } + } + + @Override + public void onRoutineAddFailed(Throwable t, String message) { + progressDialog.dismiss(); + AppUtil.showAlert(requireContext(), + getString(R.string.something_went_wrong), + message, + getString(R.string.ok), + ((dialog, which) -> { + dialog.dismiss(); + }), null, null); + } } diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/RoutineFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/RoutineFragment.java index 1928c90..156e7ec 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/RoutineFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/RoutineFragment.java @@ -2,10 +2,12 @@ package com.ssb.simplitend.patientprofile.setuproutine; import static com.ssb.simplitend.patientprofile.setuproutine.AddRoutineFragment.ROUTINE_KEY; +import android.app.ProgressDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -17,23 +19,31 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; import com.ssb.simplitend.databinding.RoutineFragmentBinding; -import com.ssb.simplitend.patientprofile.setuproutine.mvvm.Routine; +import com.ssb.simplitend.patientprofile.ProfileContracts; +import com.ssb.simplitend.patientprofile.medreminder.WeekDayViewHolder; import com.ssb.simplitend.patientprofile.setuproutine.mvvm.RoutineAdapter; +import com.ssb.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails; import com.ssb.simplitend.patientprofile.setuproutine.mvvm.RoutineViewModel; -public class RoutineFragment extends Fragment implements RoutineAdapter.ClickListener, RoutineAdapter.DeleteClickListener { +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class RoutineFragment extends Fragment implements RoutineAdapter.ClickListener, + RoutineAdapter.DeleteClickListener, + ProfileContracts.GetRoutinesCallback, + ProfileContracts.RoutineDeleteCallback { // view binding protected RoutineFragmentBinding binding; - // selection state for week days - /* - true -> date selected - false -> date unselected - */ - private boolean[] selection_state; + private RoutineAdapter routineAdapter; - private RoutineViewModel viewModel; + private ArrayList weekDayViewsList; + + private RoutineViewModel routineViewModel; + + private ProgressDialog progressDialog; public RoutineFragment(){ // required empty const. @@ -44,6 +54,8 @@ public class RoutineFragment extends Fragment implements RoutineAdapter.ClickLis public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = RoutineFragmentBinding.inflate(inflater, container, false); + routineViewModel = new ViewModelProvider(requireActivity()).get(RoutineViewModel.class); + initViews(); clickEvents(); @@ -52,163 +64,293 @@ public class RoutineFragment extends Fragment implements RoutineAdapter.ClickLis } private void clickEvents() { + + // date selections + binding.day.setOnClickListener(v -> { + setDayOfWeek(0); + loadRoutineList(weekDayViewsList.get(0).day_of_week); + }); + binding.day2.setOnClickListener(v -> { + setDayOfWeek(1); + loadRoutineList(weekDayViewsList.get(1).day_of_week); + }); + binding.day3.setOnClickListener(v -> { + setDayOfWeek(2); + loadRoutineList(weekDayViewsList.get(2).day_of_week); + }); + binding.day4.setOnClickListener(v -> { + setDayOfWeek(3); + loadRoutineList(weekDayViewsList.get(3).day_of_week); + }); + binding.day5.setOnClickListener(v -> { + setDayOfWeek(4); + loadRoutineList(weekDayViewsList.get(4).day_of_week); + }); + binding.day6.setOnClickListener(v -> { + setDayOfWeek(5); + loadRoutineList(weekDayViewsList.get(5).day_of_week); + }); + binding.day7.setOnClickListener(v -> { + setDayOfWeek(6); + loadRoutineList(weekDayViewsList.get(6).day_of_week); + }); + binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); binding.addRoutine.setOnClickListener(v -> { Navigation.findNavController(v).navigate(R.id.action_routineFragment_to_addRoutineFragment); }); - // date selections - binding.sun.setOnClickListener(v -> { - setSelectionState(0, selection_state[0] = !selection_state[0]); - loadRoutineList(); - }); - binding.mon.setOnClickListener(v -> { - setSelectionState(1, selection_state[1] = !selection_state[1]); - loadRoutineList(); - }); - binding.tue.setOnClickListener(v -> { - setSelectionState(2, selection_state[2] = !selection_state[2]); - loadRoutineList(); - }); - binding.wed.setOnClickListener(v -> { - setSelectionState(3, selection_state[3] = !selection_state[3]); - loadRoutineList(); - }); - binding.thu.setOnClickListener(v -> { - setSelectionState(4, selection_state[4] = !selection_state[4]); - loadRoutineList(); - }); - binding.fri.setOnClickListener(v -> { - setSelectionState(5, selection_state[5] = !selection_state[5]); - loadRoutineList(); - }); - binding.sat.setOnClickListener(v -> { - setSelectionState(6, selection_state[6] = !selection_state[6]); - loadRoutineList(); - }); + } + + private void loadRoutineList(int day_of_week) { + Toast.makeText(requireContext(), "loading for " + routineViewModel.getDayOfWeek(day_of_week-1), Toast.LENGTH_SHORT).show(); + + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we fetch reminders list for you."); + progressDialog.setCancelable(false); + progressDialog.show(); + + day_of_week--; // because, at server side day_of_week starts from 0 + + String token = "Bearer " + AppUtil.getUserToken(requireContext()); + int patient_uid = AppUtil.getPatientUid(requireContext()); + routineViewModel.getRoutines(patient_uid, token, day_of_week, this); } private void initViews() { - selection_state = new boolean[7]; + progressDialog = new ProgressDialog(requireContext()); - viewModel = new ViewModelProvider(requireActivity()).get(RoutineViewModel.class); - } - - private void loadRoutineList() { - binding.noData.setVisibility(View.GONE); - binding.routineRv.setVisibility(View.VISIBLE); binding.routineRv.setLayoutManager(new LinearLayoutManager(requireContext())); - binding.routineRv.setAdapter(viewModel.getRoutineAdapter()); + routineAdapter = new RoutineAdapter(); + routineAdapter.setDeleteClickListener(this); + routineAdapter.setClickListener(this); + binding.routineRv.setAdapter(routineAdapter); - viewModel.getRoutineAdapter().setDeleteClickListener(this); - viewModel.getRoutineAdapter().setClickListener(this); + Calendar calendar = Calendar.getInstance(); - viewModel.getRoutineAdapter().submitList(viewModel.getRoutines()); + String today_date = routineViewModel.getMonthOfYear(calendar.get(Calendar.MONTH)); + today_date = today_date.concat(", " + calendar.get(Calendar.DAY_OF_MONTH)); + + binding.todayDate.setText(today_date); + + // show days of week + setDayOfWeekViews(); + + setDayOfWeek(routineViewModel.selected_dow); + + loadRoutineList(weekDayViewsList.get(routineViewModel.selected_dow).day_of_week); } - private void setSelectionState(int position, boolean selection){ - if (selection){ - switch (position){ - case 0: - // sun - binding.sun.setBackgroundResource(R.drawable.seleted_item_primary); - binding.sunT1.setTextColor(getResources().getColor(R.color.white_bg)); - binding.sunT2.setTextColor(getResources().getColor(R.color.white_bg)); - break; - case 1: - // mon - binding.mon.setBackgroundResource(R.drawable.seleted_item_primary); - binding.monT1.setTextColor(getResources().getColor(R.color.white_bg)); - binding.monT2.setTextColor(getResources().getColor(R.color.white_bg)); - break; - case 2: - // tue - binding.tue.setBackgroundResource(R.drawable.seleted_item_primary); - binding.tue1.setTextColor(getResources().getColor(R.color.white_bg)); - binding.tue2.setTextColor(getResources().getColor(R.color.white_bg)); - break; - case 3: - // wed - binding.wed.setBackgroundResource(R.drawable.seleted_item_primary); - binding.wed1.setTextColor(getResources().getColor(R.color.white_bg)); - binding.wed2.setTextColor(getResources().getColor(R.color.white_bg)); - break; - case 4: - // thu - binding.thu.setBackgroundResource(R.drawable.seleted_item_primary); - binding.thu1.setTextColor(getResources().getColor(R.color.white_bg)); - binding.thu2.setTextColor(getResources().getColor(R.color.white_bg)); - break; - case 5: - // fri - binding.fri.setBackgroundResource(R.drawable.seleted_item_primary); - binding.fri1.setTextColor(getResources().getColor(R.color.white_bg)); - binding.fri2.setTextColor(getResources().getColor(R.color.white_bg)); - break; - case 6: - // sat - binding.sat.setBackgroundResource(R.drawable.seleted_item_primary); - binding.sat1.setTextColor(getResources().getColor(R.color.white_bg)); - binding.sat2.setTextColor(getResources().getColor(R.color.white_bg)); - break; - } + private void setDayOfWeekViews() { + weekDayViewsList = new ArrayList<>(); + + // adding all day_views to the list + WeekDayViewHolder day1 = new WeekDayViewHolder(binding.day, binding.dayT1, binding.dayT2); + weekDayViewsList.add(day1); + + WeekDayViewHolder day2 = new WeekDayViewHolder(binding.day2, binding.day2T1, binding.day2T2); + weekDayViewsList.add(day2); + + WeekDayViewHolder day3 = new WeekDayViewHolder(binding.day3, binding.day31, binding.day32); + weekDayViewsList.add(day3); + + WeekDayViewHolder day4 = new WeekDayViewHolder(binding.day4, binding.day41, binding.day42); + weekDayViewsList.add(day4); + + WeekDayViewHolder day5 = new WeekDayViewHolder(binding.day5, binding.day51, binding.day52); + weekDayViewsList.add(day5); + + WeekDayViewHolder day6 = new WeekDayViewHolder(binding.day6, binding.day61, binding.day62); + weekDayViewsList.add(day6); + + WeekDayViewHolder day7 = new WeekDayViewHolder(binding.day7, binding.day71, binding.day72); + weekDayViewsList.add(day7); + + Calendar calendar = Calendar.getInstance(); + + for (int i = 0; i<7; i++){ + WeekDayViewHolder dayViewHolder = weekDayViewsList.get(i); + + dayViewHolder.day_of_week = calendar.get(Calendar.DAY_OF_WEEK); + dayViewHolder.day.setText(routineViewModel.getDayOfWeek(dayViewHolder.day_of_week - 1)); + dayViewHolder.date.setText(String.valueOf(calendar.get(Calendar.DAY_OF_MONTH))); + + calendar.add(Calendar.DAY_OF_WEEK, 1); + } + } + + private void setDayOfWeek(int selection){ + + clearSelection(); + + switch (routineViewModel.selected_dow = selection){ + case 0: + binding.day.setBackgroundResource(R.drawable.seleted_item_primary); + binding.dayT1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.dayT2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 1: + + binding.day2.setBackgroundResource(R.drawable.seleted_item_primary); + binding.day2T1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.day2T2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 2: + + binding.day3.setBackgroundResource(R.drawable.seleted_item_primary); + binding.day31.setTextColor(getResources().getColor(R.color.white_bg)); + binding.day32.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 3: + + binding.day4.setBackgroundResource(R.drawable.seleted_item_primary); + binding.day41.setTextColor(getResources().getColor(R.color.white_bg)); + binding.day42.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 4: + + binding.day5.setBackgroundResource(R.drawable.seleted_item_primary); + binding.day51.setTextColor(getResources().getColor(R.color.white_bg)); + binding.day52.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 5: + + binding.day6.setBackgroundResource(R.drawable.seleted_item_primary); + binding.day61.setTextColor(getResources().getColor(R.color.white_bg)); + binding.day62.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 6: + + binding.day7.setBackgroundResource(R.drawable.seleted_item_primary); + binding.day71.setTextColor(getResources().getColor(R.color.white_bg)); + binding.day72.setTextColor(getResources().getColor(R.color.white_bg)); + break; + } + + } + + private void clearSelection(){ + switch (routineViewModel.selected_dow){ + case 0: + binding.day.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.dayT1.setTextColor(getResources().getColor(R.color.black)); + binding.dayT2.setTextColor(getResources().getColor(R.color.black)); + break; + case 1: + + binding.day2.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.day2T1.setTextColor(getResources().getColor(R.color.black)); + binding.day2T2.setTextColor(getResources().getColor(R.color.black)); + break; + case 2: + + binding.day3.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.day31.setTextColor(getResources().getColor(R.color.black)); + binding.day32.setTextColor(getResources().getColor(R.color.black)); + break; + case 3: + + binding.day4.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.day41.setTextColor(getResources().getColor(R.color.black)); + binding.day42.setTextColor(getResources().getColor(R.color.black)); + break; + case 4: + + binding.day5.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.day51.setTextColor(getResources().getColor(R.color.black)); + binding.day52.setTextColor(getResources().getColor(R.color.black)); + break; + case 5: + + binding.day6.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.day61.setTextColor(getResources().getColor(R.color.black)); + binding.day62.setTextColor(getResources().getColor(R.color.black)); + break; + case 6: + + binding.day7.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.day71.setTextColor(getResources().getColor(R.color.black)); + binding.day72.setTextColor(getResources().getColor(R.color.black)); + break; + } + } + + // delete routine callback + + + @Override + public void onRoutineDeleted(int adapterPosition) { + Toast.makeText(requireContext(), "Reminder deleted.", Toast.LENGTH_SHORT).show(); + progressDialog.dismiss(); + loadRoutineList(weekDayViewsList.get(routineViewModel.selected_dow).day_of_week); + } + + @Override + public void onRoutineDeleteFailed(Throwable t, String message) { + progressDialog.dismiss(); + + AppUtil.showAlert(requireContext(), + getString(R.string.something_went_wrong), + message, + getString(R.string.ok), + ((dialog, which) -> { + dialog.dismiss(); + }), null, null); + } + + // get routine callback + @Override + public void onRoutinesFetched(List routineList) { + progressDialog.dismiss(); + + if (routineList != null && routineList.size() > 0){ + // reminders are present + binding.routineRv.setVisibility(View.VISIBLE); + binding.noData.setVisibility(View.GONE); + + routineAdapter.submitList(routineList); }else{ - switch (position){ - case 0: - // sun - binding.sun.setBackgroundColor(getResources().getColor(R.color.white_bg)); - binding.sunT1.setTextColor(getResources().getColor(R.color.black)); - binding.sunT2.setTextColor(getResources().getColor(R.color.black)); - break; - case 1: - // mon - binding.mon.setBackgroundColor(getResources().getColor(R.color.white_bg)); - binding.monT1.setTextColor(getResources().getColor(R.color.black)); - binding.monT2.setTextColor(getResources().getColor(R.color.black)); - break; - case 2: - // tue - binding.tue.setBackgroundColor(getResources().getColor(R.color.white_bg)); - binding.tue1.setTextColor(getResources().getColor(R.color.black)); - binding.tue2.setTextColor(getResources().getColor(R.color.black)); - break; - case 3: - // wed - binding.wed.setBackgroundColor(getResources().getColor(R.color.white_bg)); - binding.wed1.setTextColor(getResources().getColor(R.color.black)); - binding.wed2.setTextColor(getResources().getColor(R.color.black)); - break; - case 4: - // thu - binding.thu.setBackgroundColor(getResources().getColor(R.color.white_bg)); - binding.thu1.setTextColor(getResources().getColor(R.color.black)); - binding.thu2.setTextColor(getResources().getColor(R.color.black)); - break; - case 5: - // fri - binding.fri.setBackgroundColor(getResources().getColor(R.color.white_bg)); - binding.fri1.setTextColor(getResources().getColor(R.color.black)); - binding.fri2.setTextColor(getResources().getColor(R.color.black)); - break; - case 6: - // sat - binding.sat.setBackgroundColor(getResources().getColor(R.color.white_bg)); - binding.sat1.setTextColor(getResources().getColor(R.color.black)); - binding.sat2.setTextColor(getResources().getColor(R.color.black)); - break; - } + binding.routineRv.setVisibility(View.GONE); + binding.noData.setVisibility(View.VISIBLE); } } @Override - public void onDelete(Routine routine, int position) { + public void onRoutinesFetchedFailed(Throwable t, String message) { + progressDialog.dismiss(); + binding.routineRv.setVisibility(View.GONE); + binding.noData.setVisibility(View.VISIBLE); + + AppUtil.showAlert(requireContext(), + getString(R.string.something_went_wrong), + message, + getString(R.string.ok), + ((dialog, which) -> { + dialog.dismiss(); + }), null, null); + } + + @Override + public void onDelete(RoutineDetails routine, int position) { AppUtil.showSOSDecision(requireContext(), getString(R.string.delete_med_routine), getString(R.string.yes), getString(R.string.no), v1-> { // yes click + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we delete the routine for you."); + progressDialog.setCancelable(false); + progressDialog.show(); + + String token = "Bearer " + AppUtil.getUserToken(requireContext()); + + routineViewModel.deleteRoutine(AppUtil.getPatientUid(requireContext()), + routine.id, + position, + token, + this); }, v2 -> { // no click }); @@ -216,7 +358,7 @@ public class RoutineFragment extends Fragment implements RoutineAdapter.ClickLis } @Override - public void onClick(Routine routine, int position) { + public void onClick(RoutineDetails routine, int position) { Bundle bundle = new Bundle(); bundle.putSerializable(ROUTINE_KEY, routine); diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutineAdapter.java b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutineAdapter.java index ff7759c..63e84e0 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutineAdapter.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutineAdapter.java @@ -10,17 +10,22 @@ import androidx.recyclerview.widget.RecyclerView; import com.ssb.simplitend.databinding.RoutineViewholderBinding; -public class RoutineAdapter extends ListAdapter { +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.Objects; - private static final DiffUtil.ItemCallback DIFF_UTIL = new DiffUtil.ItemCallback() { +public class RoutineAdapter extends ListAdapter { + + private static final DiffUtil.ItemCallback DIFF_UTIL = new DiffUtil.ItemCallback() { @Override - public boolean areItemsTheSame(@NonNull Routine oldItem, @NonNull Routine newItem) { + public boolean areItemsTheSame(@NonNull RoutineDetails oldItem, @NonNull RoutineDetails newItem) { // TODO: 10-07-2023 return false; } @Override - public boolean areContentsTheSame(@NonNull Routine oldItem, @NonNull Routine newItem) { + public boolean areContentsTheSame(@NonNull RoutineDetails oldItem, @NonNull RoutineDetails newItem) { // TODO: 10-07-2023 return false; } @@ -29,7 +34,7 @@ public class RoutineAdapter extends ListAdapter { - if (deleteClickListener != null) deleteClickListener.onDelete(getItem(position), position); + if (deleteClickListener != null) + deleteClickListener.onDelete(getItem(position), position); }); holder.binding.card.setOnClickListener(v -> { @@ -62,28 +68,46 @@ public class RoutineAdapter extends ListAdapter routines; - private final RoutineAdapter routineAdapter; + private final RoutinesRepository routinesRepository; + + // selected day of week + public int selected_dow; public RoutineViewModel(){ - this.routineAdapter = new RoutineAdapter(); + this.routinesRepository = RoutinesRepository.getRoutineRepository(); - // init static data in routine list - this.routines = new ArrayList<>(); - routines.add(new Routine("Doctor appointment", "Meet your heart specialist Abraham at 4:00 pm", "07 : 00 AM", "09 : 00 AM")); - routines.add(new Routine("Take medicines", "Lorem Ipsum is simply dummy.", "11 : 00 AM", "12 : 00 PM")); + // selection state default + selected_dow = 0; } - public RoutineAdapter getRoutineAdapter() { - return routineAdapter; + public void getRoutines(int patient_id, + String token, + int week_day, + @NonNull ProfileContracts.GetRoutinesCallback routinesCallback){ + routinesRepository.getRoutines(patient_id, token, week_day, routinesCallback); } - public ArrayList getRoutines() { - return routines; + public void addNUpdateRoutine(int patient_id, + RoutineDetails routineDetails, + String token, + @NonNull ProfileContracts.AddNUpdateRoutineCallback routineCallback){ + routinesRepository.addNUpdateRoutine(patient_id, routineDetails, token, routineCallback); + } + + public void deleteRoutine(int patient_id, + int patient_routine_id, + int adapterPosition, + String token, + @NonNull ProfileContracts.RoutineDeleteCallback deleteCallback){ + routinesRepository.deleteRoutine(patient_id, patient_routine_id, adapterPosition, token, deleteCallback); + } + + public String getDayOfWeek(int position){ + switch (position){ + case 0: + return "Sun"; + case 1: + return "Mon"; + case 2: + return "Tue"; + case 3: + return "Wed"; + case 4: + return "Thu"; + case 5: + return "Fri"; + case 6: + return "Sat"; + } + + return ""; + } + + public String getMonthOfYear(int month){ + switch (month){ + case 1: + return "January"; + case 2: + return "February"; + case 3: + return "March"; + case 4: + return "April"; + case 5: + return "May"; + case 6: + return "June"; + case 7: + return "July"; + case 8: + return "August"; + case 9: + return "September"; + case 10: + return "October"; + case 11: + return "November"; + case 12: + return "December"; + } + + return ""; } } diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutinesRepository.java b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutinesRepository.java new file mode 100644 index 0000000..643d63c --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/setuproutine/mvvm/RoutinesRepository.java @@ -0,0 +1,125 @@ +package com.ssb.simplitend.patientprofile.setuproutine.mvvm; + +import androidx.annotation.NonNull; + +import com.ssb.simplitend.apputils.RetrofitHelper; +import com.ssb.simplitend.patientprofile.PatientProfileAPIService; +import com.ssb.simplitend.patientprofile.ProfileContracts; +import com.ssb.simplitend.welcome.mvvm.models.CallResponse; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.http.Body; +import retrofit2.http.Header; +import retrofit2.http.Path; + +public class RoutinesRepository { + + private static RoutinesRepository routineRepository; + + private final PatientProfileAPIService apiService; + + private RoutinesRepository(){ + this.apiService = RetrofitHelper.getRetrofit().create(PatientProfileAPIService.class); + } + + public static synchronized RoutinesRepository getRoutineRepository(){ + if (routineRepository == null){ + routineRepository = new RoutinesRepository(); + } + + return routineRepository; + } + + public void getRoutines(int patient_id, + String token, + int week_day, + @NonNull ProfileContracts.GetRoutinesCallback routinesCallback){ + + apiService.getRoutines(patient_id, week_day, token) + .enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if (response.body() != null){ + if (response.body().status != 200 || response.body().result == null){ + routinesCallback.onRoutinesFetchedFailed(new Exception(), response.body().message); + return; + } + + routinesCallback.onRoutinesFetched(response.body().result); + }else{ + routinesCallback.onRoutinesFetchedFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + routinesCallback.onRoutinesFetchedFailed(new Exception(), "Please try again later."); + } + }); + + } + + public void addNUpdateRoutine(int patient_id, + RoutineDetails routineDetails, + String token, + @NonNull ProfileContracts.AddNUpdateRoutineCallback routineCallback){ + + apiService.addNUpdateRoutine(patient_id, routineDetails, token) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.body() != null){ + if (response.body().status != 200 || response.body().result == null){ + routineCallback.onRoutineAddFailed(new Exception(), response.body().message); + return; + } + + routineCallback.onRoutineAdded(response.body().result); + }else{ + routineCallback.onRoutineAddFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + routineCallback.onRoutineAddFailed(new Exception(), "Please try again later."); + } + }); + + } + + public void deleteRoutine(int patient_id, + int patient_routine_id, + int adapterPosition, + String token, + @NonNull ProfileContracts.RoutineDeleteCallback deleteCallback){ + + apiService.deleteRoutine(patient_id, patient_routine_id, token) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.body() != null){ + if (response.body().status != 200){ + deleteCallback.onRoutineDeleteFailed(new Exception(), response.body().message); + return; + } + + deleteCallback.onRoutineDeleted(adapterPosition); + }else{ + deleteCallback.onRoutineDeleteFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + deleteCallback.onRoutineDeleteFailed(new Exception(), "Please try again later."); + } + }); + + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/CheckMailFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/CheckMailFragment.java index 8f2857a..ce717a2 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/CheckMailFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/CheckMailFragment.java @@ -24,6 +24,7 @@ import com.ssb.simplitend.apputils.AppUtil; import com.ssb.simplitend.databinding.CheckMailFragmentBinding; import com.ssb.simplitend.welcome.mvvm.WelcomeContracts; import com.ssb.simplitend.welcome.mvvm.WelcomeViewModel; +import com.ssb.simplitend.welcome.mvvm.models.OTPSentResponse; import java.util.HashMap; import java.util.Map; @@ -31,7 +32,8 @@ import java.util.Map; import okhttp3.MediaType; import okhttp3.RequestBody; -public class CheckMailFragment extends Fragment implements WelcomeContracts.VerifyOTPCallback { +public class CheckMailFragment extends Fragment implements WelcomeContracts.VerifyOTPCallback, + WelcomeContracts.SendOTPToEmailCallback{ // view binding protected CheckMailFragmentBinding binding; @@ -223,6 +225,10 @@ public class CheckMailFragment extends Fragment implements WelcomeContracts.Veri }); + binding.resendOtp.setOnClickListener(v -> { + sendOTP(); + }); + } private void verifyOTP() { @@ -241,6 +247,17 @@ public class CheckMailFragment extends Fragment implements WelcomeContracts.Veri viewModel.verifyOTP(body, this); } + private void sendOTP() { + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we resend an OTP to your email."); + progressDialog.setCancelable(false); + progressDialog.show(); + + viewModel.sendOTPToEmail(email_id, + this); + + } + private String getOTPFromInputs() { return binding.otp1.getText().toString() + binding.otp2.getText().toString() + @@ -297,4 +314,27 @@ public class CheckMailFragment extends Fragment implements WelcomeContracts.Veri Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show(); } + + // resend otp call back + + @Override + public void onOTPSent(OTPSentResponse otpSentResponse) { + progressDialog.dismiss(); + + user_id = otpSentResponse.principal_xid; + Toast.makeText(requireContext(), "OTP resent successfully.", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onOTPSentFailed(Throwable t, String message) { + progressDialog.dismiss(); + + AppUtil.showAlert(requireContext(), + getString(R.string.something_went_wrong), + message, + getString(R.string.ok), + ((dialog, which) -> { + dialog.dismiss(); + }), null, null); + } } diff --git a/app/src/main/res/drawable/main_icon.xml b/app/src/main/res/drawable/main_icon.xml index cf513a7..22b833d 100644 --- a/app/src/main/res/drawable/main_icon.xml +++ b/app/src/main/res/drawable/main_icon.xml @@ -1,10 +1,14 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/check_mail_fragment.xml b/app/src/main/res/layout/check_mail_fragment.xml index e30481c..2bd225a 100644 --- a/app/src/main/res/layout/check_mail_fragment.xml +++ b/app/src/main/res/layout/check_mail_fragment.xml @@ -226,6 +226,7 @@ /> - - @@ -65,11 +66,10 @@ android:layout_marginHorizontal="15dp" android:layout_marginVertical="15dp" android:orientation="horizontal" - android:baselineAligned="false" android:weightSum="7"> diff --git a/app/src/main/res/layout/welcome_fragment.xml b/app/src/main/res/layout/welcome_fragment.xml index b34beec..c238d4a 100644 --- a/app/src/main/res/layout/welcome_fragment.xml +++ b/app/src/main/res/layout/welcome_fragment.xml @@ -15,13 +15,14 @@ - - - @@ -90,17 +74,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@id/title" - android:layout_centerHorizontal="true" - android:layout_marginHorizontal="@dimen/_15ssp" - android:layout_marginVertical="@dimen/_10ssp" - - android:fontFamily="@font/nunito_semibold" - - android:text="@string/welcome_msg" - android:textAlignment="center" - android:textSize="@dimen/_18ssp" - android:textColor="@color/black" /> + /> diff --git a/app/src/main/res/raw/country_n_states.json b/app/src/main/res/raw/country_n_states.json index 60b5c4d..ca99af7 100644 --- a/app/src/main/res/raw/country_n_states.json +++ b/app/src/main/res/raw/country_n_states.json @@ -1,5 +1,9 @@ { "countries": [ + { + "country": "United States", + "states": ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"] + }, { "country": "Afghanistan", "states": ["Badakhshan", "Badghis", "Baghlan", "Balkh", "Bamian", "Daykondi", "Farah", "Faryab", "Ghazni", "Ghowr", "Helmand", "Herat", "Jowzjan", "Kabul", "Kandahar", "Kapisa", "Khost", "Konar", "Kondoz", "Laghman", "Lowgar", "Nangarhar", "Nimruz", "Nurestan", "Oruzgan", "Paktia", "Paktika", "Panjshir", "Parvan", "Samangan", "Sar-e Pol", "Takhar", "Vardak", "Zabol"] @@ -728,10 +732,6 @@ "country": "United Kingdom", "states": [] }, - { - "country": "United States", - "states": ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"] - }, { "country": "Uruguay", "states": ["Artigas", "Canelones", "Cerro Largo", "Colonia", "Durazno", "Flores", "Florida", "Lavalleja", "Maldonado", "Montevideo", "Paysandu", "Rio Negro", "Rivera", "Rocha", "Salto", "San Jose", "Soriano", "Tacuarembo", "Treinta y Tres"] diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c8ee090..e4f8df4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -234,5 +234,6 @@ Ok Something went wrong at + Caring for a loved one may be\noverwhelming....\nLet our app assist you! \ No newline at end of file