diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 758cc80..96ee298 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,6 +1,18 @@ + + + + + + + + + + + + diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java index 5d28406..4598945 100644 --- a/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java @@ -56,15 +56,6 @@ public class CgSubscriptionActivity extends AppCompatActivity presenter = SubscriptionPresenter.getPresenter(); - // static - AppUtil.showAlert(this, - "Testing!", - "Payment is in testing phase. So each time u open app it ill bring to subsription screen. This ill be updated in next build.", - "Ok, got it.", - ((dialogInterface, i) -> { - }), - null, null); - initViews(); clickEvents(); diff --git a/app/src/main/java/com/ssb/simplitend/patient_dashboard/chats/ChatFragment.java b/app/src/main/java/com/ssb/simplitend/patient_dashboard/chats/ChatFragment.java index 3b1f69a..d70451c 100644 --- a/app/src/main/java/com/ssb/simplitend/patient_dashboard/chats/ChatFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patient_dashboard/chats/ChatFragment.java @@ -47,7 +47,11 @@ public class ChatFragment extends Fragment { } private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.sendBtn.setOnClickListener(v -> { if (!binding.messageEt.getText().toString().trim().isEmpty()){ diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/RegisterCompleteFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/RegisterCompleteFragment.java index 38e9b22..0bfc959 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/RegisterCompleteFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/RegisterCompleteFragment.java @@ -2,14 +2,17 @@ package com.ssb.simplitend.patientprofile; import android.animation.Animator; import android.content.Intent; +import android.graphics.drawable.Drawable; 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.vectordrawable.graphics.drawable.Animatable2Compat; import com.bumptech.glide.Glide; import com.bumptech.glide.load.DataSource; @@ -58,7 +61,21 @@ public class RegisterCompleteFragment extends Fragment { @Override public boolean onResourceReady(GifDrawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { + if (resource == null) return false; + resource.setLoopCount(1); + resource.registerAnimationCallback(new Animatable2Compat.AnimationCallback() { + @Override + public void onAnimationEnd(Drawable drawable) { + super.onAnimationEnd(drawable); + String title = "Your profile is " + (profile_progress * 20) + "% complete!"; + + binding.title.setText(title); + YoYo.with(Techniques.FadeIn) + .duration(100) + .playOn(binding.title); + } + }); return false; } }) 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 18a187a..6a64cc5 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 @@ -162,7 +162,11 @@ public class AddMedicalInfoFragment extends Fragment implements private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.addBtn.setOnClickListener(v -> { 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 ea88424..6e960ba 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 @@ -69,7 +69,11 @@ public class MedicalInfoFragment extends Fragment implements ProfileContracts.Ge private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.addMedInfo.setOnClickListener(v -> { Navigation.findNavController(v).navigate(R.id.action_medicalInfoFragment_to_addMedicalInfoFragment); @@ -88,7 +92,11 @@ public class MedicalInfoFragment extends Fragment implements ProfileContracts.Ge }); - binding.done.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.done.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); } 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 8096933..3dc4dd2 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 @@ -32,7 +32,6 @@ import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.Frequency; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.MedicationType; import com.ssb.simplitend.patientprofile.medreminder.mvvm.models.ReminderResult; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -55,6 +54,8 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh */ boolean[] week_state; + private DatePickerDialog datePickerDialog; + // arguments keys public static final String REMINDER_KEY = "reminder_key"; @@ -88,7 +89,11 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.getTime.setOnClickListener(v -> { binding.getTime.setError(null); @@ -114,12 +119,6 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh getDate(); }); - // TODO: 20-07-2023 remove - binding.getDate.setOnLongClickListener(v -> { - binding.getDate.setText("20-07-2023"); - return false; - }); - binding.addReminder.setOnClickListener(v -> { AppUtil.closeKeyboard(requireActivity()); @@ -215,6 +214,25 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh progressDialog = new ProgressDialog(requireContext()); + Calendar calendar = Calendar.getInstance(); + + datePickerDialog = new DatePickerDialog(requireContext(), + (datePicker, year, month, dayOfMonth) -> { + + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, year); + cal.set(Calendar.MONTH, month); + cal.set(Calendar.DAY_OF_MONTH, dayOfMonth); + + SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy", Locale.getDefault()); + + String selected_time = sdf.format(cal.getTime()); + binding.getDate.setText(selected_time); + + }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); + + datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); + frequencyList = new ArrayList<>(); medicationTypeList = new ArrayList<>(); @@ -431,8 +449,8 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh } private String formatDate(String medication_refill_date) { - String inputPattern = "yyyy-dd-MM"; - String outputPattern = "dd-MM-yyyy"; + String inputPattern = "yyyy-MM-dd"; + String outputPattern = "MM-dd-yyyy"; SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern, Locale.getDefault()); SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern, Locale.getDefault()); @@ -441,8 +459,15 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh try { date = inputFormat.parse(medication_refill_date); + if (date == null) throw new Exception(); str = outputFormat.format(date); - } catch (ParseException e) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + if (datePickerDialog != null) + { + datePickerDialog.getDatePicker().updateDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); + } + } catch (Exception e) { Log.e(TAG, "formatDate: ", e); } @@ -574,27 +599,9 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh // shows date picker to pick date and set to tv private void getDate() { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { - DatePickerDialog dpd = new DatePickerDialog(requireContext()); + if (datePickerDialog == null) return; - dpd.setOnDateSetListener((view, year, month, dayOfMonth) -> { - - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.YEAR, year); - cal.set(Calendar.MONTH, month); - cal.set(Calendar.DAY_OF_MONTH, dayOfMonth); - - SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()); - - String selected_time = sdf.format(cal.getTime()); - binding.getDate.setText(selected_time); - - }); - - dpd.getDatePicker().setMinDate(System.currentTimeMillis()); - - dpd.show(); - } + datePickerDialog.show(); // TODO: 05-07-2023 for lower version 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 4328f29..ea0a54c 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 @@ -33,7 +33,8 @@ import java.util.Locale; public class ReminderFragment extends Fragment implements RecyclerTouchListener.OnSwipeOptionsClickListener, ProfileContracts.GetRemindersListCallback, ProfileContracts.ReminderDeleteCallback, ProfileContracts.AddReminderCallBack, -ReminderAdapter.ReminderCheckClickListener{ + ReminderAdapter.ReminderCheckClickListener, + ReminderAdapter.ReminderClickListener{ // view binding protected RemindersFragmentBinding binding; @@ -52,7 +53,7 @@ ReminderAdapter.ReminderCheckClickListener{ private ArrayList remindersList; - public ReminderFragment(){ + public ReminderFragment() { // required empty const. } @@ -104,18 +105,24 @@ ReminderAdapter.ReminderCheckClickListener{ // add button binding.addReminder.setOnClickListener(v -> - Navigation.findNavController(v).navigate(R.id.action_reminderFragment_to_addReminderFragment) + Navigation.findNavController(v).navigate(R.id.action_reminderFragment_to_addReminderFragment) ); binding.done.setOnClickListener(v -> { - Navigation.findNavController(v).popBackStack(); + if (getActivity() != null){ + getActivity().onBackPressed(); + } }); - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); } - private void loadReminderList(int day_of_week){ + private void loadReminderList(int day_of_week) { progressDialog.setTitle("Please wait..."); progressDialog.setMessage("while we fetch reminders list for you."); progressDialog.setCancelable(false); @@ -136,6 +143,7 @@ ReminderAdapter.ReminderCheckClickListener{ remindersList = new ArrayList<>(); reminderAdapter = new ReminderAdapter(remindersList); reminderAdapter.setCheckClickListener(this); + reminderAdapter.setReminderClickListener(this); binding.remindersRv.setAdapter(reminderAdapter); recyclerTouchListener = new RecyclerTouchListener(requireActivity(), binding.remindersRv); @@ -187,7 +195,7 @@ ReminderAdapter.ReminderCheckClickListener{ Calendar calendar = Calendar.getInstance(); - for (int i = 0; i<7; i++){ + for (int i = 0; i < 7; i++) { WeekDayViewHolder dayViewHolder = weekDayViewsList.get(i); dayViewHolder.day_of_week = calendar.get(Calendar.DAY_OF_WEEK); @@ -199,8 +207,8 @@ ReminderAdapter.ReminderCheckClickListener{ } } - private void clearSelection(){ - switch (reminderViewModel.selected_dow){ + private void clearSelection() { + switch (reminderViewModel.selected_dow) { case 0: binding.day.setBackgroundColor(getResources().getColor(R.color.white_bg)); binding.dayT1.setTextColor(getResources().getColor(R.color.black)); @@ -245,14 +253,14 @@ ReminderAdapter.ReminderCheckClickListener{ } } - private void setDayOfWeek(int selection){ + private void setDayOfWeek(int selection) { // setting selected date in adapter reminderAdapter.setSelected_date(weekDayViewsList.get(selection).mDate); clearSelection(); - switch (reminderViewModel.selected_dow = selection){ + switch (reminderViewModel.selected_dow = selection) { case 0: binding.day.setBackgroundResource(R.drawable.seleted_item_primary); binding.dayT1.setTextColor(getResources().getColor(R.color.white_bg)); @@ -303,14 +311,14 @@ ReminderAdapter.ReminderCheckClickListener{ public void onRemindersListFetched(List reminderResultList) { progressDialog.dismiss(); - if (reminderResultList != null && reminderResultList.size() > 0){ + if (reminderResultList != null && reminderResultList.size() > 0) { // reminders are present binding.remindersRv.setVisibility(View.VISIBLE); binding.noData.setVisibility(View.GONE); reminderAdapter.submitLIst(reminderResultList); - }else{ + } else { binding.remindersRv.setVisibility(View.GONE); binding.noData.setVisibility(View.VISIBLE); } @@ -353,10 +361,16 @@ ReminderAdapter.ReminderCheckClickListener{ }), null, null); } + // reminder clicked listener + @Override + public void onReminderClicked(ReminderResult reminderResult, int position) { + editReminder(position); + } + // swipe option menu click listener for reminder list @Override public void onSwipeOptionClicked(int viewID, int position) { - if (viewID == R.id.reminder_delete){ + if (viewID == R.id.reminder_delete) { AppUtil.showSOSDecision(requireContext(), getString(R.string.delete_med_reminder), @@ -381,16 +395,22 @@ ReminderAdapter.ReminderCheckClickListener{ // no button clicked }); - }else if (viewID == R.id.reminder_edit){ - Bundle bundle = new Bundle(); - - bundle.putSerializable(AddReminderFragment.REMINDER_KEY, reminderAdapter.getReminderResultList().get(position)); - - Navigation.findNavController(binding.getRoot()) - .navigate(R.id.action_reminderFragment_to_addReminderFragment, bundle); + } else if (viewID == R.id.reminder_edit) { + editReminder(position); } } + private void editReminder(int position) { + if (reminderAdapter == null) return; + + Bundle bundle = new Bundle(); + + bundle.putSerializable(AddReminderFragment.REMINDER_KEY, reminderAdapter.getReminderResultList().get(position)); + + Navigation.findNavController(binding.getRoot()) + .navigate(R.id.action_reminderFragment_to_addReminderFragment, bundle); + } + @Override public void onReminderAdded(ReminderResult reminderDetails) { progressDialog.dismiss(); @@ -414,7 +434,7 @@ ReminderAdapter.ReminderCheckClickListener{ public void onCheck(ReminderResult reminderResult, int position) { // is user checking only today's check - if (reminderResult.reminder_marked == null){ + if (reminderResult.reminder_marked == null) { /* now, we don't want to allow checking of routine of other day */ @@ -422,7 +442,7 @@ ReminderAdapter.ReminderCheckClickListener{ int today_date = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); int selected_date = Integer.parseInt(weekDayViewsList.get(reminderViewModel.selected_dow).date.getText().toString()); - if (today_date == selected_date){ + if (today_date == selected_date) { AppUtil.showAlert(requireContext(), "Are you sure?", "Do yuo want to check this reminder?\nThis cannot be undone.", @@ -436,11 +456,11 @@ ReminderAdapter.ReminderCheckClickListener{ (dialog, which) -> { dialog.dismiss(); }); - }else{ + } else { Toast.makeText(requireContext(), "Cannot mark future routine.", Toast.LENGTH_SHORT).show(); } - }catch (Exception e){ + } catch (Exception e) { Toast.makeText(requireContext(), "Couldn't be done.", Toast.LENGTH_SHORT).show(); } @@ -470,7 +490,7 @@ ReminderAdapter.ReminderCheckClickListener{ try { Date date = date_f1.parse(reminderResult.medication_refill_date); refill_date = date_f2.format(date); - }catch (Exception e){ + } catch (Exception e) { refill_date = date_f2.format(Calendar.getInstance().getTime()); } 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 37dba36..43f228d 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 @@ -22,6 +22,7 @@ import java.util.Locale; public class ReminderAdapter extends RecyclerView.Adapter { private ReminderCheckClickListener checkClickListener; + private ReminderClickListener reminderClickListener; private volatile Date selected_date; @@ -35,6 +36,10 @@ public class ReminderAdapter extends RecyclerView.Adapter reminderResultList){ this.reminderResultList = null; this.reminderResultList = reminderResultList; @@ -68,6 +73,13 @@ public class ReminderAdapter extends RecyclerView.Adapter { + if (reminderClickListener != null) + { + reminderClickListener.onReminderClicked(reminderResultList.get(position), position); + } + }); + } @Override @@ -294,4 +306,8 @@ public class ReminderAdapter extends RecyclerView.Adapter Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.startTime.setOnClickListener(v -> { AppUtil.closeKeyboard(requireActivity()); 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 579e5dd..7d6eaab 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 @@ -107,12 +107,22 @@ public class RoutineFragment extends Fragment implements RoutineAdapter.ClickLis loadRoutineList(weekDayViewsList.get(6).day_of_week); }); - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.addRoutine.setOnClickListener(v -> { Navigation.findNavController(v).navigate(R.id.action_routineFragment_to_addRoutineFragment); }); + binding.done.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); + } private void loadRoutineList(int day_of_week) { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeApiService.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeApiService.java index d03b033..62d5951 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeApiService.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeApiService.java @@ -42,6 +42,10 @@ public interface WelcomeApiService { @POST("api/auth/patient-caregiver-connect") Call> connectCg(@Body Map body); + @POST("api/resent-patient-caregiver-link-code") + Call> resendCgCode(@Body Map body, + @Header("Authorization") String token); + @GET("api/caregiver-user-data") Call> getCgUserData(@Header("Authorization") String token); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeContracts.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeContracts.java index 2c8488c..94a5396 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeContracts.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/WelcomeContracts.java @@ -60,4 +60,12 @@ public interface WelcomeContracts { } + interface ResendCgCodeCallback{ + + void onCgCodeResent(); + + void onCgCodeResentFailed(Throwable t, String message); + + } + } diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgAuthActivity.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgAuthActivity.java index c35b9d4..9546439 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgAuthActivity.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgAuthActivity.java @@ -178,6 +178,8 @@ public class CgAuthActivity extends AppCompatActivity { case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE: binding.fingerprintOr.setVisibility(View.GONE); binding.fingerprintView.setVisibility(View.GONE); + // no fingerprint sensor or some error occurred thus, skipping this screen + gotoCgDash(); break; case BiometricManager.BIOMETRIC_SUCCESS: case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED: diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgConnectFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgConnectFragment.java index 60c36a3..2a38609 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgConnectFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgConnectFragment.java @@ -28,7 +28,9 @@ import com.ssb.simplitend.welcome.welcomecg.mvvm.ConnectCgResult; import java.util.HashMap; import java.util.Map; -public class CgConnectFragment extends Fragment implements WelcomeContracts.ConnectCgCallback{ +public class CgConnectFragment extends Fragment implements + WelcomeContracts.ConnectCgCallback, + WelcomeContracts.ResendCgCodeCallback { protected ConnectCaregiverFragmentBinding binding; @@ -60,20 +62,40 @@ public class CgConnectFragment extends Fragment implements WelcomeContracts.Conn private void clickEvents() { binding.connectBtn.setOnClickListener(v -> { - if (binding.code.getText().toString().length() != 4){ + if (binding.code.getText().toString().length() != 4) { binding.code.setError("Invalid code."); return; } connectCG(); }); + + binding.resendCode.setOnClickListener(v -> { + if (cg_email == null) { + Toast.makeText(requireContext(), "Something went wrong", Toast.LENGTH_SHORT).show(); + return; + } + + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we resend a 4 digit Caregiver code to your email."); + progressDialog.setCancelable(false); + progressDialog.show(); + + Map body = new HashMap<>(); + + body.put("email", cg_email); + + String token = "Bearer " + AppUtil.getCgToken(requireContext()); + + viewModel.resendCgCode(body, token, this); + }); } private void connectCG() { - if (cg_email == null){ + if (cg_email == null) { Toast.makeText(requireContext(), "Something went wrong", Toast.LENGTH_SHORT).show(); return; - }; + } progressDialog.setTitle("Please wait..."); progressDialog.setMessage("while we verify your code."); @@ -112,7 +134,7 @@ public class CgConnectFragment extends Fragment implements WelcomeContracts.Conn @Override public void afterTextChanged(Editable editable) { - if (editable.length() == 4){ + if (editable.length() == 4) { AppUtil.closeKeyboard(requireActivity()); } } @@ -132,7 +154,7 @@ public class CgConnectFragment extends Fragment implements WelcomeContracts.Conn // Thus, asking cg_user to sign in again Navigation.findNavController(binding.getRoot()) .popBackStack(R.id.cgSignInFragment, false); - }else{ + } else { cg_email = bundle.getString(CAREGIVER_EMAIL); binding.emailAddress.setText(cg_email); @@ -157,6 +179,22 @@ public class CgConnectFragment extends Fragment implements WelcomeContracts.Conn public void onCgConnectFailed(Throwable throwable, String message) { progressDialog.dismiss(); + binding.code.setText(""); + Toast.makeText(requireContext(), "" + message, Toast.LENGTH_SHORT).show(); + } + + // resend code callback + @Override + public void onCgCodeResent() { + progressDialog.dismiss(); + + Toast.makeText(requireContext(), "Caregiver code resent successfully.", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onCgCodeResentFailed(Throwable t, String message) { + progressDialog.dismiss(); + Toast.makeText(requireContext(), "" + message, Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgRegisterFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgRegisterFragment.java index 8c4351c..f42f20c 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgRegisterFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgRegisterFragment.java @@ -6,7 +6,6 @@ import android.app.DatePickerDialog; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.text.InputFilter; import android.util.Log; @@ -21,9 +20,9 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import androidx.navigation.NavOptions; import androidx.navigation.Navigation; import com.google.i18n.phonenumbers.NumberParseException; @@ -50,7 +49,7 @@ import java.util.Map; import okhttp3.MediaType; import okhttp3.RequestBody; -public class CgRegisterFragment extends Fragment implements WelcomeContracts.RegisterCareGiverCallback{ +public class CgRegisterFragment extends Fragment implements WelcomeContracts.RegisterCareGiverCallback { private static final String TAG = "CgRegisterFragment"; @@ -70,7 +69,7 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg private Calendar dob_selected; - public CgRegisterFragment(){ + public CgRegisterFragment() { // required } @@ -88,7 +87,7 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg viewModel = new ViewModelProvider(requireActivity()).get(CgWelcomeViewModel.class); initViews(); - + clickEvents(); return binding.getRoot(); @@ -107,9 +106,21 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg progressDialog = new ProgressDialog(requireContext()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - datePickerDialog = new DatePickerDialog(requireContext()); - } + // date picker dialog + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 18); + + datePickerDialog = new DatePickerDialog(requireContext(), (datePicker, year, month, dayOfMonth) -> { + setDOB(year, month, dayOfMonth); + + binding.contactNumber.requestFocus(); + + if (getActivity() != null) { + getActivity().getWindow() + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + } + }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); + datePickerDialog.getDatePicker().setMaxDate(calendar.getTimeInMillis()); dob_selected = Calendar.getInstance(); @@ -119,7 +130,7 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg binding.countryCodes.setItems(countryCodeList); - if (!countryCodeList.contains("+1")){ + if (!countryCodeList.contains("+1")) { countryCodeList.add("+1"); } @@ -138,7 +149,9 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg private void clickEvents() { binding.backBtn.setOnClickListener(v -> { - Navigation.findNavController(v).popBackStack(); + if (getActivity() != null) { + getActivity().onBackPressed(); + } }); binding.submit.setOnClickListener(v -> { @@ -160,7 +173,7 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg String phone_number = ""; - if (binding.countryCodes.getSelectedIndex() != -1){ + if (binding.countryCodes.getSelectedIndex() != -1) { phone_number += countryCodeList.get(binding.countryCodes.getSelectedIndex()) + " "; } @@ -172,9 +185,9 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg RequestBody email_body = RequestBody.create(binding.email.getText().toString().trim(), MediaType.parse("text/plain")); body.put("email", email_body); - if (binding.password.getText() == null){ + if (binding.password.getText() == null) { mPassword = ""; - }else{ + } else { mPassword = binding.password.getText().toString(); } @@ -188,11 +201,9 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg binding.dob.setOnClickListener(v -> { binding.dob.setError(null); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - AppUtil.closeKeyboard(requireActivity()); + AppUtil.closeKeyboard(requireActivity()); - pickDate(); - } + pickDate(); }); binding.tncBtn.setOnClickListener(v -> { @@ -201,14 +212,6 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg startActivity(intent); }); - // static thing for lower android versions - // todo should be removed afterwards - binding.dob.setOnLongClickListener(v -> { - binding.dob.setText("12-12-2001"); - binding.dob.setHint("12-12-2001"); - return false; - }); - binding.pwdInfo.setOnClickListener(v -> { passwordWindow.showAsDropDown(binding.pwdTitle); }); @@ -229,9 +232,9 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg String country_code; - if (binding.countryCodes.getSelectedIndex() == -1){ + if (binding.countryCodes.getSelectedIndex() == -1) { country_code = "+1"; - }else{ + } else { country_code = countryCodeList.get(binding.countryCodes.getSelectedIndex()); } @@ -245,23 +248,23 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg // nothing } - if (!countryCodeList.contains(country_code)){ + if (!countryCodeList.contains(country_code)) { countryCodeList.add(country_code); } binding.countryCodes.selectItemByIndex(countryCodeList.indexOf(country_code)); - if (phone_number_str.length() > 10){ + if (phone_number_str.length() > 10) { // pasted number length is greater than 10 return phone_number_str.substring(0, 10); } String total_phone_number = binding.contactNumber.getText().toString() + phone_number_str; - if (total_phone_number.length() > 10){ + if (total_phone_number.length() > 10) { // max length should be 10 return ""; - }else{ + } else { return phone_number_str; } }; @@ -274,35 +277,16 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg binding.name.setOnEditorActionListener((textView, i, keyEvent) -> { AppUtil.closeKeyboard(requireActivity()); binding.name.clearFocus(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - pickDate(); - } + pickDate(); return true; }); } - @RequiresApi(api = Build.VERSION_CODES.N) private void pickDate() { if (datePickerDialog == null) return; - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 18); - datePickerDialog.getDatePicker().setMaxDate(calendar.getTimeInMillis()); - - datePickerDialog.setOnDateSetListener((view, year, month, dayOfMonth) -> { - setDOB(year, month, dayOfMonth); - - binding.contactNumber.requestFocus(); - - if (getActivity() != null) { - getActivity().getWindow() - .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); - } - }); - datePickerDialog.show(); - } private void setDOB(int year, int month, int dayOfMonth) { @@ -357,18 +341,17 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg } if (binding.contactNumber.getText().toString().trim().isEmpty() || - binding.contactNumber.getText().toString().trim().length() <10) { + binding.contactNumber.getText().toString().trim().length() < 10) { binding.contactNumber.setError("Invalid"); allOkay = false; } else if (binding.countryCodes.getSelectedIndex() == -1 || - binding.countryCodes.getSelectedIndex() >= countryCodeList.size()){ + binding.countryCodes.getSelectedIndex() >= countryCodeList.size()) { allOkay = false; Toast.makeText(requireContext(), "Select a country code.", Toast.LENGTH_SHORT).show(); - } - else{ + } else { // validating phone number try { - Phonenumber.PhoneNumber phone_number = PhoneNumberUtil.getInstance().parse(countryCodeList.get(binding.countryCodes.getSelectedIndex())+ + Phonenumber.PhoneNumber phone_number = PhoneNumberUtil.getInstance().parse(countryCodeList.get(binding.countryCodes.getSelectedIndex()) + binding.contactNumber.getText().toString(), "US"); if (!PhoneNumberUtil.getInstance().isValidNumber(phone_number)) { @@ -388,20 +371,20 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg allOkay = false; } - if (allOkay && binding.password.getText() != null && binding.confirmPassword.getText() != null){ + if (allOkay && binding.password.getText() != null && binding.confirmPassword.getText() != null) { String password = binding.password.getText().toString(); - if (password.length() < 8){ + if (password.length() < 8) { allOkay = false; Toast.makeText(requireContext(), "Password must be at least 8 characters.", Toast.LENGTH_SHORT).show(); - }else if (password.contains(" ")){ + } else if (password.contains(" ")) { allOkay = false; Toast.makeText(requireContext(), "Password should not contains white spaces.", Toast.LENGTH_SHORT).show(); - }else if (!password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^a-zA-Z0-9]).{8,}$")){ + } else if (!password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^a-zA-Z0-9]).{8,}$")) { allOkay = false; Toast.makeText(requireContext(), "Password doesn't match the required criteria.", Toast.LENGTH_SHORT).show(); passwordWindow.showAsDropDown(binding.pwdTitle); - }else if (!binding.confirmPassword.getText().toString().equals(password)){ + } else if (!binding.confirmPassword.getText().toString().equals(password)) { allOkay = false; Toast.makeText(requireContext(), "Confirm password doesn't match.", Toast.LENGTH_SHORT).show(); } @@ -435,18 +418,23 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg progressDialog.dismiss(); + NavOptions navOptions = new NavOptions.Builder() + .setPopUpTo(R.id.welcomeFragment, true) + .build(); + Navigation.findNavController(binding.getRoot()) - .navigate(R.id.action_cgRegisterFragment_to_cgConnectFragment, bundle); + .navigate(R.id.action_cgRegisterFragment_to_cgConnectFragment, bundle, navOptions); } @Override public void onRegisterFailed(Throwable t, String message) { progressDialog.dismiss(); - AppUtil.showAlert(requireContext(), + AppUtil.showAlert(requireContext(), getString(R.string.something_went_wrong), message, getString(R.string.ok), - ((dialogInterface, i) -> {}), + ((dialogInterface, i) -> { + }), null, null); } } diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeRepository.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeRepository.java index bdfbaa5..2f32638 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeRepository.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeRepository.java @@ -225,4 +225,32 @@ public class CgWelcomeRepository { } + public void resendCgCode(Map body, + String token, + @NonNull WelcomeContracts.ResendCgCodeCallback cgCodeCallback){ + + apiService.resendCgCode(body, 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){ + cgCodeCallback.onCgCodeResentFailed(new Exception(), response.body().message); + return; + } + + cgCodeCallback.onCgCodeResent(); + }else{ + cgCodeCallback.onCgCodeResentFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + cgCodeCallback.onCgCodeResentFailed(new Exception(), t.getMessage()); + } + }); + + } + } diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeViewModel.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeViewModel.java index 4bf6094..7d941c5 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeViewModel.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/mvvm/CgWelcomeViewModel.java @@ -66,6 +66,12 @@ public class CgWelcomeViewModel extends ViewModel { repository.connectCg(body, connectCgCallback); } + public void resendCgCode(Map body, + String token, + WelcomeContracts.ResendCgCodeCallback codeCallback){ + repository.resendCgCode(body, token, codeCallback); + } + public ArrayList loadCountryCodeDropDown(Context context) { ArrayList countryCodeList = new ArrayList<>(); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java index 07698ea..da2aae4 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java @@ -194,7 +194,7 @@ public class SignInFragment extends Fragment implements WelcomeContracts.Registe private void gotoProfileProgress(){ NavOptions navOptions = new NavOptions.Builder() - .setPopUpTo(R.id.signInFragment, true) + .setPopUpTo(R.id.welcomeFragment, true) .build(); Navigation.findNavController(binding.getRoot()) diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java index 385bc71..2091396 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java @@ -84,7 +84,11 @@ public class AddContactFragment extends Fragment implements WelcomeContracts.Con private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.nextBtn.setOnClickListener(v -> Navigation.findNavController(v).navigate(R.id.action_addContactFragment_to_profileProgressFragment)); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactInfoFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactInfoFragment.java index 7fa5bf3..e90b238 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactInfoFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactInfoFragment.java @@ -106,7 +106,11 @@ public class ContactInfoFragment extends Fragment implements WelcomeContracts.De private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.delete.setOnClickListener(v -> { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java index f21afa1..6c136ab 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java @@ -4,10 +4,12 @@ import android.Manifest; import android.annotation.SuppressLint; import android.content.Intent; import android.content.pm.PackageManager; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.provider.ContactsContract; +import android.provider.Settings; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; @@ -31,12 +33,9 @@ import com.ssb.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.Contact import com.ssb.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.models.ContactData; import java.util.ArrayList; -import java.util.HashMap; public class ContactListFragment extends Fragment { - private static final String TAG = "aditya"; - // view binding protected ContactListFragmentBinding binding; @@ -45,6 +44,7 @@ public class ContactListFragment extends Fragment { protected ContactViewModel contactViewModel; protected ActivityResultLauncher permissionLauncher; + protected ActivityResultLauncher settingsIntent; protected ActivityResultLauncher insertContactLauncher; @@ -91,6 +91,10 @@ public class ContactListFragment extends Fragment { } ); + binding.askPermission.setOnClickListener(v -> { + askContactPermission(); + }); + binding.search.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -110,13 +114,34 @@ public class ContactListFragment extends Fragment { } + private void askContactPermission() { + if (requireActivity().checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { + if(!shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)){ + // user has selected to never ask them again for the permission + binding.errorView.setVisibility(View.VISIBLE); + binding.title.setText(getString(R.string.we_understand_your_privacy)); + binding.subTitle.setText(getString(R.string.to_help_you_connect_with_your_loved_ones_allow_simplitend_to_access_your_contacts)); + binding.askPermission.setVisibility(View.VISIBLE); + + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", requireContext().getPackageName(), null)); + settingsIntent.launch(intent); + return; + } + + permissionLauncher.launch(Manifest.permission.READ_CONTACTS); + } + + // permission is already granted + loadContacts(); + } + // filters contact list w.r.t searchInput private void filterContactList(String searchInput) { new Thread(() -> { if (searchInput.isEmpty()) { - contactListAdapter.submitList(contactList); + submitContactList(contactList); return; } @@ -145,6 +170,21 @@ public class ContactListFragment extends Fragment { } + private void submitContactList(ArrayList> list) { + if (contactList != null && contactList.isEmpty()){ + binding.errorView.setVisibility(View.VISIBLE); + binding.askPermission.setVisibility(View.GONE); + + binding.title.setText(getString(R.string.no_contacts_found)); + binding.subTitle.setText(getString(R.string.there_are_no_contacts_added_in_your_contact_directory_please_click_on_the_create_new_contact_button_above)); + }else{ + binding.errorView.setVisibility(View.GONE); + binding.contactRv.setVisibility(View.VISIBLE); + + if (contactListAdapter != null) contactListAdapter.submitList(list); + } + } + @SuppressLint("Range") private void initializeViews() { // initiating recycler view for contact list @@ -156,7 +196,14 @@ public class ContactListFragment extends Fragment { granted -> { if (granted) { // user granted the READ_CONTACT permission + binding.errorView.setVisibility(View.GONE); loadContacts(); + } else { + // user didn't allow permission to read contacts + binding.errorView.setVisibility(View.VISIBLE); + binding.title.setText(getString(R.string.we_understand_your_privacy)); + binding.subTitle.setText(getString(R.string.to_help_you_connect_with_your_loved_ones_allow_simplitend_to_access_your_contacts)); + binding.askPermission.setVisibility(View.VISIBLE); } } ); @@ -168,6 +215,11 @@ public class ContactListFragment extends Fragment { }); + settingsIntent = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), + result -> { + loadContacts(); + }); + loadContacts(); } @@ -187,9 +239,12 @@ public class ContactListFragment extends Fragment { contactList = contactViewModel.getContactList(requireContext()); if (binding.search.getText().toString().trim().isEmpty()) - contactListAdapter.submitList(contactList); - else + { + submitContactList(contactList); + } + else { + binding.errorView.setVisibility(View.GONE); filterContactList(binding.search.getText().toString().trim().toLowerCase()); - + } } } diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java index 5d6a62e..c0d444c 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java @@ -229,7 +229,11 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.nextBtn.setOnClickListener(v -> { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ChangePinFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ChangePinFragment.java index 278d937..5fe78f7 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ChangePinFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ChangePinFragment.java @@ -127,7 +127,11 @@ public class ChangePinFragment extends Fragment implements WelcomeContracts.Upda private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.resetPin.setOnClickListener(v -> { if (allOkay()){ diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/CheckMailFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/CheckMailFragment.java index 930c8f9..7844e56 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/CheckMailFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/CheckMailFragment.java @@ -210,7 +210,11 @@ public class CheckMailFragment extends Fragment implements WelcomeContracts.Veri private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.submit.setOnClickListener(v -> { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ForgotPinFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ForgotPinFragment.java index f23afe0..d027205 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ForgotPinFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/forgotpin/ForgotPinFragment.java @@ -69,8 +69,11 @@ public class ForgotPinFragment extends Fragment implements WelcomeContracts.Send private void clickEvents() { - binding.backBtn.setOnClickListener(v -> - Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.submit.setOnClickListener(v -> { AppUtil.closeKeyboard(requireActivity()); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/CreatePinFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/CreatePinFragment.java index c1eac9d..5f393ce 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/CreatePinFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/CreatePinFragment.java @@ -107,7 +107,11 @@ public class CreatePinFragment extends Fragment implements WelcomeContracts.Regi private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.setPin.setOnClickListener(v -> { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java index 0b780ef..85b283b 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java @@ -284,7 +284,11 @@ public class LocationFragment extends Fragment implements OnMapReadyCallback, private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.submit.setOnClickListener(v -> { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java index d8ca36a..690a4b5 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java @@ -4,7 +4,6 @@ import android.app.DatePickerDialog; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.text.InputFilter; import android.util.Log; @@ -13,11 +12,11 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; +import android.widget.DatePicker; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; @@ -54,10 +53,6 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif private DatePickerDialog datePickerDialog; - public RegisterFragment() { - // required empty const. - } - @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -85,9 +80,22 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif progressDialog = new ProgressDialog(requireContext()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - datePickerDialog = new DatePickerDialog(requireContext()); - } + // date picker dialog + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 18); + + datePickerDialog = new DatePickerDialog(requireContext(), + (datePicker, year, month, dayOfMonth) -> { + setDOB(year, month, dayOfMonth); + + binding.contactNumber.requestFocus(); + + if (getActivity() != null) { + getActivity().getWindow() + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + } + }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); + datePickerDialog.getDatePicker().setMaxDate(calendar.getTimeInMillis()); countryCodeList = viewModel.loadCountryCodeDropDown(requireContext()); @@ -117,9 +125,8 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif binding.name.setOnEditorActionListener((textView, i, keyEvent) -> { AppUtil.closeKeyboard(requireActivity()); binding.name.clearFocus(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - pickDate(); - } + + pickDate(); return true; }); } @@ -190,7 +197,11 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif private void clickEvents() { - binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.backBtn.setOnClickListener(v -> { + if (getActivity() != null){ + getActivity().onBackPressed(); + } + }); binding.nextBtn.setOnClickListener(v -> { @@ -211,11 +222,8 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif binding.dob.setOnClickListener(v -> { binding.dob.setError(null); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - AppUtil.closeKeyboard(requireActivity()); - pickDate(); - } + pickDate(); }); binding.tncBtn.setOnClickListener(v -> { @@ -224,13 +232,6 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif startActivity(intent); }); - // static thing for lower android versions - // todo should be removed afterwards - binding.dob.setOnLongClickListener(v -> { - binding.dob.setText("12-12-2001"); - return false; - }); - } private void removeExistingErrors() { @@ -279,16 +280,15 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif binding.contactNumber.getText().toString().trim().length() < 10) { binding.contactNumber.setError("Invalid"); allOkay = false; - }else if (binding.countryCodes.getSelectedIndex() == -1 || - binding.countryCodes.getSelectedIndex() >= countryCodeList.size()){ + } else if (binding.countryCodes.getSelectedIndex() == -1 || + binding.countryCodes.getSelectedIndex() >= countryCodeList.size()) { allOkay = false; Toast.makeText(requireContext(), "Select a coutnry code.", Toast.LENGTH_SHORT).show(); - } - else{ + } else { // validating phone number try { - Phonenumber.PhoneNumber phone_number = PhoneNumberUtil.getInstance().parse(countryCodeList.get(binding.countryCodes.getSelectedIndex())+ - binding.contactNumber.getText().toString(), "US"); + Phonenumber.PhoneNumber phone_number = PhoneNumberUtil.getInstance().parse(countryCodeList.get(binding.countryCodes.getSelectedIndex()) + + binding.contactNumber.getText().toString(), "US"); if (!PhoneNumberUtil.getInstance().isValidNumber(phone_number)) { binding.contactNumber.setError("Invalid phone number"); @@ -357,26 +357,10 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif goForward(); } - @RequiresApi(api = Build.VERSION_CODES.N) private void pickDate() { if (datePickerDialog == null) return; - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 18); - datePickerDialog.getDatePicker().setMaxDate(calendar.getTimeInMillis()); - - datePickerDialog.setOnDateSetListener((view, year, month, dayOfMonth) -> { - setDOB(year, month, dayOfMonth); - - binding.contactNumber.requestFocus(); - - if (getActivity() != null) { - getActivity().getWindow() - .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); - } - }); - datePickerDialog.show(); } diff --git a/app/src/main/res/drawable/ic_no_contacts.xml b/app/src/main/res/drawable/ic_no_contacts.xml new file mode 100644 index 0000000..7ac590c --- /dev/null +++ b/app/src/main/res/drawable/ic_no_contacts.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/connect_caregiver_fragment.xml b/app/src/main/res/layout/connect_caregiver_fragment.xml index 6fe8cd2..d487fb3 100644 --- a/app/src/main/res/layout/connect_caregiver_fragment.xml +++ b/app/src/main/res/layout/connect_caregiver_fragment.xml @@ -144,7 +144,7 @@ app:cornerRadius="25dp" /> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/reminders_fragment.xml b/app/src/main/res/layout/reminders_fragment.xml index 6e08152..7ffb9d8 100644 --- a/app/src/main/res/layout/reminders_fragment.xml +++ b/app/src/main/res/layout/reminders_fragment.xml @@ -559,7 +559,7 @@ @color/black @drawable/primary_cursor_drawable @drawable/splash_screen + + + // top corner rounded bottom sheet @@ -24,5 +27,10 @@ + + // date picker dialog theme + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 85072cd..4142694 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -121,7 +121,7 @@ Family & friends contacts Medication Reminder Medical Information - Setup routine + Setup Activity Frequently used apps Skip to dashboard * @@ -309,5 +309,10 @@ Setup security No new gadgets! monitor your loved one\'s activity using his or her smartphone 595 + We understand your privacy. + To help you connect with your loved one allow SimpliTend to access your contacts. + Continue + No contacts found. + There are no contacts added in your contact directory. Please click on the "Create New Contact" button above. \ No newline at end of file