diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 758cc80..c3352ea 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,6 +1,18 @@ + + + + + + + + + + + + diff --git a/app/src/main/java/com/ssb/simplitend/appblocking/BlockApp.java b/app/src/main/java/com/ssb/simplitend/appblocking/BlockApp.java index 7b78751..5432163 100644 --- a/app/src/main/java/com/ssb/simplitend/appblocking/BlockApp.java +++ b/app/src/main/java/com/ssb/simplitend/appblocking/BlockApp.java @@ -16,5 +16,7 @@ public class BlockApp extends AppCompatActivity { } @Override - public void onBackPressed() {} + public void onBackPressed() { +// super.onBackPressed(); + } } diff --git a/app/src/main/java/com/ssb/simplitend/appblocking/MySharedPref.java b/app/src/main/java/com/ssb/simplitend/appblocking/MySharedPref.java index 257d03b..e458ad8 100644 --- a/app/src/main/java/com/ssb/simplitend/appblocking/MySharedPref.java +++ b/app/src/main/java/com/ssb/simplitend/appblocking/MySharedPref.java @@ -55,5 +55,8 @@ public class MySharedPref { } - + public void setArrayList(String key, Set appList) { + prefsEditor.putStringSet(key, appList); + prefsEditor.apply(); + } } \ No newline at end of file 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 82a5268..5fc7a0e 100644 --- a/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java +++ b/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java @@ -19,6 +19,7 @@ import androidx.annotation.RawRes; import com.bumptech.glide.Glide; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.ssb.simplitend.R; +import com.ssb.simplitend.appblocking.MySharedPref; import com.ssb.simplitend.databinding.DecisionBottomsheetBinding; import com.ssb.simplitend.databinding.DoneBottomsheetBinding; @@ -30,6 +31,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; +import java.util.Set; public abstract class AppUtil { @@ -233,6 +235,16 @@ public abstract class AppUtil { return sp.getBoolean(IS_PATIENT_LOGGED_IN, false); } + public static void patientSignOut(Context context){ + AppUtil.savePatientData(null, -1, context, false); + MySharedPref mySharedPref = new MySharedPref(context); + Set appList = mySharedPref.getArrayList("APP_LIST"); + if (appList != null) { + appList.clear(); + mySharedPref.setArrayList("APP_LIST", appList); + } + } + public static void saveCgData(String token, int patient_id, Context context){ SharedPreferences sp = context.getSharedPreferences(CAREGIVER_DETAILS, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java index 6a2786e..09edfd4 100644 --- a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/activities/CgChangePwdActivity.java @@ -1,26 +1,152 @@ package com.ssb.simplitend.caregiverdashboard.activities; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.ViewModelProvider; +import android.app.ProgressDialog; import android.os.Bundle; import android.view.View; +import android.widget.Toast; import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.CaregiverDataCache; +import com.ssb.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel; +import com.ssb.simplitend.caregiverdashboard.mvvm.CgHomeContracts; import com.ssb.simplitend.databinding.CgChangePasswordFragmentBinding; +import com.ssb.simplitend.welcome.welcomecg.mvvm.CareGiverData; -public class CgChangePwdActivity extends AppCompatActivity { +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import okhttp3.MediaType; +import okhttp3.RequestBody; + +public class CgChangePwdActivity extends AppCompatActivity implements CgHomeContracts.UpdateCgPasswordCallback { private CgChangePasswordFragmentBinding binding; + private CaregiverMainViewModel viewModel; + private ProgressDialog progressDialog; + + private CareGiverData careGiverData; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = CgChangePasswordFragmentBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); + viewModel = new ViewModelProvider(this).get(CaregiverMainViewModel.class); + progressDialog = new ProgressDialog(this); + // viewing old pwd view binding.oldPwdTitle.setVisibility(View.VISIBLE); binding.oldPwdView.setVisibility(View.VISIBLE); + binding.subTitle.setText(R.string.when_updating_a_password_it_s_essential_to_create_a_strong_unique_password); + + initViews(); + + clickEvents(); + + CaregiverDataCache.getCaregiverData(this, (careGiverData1 -> { + this.careGiverData = careGiverData1; + }), true); } + + private void initViews() { + + } + + private void clickEvents() { + binding.resetPin.setOnClickListener(v -> { + if (careGiverData == null){ + Toast.makeText(this, "Couldn't load data", Toast.LENGTH_SHORT).show(); + return; + } + + if (allOkay()){ + AppUtil.closeKeyboard(this); + + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we update your password."); + progressDialog.setCancelable(false); + progressDialog.show(); + + try { + Map body = new HashMap<>(); + + RequestBody new_password_body = RequestBody.create(Objects.requireNonNull(binding.password.getText()).toString(), MediaType.parse("text/plain")); + body.put("new_password", new_password_body); + + RequestBody old_password_body = RequestBody.create(Objects.requireNonNull(binding.oldPassword.getText()).toString(), MediaType.parse("text/plain")); + body.put("old_password", old_password_body); + + viewModel.updateCgPassword(careGiverData.caregiver_xid, + body, "Bearer " + AppUtil.getCgToken(this), + this); + + }catch (Exception e){ + Toast.makeText(this, "Please try again later.", Toast.LENGTH_SHORT).show(); + } + + } + }); + } + + private boolean allOkay() { + boolean allOkay = true; + + if (binding.password.getText() != null && binding.confirmPassword.getText() != null) { + String password = binding.password.getText().toString(); + + if (password.length() < 8) { + allOkay = false; + Toast.makeText(this, "Password must be at least 8 characters.", Toast.LENGTH_SHORT).show(); + } else if (password.contains(" ")) { + allOkay = false; + Toast.makeText(this, "Password should not contains white spaces.", Toast.LENGTH_SHORT).show(); + } 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().equals(password)) { + allOkay = false; + Toast.makeText(this, "Confirm password doesn't match.", Toast.LENGTH_SHORT).show(); + } + + if (allOkay && binding.oldPassword.getText() != null){ + String old_password = binding.oldPassword.getText().toString(); + if (old_password.trim().isEmpty()){ + allOkay = false; + Toast.makeText(this, "Old password cannot be empty.", Toast.LENGTH_SHORT).show(); + }else if (old_password.equals(password)){ + allOkay = false; + Toast.makeText(this, "New password cannot be same as old password.", Toast.LENGTH_SHORT).show(); + } + } + } + + return allOkay; + } + + @Override + public void onPasswordUpdated(@NonNull CareGiverData patientData) { + progressDialog.dismiss(); + Toast.makeText(this, "Password updated successfully.", Toast.LENGTH_SHORT).show(); + finish(); + } + + @Override + public void onPasswordUpdateFailed(Throwable throwable, String message) { + progressDialog.dismiss(); + AppUtil.showAlert(this, + getString(R.string.something_went_wrong), + message, + getString(R.string.ok), + ((dialogInterface, i) -> {}), + null, null); + } } \ No newline at end of file diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java index b484918..111a586 100644 --- a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java @@ -74,4 +74,11 @@ public class CaregiverMainViewModel extends ViewModel { cgHomeRepository.updatePatientAddress(pat_id, body, token, patientAddressCallback); } + public void updateCgPassword(int cg_xid, + Map body, + @NonNull String token, + @NonNull CgHomeContracts.UpdateCgPasswordCallback passwordCallback){ + cgHomeRepository.updateCgPassword(cg_xid, body, token, passwordCallback); + } + } diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgDashboardApiService.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgDashboardApiService.java index 17e6e8c..05abdc4 100644 --- a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgDashboardApiService.java +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgDashboardApiService.java @@ -48,4 +48,9 @@ public interface CgDashboardApiService { @Body Map body, @Header("Authorization") String token); + @Multipart + @POST("api/caregiver-password-update/{id}") + Call> updateCgPassword(@Path("id") int cg_xid, + @PartMap Map body, + @Header("Authorization") String token); } diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeContracts.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeContracts.java index 8d3c3c6..f2a44bf 100644 --- a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeContracts.java +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeContracts.java @@ -42,6 +42,11 @@ public interface CgHomeContracts { void onPatientAddressUpdateFailed(Throwable throwable, String message); } + interface UpdateCgPasswordCallback { + void onPasswordUpdated(@NonNull CareGiverData patientData); + + void onPasswordUpdateFailed(Throwable throwable, String message); + } } diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeRepository.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeRepository.java index 01630ca..aab0395 100644 --- a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeRepository.java +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CgHomeRepository.java @@ -189,4 +189,33 @@ public class CgHomeRepository { }); } + public void updateCgPassword(int cg_xid, + Map body, + @NonNull String token, + @NonNull CgHomeContracts.UpdateCgPasswordCallback passwordCallback){ + + dash_apiService.updateCgPassword(cg_xid, 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){ + passwordCallback.onPasswordUpdateFailed(new Exception(), response.body().message); + return; + } + + passwordCallback.onPasswordUpdated(response.body().result); + }else{ + passwordCallback.onPasswordUpdateFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + passwordCallback.onPasswordUpdateFailed(new Exception(), "Please try again later."); + } + }); + + } + } diff --git a/app/src/main/java/com/ssb/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java b/app/src/main/java/com/ssb/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java index f5e14f7..6505d3a 100644 --- a/app/src/main/java/com/ssb/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java @@ -108,7 +108,7 @@ public class PatientDashboardFragment extends Fragment { // fake sign out // TODO: 08-08-2023 remove this - AppUtil.savePatientData(null, -1, requireContext(), false); + AppUtil.patientSignOut(requireContext()); Intent intent = new Intent(requireActivity(), WelcomeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 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 4abd85e..8453aa6 100644 --- a/app/src/main/java/com/ssb/simplitend/patientprofile/RegisterCompleteFragment.java +++ b/app/src/main/java/com/ssb/simplitend/patientprofile/RegisterCompleteFragment.java @@ -146,11 +146,21 @@ public class RegisterCompleteFragment extends Fragment implements ProfileContrac progressDialog.dismiss(); if (patientData.isCareGiverConnectedWithPatient == 1) { - gotoPatientDashBoard(); + if (patientData.isCaregiverTakeSubscription == 1){ + gotoPatientDashBoard(); + }else{ + AppUtil.showAlert(requireContext(), + "Ask Caregiver to Subscribe", + "Kindly ask CareGiver to complete SimpliTend subscription.", + "OK", + ((dialogInterface, i) -> { + + }), null, null); + } } else { AppUtil.showAlert(requireContext(), "Ask Caregiver to register", - "Kindly ask CareGiver to complete registeration.", + "Kindly ask CareGiver to complete registration.", "OK", ((dialogInterface, i) -> { diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgOnBoardFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgOnBoardFragment.java index 075e550..2f355aa 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgOnBoardFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomecg/fragments/CgOnBoardFragment.java @@ -6,8 +6,6 @@ import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -41,21 +39,29 @@ public class CgOnBoardFragment extends Fragment { private void clickEvents() { - binding.nextBtn.setOnClickListener(v -> { - int current_item = binding.viewPager.getCurrentItem(); +// binding.nextBtn.setOnClickListener(v -> { +// int current_item = binding.viewPager.getCurrentItem(); +// +// if (current_item >= 0 && current_item < 2){ +// binding.viewPager.setCurrentItem(current_item + 1, true); +// } +// +// }); +// +// binding.getsStarted.setOnClickListener(v -> { +// Navigation.findNavController(v).navigate(R.id.action_cgOnBoardFragment_to_cgSignInFragment); +// }); +// +// binding.skip.setOnClickListener(v -> { +// Navigation.findNavController(v).navigate(R.id.action_cgOnBoardFragment_to_cgSignInFragment); +// }); - if (current_item >= 0 && current_item < 2){ - binding.viewPager.setCurrentItem(current_item + 1, true); - } - - }); - - binding.getsStarted.setOnClickListener(v -> { + binding.login.setOnClickListener(v -> { Navigation.findNavController(v).navigate(R.id.action_cgOnBoardFragment_to_cgSignInFragment); }); - binding.skip.setOnClickListener(v -> { - Navigation.findNavController(v).navigate(R.id.action_cgOnBoardFragment_to_cgSignInFragment); + binding.registerBtn.setOnClickListener(v -> { + Navigation.findNavController(v).navigate(R.id.action_cgOnBoardFragment_to_cgHowToSetUpFragment); }); } @@ -75,15 +81,15 @@ public class CgOnBoardFragment extends Fragment { public void onPageSelected(int position) { super.onPageSelected(position); - if (position == 2){ - binding.getsStarted.setVisibility(View.VISIBLE); - binding.nextBtn.setVisibility(View.GONE); - binding.skip.setVisibility(View.GONE); - }else { - binding.getsStarted.setVisibility(View.GONE); - binding.nextBtn.setVisibility(View.VISIBLE); - binding.skip.setVisibility(View.VISIBLE); - } +// if (position == 2){ +// binding.getsStarted.setVisibility(View.VISIBLE); +// binding.nextBtn.setVisibility(View.GONE); +// binding.skip.setVisibility(View.GONE); +// }else { +// binding.getsStarted.setVisibility(View.GONE); +// binding.nextBtn.setVisibility(View.VISIBLE); +// binding.skip.setVisibility(View.VISIBLE); +// } String title, subtitle; diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/mvvm/models/PatientData.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/mvvm/models/PatientData.java index 68b63d8..1089d05 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/mvvm/models/PatientData.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/mvvm/models/PatientData.java @@ -31,7 +31,8 @@ public class PatientData { , isPatientReminderData , isPatientRoutineData , isPatientMedicalData - , isCareGiverConnectedWithPatient; + , isCareGiverConnectedWithPatient + , isCaregiverTakeSubscription; public PatientData() { } diff --git a/app/src/main/res/layout/cg_change_password_fragment.xml b/app/src/main/res/layout/cg_change_password_fragment.xml index 94c09ce..d0d25e8 100644 --- a/app/src/main/res/layout/cg_change_password_fragment.xml +++ b/app/src/main/res/layout/cg_change_password_fragment.xml @@ -31,14 +31,15 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginHorizontal="15dp" - android:layout_marginTop="25dp" + android:layout_marginTop="15dp" android:layout_marginBottom="5dp" android:fontFamily="@font/nunito_medium" android:text="@string/change_your_password" - android:textAppearance="@style/TextAppearance.Material3.HeadlineLarge" + android:textSize="@dimen/_20ssp" android:textColor="@color/black" /> - - + + + - android:layout_alignParentEnd="true" - android:layout_centerVertical="true" + + - android:src="@drawable/ic_next" - android:visibility="visible" + + - app:civ_circle_background_color="@color/color_primary" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - /> - - - - + diff --git a/app/src/main/res/navigation/welcome_nav_graph.xml b/app/src/main/res/navigation/welcome_nav_graph.xml index c171d9b..19df40b 100644 --- a/app/src/main/res/navigation/welcome_nav_graph.xml +++ b/app/src/main/res/navigation/welcome_nav_graph.xml @@ -246,6 +246,9 @@ + Reset Update Patients Home Address + When updating a password, it\'s essential to create a strong, unique password. \ No newline at end of file