From 1f51017070d6ae9243fa005b89f8487013640ff3 Mon Sep 17 00:00:00 2001 From: 14Sandee Date: Fri, 27 Oct 2023 21:04:20 +0530 Subject: [PATCH] . --- .idea/deploymentTargetDropDown.xml | 12 --- .../com/app/simplitend/apputils/AppUtil.java | 37 +++++--- .../app/simplitend/apputils/TextUtils.java | 9 +- .../activities/CaregiverDashActivity.java | 1 + .../activities/CgChangePwdActivity.java | 5 ++ .../activities/ChangePinActivity.java | 6 ++ .../activities/EditProfileInfoActivity.java | 20 ++++- .../deactivateacc/AccountApiService.java | 2 +- .../deactivateacc/AccountPresenter.java | 8 +- .../DeActivateAccountActivity.java | 37 ++++---- .../CgSubscriptionActivity.java | 44 +++++----- .../medicalinfo/AddMedicalInfoFragment.java | 15 ++++ .../medreminder/AddReminderFragment.java | 22 ++++- .../setuproutine/AddRoutineFragment.java | 12 ++- .../fragments/CgChangePwdFragment.java | 3 + .../fragments/CgCheckEmailFragment.java | 21 ++++- .../fragments/CgRegisterFragment.java | 8 ++ .../contacts/CreateContactFragment.java | 13 ++- .../fragments/register/LocationFragment.java | 7 +- .../register/ReActivateFragment.java | 2 +- .../fragments/register/RegisterFragment.java | 20 ++++- .../drawable-xhdpi/unselected_dot_accent.xml | 3 - .../res/drawable/selected_dot_primary.xml | 4 - .../res/layout/activity_caregiver_profile.xml | 3 + .../res/layout/activity_deactivate_acc.xml | 2 +- .../res/layout/activity_personal_info.xml | 10 +++ app/src/main/res/layout/add_medical_info.xml | 12 +++ .../main/res/layout/add_reminder_fragment.xml | 3 +- .../main/res/layout/add_routine_fragment.xml | 4 + .../main/res/layout/bottom_sheet_alert.xml | 56 +++++++++--- .../main/res/layout/cg_forgot_password.xml | 2 + .../main/res/layout/cg_onboard_fragment.xml | 9 +- .../main/res/layout/cg_register_fragment.xml | 11 ++- .../main/res/layout/cg_sign_in_fragment.xml | 4 + .../main/res/layout/check_mail_fragment.xml | 8 -- .../layout/create_edit_contact_fragment.xml | 88 +++++++++++++++---- .../main/res/layout/forgot_pin_fragment.xml | 2 + app/src/main/res/layout/register_fragment.xml | 10 ++- app/src/main/res/layout/sign_in_fragment.xml | 2 + .../main/res/layout/sign_in_up_fragment.xml | 11 +-- app/src/main/res/values/strings.xml | 16 ++-- 41 files changed, 424 insertions(+), 140 deletions(-) diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 90593e2..03d9c98 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,18 +1,6 @@ - - - - - - - - - - - - diff --git a/app/src/main/java/com/app/simplitend/apputils/AppUtil.java b/app/src/main/java/com/app/simplitend/apputils/AppUtil.java index e92d509..f093a80 100644 --- a/app/src/main/java/com/app/simplitend/apputils/AppUtil.java +++ b/app/src/main/java/com/app/simplitend/apputils/AppUtil.java @@ -6,6 +6,8 @@ import static com.app.simplitend.apputils.Constants.REMINDER_EXTRA_KEY; import static com.app.simplitend.articles.ArticleShowerActivity.ARTICLE_TITLE; import static com.app.simplitend.articles.ArticleShowerActivity.ARTICLE_URL_KEY; import static com.app.simplitend.callwhitelisting.CallService.CONTACT_WHITE_LISTING_TAG; +import static com.app.simplitend.locationupdates.LocationService.LOCATION_INTERVAL_BASE_TIME; +import static com.app.simplitend.locationupdates.LocationService.LOCATION_UPDATE_MIN_INTERVAL; import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_ID; import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_TAG; @@ -26,8 +28,10 @@ import android.view.inputmethod.InputMethodManager; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.RawRes; +import com.app.simplitend.locationupdates.LocationService; import com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.models.ContactData; import com.bumptech.glide.Glide; import com.google.android.gms.location.GeofencingClient; @@ -277,12 +281,16 @@ public abstract class AppUtil { public static void showBottomAlert(Context context, String patient_name, - String content_type, Intent intent) throws Exception { + @Nullable String content_type, Intent intent) throws Exception { + + if (content_type == null) return; BottomSheetDialog bsd = new BottomSheetDialog(context, R.style.BottomSheetDialog); BottomSheetAlertBinding binding = BottomSheetAlertBinding.inflate(LayoutInflater.from(context)); bsd.setContentView(binding.getRoot()); + binding.close.setOnClickListener(v -> bsd.dismiss()); + String title = intent.getStringExtra(NotificationService.NOTIFICATION_TITLE_KEY); String body = intent.getStringExtra(NotificationService.NOTIFICATION_BODY_KEY); @@ -324,25 +332,26 @@ public abstract class AppUtil { try { RoutineDetails routine = (RoutineDetails) intent.getSerializableExtra(ACTIVITY_EXTRA_KEY); if (routine != null) { - title = patient_name + " has " + routine.routine_title + " activity"; + title = "Remind " + patient_name; - String time; + String start_time, end_time; try { SimpleDateFormat input_sdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); SimpleDateFormat output_sdf = new SimpleDateFormat("hh:mm a", Locale.getDefault()); Date start_date = input_sdf.parse(routine.routine_start_time); - time = output_sdf.format(Objects.requireNonNull(start_date)); + Date end_date = input_sdf.parse(routine.routine_end_time); + start_time = output_sdf.format(Objects.requireNonNull(start_date)); + end_time = output_sdf.format(Objects.requireNonNull(end_date)); } catch (Exception e) { - time = routine.routine_start_time; + start_time = routine.routine_start_time; + end_time = routine.routine_end_time; } - body = "Today at " + time; + body = routine.routine_title; - if (routine.routine_description == null) routine.routine_description = "None"; - - routine_description = "Description: " + routine.routine_description; + routine_description = start_time + " - " + end_time; } } catch (Exception e) { // do nothing @@ -379,13 +388,12 @@ public abstract class AppUtil { if (reminder != null) { title = "It's time for " + patient_name + "'s medicines"; - body = reminder.medicine_name + " (" + reminder.medication_quantity; + body = "Medication Reminder:\n" + reminder.medicine_name + "\n" + reminder.medication_quantity; try { body += " " + reminder.medication_type.get(0).title; }catch (Exception e){ // do nothing - }finally { - body += ")"; + body += " unit"; } if (reminder.medication_instruction == null) reminder.medication_instruction = "None"; @@ -586,6 +594,11 @@ public abstract class AppUtil { // removing geofence of same tag removeGeofence(context); + + // clearing location updates + Intent intent = new Intent(context, LocationService.class); + intent.setAction(LocationService.ACTION_STOP_LOCATION_UPDATES); + context.startService(intent); } public static void removeGeofence(Context context) { diff --git a/app/src/main/java/com/app/simplitend/apputils/TextUtils.java b/app/src/main/java/com/app/simplitend/apputils/TextUtils.java index aced243..e2344fb 100644 --- a/app/src/main/java/com/app/simplitend/apputils/TextUtils.java +++ b/app/src/main/java/com/app/simplitend/apputils/TextUtils.java @@ -18,8 +18,15 @@ public abstract class TextUtils { @Override public void afterTextChanged(Editable editable) { - if (editable.toString().trim().isEmpty()){ + if (editable.toString().trim().isEmpty()) { editable.delete(0, editable.length()); + }else if (editable.length() > 1 && editable.charAt(editable.length() - 1) == ' ' && + editable.charAt(editable.length() - 2) == ' '){ + // leading 2 spaces + // only one allowed. Thus, removing last + editable.delete(editable.length() - 1, editable.length()); + }else if (editable.length() > 0 && editable.charAt(0) == ' '){ + editable.delete(0, 1); } } }; diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CaregiverDashActivity.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CaregiverDashActivity.java index c0e436d..b9590d6 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CaregiverDashActivity.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CaregiverDashActivity.java @@ -111,6 +111,7 @@ public class CaregiverDashActivity extends AppCompatActivity implements } } }; + registerReceiver(notification_receiver, new IntentFilter(AppUtil.NOTIFICATION_ACTION)); } diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java index b55da44..cec83fe 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java @@ -95,6 +95,8 @@ public class CgChangePwdActivity extends AppCompatActivity implements CgHomeCont } }); + + binding.backBtn.setOnClickListener(view -> onBackPressed()); } private boolean allOkay() { @@ -112,6 +114,9 @@ public class CgChangePwdActivity extends AppCompatActivity implements CgHomeCont } else if (!password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^a-zA-Z0-9]).{8,}$")) { allOkay = false; Toast.makeText(this, "Password doesn't match the required criteria.", Toast.LENGTH_SHORT).show(); + } else if (binding.confirmPassword.getText().toString().isEmpty()){ + allOkay = false; + Toast.makeText(this, "Please confirm your password.", Toast.LENGTH_SHORT).show(); } else if (!binding.confirmPassword.getText().toString().equals(password)) { allOkay = false; Toast.makeText(this, "Confirm password doesn't match.", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/ChangePinActivity.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/ChangePinActivity.java index 7a512cf..3e1aba1 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/ChangePinActivity.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/ChangePinActivity.java @@ -16,5 +16,11 @@ public class ChangePinActivity extends AppCompatActivity { binding = ChangePinFragmentBinding.inflate(getLayoutInflater()); super.onCreate(savedInstanceState); setContentView(binding.getRoot()); + + clickEvents(); + } + + private void clickEvents() { + binding.backBtn.setOnClickListener(view -> onBackPressed()); } } \ No newline at end of file diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/EditProfileInfoActivity.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/EditProfileInfoActivity.java index 9e72102..d7f917c 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/EditProfileInfoActivity.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/EditProfileInfoActivity.java @@ -22,6 +22,8 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.ViewModelProvider; +import com.app.simplitend.apputils.EditTextErrorRemover; +import com.app.simplitend.apputils.TextUtils; import com.bumptech.glide.Glide; import com.github.dhaval2404.imagepicker.ImagePicker; import com.google.i18n.phonenumbers.NumberParseException; @@ -263,6 +265,12 @@ public class EditProfileInfoActivity extends AppCompatActivity implements } }); + binding.name.addTextChangedListener(TextUtils.LEADING_SPACE_WATCHER); + binding.email.addTextChangedListener(TextUtils.LEADING_SPACE_WATCHER); + binding.street.addTextChangedListener(TextUtils.LEADING_SPACE_WATCHER); + + new EditTextErrorRemover(binding.name, binding.email, binding.contactNumber, binding.street); + } private void clickEvents() { @@ -305,6 +313,11 @@ public class EditProfileInfoActivity extends AppCompatActivity implements }); }); + + binding.countryCodes.setOnClickListener(v -> { + AppUtil.closeKeyboard(this); + binding.countryCodes.showOrDismiss(); + }); } private boolean allCgOkay() { @@ -319,6 +332,9 @@ public class EditProfileInfoActivity extends AppCompatActivity implements if (binding.name.getText().toString().trim().isEmpty()) { binding.name.setError("Required"); allOkay = false; + }else if (binding.name.getText().toString().trim().length() < 2){ + binding.name.setError("Minimum 2 characters"); + allOkay = false; } if (binding.dob.getText().toString().trim().isEmpty()) { @@ -383,7 +399,7 @@ public class EditProfileInfoActivity extends AppCompatActivity implements RequestBody contact_number_part = RequestBody.create(country_code+binding.contactNumber.getText().toString(), MediaType.parse("text/plain;charset=utf-8")); body.put("contact_number", contact_number_part); - RequestBody email_part = RequestBody.create(binding.email.getText().toString(), MediaType.parse("text/plain;charset=utf-8")); + RequestBody email_part = RequestBody.create(binding.email.getText().toString().trim(), MediaType.parse("text/plain;charset=utf-8")); body.put("email", email_part); RequestBody dob_part = RequestBody.create(binding.dob.getText().toString(), MediaType.parse("text/plain;charset=utf-8")); @@ -436,7 +452,7 @@ public class EditProfileInfoActivity extends AppCompatActivity implements RequestBody contact_number_part = RequestBody.create(country_code+binding.contactNumber.getText().toString(), MediaType.parse("text/plain;charset=utf-8")); body.put("contact_number", contact_number_part); - RequestBody email_part = RequestBody.create(binding.email.getText().toString(), MediaType.parse("text/plain;charset=utf-8")); + RequestBody email_part = RequestBody.create(binding.email.getText().toString().trim(), MediaType.parse("text/plain;charset=utf-8")); body.put("email", email_part); RequestBody dob_part = RequestBody.create(binding.dob.getText().toString(), MediaType.parse("text/plain;charset=utf-8")); diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountApiService.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountApiService.java index f61b18b..0076ba6 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountApiService.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountApiService.java @@ -16,7 +16,7 @@ import retrofit2.http.Path; public interface AccountApiService { @POST("api/deactivate-reactivate-account/{id}") - Call> de_re_ActivateAccount(@Body Map body, + Call> de_re_ActivateAccount(@Body Map body, @Path("id") int caregiver_xid, @Header("Authorization") String token); diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java index 89da55f..1c4cf17 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java @@ -40,12 +40,16 @@ public class AccountPresenter { public void accountReDeActivate(int active_status, int caregiver_xid, + String reason, + String comment, @NonNull String token, @NonNull AccountReDeActivateCallback callback){ - Map body = new HashMap<>(); + Map body = new HashMap<>(); - body.put("status", active_status); + body.put("status", active_status + ""); + if (reason != null) body.put("reason", reason); + if (comment != null) body.put("description", comment); apiService.de_re_ActivateAccount(body, caregiver_xid, token) .enqueue(new Callback>() { diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/DeActivateAccountActivity.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/DeActivateAccountActivity.java index adf2db6..a2139d4 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/DeActivateAccountActivity.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/DeActivateAccountActivity.java @@ -1,16 +1,15 @@ package com.app.simplitend.caregiverdashboard.activities.deactivateacc; -import androidx.appcompat.app.AppCompatActivity; - import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; -import android.widget.RadioButton; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.app.simplitend.apputils.AppUtil; import com.app.simplitend.apputils.CaregiverDataCache; import com.app.simplitend.apputils.PatientDataCache; @@ -81,6 +80,19 @@ public class DeActivateAccountActivity extends AppCompatActivity implements Acco binding.confirmDeactivate.setOnClickListener(v -> { + int selected_radio_id = binding.reasonRadio.getCheckedRadioButtonId(); + if (selected_radio_id <= 0){ + Toast.makeText(this, "Kindly select a reason", Toast.LENGTH_SHORT).show(); + return; + } + + String reason; + try { + reason = ((MaterialRadioButton) findViewById(selected_radio_id)).getText().toString(); + }catch (Exception e){ + reason = "Other"; + } + int id; String token; @@ -104,19 +116,6 @@ public class DeActivateAccountActivity extends AppCompatActivity implements Acco return; } - int selected_radio_id = binding.reasonRadio.getCheckedRadioButtonId(); - if (selected_radio_id <= 0){ - Toast.makeText(this, "Kindly select a reason", Toast.LENGTH_SHORT).show(); - return; - } - - String reason; - try { - reason = ((MaterialRadioButton) findViewById(selected_radio_id)).getText().toString(); - }catch (Exception e){ - reason = "Other"; - } - // TODO: 25/10/23 use the reason progressDialog.setTitle("Please wait...."); @@ -130,6 +129,8 @@ public class DeActivateAccountActivity extends AppCompatActivity implements Acco accountPresenter.accountReDeActivate(AccountPresenter.ACC_DEACTIVATE_BY_USER, id, + reason, + binding.commetInput.getText().toString(), "Bearer " + token, this); }); @@ -140,8 +141,8 @@ public class DeActivateAccountActivity extends AppCompatActivity implements Acco private void smoothEditTextScroll() { // scrolling edit text - binding.reasonInput.setOnTouchListener((v, event) -> { - if (binding.reasonInput.hasFocus()) { + binding.commetInput.setOnTouchListener((v, event) -> { + if (binding.commetInput.hasFocus()) { v.getParent().requestDisallowInterceptTouchEvent(true); if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_SCROLL) { v.getParent().requestDisallowInterceptTouchEvent(false); diff --git a/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java b/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java index d0ad283..b5518be 100644 --- a/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java +++ b/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java @@ -260,27 +260,29 @@ public class CgSubscriptionActivity extends AppCompatActivity // loading subscription plans progressDialog = new ProgressDialog(this); - try { - String description = getString(R.string.subscribe_description); - String contact_email = getString(R.string.contact_email); + binding.description.setText(getString(R.string.subscribe_description)); - // setting display text - SpannableString ss = new SpannableString(description); - ClickableSpan cs = new ClickableSpan() { - @Override - public void onClick(@NonNull View view) { - contactMail(); - } - }; - int start_index = description.indexOf(contact_email); - ss.setSpan(cs, start_index, start_index + contact_email.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); - - binding.description.setText(ss); - binding.description.setMovementMethod(LinkMovementMethod.getInstance()); - } catch (Exception e) { - Log.e(TAG, "initViews: ", e); - binding.contactAdmin.setVisibility(View.VISIBLE); - } +// try { +// String description = getString(R.string.subscribe_description); +// String contact_email = getString(R.string.contact_email); +// +// // setting display text +// SpannableString ss = new SpannableString(description); +// ClickableSpan cs = new ClickableSpan() { +// @Override +// public void onClick(@NonNull View view) { +// contactMail(); +// } +// }; +// int start_index = description.indexOf(contact_email); +// ss.setSpan(cs, start_index, start_index + contact_email.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); +// +// binding.description.setText(ss); +// binding.description.setMovementMethod(LinkMovementMethod.getInstance()); +// } catch (Exception e) { +// Log.e(TAG, "initViews: ", e); +// binding.contactAdmin.setVisibility(View.VISIBLE); +// } } private void loadPlans() { @@ -372,6 +374,8 @@ public class CgSubscriptionActivity extends AppCompatActivity // subscription is cancelled binding.makePayment.setVisibility(View.GONE); + binding.description.setText(getString(R.string.subscribe_cancelled_description)); + String cancelled_date = AppUtil.formatDate("yyyy-mm-dd", "mm-dd-yyyy", currentPlan.ended_at); if (cancelled_date != null){ binding.cancelledDate.setText(cancelled_date); diff --git a/app/src/main/java/com/app/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java b/app/src/main/java/com/app/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java index 4259007..9ea7642 100644 --- a/app/src/main/java/com/app/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java +++ b/app/src/main/java/com/app/simplitend/patientprofile/medicalinfo/AddMedicalInfoFragment.java @@ -14,6 +14,8 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import com.app.simplitend.apputils.EditTextErrorRemover; +import com.app.simplitend.apputils.TextUtils; import com.google.i18n.phonenumbers.NumberParseException; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.Phonenumber; @@ -23,6 +25,7 @@ import com.app.simplitend.databinding.AddMedicalInfoBinding; import com.app.simplitend.patientprofile.ProfileContracts; import com.app.simplitend.patientprofile.medicalinfo.mvvm.MedicalInfoViewModel; import com.app.simplitend.patientprofile.medicalinfo.mvvm.MedicationInfo; +import com.skydoves.powerspinner.OnSpinnerItemSelectedListener; import java.util.ArrayList; import java.util.HashMap; @@ -139,6 +142,13 @@ public class AddMedicalInfoFragment extends Fragment implements setLayoutInfo(); } + binding.primaryDoc.addTextChangedListener(TextUtils.LEADING_SPACE_WATCHER); + new EditTextErrorRemover(binding.diagnosis, + binding.allergies, + binding.primaryDoc, + binding.phoneNumber, + binding.hospitalPref, + binding.dietRestrict); } private void setLayoutInfo() { @@ -184,6 +194,11 @@ public class AddMedicalInfoFragment extends Fragment implements } } }); + + binding.countryCodes.setOnClickListener(v -> { + AppUtil.closeKeyboard(requireActivity()); + binding.countryCodes.showOrDismiss(); + }); } private void addMedicationInfo() { diff --git a/app/src/main/java/com/app/simplitend/patientprofile/medreminder/AddReminderFragment.java b/app/src/main/java/com/app/simplitend/patientprofile/medreminder/AddReminderFragment.java index cb13005..e54c955 100644 --- a/app/src/main/java/com/app/simplitend/patientprofile/medreminder/AddReminderFragment.java +++ b/app/src/main/java/com/app/simplitend/patientprofile/medreminder/AddReminderFragment.java @@ -196,7 +196,7 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh // Sending time zone TimeZone timeZone = TimeZone.getDefault(); // Getting the GMT offset in milliseconds - int gmtOffsetMillis = timeZone.getRawOffset(); + int gmtOffsetMillis = timeZone.getOffset(Calendar.getInstance().getTimeInMillis()); // Converting milliseconds to hours and minutes int hours = gmtOffsetMillis / 3600000; int minutes = (gmtOffsetMillis % 3600000) / 60000; @@ -350,6 +350,16 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh if (binding.dosage.getText().toString().trim().isEmpty()) { allOkay = false; binding.dosage.setError("Required"); + }else{ + try { + double dosage = Double.parseDouble(binding.dosage.getText().toString().trim()); + if (dosage <= 0){ + allOkay = false; + binding.dosage.setError("Must be greater than 0"); + } + }catch (Exception e){ + // do nothing + } } if (binding.frequencySpinner.getSelectedIndex() == -1) { @@ -382,6 +392,16 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh if (binding.quantity.getText().toString().trim().isEmpty()) { allOkay = false; binding.quantity.setError("Required"); + }else{ + try { + long quantity = Long.parseLong(binding.quantity.getText().toString().trim()); + if (quantity <= 0){ + allOkay = false; + binding.quantity.setError("Must be greater than 0"); + } + }catch (Exception e){ + // do nothing + } } // if (binding.getDate.getText().toString().trim().isEmpty()) { diff --git a/app/src/main/java/com/app/simplitend/patientprofile/setuproutine/AddRoutineFragment.java b/app/src/main/java/com/app/simplitend/patientprofile/setuproutine/AddRoutineFragment.java index e7831b5..b3edc74 100644 --- a/app/src/main/java/com/app/simplitend/patientprofile/setuproutine/AddRoutineFragment.java +++ b/app/src/main/java/com/app/simplitend/patientprofile/setuproutine/AddRoutineFragment.java @@ -5,7 +5,6 @@ import android.app.Activity; import android.app.ProgressDialog; import android.app.TimePickerDialog; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -190,6 +189,15 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe binding.addRoutine.setOnClickListener(v -> { AppUtil.closeKeyboard(requireActivity()); +// DateTimeZone dateTimeZone = DateTimeZone.getDefault(); +// +// // Get the GMT offset in milliseconds +// int gmtOffsetMillis = dateTimeZone.getOffset(adakTime); +// +// // Calculate the GMT offset in hours and minutes +// int gmtOffsetHours = gmtOffsetMillis / 3600000; +// int gmtOffsetMinutes = (gmtOffsetMillis % 3600000) / 60000; + if (allOkay()) { if (routine != null){ @@ -229,7 +237,7 @@ public class AddRoutineFragment extends Fragment implements CompoundButton.OnChe // Sending time zone TimeZone timeZone = TimeZone.getDefault(); // Getting the GMT offset in milliseconds - int gmtOffsetMillis = timeZone.getRawOffset(); + int gmtOffsetMillis = timeZone.getOffset(Calendar.getInstance().getTimeInMillis()); // Converting milliseconds to hours and minutes int hours = gmtOffsetMillis / 3600000; int minutes = (gmtOffsetMillis % 3600000) / 60000; diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgChangePwdFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgChangePwdFragment.java index 78cd8d3..5d42c9e 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgChangePwdFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgChangePwdFragment.java @@ -110,6 +110,9 @@ public class CgChangePwdFragment extends Fragment implements WelcomeContracts.Ch } 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(); + } else if (binding.confirmPassword.getText().toString().isEmpty()){ + allOkay = false; + Toast.makeText(requireContext(), "Please confirm your password.", Toast.LENGTH_SHORT).show(); } else if (!binding.confirmPassword.getText().toString().equals(password)) { allOkay = false; Toast.makeText(requireContext(), "Confirm password doesn't match.", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgCheckEmailFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgCheckEmailFragment.java index c525517..6c731ac 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgCheckEmailFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomecg/fragments/CgCheckEmailFragment.java @@ -76,7 +76,11 @@ public class CgCheckEmailFragment extends Fragment implements WelcomeContracts.F mUserXid = bundle.getString(CG_USER_XID); binding.emailAt.setVisibility(View.VISIBLE); - binding.email.setText(mEmail); + try { + binding.email.setText(encodeEmail(mEmail)); + } catch (Exception e) { + binding.email.setText(mEmail); + } } @@ -106,6 +110,21 @@ public class CgCheckEmailFragment extends Fragment implements WelcomeContracts.F }); } + public String encodeEmail(String email) throws Exception{ + String[] arr = email.split("@"); + String email_name = arr[0]; + + StringBuilder encoded_email = new StringBuilder(); + + for (int i = 0; i { + AppUtil.closeKeyboard(requireActivity()); + binding.countryCodes.showOrDismiss(); + }); + } private void setErrorRemovers() { @@ -331,6 +336,9 @@ public class CgRegisterFragment extends Fragment implements WelcomeContracts.Reg if (binding.name.getText().toString().trim().isEmpty()) { binding.name.setError("Required"); allOkay = false; + }else if (binding.name.getText().toString().trim().length() < 2){ + binding.name.setError("Minimum 2 characters"); + allOkay = false; } if (binding.dob.getText().toString().trim().isEmpty()) { diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java index 5773600..bcae82d 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java @@ -11,6 +11,7 @@ import android.os.Bundle; import android.os.Handler; import android.text.InputFilter; import android.util.Log; +import android.util.Patterns; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -48,6 +49,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import okhttp3.MediaType; import okhttp3.MultipartBody; @@ -307,6 +309,9 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. if (mustBeeCaregiver && binding.email.getText().toString().trim().isEmpty()) { allOkay = false; binding.email.setError("Required"); + }else if (mustBeeCaregiver && !Patterns.EMAIL_ADDRESS.matcher(binding.email.getText().toString()).matches()){ + allOkay = false; + binding.email.setError("Invalid email"); } // if (binding.countryCodes.getSelectedIndex() == -1 && allOkay) { @@ -357,6 +362,8 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. //email is important binding.emailTitle.setText(getString(R.string.email_address)); // with asterisk + binding.emailOptional.setVisibility(View.GONE); + binding.relationOptional.setVisibility(View.GONE); binding.caregiverCheckView.setVisibility(View.VISIBLE); this.mustBeeCaregiver = true; @@ -513,6 +520,9 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. binding.caregiverCheck.setChecked(true); binding.caregiverCheck.setEnabled(false); binding.relationship.setEnabled(false); + + binding.relationOptional.setVisibility(View.GONE); + binding.emailOptional.setVisibility(View.GONE); } // checking if this contact is doctor @@ -520,6 +530,8 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. // this contact is doctor binding.name.setEnabled(false); binding.relationship.setEnabled(false); + + binding.relationOptional.setVisibility(View.GONE); }else{ binding.name.setEnabled(true); binding.relationship.setEnabled(true); @@ -713,7 +725,6 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. int last_index = Math.max(phone_numbers[1].length() - 1, 0); phone_numbers[1] = phone_numbers[1].substring(0, last_index); - return phone_numbers; } diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java index 1fbe65e..bed5800 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/LocationFragment.java @@ -35,6 +35,8 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; +import com.app.simplitend.apputils.EditTextErrorRemover; +import com.app.simplitend.apputils.TextUtils; import com.google.android.gms.location.FusedLocationProviderClient; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; @@ -311,7 +313,7 @@ public class LocationFragment extends Fragment implements OnMapReadyCallback, PatientData patientData = viewModel.getPatientData(); - patientData.address_line1 = binding.street.getText().toString(); + patientData.address_line1 = binding.street.getText().toString().trim(); patientData.city = binding.town.getText().toString(); patientData.post_code = binding.zipCode.getText().toString(); @@ -347,6 +349,9 @@ public class LocationFragment extends Fragment implements OnMapReadyCallback, startAutocompleteMapSearch.launch(intent); }); + binding.street.addTextChangedListener(TextUtils.LEADING_SPACE_WATCHER); + new EditTextErrorRemover(binding.street); + } private boolean allOkay() { diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/ReActivateFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/ReActivateFragment.java index 4cd5369..c1c5979 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/ReActivateFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/ReActivateFragment.java @@ -133,7 +133,7 @@ public class ReActivateFragment extends Fragment implements AccountPresenter.Acc progressDialog.show(); accountPresenter.accountReDeActivate(AccountPresenter.ACC_ACTIVE, - caregiver_xid, "Bearer " + token, this); + caregiver_xid, null, null, "Bearer " + token, this); }); } diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java index 7e2f770..f05b5ce 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/RegisterFragment.java @@ -23,6 +23,7 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; +import com.app.simplitend.apputils.EditTextErrorRemover; import com.app.simplitend.apputils.TextUtils; import com.google.i18n.phonenumbers.NumberParseException; import com.google.i18n.phonenumbers.PhoneNumberUtil; @@ -131,6 +132,13 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif // not allowing leading spaces binding.name.addTextChangedListener(TextUtils.LEADING_SPACE_WATCHER); binding.email.addTextChangedListener(TextUtils.LEADING_SPACE_WATCHER); + + // error remover + new EditTextErrorRemover( + binding.name, + binding.email, + binding.contactNumber + ); } private void setFocusManager() { @@ -242,6 +250,11 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif getString(R.string.terms_conditions_)); }); + binding.countryCodes.setOnClickListener(v -> { + AppUtil.closeKeyboard(requireActivity()); + binding.countryCodes.showOrDismiss(); + }); + } private void removeExistingErrors() { @@ -258,6 +271,9 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif if (binding.name.getText().toString().trim().isEmpty()) { binding.name.setError("Required"); allOkay = false; + }else if (binding.name.getText().toString().trim().length() < 2){ + binding.name.setError("Minimum 2 characters"); + allOkay = false; } if (binding.dob.getText().toString().trim().isEmpty()) { @@ -336,11 +352,11 @@ public class RegisterFragment extends Fragment implements WelcomeContracts.Verif public void goForward() { PatientData patientData = viewModel.getPatientData(); - patientData.first_name = patientData.user_name = binding.name.getText().toString(); + patientData.first_name = patientData.user_name = binding.name.getText().toString().trim(); patientData.phone_number = countryCodeList.get(binding.countryCodes.getSelectedIndex()) + " " + binding.contactNumber.getText().toString(); patientData.date_of_birth = binding.dob.getText().toString(); - patientData.email = binding.email.getText().toString(); + patientData.email = binding.email.getText().toString().trim(); Navigation.findNavController(binding.getRoot()).navigate(R.id.action_registerFragment_to_locationFragment); } diff --git a/app/src/main/res/drawable-xhdpi/unselected_dot_accent.xml b/app/src/main/res/drawable-xhdpi/unselected_dot_accent.xml index 44ecbb6..0af95ac 100644 --- a/app/src/main/res/drawable-xhdpi/unselected_dot_accent.xml +++ b/app/src/main/res/drawable-xhdpi/unselected_dot_accent.xml @@ -5,7 +5,4 @@ - - \ No newline at end of file diff --git a/app/src/main/res/drawable/selected_dot_primary.xml b/app/src/main/res/drawable/selected_dot_primary.xml index 11a4352..efc913d 100644 --- a/app/src/main/res/drawable/selected_dot_primary.xml +++ b/app/src/main/res/drawable/selected_dot_primary.xml @@ -5,8 +5,4 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_caregiver_profile.xml b/app/src/main/res/layout/activity_caregiver_profile.xml index 896d08f..bbfcd3a 100644 --- a/app/src/main/res/layout/activity_caregiver_profile.xml +++ b/app/src/main/res/layout/activity_caregiver_profile.xml @@ -66,6 +66,9 @@ android:layout_marginHorizontal="15dp" + app:civ_border_color="@color/color_accent" + app:civ_border_width="0.5dp" + /> @@ -271,6 +277,8 @@ android:autofillHints="emailAddress" android:inputType="textEmailAddress" + + android:maxLength="255" /> - - /> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cg_forgot_password.xml b/app/src/main/res/layout/cg_forgot_password.xml index 08b8c7a..9e5e934 100644 --- a/app/src/main/res/layout/cg_forgot_password.xml +++ b/app/src/main/res/layout/cg_forgot_password.xml @@ -93,6 +93,8 @@ android:autofillHints="emailAddress" android:inputType="textEmailAddress" android:maxLines="1" + + android:maxLength="255" /> diff --git a/app/src/main/res/layout/cg_onboard_fragment.xml b/app/src/main/res/layout/cg_onboard_fragment.xml index b020f4b..00cb757 100644 --- a/app/src/main/res/layout/cg_onboard_fragment.xml +++ b/app/src/main/res/layout/cg_onboard_fragment.xml @@ -31,16 +31,15 @@ @@ -256,6 +261,8 @@ android:autofillHints="emailAddress" android:inputType="textEmailAddress" + + android:maxLength="255" /> @@ -388,6 +395,8 @@ android:autofillHints="password" android:inputType="textPassword" + + android:maxLength="16" /> diff --git a/app/src/main/res/layout/cg_sign_in_fragment.xml b/app/src/main/res/layout/cg_sign_in_fragment.xml index 83edc16..7311a8a 100644 --- a/app/src/main/res/layout/cg_sign_in_fragment.xml +++ b/app/src/main/res/layout/cg_sign_in_fragment.xml @@ -72,6 +72,8 @@ android:autofillHints="emailAddress" android:inputType="textEmailAddress" android:maxLines="1" + + android:maxLength="255" /> diff --git a/app/src/main/res/layout/check_mail_fragment.xml b/app/src/main/res/layout/check_mail_fragment.xml index a6085b9..bdbbc57 100644 --- a/app/src/main/res/layout/check_mail_fragment.xml +++ b/app/src/main/res/layout/check_mail_fragment.xml @@ -56,14 +56,6 @@ android:id="@+id/email_at" android:orientation="horizontal"> - - + android:textColorHint="@android:color/darker_gray" - + + + android:orientation="horizontal"> + + + + + + + android:textColorHint="@android:color/darker_gray" + + android:maxLength="50" + android:digits="@string/allowed_alphabets_with_space" + /> --> - + android:orientation="horizontal"> + + + + + + + android:textColorHint="@android:color/darker_gray" + + android:maxLength="255" + /> diff --git a/app/src/main/res/layout/register_fragment.xml b/app/src/main/res/layout/register_fragment.xml index 2c683f9..cfc73c8 100644 --- a/app/src/main/res/layout/register_fragment.xml +++ b/app/src/main/res/layout/register_fragment.xml @@ -200,6 +200,11 @@ android:paddingVertical="15dp" android:textAppearance="@style/TextAppearance.Material3.TitleMedium" + android:digits="@string/allowed_numbers" + + android:nextFocusDown="@id/email" + android:imeOptions="actionNext" + android:textColor="@color/black" android:textColorHint="@android:color/darker_gray" /> @@ -254,7 +259,10 @@ android:textAppearance="@style/TextAppearance.Material3.TitleMedium" android:textColor="@color/black" - android:textColorHint="@android:color/darker_gray" /> + android:textColorHint="@android:color/darker_gray" + + android:maxLength="255" + /> Sign in to continue. Email address* Email address - Enter your email. + Enter your email Enter pin Enter your pin Remember me @@ -37,7 +37,7 @@ Enter email address Submit Check your mail - Please enter the temporary pin received at email address + Please enter the temporary pin received at Didn\'t your receive any code? Resend Change your Pin @@ -249,8 +249,8 @@ Install Caregiver app to proceed. Your profile is being updated Reinventing connected\nCaregiving - Update your loved one\'s profile information. - Setup a geofence to\nprotect your loved one. + Update your loved one\'s profile information + Setup a geofence to\nprotect your loved one Be notified if your loved one ventures too far from home or a designated safe area For example, you may use your phone to verify and update your loved one\'s medication schedule. Be notified if your loved one ventures too far from home or a designated safe area. @@ -307,7 +307,7 @@ Security You can improve the privacy of this application by enabling a secondary security setting. Once enabled, secondary security must be entered each time the application is launched. Use phone biometrics - No new gadgets! monitor your loved one\'s activity using his or her smartphone + 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. @@ -390,7 +390,7 @@ Update Patients Home Address When updating a password, it\'s essential to create a strong, unique password. - Your credit card will be charged 24 hours before your subscription period expires. The subscription will automatically renew at the same price. You can cancel your subscription 7 days before the renewal date by sending an email to contact.us@simplitent.com + Your credit card will be charged 24 hours before your subscription period expires. You can cancel your subscription at any time by visiting this page. contact.us@simplitent.com Instructions: You are about to change emergency number from this contact to 911. Please confirm @@ -465,5 +465,9 @@ I don\'t have a need for this app anymore Let\'s get started abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ + abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 + 1234567890 + Close + Your subscription has been canceled. You will be able to use your application until the end of your current subscription. Your app will stop working at that point. \ No newline at end of file