diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fb7f4a8..b589d56 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index bdd9278..773fe0f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,7 +1,6 @@ - - + diff --git a/app/build.gradle b/app/build.gradle index a7716cd..2b112d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -86,6 +86,8 @@ dependencies { implementation 'com.github.dhaval2404:imagepicker:2.1' + implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.32' + implementation 'androidx.appcompat:appcompat:1.6.0' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' diff --git a/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java b/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java index 37c0dda..ec012d0 100644 --- a/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java +++ b/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java @@ -26,7 +26,6 @@ public abstract class AppUtil { private static final String TAG = "AppUtil"; // fields - public static final String USER_DETAILS = "user_details"; public static final String USER_TOKEN = "user_token"; diff --git a/app/src/main/java/com/ssb/simplitend/apputils/EditTextErrorRemover.java b/app/src/main/java/com/ssb/simplitend/apputils/EditTextErrorRemover.java new file mode 100644 index 0000000..0c1cd29 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/apputils/EditTextErrorRemover.java @@ -0,0 +1,41 @@ +package com.ssb.simplitend.apputils; + +import android.text.Editable; +import android.text.TextWatcher; +import android.widget.EditText; + +import java.util.ArrayList; +import java.util.Arrays; + +public class EditTextErrorRemover implements TextWatcher { + + private final ArrayList editTexts; + + public EditTextErrorRemover(EditText... editText){ + this.editTexts = new ArrayList<>(); + + editTexts.addAll(Arrays.asList(editText)); + + for (EditText e: editText){ + e.addTextChangedListener(this); + } + + } + + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + for (EditText editText: editTexts){ + editText.setError(null); + } + } +} 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 56c6131..6009e4e 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/PatientProfileAPIService.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/PatientProfileAPIService.java @@ -6,6 +6,8 @@ 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 com.ssb.simplitend.welcome.mvvm.models.PatientData; +import com.ssb.simplitend.welcome.mvvm.models.PatientResult; import java.util.List; import java.util.Map; @@ -23,6 +25,9 @@ import retrofit2.http.Query; public interface PatientProfileAPIService { + @GET("api/auth-user-data") + Call> getUsrProfileProgress(@Header("Authorization") String token); + @GET("api/patient-reminder-list/{id}") Call>> getRemindersList(@Path("id") int patient_id, @Query("weekday") int week_day, 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 85b8bf8..7be5a78 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileContracts.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileContracts.java @@ -4,12 +4,19 @@ 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 com.ssb.simplitend.welcome.mvvm.models.PatientData; import java.util.List; public interface ProfileContracts { + interface ProfileProgressCallback{ + void onProfileProgressFetched(PatientData patientData); + + void onProfileProgressFetchFailed(Throwable t, String message); + } + interface GetRemindersListCallback { void onRemindersListFetched(List reminderResult); diff --git a/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileProgressFragment.java b/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileProgressFragment.java index 350ff49..6b4ae34 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileProgressFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/ProfileProgressFragment.java @@ -1,10 +1,12 @@ package com.ssb.simplitend.patientprofile; +import android.app.ProgressDialog; import android.content.Intent; 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; @@ -12,15 +14,25 @@ import androidx.fragment.app.Fragment; import androidx.navigation.Navigation; import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.RetrofitHelper; import com.ssb.simplitend.careperson_dashboard.DashBoardActivityCP; import com.ssb.simplitend.databinding.ProfileProgressFragmentBinding; +import com.ssb.simplitend.welcome.mvvm.models.CallResponse; +import com.ssb.simplitend.welcome.mvvm.models.PatientData; -public class ProfileProgressFragment extends Fragment { +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ProfileProgressFragment extends Fragment implements ProfileContracts.ProfileProgressCallback { // view binding protected ProfileProgressFragmentBinding binding; - public ProfileProgressFragment(){ + private ProgressDialog progressDialog; + + public ProfileProgressFragment() { // required empty const. } @@ -29,9 +41,6 @@ public class ProfileProgressFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = ProfileProgressFragmentBinding.inflate(inflater, container, false); -// binding.medReminderImg.setImageResource(0); -// binding.medReminderImg.setBackgroundResource(R.drawable.ic_done); - initProgress(); clickEvents(); @@ -40,10 +49,46 @@ public class ProfileProgressFragment extends Fragment { } private void initProgress() { + + progressDialog = new ProgressDialog(requireContext()); + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we load the profile progress."); + progressDialog.setCancelable(false); + progressDialog.show(); + + PatientProfileAPIService apiService = RetrofitHelper.getRetrofit().create(PatientProfileAPIService.class); + + String token = "Bearer " + AppUtil.getUserToken(requireContext()); + + apiService.getUsrProfileProgress(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) { + onProfileProgressFetchFailed(new Exception(), response.body().message); + return; + } + + onProfileProgressFetched(response.body().result); + } else { + onProfileProgressFetchFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + onProfileProgressFetchFailed(new Exception(), "Please try again later."); + } + }); } private void clickEvents() { + binding.addContact.setOnClickListener(v -> + Navigation.findNavController(v).navigate(R.id.action_profileProgressFragment_to_addContactFragment) + ); + binding.medicReminder.setOnClickListener(v -> Navigation.findNavController(v).navigate(R.id.action_profileProgressFragment_to_reminderFragment) ); @@ -64,4 +109,34 @@ public class ProfileProgressFragment extends Fragment { }); } + + @Override + public void onProfileProgressFetched(@NonNull PatientData patientData) { + if (patientData.isCareGiverLink == 1) { + // TODO: 25-07-2023 look into this + } + + if (patientData.isPatientReminderData == 1) { + binding.medReminderImg.setImageResource(0); + binding.medReminderImg.setBackgroundResource(R.drawable.ic_done); + } + + if (patientData.isPatientMedicalData == 1) { + binding.medInfoImg.setImageResource(0); + binding.medInfoImg.setBackgroundResource(R.drawable.ic_done); + } + + if (patientData.isPatientRoutineData == 1) { + binding.setupRoutineImg.setImageResource(0); + binding.setupRoutineImg.setBackgroundResource(R.drawable.ic_done); + } + + progressDialog.dismiss(); + } + + @Override + public void onProfileProgressFetchFailed(Throwable t, String message) { + progressDialog.dismiss(); + Toast.makeText(requireContext(), "Couldn't load profile progress.", Toast.LENGTH_SHORT).show(); + } } 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 41d5f20..75a1bb4 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 @@ -110,7 +110,6 @@ public class ReminderFragment extends Fragment implements RecyclerTouchListener. } private void loadReminderList(int day_of_week){ - Toast.makeText(requireContext(), "loading for " + reminderViewModel.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); @@ -140,7 +139,7 @@ public class ReminderFragment extends Fragment implements RecyclerTouchListener. Calendar calendar = Calendar.getInstance(); - String today_date = reminderViewModel.getMonthOfYear(calendar.get(Calendar.MONTH)); + String today_date = reminderViewModel.getMonthOfYear(calendar.get(Calendar.MONTH) + 1); today_date = today_date.concat(", " + calendar.get(Calendar.DAY_OF_MONTH)); binding.todayDate.setText(today_date); 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 156e7ec..bd79dc9 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 @@ -104,8 +104,6 @@ public class RoutineFragment extends Fragment implements RoutineAdapter.ClickLis } 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); @@ -130,7 +128,7 @@ public class RoutineFragment extends Fragment implements RoutineAdapter.ClickLis Calendar calendar = Calendar.getInstance(); - String today_date = routineViewModel.getMonthOfYear(calendar.get(Calendar.MONTH)); + String today_date = routineViewModel.getMonthOfYear(calendar.get(Calendar.MONTH) + 1); today_date = today_date.concat(", " + calendar.get(Calendar.DAY_OF_MONTH)); binding.todayDate.setText(today_date); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/SignInFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/SignInFragment.java index f5df610..b8a6214 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/SignInFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/SignInFragment.java @@ -17,6 +17,7 @@ import androidx.navigation.Navigation; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.EditTextErrorRemover; import com.ssb.simplitend.careperson_dashboard.DashBoardActivityCP; import com.ssb.simplitend.databinding.SignInFragmentBinding; import com.ssb.simplitend.welcome.mvvm.WelcomeContracts; @@ -60,6 +61,12 @@ public class SignInFragment extends Fragment implements WelcomeContracts.Registe private void initViews() { progressDialog = new ProgressDialog(requireContext()); + + new EditTextErrorRemover( + binding.email, + binding.pin + ); + } private void clickEvents() { @@ -110,10 +117,10 @@ public class SignInFragment extends Fragment implements WelcomeContracts.Registe if (Objects.requireNonNull(binding.pin.getText()).toString().trim().isEmpty()){ allOkay = false; - binding.pin.setError("Required"); + Toast.makeText(requireContext(), "Enter your security pin.", Toast.LENGTH_SHORT).show(); }else if (binding.pin.getText().toString().trim().length() != 4){ allOkay = false; - binding.pin.setError("Pin should be 4 digit."); + Toast.makeText(requireContext(), "Enter a valid pin.", Toast.LENGTH_SHORT).show(); } return allOkay; diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/WelcomeFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/WelcomeFragment.java index 43e7d9c..d75c00f 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/WelcomeFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/WelcomeFragment.java @@ -38,6 +38,13 @@ public class WelcomeFragment extends Fragment { return binding.getRoot(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + Navigation.findNavController(binding.getRoot()) + .popBackStack(R.id.welcomeFragment, false); + } + // Initialize views private void initViews(Bundle savedInstanceState) { WelcomeViewModel wv = new ViewModelProvider(requireActivity()).get(WelcomeViewModel.class); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/contacts/CreateContactFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/contacts/CreateContactFragment.java index 5667513..8a6a957 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/contacts/CreateContactFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/contacts/CreateContactFragment.java @@ -9,6 +9,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; +import android.text.InputFilter; import android.util.Log; import android.util.Patterns; import android.view.LayoutInflater; @@ -27,6 +28,8 @@ import androidx.navigation.Navigation; import com.bumptech.glide.Glide; import com.github.dhaval2404.imagepicker.ImagePicker; import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.Phonenumber; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; import com.ssb.simplitend.databinding.CreateEditContactFragmentBinding; @@ -170,6 +173,52 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. Toast.makeText(requireContext(), "Task Cancelled", Toast.LENGTH_SHORT).show(); } }); + + // phone number formatting + // to deal with input pasting in the edit text + InputFilter phoneFilter = (charSequence, i, i1, spanned, i2, i3) -> { + String phone_number_str = charSequence.toString(); + + String country_code; + + if (binding.countryCodes.getSelectedIndex() == -2){ + country_code = "+1"; + }else{ + country_code = countryCodeList.get(binding.countryCodes.getSelectedIndex()); + } + + try { + PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); + Phonenumber.PhoneNumber phoneNumber = phoneNumberUtil.parse(charSequence, "US"); + + phone_number_str = String.valueOf(phoneNumber.getNationalNumber()); + country_code = "+" + phoneNumber.getCountryCode(); + } catch (Exception e) { + // nothing + } + + if (!countryCodeList.contains(country_code)){ + countryCodeList.add(country_code); + } + + binding.countryCodes.selectItemByIndex(countryCodeList.indexOf(country_code)); + + 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.phoneNumber.getText().toString() + phone_number_str; + + if (total_phone_number.length() > 10){ + // max length should be 10 + return ""; + }else{ + return phone_number_str; + } + }; + + binding.phoneNumber.setFilters(new InputFilter[]{phoneFilter}); } private void clickEvents() { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ChangePinFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ChangePinFragment.java index bbe9573..5d4a82e 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ChangePinFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ChangePinFragment.java @@ -18,6 +18,7 @@ import androidx.navigation.Navigation; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.EditTextErrorRemover; import com.ssb.simplitend.databinding.ChangePinFragmentBinding; import com.ssb.simplitend.welcome.mvvm.WelcomeContracts; import com.ssb.simplitend.welcome.mvvm.WelcomeViewModel; @@ -79,6 +80,11 @@ public class ChangePinFragment extends Fragment implements WelcomeContracts.Upda private void initViews() { progressDialog = new ProgressDialog(requireContext()); + + new EditTextErrorRemover( + binding.pin, + binding.confirmPin + ); } private void clickEvents() { @@ -121,11 +127,11 @@ public class ChangePinFragment extends Fragment implements WelcomeContracts.Upda if (binding.pin.getText() == null || binding.pin.getText().toString().length() != 4) { allOkay = false; - binding.pin.setError("Invalid pin"); + Toast.makeText(requireContext(), "Enter a 4 digit security pin.", Toast.LENGTH_SHORT).show(); } else if (binding.confirmPin.getText() == null || !binding.confirmPin.getText().toString().equals(binding.pin.getText().toString())) { allOkay = false; - binding.confirmPin.setError("Pin doesn't match"); + Toast.makeText(requireContext(), "Confirm pin doesn't match.", Toast.LENGTH_SHORT).show(); } return allOkay; diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ForgotPinFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ForgotPinFragment.java index 9748be4..46b477c 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ForgotPinFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/forgotpin/ForgotPinFragment.java @@ -16,6 +16,7 @@ import androidx.navigation.Navigation; import com.bumptech.glide.Glide; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.EditTextErrorRemover; import com.ssb.simplitend.databinding.ForgotPinFragmentBinding; import com.ssb.simplitend.welcome.mvvm.WelcomeContracts; import com.ssb.simplitend.welcome.mvvm.WelcomeViewModel; @@ -60,6 +61,10 @@ public class ForgotPinFragment extends Fragment implements WelcomeContracts.Send .load(R.raw.email_sending_anim) .placeholder(R.drawable.forgot_pin_email_img) .into(binding.image); + + new EditTextErrorRemover( + binding.emailAddress + ); } private void clickEvents() { @@ -68,6 +73,7 @@ public class ForgotPinFragment extends Fragment implements WelcomeContracts.Send Navigation.findNavController(v).popBackStack()); binding.submit.setOnClickListener(v -> { + AppUtil.closeKeyboard(requireActivity()); if (allOkay()){ sendOTP(); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/CreatePinFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/CreatePinFragment.java index fcf5e14..c0b9bd7 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/CreatePinFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/CreatePinFragment.java @@ -6,6 +6,7 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -99,11 +100,11 @@ public class CreatePinFragment extends Fragment implements WelcomeContracts.Regi if (binding.pin.getText() == null || binding.pin.getText().toString().length() != 4) { allOkay = false; - binding.pin.setError("Invalid pin"); + Toast.makeText(requireContext(), "Enter a 4 digit security pin.", Toast.LENGTH_SHORT).show(); } else if (binding.confirmPin.getText() == null || !binding.confirmPin.getText().toString().equals(binding.pin.getText().toString())) { allOkay = false; - binding.confirmPin.setError("Pin doesn't match"); + Toast.makeText(requireContext(), "Confirm pin doesn't match.", Toast.LENGTH_SHORT).show(); } return allOkay; diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/LocationFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/LocationFragment.java index e687e7f..5f31b74 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/LocationFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/LocationFragment.java @@ -63,7 +63,6 @@ import java.util.List; public class LocationFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnMapClickListener, LocationListener { - private static final String TAG = "LocationFragment"; private static final String UNITED_STATES = "United States"; @@ -182,7 +181,7 @@ public class LocationFragment extends Fragment implements OnMapReadyCallback, currentLocation = new LatLng(lat, lng); }else{ // default current location // washington DC - currentLocation = new LatLng(38.9072, 77.0369); + currentLocation = new LatLng(0, 0); } if (patientData.address_line1 != null){ diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/RegisterFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/RegisterFragment.java index d85b7e6..0cd3c45 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/RegisterFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/RegisterFragment.java @@ -6,6 +6,12 @@ import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.telephony.PhoneNumberFormattingTextWatcher; +import android.telephony.PhoneNumberUtils; +import android.text.Editable; +import android.text.InputFilter; +import android.text.Spanned; +import android.text.TextWatcher; import android.util.Log; import android.util.Patterns; import android.view.LayoutInflater; @@ -20,8 +26,12 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; +import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.Phonenumber; import com.ssb.simplitend.R; import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.EditTextErrorRemover; import com.ssb.simplitend.databinding.RegisterFragmentBinding; import com.ssb.simplitend.welcome.mvvm.WelcomeContracts; import com.ssb.simplitend.welcome.mvvm.WelcomeViewModel; @@ -33,7 +43,7 @@ import java.util.Calendar; import java.util.Date; import java.util.Locale; -public class RegisterFragment extends Fragment implements WelcomeContracts.VerifyEmailCallBack { +public class RegisterFragment extends Fragment implements WelcomeContracts.VerifyEmailCallBack{ private static final String TAG = "RegisterFragment"; @@ -83,6 +93,64 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif loadPatientDataSavedState(); + setErrorRemovers(); + + } + + // This adds textChangeListener to all the EditTexts available to remove error if available + private void setErrorRemovers() { + new EditTextErrorRemover( + binding.name, + binding.contactNumber, + binding.email + ); + + // phone number formatting + // to deal with input pasting in the edit text + InputFilter phoneFilter = (charSequence, i, i1, spanned, i2, i3) -> { + String phone_number_str = charSequence.toString(); + + String country_code; + + if (binding.countryCodes.getSelectedIndex() == -2){ + country_code = "+1"; + }else{ + country_code = countryCodeList.get(binding.countryCodes.getSelectedIndex()); + } + + try { + PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); + Phonenumber.PhoneNumber phoneNumber = phoneNumberUtil.parse(charSequence, "US"); + + phone_number_str = String.valueOf(phoneNumber.getNationalNumber()); + country_code = "+" + phoneNumber.getCountryCode(); + } catch (Exception e) { + // nothing + } + + if (!countryCodeList.contains(country_code)){ + countryCodeList.add(country_code); + } + + binding.countryCodes.selectItemByIndex(countryCodeList.indexOf(country_code)); + + 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){ + // max length should be 10 + return ""; + }else{ + return phone_number_str; + } + }; + + binding.contactNumber.setFilters(new InputFilter[]{phoneFilter}); + } private void loadPatientDataSavedState() { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/SplashFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/SplashFragment.java index f0ffdc3..7e02b6e 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/SplashFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/SplashFragment.java @@ -9,6 +9,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.navigation.NavOptions; import androidx.navigation.Navigation; import com.ssb.simplitend.R; @@ -26,7 +27,12 @@ public class SplashFragment extends Fragment { new Handler().postDelayed(() -> { - Navigation.findNavController(binding.mainIcon).navigate(R.id.action_splashFragment_to_welcomeFragment); + NavOptions navOptions = new NavOptions.Builder() + .setPopUpTo(R.id.splashFragment, true) + .build(); + + Navigation.findNavController(binding.mainIcon) + .navigate(R.id.action_splashFragment_to_welcomeFragment, null, navOptions); }, 1000); diff --git a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/ThankYouFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/ThankYouFragment.java index 6b3e401..fe7dcf4 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/ThankYouFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/fragments/register/ThankYouFragment.java @@ -11,6 +11,9 @@ import androidx.fragment.app.Fragment; import androidx.navigation.Navigation; import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.resource.gif.GifDrawable; +import com.bumptech.glide.request.target.ImageViewTarget; import com.ssb.simplitend.R; import com.ssb.simplitend.databinding.ThankYouFragmentBinding; @@ -40,6 +43,7 @@ public class ThankYouFragment extends Fragment { Glide.with(requireContext()) .asGif() .load(R.raw.done_anim) + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .into(binding.animIv); } diff --git a/app/src/main/java/com/ssb/simplitend/welcome/mvvm/models/PatientData.java b/app/src/main/java/com/ssb/simplitend/welcome/mvvm/models/PatientData.java index 9032824..a5b83cc 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/mvvm/models/PatientData.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/mvvm/models/PatientData.java @@ -23,6 +23,12 @@ public class PatientData { // for payload purpose public String pin_code, c_pin_code; + // progress flags + public int isCareGiverLink + , isPatientReminderData + , isPatientRoutineData + , isPatientMedicalData; + public PatientData() { } diff --git a/app/src/main/res/layout/add_contact_fragment.xml b/app/src/main/res/layout/add_contact_fragment.xml index e5835f9..fa94aa1 100644 --- a/app/src/main/res/layout/add_contact_fragment.xml +++ b/app/src/main/res/layout/add_contact_fragment.xml @@ -19,6 +19,8 @@ android:layout_margin="15dp" android:contentDescription="@string/back_button" android:padding="5dp" + android:paddingStart="-15dp" + android:paddingEnd="0dp" android:src="@drawable/arrow_back" /> - - @@ -176,7 +178,7 @@ android:drawablePadding="10dp" android:autofillHints="name" - android:inputType="text|none" + android:inputType="text|textCapWords" android:maxLines="1" /> diff --git a/app/src/main/res/layout/add_reminder_fragment.xml b/app/src/main/res/layout/add_reminder_fragment.xml index b947190..1023ce5 100644 --- a/app/src/main/res/layout/add_reminder_fragment.xml +++ b/app/src/main/res/layout/add_reminder_fragment.xml @@ -22,6 +22,8 @@ android:layout_marginBottom="15dp" android:contentDescription="@string/back_button" android:padding="5dp" + android:paddingStart="-15dp" + android:paddingEnd="0dp" android:src="@drawable/arrow_back" /> @@ -89,7 +91,7 @@ android:layout_marginBottom="15dp" android:fontFamily="@font/nunito_medium" android:text="@string/enter_temporary_pin" - android:textAppearance="@style/TextAppearance.Material3.TitleLarge" + android:textSize="@dimen/_18ssp" android:textColor="@color/black" /> diff --git a/app/src/main/res/layout/choose_role_fragment.xml b/app/src/main/res/layout/choose_role_fragment.xml index 5715902..1766027 100644 --- a/app/src/main/res/layout/choose_role_fragment.xml +++ b/app/src/main/res/layout/choose_role_fragment.xml @@ -17,21 +17,21 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/choose_a_role" - android:fontFamily="@font/nunito_medium" + android:fontFamily="@font/nunito_bold" android:textColor="#131313" - android:textAppearance="@style/TextAppearance.Material3.HeadlineLarge" + android:textSize="@dimen/_24ssp" android:layout_marginTop="40dp"/> @@ -40,10 +40,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="15dp" - android:layout_marginTop="30dp" - app:cardCornerRadius="5dp" + android:layout_marginTop="50dp" + app:cardCornerRadius="10dp" app:cardElevation="3dp" - app:strokeColor="@android:color/holo_blue_light" + app:strokeColor="#AEE0FF" app:strokeWidth="0.5dp" app:cardBackgroundColor="@color/white_bg" > @@ -111,9 +111,9 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="15dp" android:layout_marginVertical="30dp" - app:cardCornerRadius="5dp" + app:cardCornerRadius="10dp" app:cardElevation="3dp" - app:strokeColor="@android:color/holo_blue_light" + app:strokeColor="#AEE0FF" app:strokeWidth="0.5dp" app:cardBackgroundColor="@color/white_bg" > diff --git a/app/src/main/res/layout/contact_info_fragment.xml b/app/src/main/res/layout/contact_info_fragment.xml index 282abec..3b88ba4 100644 --- a/app/src/main/res/layout/contact_info_fragment.xml +++ b/app/src/main/res/layout/contact_info_fragment.xml @@ -26,6 +26,8 @@ android:layout_marginBottom="15dp" android:contentDescription="@string/back_button" android:padding="5dp" + android:paddingStart="-15dp" + android:paddingEnd="0dp" android:src="@drawable/arrow_back" /> @@ -112,7 +114,7 @@ android:layout_marginHorizontal="15dp" android:layout_marginTop="15dp" android:fontFamily="@font/nunito_medium" - android:textAppearance="@style/TextAppearance.Material3.TitleLarge" + android:textSize="@dimen/_18ssp" android:textColor="@color/black" /> diff --git a/app/src/main/res/layout/forgot_pin_fragment.xml b/app/src/main/res/layout/forgot_pin_fragment.xml index 19467ed..f7cb4c8 100644 --- a/app/src/main/res/layout/forgot_pin_fragment.xml +++ b/app/src/main/res/layout/forgot_pin_fragment.xml @@ -25,13 +25,15 @@ android:contentDescription="@string/back_button" android:padding="5dp" android:src="@drawable/arrow_back" + android:paddingStart="-15dp" + android:paddingEnd="0dp" android:layout_margin="15dp"/> @@ -63,8 +65,8 @@ android:layout_height="wrap_content" android:text="@string/enter_email_address" android:fontFamily="@font/nunito_medium" - android:textAppearance="@style/TextAppearance.Material3.TitleLarge" android:layout_marginHorizontal="15dp" + android:textSize="@dimen/_18ssp" android:textColor="@color/black" android:layout_marginVertical="15dp" /> diff --git a/app/src/main/res/layout/how_to_set_up_fragment.xml b/app/src/main/res/layout/how_to_set_up_fragment.xml index 8459db7..a1917a3 100644 --- a/app/src/main/res/layout/how_to_set_up_fragment.xml +++ b/app/src/main/res/layout/how_to_set_up_fragment.xml @@ -73,7 +73,7 @@ android:background="@color/color_accent" android:contentDescription="@string/how_to_setup" - android:layout_marginVertical="5dp"/> + android:layout_marginVertical="15dp"/> @@ -151,7 +151,7 @@ android:contentDescription="@string/how_to_setup" - android:layout_marginVertical="5dp"/> + android:layout_marginVertical="15dp"/> @@ -226,7 +226,7 @@ android:background="@color/color_accent" android:contentDescription="@string/how_to_setup" - android:layout_marginVertical="5dp"/> + android:layout_marginVertical="15dp"/> diff --git a/app/src/main/res/layout/location_fragment.xml b/app/src/main/res/layout/location_fragment.xml index 699f8f6..088756e 100644 --- a/app/src/main/res/layout/location_fragment.xml +++ b/app/src/main/res/layout/location_fragment.xml @@ -20,7 +20,10 @@ android:contentDescription="@string/back_button" android:padding="5dp" android:src="@drawable/arrow_back" - android:layout_margin="15dp"/> + android:layout_margin="15dp" + android:paddingStart="-15dp" + android:paddingEnd="0dp" + /> diff --git a/app/src/main/res/layout/medical_into_fragment.xml b/app/src/main/res/layout/medical_into_fragment.xml index eace095..aa556ae 100644 --- a/app/src/main/res/layout/medical_into_fragment.xml +++ b/app/src/main/res/layout/medical_into_fragment.xml @@ -15,6 +15,8 @@ android:layout_marginBottom="15dp" android:contentDescription="@string/back_button" android:padding="5dp" + android:paddingEnd="0dp" + android:paddingStart="-15dp" android:src="@drawable/arrow_back" /> \ No newline at end of file diff --git a/app/src/main/res/layout/profile_progress_fragment.xml b/app/src/main/res/layout/profile_progress_fragment.xml index 6db649f..dafd1d6 100644 --- a/app/src/main/res/layout/profile_progress_fragment.xml +++ b/app/src/main/res/layout/profile_progress_fragment.xml @@ -12,6 +12,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingEnd="15dp" + android:paddingStart="0dp" android:orientation="vertical"> @@ -358,7 +360,7 @@ android:text="@string/skip_to_dashboard" android:fontFamily="@font/nunito_regular" - android:textAppearance="@style/TextAppearance.Material3.TitleSmall" + android:textSize="@dimen/_16ssp" android:textColor="@android:color/black" app:drawableEndCompat="@drawable/ic_right_kb" @@ -367,7 +369,6 @@ android:layout_gravity="end" android:layout_marginVertical="25dp" - android:layout_marginHorizontal="15dp" android:padding="5dp" diff --git a/app/src/main/res/layout/register_fragment.xml b/app/src/main/res/layout/register_fragment.xml index bd59316..54c43cd 100644 --- a/app/src/main/res/layout/register_fragment.xml +++ b/app/src/main/res/layout/register_fragment.xml @@ -19,7 +19,10 @@ android:contentDescription="@string/back_button" android:padding="5dp" android:src="@drawable/arrow_back" - android:layout_margin="15dp"/> + android:layout_margin="15dp" + android:paddingStart="-15dp" + android:paddingEnd="0dp" + /> diff --git a/app/src/main/res/layout/reminders_fragment.xml b/app/src/main/res/layout/reminders_fragment.xml index 49ff99d..6e08152 100644 --- a/app/src/main/res/layout/reminders_fragment.xml +++ b/app/src/main/res/layout/reminders_fragment.xml @@ -23,6 +23,8 @@ android:layout_marginBottom="15dp" android:contentDescription="@string/back_button" android:padding="5dp" + android:paddingStart="-15dp" + android:paddingEnd="0dp" android:src="@drawable/arrow_back" /> @@ -25,15 +25,18 @@ android:text="@string/welcome_to_simplitend" android:fontFamily="@font/nunito_semibold" android:textColor="@color/black" - android:textAppearance="@style/TextAppearance.Material3.HeadlineMedium"/> + android:textSize="@dimen/_24ssp" + android:textAlignment="center" + /> @@ -78,8 +81,8 @@ android:layout_gravity="start" android:layout_marginHorizontal="15dp" android:fontFamily="@font/nunito_medium" - android:textAppearance="@style/TextAppearance.Material3.TitleLarge" android:textColor="@color/black" + android:textSize="@dimen/_18ssp" /> diff --git a/app/src/main/res/layout/thank_you_fragment.xml b/app/src/main/res/layout/thank_you_fragment.xml index 3d98434..55cfa2b 100644 --- a/app/src/main/res/layout/thank_you_fragment.xml +++ b/app/src/main/res/layout/thank_you_fragment.xml @@ -6,45 +6,57 @@ android:background="@color/white_bg" android:overScrollMode="never"> - - + android:layout_height="match_parent" + android:gravity="center" + android:orientation="vertical"> - + - + - + + + + + - - /> + + + + + + + + + - - \ No newline at end of file diff --git a/app/src/main/res/navigation/welcome_nav_graph.xml b/app/src/main/res/navigation/welcome_nav_graph.xml index 3e37d2f..396e577 100644 --- a/app/src/main/res/navigation/welcome_nav_graph.xml +++ b/app/src/main/res/navigation/welcome_nav_graph.xml @@ -162,6 +162,9 @@ +