diff --git a/app/build.gradle b/app/build.gradle index e037263..3fbb5bc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -55,12 +55,17 @@ dependencies { // dynamic text size implementation 'com.intuit.ssp:ssp-android:1.1.0' + // dynamic layout size + implementation 'com.intuit.sdp:sdp-android:1.1.0' + // spinners implementation "com.github.skydoves:powerspinner:1.2.7" // cicle image view implementation 'de.hdodenhof:circleimageview:3.1.0' + implementation 'com.github.stfalcon-studio:Chatkit:0.4.1' + 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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b4928f0..2636ab4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ - + + + + + android:exported="true" + android:screenOrientation="portrait"> + 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 8b8dec8..c810101 100644 --- a/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java +++ b/app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java @@ -40,7 +40,7 @@ public abstract class AppUtil { BottomSheetDialog bsd = new BottomSheetDialog(context, R.style.BottomSheetDialog); bsd.setContentView(binding.getRoot()); - bsd.setCancelable(false); + bsd.setCancelable(true); binding.text.setText(decisionText); diff --git a/app/src/main/java/com/ssb/simplitend/apputils/ProfileProgress.java b/app/src/main/java/com/ssb/simplitend/apputils/ProfileProgress.java index b6ac127..0eb8b99 100644 --- a/app/src/main/java/com/ssb/simplitend/apputils/ProfileProgress.java +++ b/app/src/main/java/com/ssb/simplitend/apputils/ProfileProgress.java @@ -9,4 +9,6 @@ public class ProfileProgress { public static final boolean[] PROFILE_PROGRESS = {false, false, false, false}; + public static boolean MEDICAL_INFO_ADDED = false; + } diff --git a/app/src/main/java/com/ssb/simplitend/careperson_dashboard/DashBoardActivityCP.java b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/DashBoardActivityCP.java new file mode 100644 index 0000000..a5c507e --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/DashBoardActivityCP.java @@ -0,0 +1,16 @@ +package com.ssb.simplitend.careperson_dashboard; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import com.ssb.simplitend.R; + +public class DashBoardActivityCP extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dash_board_cp); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/ChatListAdapter.java b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/ChatListAdapter.java new file mode 100644 index 0000000..cc08d37 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/ChatListAdapter.java @@ -0,0 +1,64 @@ +package com.ssb.simplitend.careperson_dashboard.chats; + +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.ListAdapter; +import androidx.recyclerview.widget.RecyclerView; + +import com.ssb.simplitend.careperson_dashboard.chats.mvvm.ChatItem; +import com.ssb.simplitend.databinding.ChatCardViewholderBinding; + +public class ChatListAdapter extends ListAdapter { + + private static final DiffUtil.ItemCallback DIFF_UTIL = new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull ChatItem oldItem, @NonNull ChatItem newItem) { + // TODO: 11-07-2023 + return false; + } + + @Override + public boolean areContentsTheSame(@NonNull ChatItem oldItem, @NonNull ChatItem newItem) { + // TODO: 11-07-2023 + return false; + } + }; + + public ChatListAdapter(){ + super(DIFF_UTIL); + } + + @NonNull + @Override + public ChatCardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ChatCardViewholderBinding binding = ChatCardViewholderBinding.inflate(LayoutInflater.from(parent.getContext())); + return new ChatCardViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull ChatCardViewHolder holder, int position) { + holder.setData(getItem(position), position); + } + + public static class ChatCardViewHolder extends RecyclerView.ViewHolder{ + + ChatCardViewholderBinding binding; + + public ChatCardViewHolder(ChatCardViewholderBinding binding){ + super(binding.getRoot()); + this.binding = binding; + } + + public void setData(ChatItem chatItem, int position){ + binding.type.setText(chatItem.type); + binding.time.setText(chatItem.time); + binding.name.setText(chatItem.name); + binding.lastMsg.setText(chatItem.last_message); + } + + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/ChatListFragment.java b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/ChatListFragment.java new file mode 100644 index 0000000..aa50dd0 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/ChatListFragment.java @@ -0,0 +1,62 @@ +package com.ssb.simplitend.careperson_dashboard.chats; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.navigation.Navigation; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.careperson_dashboard.chats.mvvm.ChatListViewModel; +import com.ssb.simplitend.databinding.ChatListFragmentBinding; + +public class ChatListFragment extends Fragment { + + // view binding + protected ChatListFragmentBinding binding; + + // view model + private ChatListViewModel viewModel; + + public ChatListFragment(){ + // required empty const. + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = ChatListFragmentBinding.inflate(inflater, container, false); + + initViews(); + + clickEvents(); + + return binding.getRoot(); + } + + private void initViews() { + + viewModel = new ViewModelProvider(this).get(ChatListViewModel.class); + + binding.chatsRv.setLayoutManager(new LinearLayoutManager(requireActivity())); + binding.chatsRv.setAdapter(viewModel.getChatListAdapter()); + + viewModel.getChatListAdapter().submitList(viewModel.getChatItemList()); + } + + private void clickEvents() { + + binding.backBtn.setOnClickListener(v -> { + AppUtil.closeKeyboard(requireActivity()); + Navigation.findNavController(v).popBackStack(R.id.CPDashboardFragment, false, true); + }); + + } +} diff --git a/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/mvvm/ChatItem.java b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/mvvm/ChatItem.java new file mode 100644 index 0000000..4e17b74 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/mvvm/ChatItem.java @@ -0,0 +1,16 @@ +package com.ssb.simplitend.careperson_dashboard.chats.mvvm; + +public class ChatItem { + + public String type, name, time, last_message; + + public ChatItem() { + } + + public ChatItem(String type, String name, String time, String last_message) { + this.type = type; + this.name = name; + this.time = time; + this.last_message = last_message; + } +} diff --git a/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/mvvm/ChatListViewModel.java b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/mvvm/ChatListViewModel.java new file mode 100644 index 0000000..d77ef92 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/chats/mvvm/ChatListViewModel.java @@ -0,0 +1,31 @@ +package com.ssb.simplitend.careperson_dashboard.chats.mvvm; + +import androidx.lifecycle.ViewModel; + +import com.ssb.simplitend.careperson_dashboard.chats.ChatListAdapter; + +import java.util.ArrayList; + +public class ChatListViewModel extends ViewModel { + + private final ArrayList chatItemList; + private final ChatListAdapter chatListAdapter; + + public ChatListViewModel(){ + this.chatListAdapter = new ChatListAdapter(); + + // static data + this.chatItemList = new ArrayList<>(); + + this.chatItemList.add(new ChatItem("Caregiver", "Akanksha surve", "09:00 am", "I hope you are doing alright")); + this.chatItemList.add(new ChatItem("Doctor", "Chaitali tatkare", "11:00 am", "How was your weekend?")); + } + + public ChatListAdapter getChatListAdapter() { + return chatListAdapter; + } + + public ArrayList getChatItemList() { + return chatItemList; + } +} diff --git a/app/src/main/java/com/ssb/simplitend/careperson_dashboard/fragments/CPDashboardFragment.java b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/fragments/CPDashboardFragment.java new file mode 100644 index 0000000..532e4e8 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/careperson_dashboard/fragments/CPDashboardFragment.java @@ -0,0 +1,40 @@ +package com.ssb.simplitend.careperson_dashboard.fragments; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.navigation.Navigation; + +import com.ssb.simplitend.R; +import com.ssb.simplitend.databinding.CaregiverDashboardFragmentBinding; + +public class CPDashboardFragment extends Fragment { + + // view binding + protected CaregiverDashboardFragmentBinding binding; + + public CPDashboardFragment() { + // required + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = CaregiverDashboardFragmentBinding.inflate(inflater, container, false); + + clickEvents(); + + return binding.getRoot(); + } + + private void clickEvents() { + binding.chats.setOnClickListener(v -> + Navigation.findNavController(v).navigate(R.id.action_CPDashboardFragment_to_chatListFragment) + ); + } +} diff --git a/app/src/main/java/com/ssb/simplitend/medicalinfo/AddMedicalInfoFragment.java b/app/src/main/java/com/ssb/simplitend/medicalinfo/AddMedicalInfoFragment.java index ccb6920..10f261e 100644 --- a/app/src/main/java/com/ssb/simplitend/medicalinfo/AddMedicalInfoFragment.java +++ b/app/src/main/java/com/ssb/simplitend/medicalinfo/AddMedicalInfoFragment.java @@ -8,7 +8,12 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; 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.ProfileProgress; +import com.ssb.simplitend.medicalinfo.mvvm.MedicalInfo; import com.ssb.simplitend.databinding.AddMedicalInfoBinding; public class AddMedicalInfoFragment extends Fragment { @@ -16,6 +21,9 @@ public class AddMedicalInfoFragment extends Fragment { // view binding protected AddMedicalInfoBinding binding; + private MedicalInfo medicalInfo; + public static final String MEDICAL_INFO_KEY = "medical_info"; + public AddMedicalInfoFragment(){ // required empty const. } @@ -25,6 +33,65 @@ public class AddMedicalInfoFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = AddMedicalInfoBinding.inflate(inflater, container, false); + initViews(); + + clickEvents(); + return binding.getRoot(); } + + private void initViews() { + Bundle bundle = getArguments(); + + if (bundle != null){ + medicalInfo = (MedicalInfo) bundle.getSerializable(MEDICAL_INFO_KEY); + if (medicalInfo != null){ + binding.title.setText(getString(R.string.edit_medical_information)); + setLayoutInfo(); + } + } + } + + private void setLayoutInfo() { + if (medicalInfo == null) return; + + binding.diagnosis.setText(medicalInfo.diagnosis); + binding.primaryDoc.setText(medicalInfo.primary_doc); + binding.docContact.setText(medicalInfo.doc_contact); + binding.hospitalPref.setText(medicalInfo.hospital_pref); + binding.allergies.setText(medicalInfo.allergies); + binding.dietRestrict.setText(medicalInfo.diet_restriction); + + binding.addBtn.setText(getString(R.string.save)); + } + + private void clickEvents() { + + binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + + binding.addBtn.setOnClickListener(v -> { + ProfileProgress.MEDICAL_INFO_ADDED = true; + + if (medicalInfo != null){ + // save changes animation + + AppUtil.showSOSDecision(requireContext(), + getString(R.string.make_changes), getString(R.string.yes), getString(R.string.no), + v2 -> { + // yes click + AppUtil.showAnimateDBS(requireContext(), getString(R.string.changes_successful), + R.raw.done_anim_primary, 3000, + v4 -> { + Navigation.findNavController(v).popBackStack(); + }); + + }, v3 -> { + // no click + }); + + }else{ + Navigation.findNavController(v).popBackStack(); + } + }); + } } diff --git a/app/src/main/java/com/ssb/simplitend/medicalinfo/MedicalInfoFragment.java b/app/src/main/java/com/ssb/simplitend/medicalinfo/MedicalInfoFragment.java index acdc259..9703e7d 100644 --- a/app/src/main/java/com/ssb/simplitend/medicalinfo/MedicalInfoFragment.java +++ b/app/src/main/java/com/ssb/simplitend/medicalinfo/MedicalInfoFragment.java @@ -1,5 +1,7 @@ package com.ssb.simplitend.medicalinfo; +import static com.ssb.simplitend.medicalinfo.AddMedicalInfoFragment.MEDICAL_INFO_KEY; + import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -11,6 +13,8 @@ import androidx.fragment.app.Fragment; import androidx.navigation.Navigation; import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.ProfileProgress; +import com.ssb.simplitend.medicalinfo.mvvm.MedicalInfo; import com.ssb.simplitend.databinding.MedicalIntoFragmentBinding; public class MedicalInfoFragment extends Fragment { @@ -27,18 +31,48 @@ public class MedicalInfoFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = MedicalIntoFragmentBinding.inflate(inflater, container, false); + initViews(); + clickEvents(); return binding.getRoot(); } + private void initViews() { + + if (ProfileProgress.MEDICAL_INFO_ADDED){ + binding.medicalInfo.setVisibility(View.VISIBLE); + binding.noData.setVisibility(View.GONE); + binding.addMedInfo.setVisibility(View.GONE); + }else{ + binding.noData.setVisibility(View.VISIBLE); + binding.medicalInfo.setVisibility(View.GONE); + binding.addMedInfo.setVisibility(View.VISIBLE); + } + + } + private void clickEvents() { - binding.addMedInfo.setOnClickListener(v -> - { + binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + + binding.addMedInfo.setOnClickListener(v -> { Navigation.findNavController(v).navigate(R.id.action_medicalInfoFragment_to_addMedicalInfoFragment); } ); + binding.editBtn.setOnClickListener(v -> { + + Bundle bundle = new Bundle(); + MedicalInfo medicalInfo = new MedicalInfo("Cognitive impairment and memeory loss.", + "Dr. Sandeep Kanojia", "+63456398456", "Baycrest Health Sciences", + "Latex allergy", "Lorum ipsum dummy is simple dummy"); + bundle.putSerializable(MEDICAL_INFO_KEY, medicalInfo); + + Navigation.findNavController(v).navigate(R.id.action_medicalInfoFragment_to_addMedicalInfoFragment, bundle); + }); + + binding.done.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + } } diff --git a/app/src/main/java/com/ssb/simplitend/medicalinfo/mvvm/MedicalInfo.java b/app/src/main/java/com/ssb/simplitend/medicalinfo/mvvm/MedicalInfo.java new file mode 100644 index 0000000..938dc36 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/medicalinfo/mvvm/MedicalInfo.java @@ -0,0 +1,20 @@ +package com.ssb.simplitend.medicalinfo.mvvm; + +import java.io.Serializable; + +public class MedicalInfo implements Serializable { + + public String diagnosis, primary_doc, doc_contact, hospital_pref + , allergies, diet_restriction; + + public MedicalInfo() {} + + public MedicalInfo(String diagnosis, String primary_doc, String doc_contact, String hospital_pref, String allergies, String diet_restriction) { + this.diagnosis = diagnosis; + this.primary_doc = primary_doc; + this.doc_contact = doc_contact; + this.hospital_pref = hospital_pref; + this.allergies = allergies; + this.diet_restriction = diet_restriction; + } +} diff --git a/app/src/main/java/com/ssb/simplitend/medreminder/AddReminderFragment.java b/app/src/main/java/com/ssb/simplitend/medreminder/AddReminderFragment.java index 1d393e0..fbce9cb 100644 --- a/app/src/main/java/com/ssb/simplitend/medreminder/AddReminderFragment.java +++ b/app/src/main/java/com/ssb/simplitend/medreminder/AddReminderFragment.java @@ -63,6 +63,8 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh private void clickEvents() { + binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + binding.getTime.setOnClickListener(v -> { AppUtil.closeKeyboard(requireActivity()); getTime(); @@ -131,6 +133,8 @@ public class AddReminderFragment extends Fragment implements CompoundButton.OnCh binding.medicName.setText(reminder.dosage_name); binding.quantity.setText(reminder.quantity); binding.getTime.setText(reminder.time); + + binding.addReminder.setText(getString(R.string.save_reminder)); } } diff --git a/app/src/main/java/com/ssb/simplitend/setuproutine/AddRoutineFragment.java b/app/src/main/java/com/ssb/simplitend/setuproutine/AddRoutineFragment.java new file mode 100644 index 0000000..0b99cd6 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/setuproutine/AddRoutineFragment.java @@ -0,0 +1,268 @@ +package com.ssb.simplitend.setuproutine; + +import android.annotation.SuppressLint; +import android.app.TimePickerDialog; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.content.res.AppCompatResources; +import androidx.fragment.app.Fragment; +import androidx.navigation.Navigation; + +import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.databinding.AddRoutineFragmentBinding; +import com.ssb.simplitend.setuproutine.mvvm.Routine; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Locale; + +public class AddRoutineFragment extends Fragment implements CompoundButton.OnCheckedChangeListener{ + + // view binding + protected AddRoutineFragmentBinding binding; + + private boolean[] week_state; + + public static final String ROUTINE_KEY = "routine_key"; + private Routine routine; + + public AddRoutineFragment() { + // required empty const. + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = AddRoutineFragmentBinding.inflate(inflater, container, false); + + initViews(); + + clickEvents(); + + return binding.getRoot(); + } + + @SuppressLint("ClickableViewAccessibility") + private void initViews() { + + Bundle bundle = getArguments(); + + if (bundle != null){ + routine = (Routine) bundle.getSerializable(ROUTINE_KEY); + setLayoutDetails(); + } + + // scrolling instruction edit text + binding.routineDescription.setOnTouchListener((v, event) -> { + if (binding.routineDescription.hasFocus()) { + v.getParent().requestDisallowInterceptTouchEvent(true); + if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_SCROLL) { + v.getParent().requestDisallowInterceptTouchEvent(false); + return true; + } + } + return false; + }); + + binding.everydayCheck.setOnCheckedChangeListener(this); + + } + + private void setLayoutDetails() { + if (routine == null) return; + + binding.title.setText(getString(R.string.edit_routine)); + binding.addRoutine.setText(getString(R.string.save)); + + binding.routineName.setText(routine.routine_name); + binding.routineDescription.setText(routine.routine_description); + + binding.startTime.setText(routine.start_time_str); + binding.endTime.setText(routine.end_time_str); + + } + + private void clickEvents() { + binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + + binding.startTime.setOnClickListener(v -> getTime(binding.startTime)); + binding.endTime.setOnClickListener(v -> getTime(binding.endTime)); + + binding.addRoutine.setOnClickListener(v -> { + if (routine == null){ + Navigation.findNavController(v).popBackStack(R.id.routineFragment, false, true); + }else{ + AppUtil.showSOSDecision(requireContext(), getString(R.string.make_changes), + getString(R.string.yes), getString(R.string.no), + v1 -> { + // yes click + AppUtil.showAnimateDBS(requireContext(), + getString(R.string.changes_successful), R.raw.done_anim_primary, + 3000, v3 -> { + // here v3 is null + Navigation.findNavController(v).popBackStack(R.id.routineFragment, false, true); + }); + }, v2 -> { + // no click + }); + } + }); + + setUpWeekSelection(); + + } + + // set selection and un-selection of week day + private void setUpWeekSelection() { + + week_state = new boolean[7]; + + // week day selections + binding.sun.setOnClickListener(v -> setSelectionState(0, week_state[0] = !week_state[0])); + binding.mon.setOnClickListener(v -> setSelectionState(1, week_state[1] = !week_state[1])); + binding.tue.setOnClickListener(v -> setSelectionState(2, week_state[2] = !week_state[2])); + binding.wed.setOnClickListener(v -> setSelectionState(3, week_state[3] = !week_state[3])); + binding.thu.setOnClickListener(v -> setSelectionState(4, week_state[4] = !week_state[4])); + binding.fri.setOnClickListener(v -> setSelectionState(5, week_state[5] = !week_state[5])); + binding.sat.setOnClickListener(v -> setSelectionState(6, week_state[6] = !week_state[6])); + + } + + // shows time picker and sets the time picked into @textview + // shows time picker to pick time and set to textview + private void getTime(TextView textView) { + + Calendar calendar = Calendar.getInstance(Locale.getDefault()); + + TimePickerDialog tpd = new TimePickerDialog(requireContext(), + (view, hourOfDay, minute) -> { + + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.HOUR_OF_DAY, hourOfDay); + cal.set(Calendar.MINUTE, minute); + + SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a", Locale.getDefault()); + + String selected_time = sdf.format(cal.getTime()); + textView.setText(selected_time); + + }, calendar.getTime().getHours(), calendar.getTime().getMinutes(), false); + + tpd.show(); + + } + + private void setSelectionState(int position, boolean selection) { + if (selection) { + // selection has to be made + switch (position) { + case 0: + // sun + binding.sun.setBackgroundTintList(AppCompatResources.getColorStateList(requireContext(), R.color.color_primary)); + binding.sun.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.white_bg)); + break; + case 1: + // mon + binding.mon.setBackgroundTintList(AppCompatResources.getColorStateList(requireContext(), R.color.color_primary)); + binding.mon.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.white_bg)); + break; + case 2: + // tue + binding.tue.setBackgroundTintList(AppCompatResources.getColorStateList(requireContext(), R.color.color_primary)); + binding.tue.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.white_bg)); + break; + case 3: + // wed + binding.wed.setBackgroundTintList(AppCompatResources.getColorStateList(requireContext(), R.color.color_primary)); + binding.wed.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.white_bg)); + break; + case 4: + // thu + binding.thu.setBackgroundTintList(AppCompatResources.getColorStateList(requireContext(), R.color.color_primary)); + binding.thu.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.white_bg)); + break; + case 5: + // fri + binding.fri.setBackgroundTintList(AppCompatResources.getColorStateList(requireContext(), R.color.color_primary)); + binding.fri.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.white_bg)); + break; + case 6: + // sat + binding.sat.setBackgroundTintList(AppCompatResources.getColorStateList(requireContext(), R.color.color_primary)); + binding.sat.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.white_bg)); + break; + } + } else { + // un-selection has to be made + switch (position) { + case 0: + // sun + binding.sun.setBackgroundTintList(null); + binding.sun.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.black)); + break; + case 1: + // mon + binding.mon.setBackgroundTintList(null); + binding.mon.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.black)); + break; + case 2: + // tue + binding.tue.setBackgroundTintList(null); + binding.tue.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.black)); + break; + case 3: + // wed + binding.wed.setBackgroundTintList(null); + binding.wed.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.black)); + break; + case 4: + // thu + binding.thu.setBackgroundTintList(null); + binding.thu.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.black)); + break; + case 5: + // fri + binding.fri.setBackgroundTintList(null); + binding.fri.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.black)); + break; + case 6: + // sat + binding.sat.setBackgroundTintList(null); + binding.sat.setTextColor(AppCompatResources.getColorStateList(requireContext(), R.color.black)); + break; + } + } + + // checking if all days are selected or not + // thus, updating the Everyday switch accordingly + boolean isEveryDay = true; + + for (int i = 0; i < 7; i++) { + if (!week_state[i]) { + // some day is not selected thus not everyday selection + isEveryDay = false; + break; + } + } + + binding.everydayCheck.setOnCheckedChangeListener(null); + binding.everydayCheck.setChecked(isEveryDay); + binding.everydayCheck.setOnCheckedChangeListener(this); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + for (int i = 0; i < 7; i++) { + setSelectionState(i, week_state[i] = isChecked); + } + } +} diff --git a/app/src/main/java/com/ssb/simplitend/setuproutine/RoutineFragment.java b/app/src/main/java/com/ssb/simplitend/setuproutine/RoutineFragment.java new file mode 100644 index 0000000..ce64847 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/setuproutine/RoutineFragment.java @@ -0,0 +1,225 @@ +package com.ssb.simplitend.setuproutine; + +import static com.ssb.simplitend.setuproutine.AddRoutineFragment.ROUTINE_KEY; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.navigation.Navigation; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.databinding.RoutineFragmentBinding; +import com.ssb.simplitend.setuproutine.mvvm.Routine; +import com.ssb.simplitend.setuproutine.mvvm.RoutineAdapter; +import com.ssb.simplitend.setuproutine.mvvm.RoutineViewModel; + +public class RoutineFragment extends Fragment implements RoutineAdapter.ClickListener, RoutineAdapter.DeleteClickListener { + + // view binding + protected RoutineFragmentBinding binding; + + // selection state for week days + /* + true -> date selected + false -> date unselected + */ + private boolean[] selection_state; + + private RoutineViewModel viewModel; + + public RoutineFragment(){ + // required empty const. + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = RoutineFragmentBinding.inflate(inflater, container, false); + + initViews(); + + clickEvents(); + + return binding.getRoot(); + } + + private void clickEvents() { + binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack()); + + binding.addRoutine.setOnClickListener(v -> { + Navigation.findNavController(v).navigate(R.id.action_routineFragment_to_addRoutineFragment); + }); + + // date selections + binding.sun.setOnClickListener(v -> { + setSelectionState(0, selection_state[0] = !selection_state[0]); + loadRoutineList(); + }); + binding.mon.setOnClickListener(v -> { + setSelectionState(1, selection_state[1] = !selection_state[1]); + loadRoutineList(); + }); + binding.tue.setOnClickListener(v -> { + setSelectionState(2, selection_state[2] = !selection_state[2]); + loadRoutineList(); + }); + binding.wed.setOnClickListener(v -> { + setSelectionState(3, selection_state[3] = !selection_state[3]); + loadRoutineList(); + }); + binding.thu.setOnClickListener(v -> { + setSelectionState(4, selection_state[4] = !selection_state[4]); + loadRoutineList(); + }); + binding.fri.setOnClickListener(v -> { + setSelectionState(5, selection_state[5] = !selection_state[5]); + loadRoutineList(); + }); + binding.sat.setOnClickListener(v -> { + setSelectionState(6, selection_state[6] = !selection_state[6]); + loadRoutineList(); + }); + + } + + private void initViews() { + selection_state = new boolean[7]; + + viewModel = new ViewModelProvider(this).get(RoutineViewModel.class); + } + + private void loadRoutineList() { + binding.noData.setVisibility(View.GONE); + binding.routineRv.setVisibility(View.VISIBLE); + binding.routineRv.setLayoutManager(new LinearLayoutManager(requireContext())); + binding.routineRv.setAdapter(viewModel.getRoutineAdapter()); + + viewModel.getRoutineAdapter().setDeleteClickListener(this); + viewModel.getRoutineAdapter().setClickListener(this); + + viewModel.getRoutineAdapter().submitList(viewModel.getRoutines()); + } + + private void setSelectionState(int position, boolean selection){ + if (selection){ + switch (position){ + case 0: + // sun + binding.sun.setBackgroundResource(R.drawable.seleted_item_primary); + binding.sunT1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.sunT2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 1: + // mon + binding.mon.setBackgroundResource(R.drawable.seleted_item_primary); + binding.monT1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.monT2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 2: + // tue + binding.tue.setBackgroundResource(R.drawable.seleted_item_primary); + binding.tue1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.tue2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 3: + // wed + binding.wed.setBackgroundResource(R.drawable.seleted_item_primary); + binding.wed1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.wed2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 4: + // thu + binding.thu.setBackgroundResource(R.drawable.seleted_item_primary); + binding.thu1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.thu2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 5: + // fri + binding.fri.setBackgroundResource(R.drawable.seleted_item_primary); + binding.fri1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.fri2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + case 6: + // sat + binding.sat.setBackgroundResource(R.drawable.seleted_item_primary); + binding.sat1.setTextColor(getResources().getColor(R.color.white_bg)); + binding.sat2.setTextColor(getResources().getColor(R.color.white_bg)); + break; + } + }else{ + switch (position){ + case 0: + // sun + binding.sun.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.sunT1.setTextColor(getResources().getColor(R.color.black)); + binding.sunT2.setTextColor(getResources().getColor(R.color.black)); + break; + case 1: + // mon + binding.mon.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.monT1.setTextColor(getResources().getColor(R.color.black)); + binding.monT2.setTextColor(getResources().getColor(R.color.black)); + break; + case 2: + // tue + binding.tue.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.tue1.setTextColor(getResources().getColor(R.color.black)); + binding.tue2.setTextColor(getResources().getColor(R.color.black)); + break; + case 3: + // wed + binding.wed.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.wed1.setTextColor(getResources().getColor(R.color.black)); + binding.wed2.setTextColor(getResources().getColor(R.color.black)); + break; + case 4: + // thu + binding.thu.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.thu1.setTextColor(getResources().getColor(R.color.black)); + binding.thu2.setTextColor(getResources().getColor(R.color.black)); + break; + case 5: + // fri + binding.fri.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.fri1.setTextColor(getResources().getColor(R.color.black)); + binding.fri2.setTextColor(getResources().getColor(R.color.black)); + break; + case 6: + // sat + binding.sat.setBackgroundColor(getResources().getColor(R.color.white_bg)); + binding.sat1.setTextColor(getResources().getColor(R.color.black)); + binding.sat2.setTextColor(getResources().getColor(R.color.black)); + break; + } + } + } + + @Override + public void onDelete(Routine routine, int position) { + + AppUtil.showSOSDecision(requireContext(), getString(R.string.delete_med_routine), + getString(R.string.yes), getString(R.string.no), + v1-> { + // yes click + }, v2 -> { + // no click + }); + + } + + @Override + public void onClick(Routine routine, int position) { + Bundle bundle = new Bundle(); + bundle.putSerializable(ROUTINE_KEY, routine); + + Navigation.findNavController(binding.getRoot()).navigate(R.id.action_routineFragment_to_addRoutineFragment, bundle); + } +} diff --git a/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/Routine.java b/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/Routine.java new file mode 100644 index 0000000..434c9bd --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/Routine.java @@ -0,0 +1,17 @@ +package com.ssb.simplitend.setuproutine.mvvm; + +import java.io.Serializable; + +public class Routine implements Serializable { + + public String routine_name, routine_description, start_time_str, end_time_str; + + public Routine() {} + + public Routine(String routine_name, String routine_description, String start_time_str, String end_time_str) { + this.routine_name = routine_name; + this.routine_description = routine_description; + this.start_time_str = start_time_str; + this.end_time_str = end_time_str; + } +} diff --git a/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/RoutineAdapter.java b/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/RoutineAdapter.java new file mode 100644 index 0000000..7172714 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/RoutineAdapter.java @@ -0,0 +1,105 @@ +package com.ssb.simplitend.setuproutine.mvvm; + +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.ListAdapter; +import androidx.recyclerview.widget.RecyclerView; + +import com.ssb.simplitend.databinding.RoutineViewholderBinding; + +public class RoutineAdapter extends ListAdapter { + + private static final DiffUtil.ItemCallback DIFF_UTIL = new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull Routine oldItem, @NonNull Routine newItem) { + // TODO: 10-07-2023 + return false; + } + + @Override + public boolean areContentsTheSame(@NonNull Routine oldItem, @NonNull Routine newItem) { + // TODO: 10-07-2023 + return false; + } + }; + + private DeleteClickListener deleteClickListener; + private ClickListener clickListener; + + public RoutineAdapter(){ + super(DIFF_UTIL); + } + + public void setDeleteClickListener(DeleteClickListener deleteClickListener) { + this.deleteClickListener = deleteClickListener; + } + + public void setClickListener(ClickListener clickListener) { + this.clickListener = clickListener; + } + + @NonNull + @Override + public RoutineViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + RoutineViewholderBinding binding = RoutineViewholderBinding.inflate(LayoutInflater.from(parent.getContext())); + return new RoutineViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull RoutineViewHolder holder, int position) { + holder.setData(getItem(position), position); + + holder.binding.delete.setOnClickListener(v -> { + if (deleteClickListener != null) deleteClickListener.onDelete(getItem(position), position); + }); + + holder.binding.card.setOnClickListener(v -> { + if (clickListener != null) clickListener.onClick(getItem(position), position); + }); + + } + + public static class RoutineViewHolder extends RecyclerView.ViewHolder{ + + RoutineViewholderBinding binding; + + public RoutineViewHolder(RoutineViewholderBinding binding){ + super(binding.getRoot()); + this.binding = binding; + } + + public void setData(Routine routine, int position){ + + binding.routineName.setText(routine.routine_name); + binding.description.setText(routine.routine_description); + + String time_slot = routine.start_time_str + " - " + routine.end_time_str; + binding.timeSlot.setText(time_slot); + + // static + String start_slot = routine.start_time_str.substring(0, 2) + " " + routine.start_time_str.substring(routine.start_time_str.length()-2); + binding.startTimeStatic.setText(start_slot); + + String end_slot = routine.end_time_str.substring(0, 2) + " " + routine.end_time_str.substring(routine.end_time_str.length()-2); + binding.endTimeStatic.setText(end_slot); + + } + + } + + // interfaces + + @FunctionalInterface + public interface DeleteClickListener{ + void onDelete(Routine routine, int position); + } + + @FunctionalInterface + public interface ClickListener{ + void onClick(Routine routine, int position); + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/RoutineViewModel.java b/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/RoutineViewModel.java new file mode 100644 index 0000000..2ee98f2 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/setuproutine/mvvm/RoutineViewModel.java @@ -0,0 +1,28 @@ +package com.ssb.simplitend.setuproutine.mvvm; + +import androidx.lifecycle.ViewModel; + +import java.util.ArrayList; + +public class RoutineViewModel extends ViewModel { + + private final ArrayList routines; + private final RoutineAdapter routineAdapter; + + public RoutineViewModel(){ + this.routineAdapter = new RoutineAdapter(); + + // init static data in routine list + this.routines = new ArrayList<>(); + routines.add(new Routine("Doctor appointment", "Meet your heart specialist Abraham at 4:00 pm", "07 : 00 AM", "09 : 00 AM")); + routines.add(new Routine("Take medicines", "Lorem Ipsum is simply dummy.", "11 : 00 AM", "12 : 00 PM")); + } + + public RoutineAdapter getRoutineAdapter() { + return routineAdapter; + } + + public ArrayList getRoutines() { + return routines; + } +} diff --git a/app/src/main/java/com/ssb/simplitend/userprofile/ProfileProgressFragment.java b/app/src/main/java/com/ssb/simplitend/userprofile/ProfileProgressFragment.java index 31c8df6..df43e4e 100644 --- a/app/src/main/java/com/ssb/simplitend/userprofile/ProfileProgressFragment.java +++ b/app/src/main/java/com/ssb/simplitend/userprofile/ProfileProgressFragment.java @@ -1,5 +1,6 @@ package com.ssb.simplitend.userprofile; +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -11,6 +12,7 @@ import androidx.fragment.app.Fragment; import androidx.navigation.Navigation; import com.ssb.simplitend.R; +import com.ssb.simplitend.careperson_dashboard.DashBoardActivityCP; import com.ssb.simplitend.databinding.ProfileProgressFragmentBinding; public class ProfileProgressFragment extends Fragment { @@ -47,5 +49,16 @@ public class ProfileProgressFragment extends Fragment { Navigation.findNavController(v).navigate(R.id.action_profileProgressFragment_to_medicalInfoFragment) ); + binding.setUpRoutine.setOnClickListener(v -> + Navigation.findNavController(v).navigate(R.id.action_profileProgressFragment_to_routineFragment) + ); + + binding.skipToDashboard.setOnClickListener(v -> { + Intent intent = new Intent(requireActivity(), DashBoardActivityCP.class); + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + startActivity(intent); + requireActivity().finish(); + }); + } } diff --git a/app/src/main/res/drawable-hdpi/img_apps.png b/app/src/main/res/drawable-hdpi/img_apps.png new file mode 100644 index 0000000..6af6572 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/img_apps.png differ diff --git a/app/src/main/res/drawable-hdpi/img_chats.png b/app/src/main/res/drawable-hdpi/img_chats.png new file mode 100644 index 0000000..751fc31 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/img_chats.png differ diff --git a/app/src/main/res/drawable-hdpi/img_directions.png b/app/src/main/res/drawable-hdpi/img_directions.png new file mode 100644 index 0000000..41b922c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/img_directions.png differ diff --git a/app/src/main/res/drawable-ldpi/img_apps.png b/app/src/main/res/drawable-ldpi/img_apps.png new file mode 100644 index 0000000..243b2a3 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/img_apps.png differ diff --git a/app/src/main/res/drawable-ldpi/img_chats.png b/app/src/main/res/drawable-ldpi/img_chats.png new file mode 100644 index 0000000..3eb128e Binary files /dev/null and b/app/src/main/res/drawable-ldpi/img_chats.png differ diff --git a/app/src/main/res/drawable-ldpi/img_directions.png b/app/src/main/res/drawable-ldpi/img_directions.png new file mode 100644 index 0000000..e901de2 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/img_directions.png differ diff --git a/app/src/main/res/drawable-mdpi/img_apps.png b/app/src/main/res/drawable-mdpi/img_apps.png new file mode 100644 index 0000000..142caa5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/img_apps.png differ diff --git a/app/src/main/res/drawable-mdpi/img_chats.png b/app/src/main/res/drawable-mdpi/img_chats.png new file mode 100644 index 0000000..03bb988 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/img_chats.png differ diff --git a/app/src/main/res/drawable-mdpi/img_directions.png b/app/src/main/res/drawable-mdpi/img_directions.png new file mode 100644 index 0000000..f895c89 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/img_directions.png differ diff --git a/app/src/main/res/drawable-tvdpi/img_apps.png b/app/src/main/res/drawable-tvdpi/img_apps.png new file mode 100644 index 0000000..5fffc77 Binary files /dev/null and b/app/src/main/res/drawable-tvdpi/img_apps.png differ diff --git a/app/src/main/res/drawable-tvdpi/img_chats.png b/app/src/main/res/drawable-tvdpi/img_chats.png new file mode 100644 index 0000000..74b3171 Binary files /dev/null and b/app/src/main/res/drawable-tvdpi/img_chats.png differ diff --git a/app/src/main/res/drawable-tvdpi/img_directions.png b/app/src/main/res/drawable-tvdpi/img_directions.png new file mode 100644 index 0000000..751462b Binary files /dev/null and b/app/src/main/res/drawable-tvdpi/img_directions.png differ diff --git a/app/src/main/res/drawable-xhdpi/img_apps.png b/app/src/main/res/drawable-xhdpi/img_apps.png new file mode 100644 index 0000000..fd53690 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/img_apps.png differ diff --git a/app/src/main/res/drawable-xhdpi/img_chats.png b/app/src/main/res/drawable-xhdpi/img_chats.png new file mode 100644 index 0000000..b3f537e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/img_chats.png differ diff --git a/app/src/main/res/drawable-xhdpi/img_directions.png b/app/src/main/res/drawable-xhdpi/img_directions.png new file mode 100644 index 0000000..9bff6e9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/img_directions.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_apps.png b/app/src/main/res/drawable-xxhdpi/img_apps.png new file mode 100644 index 0000000..a6a121b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_apps.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_chats.png b/app/src/main/res/drawable-xxhdpi/img_chats.png new file mode 100644 index 0000000..fa8bc15 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_chats.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_directions.png b/app/src/main/res/drawable-xxhdpi/img_directions.png new file mode 100644 index 0000000..bc483ed Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_directions.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/img_apps.png b/app/src/main/res/drawable-xxxhdpi/img_apps.png new file mode 100644 index 0000000..d978c3e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/img_apps.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/img_chats.png b/app/src/main/res/drawable-xxxhdpi/img_chats.png new file mode 100644 index 0000000..69c50b3 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/img_chats.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/img_directions.png b/app/src/main/res/drawable-xxxhdpi/img_directions.png new file mode 100644 index 0000000..0412e4f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/img_directions.png differ diff --git a/app/src/main/res/drawable/ic_allergies_outline.xml b/app/src/main/res/drawable/ic_allergies_outline.xml new file mode 100644 index 0000000..fb982e1 --- /dev/null +++ b/app/src/main/res/drawable/ic_allergies_outline.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_allergy.xml b/app/src/main/res/drawable/ic_allergy.xml new file mode 100644 index 0000000..d91e57d --- /dev/null +++ b/app/src/main/res/drawable/ic_allergy.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..fbe509b --- /dev/null +++ b/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,18 @@ + + + + diff --git a/app/src/main/res/drawable/ic_close_outline.xml b/app/src/main/res/drawable/ic_close_outline.xml new file mode 100644 index 0000000..a0077f7 --- /dev/null +++ b/app/src/main/res/drawable/ic_close_outline.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_close_primary.xml b/app/src/main/res/drawable/ic_close_primary.xml new file mode 100644 index 0000000..79fb17a --- /dev/null +++ b/app/src/main/res/drawable/ic_close_primary.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_color_accent_bar.xml b/app/src/main/res/drawable/ic_color_accent_bar.xml new file mode 100644 index 0000000..f4bc798 --- /dev/null +++ b/app/src/main/res/drawable/ic_color_accent_bar.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_dashboard_cp.xml b/app/src/main/res/drawable/ic_dashboard_cp.xml new file mode 100644 index 0000000..4209579 --- /dev/null +++ b/app/src/main/res/drawable/ic_dashboard_cp.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_description.xml b/app/src/main/res/drawable/ic_description.xml new file mode 100644 index 0000000..520f5a6 --- /dev/null +++ b/app/src/main/res/drawable/ic_description.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_description_outline.xml b/app/src/main/res/drawable/ic_description_outline.xml new file mode 100644 index 0000000..061782a --- /dev/null +++ b/app/src/main/res/drawable/ic_description_outline.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_diagnosis.xml b/app/src/main/res/drawable/ic_diagnosis.xml new file mode 100644 index 0000000..01a898c --- /dev/null +++ b/app/src/main/res/drawable/ic_diagnosis.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_diagnosis_outline.xml b/app/src/main/res/drawable/ic_diagnosis_outline.xml new file mode 100644 index 0000000..19d0436 --- /dev/null +++ b/app/src/main/res/drawable/ic_diagnosis_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_diet_rest.xml b/app/src/main/res/drawable/ic_diet_rest.xml new file mode 100644 index 0000000..720e3b8 --- /dev/null +++ b/app/src/main/res/drawable/ic_diet_rest.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_diet_rest_outline.xml b/app/src/main/res/drawable/ic_diet_rest_outline.xml new file mode 100644 index 0000000..ca087f0 --- /dev/null +++ b/app/src/main/res/drawable/ic_diet_rest_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_doc_contact.xml b/app/src/main/res/drawable/ic_doc_contact.xml new file mode 100644 index 0000000..7fe78d4 --- /dev/null +++ b/app/src/main/res/drawable/ic_doc_contact.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_doc_contact_outline.xml b/app/src/main/res/drawable/ic_doc_contact_outline.xml new file mode 100644 index 0000000..bf01dfc --- /dev/null +++ b/app/src/main/res/drawable/ic_doc_contact_outline.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_nav_up.xml b/app/src/main/res/drawable/ic_home_nav_up.xml new file mode 100644 index 0000000..7d31b3f --- /dev/null +++ b/app/src/main/res/drawable/ic_home_nav_up.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_hosp.xml b/app/src/main/res/drawable/ic_hosp.xml new file mode 100644 index 0000000..4a82d0a --- /dev/null +++ b/app/src/main/res/drawable/ic_hosp.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_hosp_outline.xml b/app/src/main/res/drawable/ic_hosp_outline.xml new file mode 100644 index 0000000..6c31fba --- /dev/null +++ b/app/src/main/res/drawable/ic_hosp_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_notification.xml b/app/src/main/res/drawable/ic_notification.xml new file mode 100644 index 0000000..0cb66a2 --- /dev/null +++ b/app/src/main/res/drawable/ic_notification.xml @@ -0,0 +1,44 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_plus_sign.xml b/app/src/main/res/drawable/ic_plus_sign.xml index 89633bb..a9503fd 100644 --- a/app/src/main/res/drawable/ic_plus_sign.xml +++ b/app/src/main/res/drawable/ic_plus_sign.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_routine.xml b/app/src/main/res/drawable/ic_routine.xml new file mode 100644 index 0000000..cb26641 --- /dev/null +++ b/app/src/main/res/drawable/ic_routine.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_routine_img.xml b/app/src/main/res/drawable/ic_routine_img.xml new file mode 100644 index 0000000..fab8b15 --- /dev/null +++ b/app/src/main/res/drawable/ic_routine_img.xml @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_routine_outline.xml b/app/src/main/res/drawable/ic_routine_outline.xml new file mode 100644 index 0000000..0e071ea --- /dev/null +++ b/app/src/main/res/drawable/ic_routine_outline.xml @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_stethoscope.xml b/app/src/main/res/drawable/ic_stethoscope.xml new file mode 100644 index 0000000..2c4196e --- /dev/null +++ b/app/src/main/res/drawable/ic_stethoscope.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_stethoscope_outline.xml b/app/src/main/res/drawable/ic_stethoscope_outline.xml new file mode 100644 index 0000000..e379096 --- /dev/null +++ b/app/src/main/res/drawable/ic_stethoscope_outline.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/layout/activity_dash_board_cp.xml b/app/src/main/res/layout/activity_dash_board_cp.xml new file mode 100644 index 0000000..e30cbe8 --- /dev/null +++ b/app/src/main/res/layout/activity_dash_board_cp.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/add_contact_fragment.xml b/app/src/main/res/layout/add_contact_fragment.xml index b72629e..83b956d 100644 --- a/app/src/main/res/layout/add_contact_fragment.xml +++ b/app/src/main/res/layout/add_contact_fragment.xml @@ -48,6 +48,9 @@ android:drawableStart="@drawable/ic_search_outline" android:drawablePadding="10dp" + + android:autofillHints="name" + android:inputType="textPersonName" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/caregiver_dashboard_fragment.xml b/app/src/main/res/layout/caregiver_dashboard_fragment.xml new file mode 100644 index 0000000..8b1d131 --- /dev/null +++ b/app/src/main/res/layout/caregiver_dashboard_fragment.xml @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/chat_card_viewholder.xml b/app/src/main/res/layout/chat_card_viewholder.xml new file mode 100644 index 0000000..454593f --- /dev/null +++ b/app/src/main/res/layout/chat_card_viewholder.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/chat_list_fragment.xml b/app/src/main/res/layout/chat_list_fragment.xml new file mode 100644 index 0000000..3d6fe5f --- /dev/null +++ b/app/src/main/res/layout/chat_list_fragment.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/medical_into_fragment.xml b/app/src/main/res/layout/medical_into_fragment.xml index 44b21a4..5415c9d 100644 --- a/app/src/main/res/layout/medical_into_fragment.xml +++ b/app/src/main/res/layout/medical_into_fragment.xml @@ -53,52 +53,59 @@ /> - + android:overScrollMode="never"> - - - - android:layout_marginHorizontal="25dp" - android:fontFamily="@font/nunito_semibold" - android:text="@string/you_don_t_have_any_medical_information" - android:textAlignment="center" + - android:textColor="@color/black" /> + - android:textAppearance="@style/TextAppearance.Material3.TitleMedium" - android:textColor="@color/black" + + android:layout_marginHorizontal="15dp" + android:layout_marginTop="5dp" + android:fontFamily="@font/nunito_regular" + android:text="@string/please_click_on_add_button_to_add" - + android:textAlignment="center" + + android:textAppearance="@style/TextAppearance.Material3.TitleMedium" + android:textColor="@color/black" + + /> + + + + diff --git a/app/src/main/res/layout/profile_progress_fragment.xml b/app/src/main/res/layout/profile_progress_fragment.xml index 9748c29..496d7df 100644 --- a/app/src/main/res/layout/profile_progress_fragment.xml +++ b/app/src/main/res/layout/profile_progress_fragment.xml @@ -11,6 +11,7 @@ @@ -270,7 +272,7 @@ android:orientation="vertical"> - - - + android:overScrollMode="never" + > - + + - android:textColor="@color/black" + + android:layout_gravity="center_horizontal" + android:fontFamily="@font/nunito_semibold" + android:text="@string/you_don_t_have_any_medication_reminder" + android:textAlignment="center" + android:textAppearance="@style/TextAppearance.Material3.TitleLarge" - - android:textAppearance="@style/TextAppearance.Material3.TitleMedium" + + android:layout_gravity="center_horizontal" + android:layout_marginVertical="15dp" + android:fontFamily="@font/nunito_regular" + android:text="@string/please_click_on_add_button_to_add_medication_reminder" + android:textAlignment="center" + + android:textAppearance="@style/TextAppearance.Material3.TitleMedium" + + android:textColor="#5B5B5B" /> + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/routine_viewholder.xml b/app/src/main/res/layout/routine_viewholder.xml new file mode 100644 index 0000000..9d91953 --- /dev/null +++ b/app/src/main/res/layout/routine_viewholder.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/thank_you_fragment.xml b/app/src/main/res/layout/thank_you_fragment.xml index a9c3619..672f951 100644 --- a/app/src/main/res/layout/thank_you_fragment.xml +++ b/app/src/main/res/layout/thank_you_fragment.xml @@ -28,7 +28,8 @@ android:layout_width="match_parent" android:layout_height="250dp" android:layout_gravity="center_horizontal" - android:layout_marginVertical="40dp" + android:layout_marginTop="25dp" + android:layout_marginBottom="15dp" android:layout_marginHorizontal="15dp" android:contentDescription="@string/thank_you"/> @@ -50,7 +51,7 @@ android:textAlignment="center" android:fontFamily="@font/nunito_regular" android:layout_marginBottom="25dp" - android:layout_marginTop="15dp"/> + android:layout_marginTop="5dp"/> diff --git a/app/src/main/res/navigation/cp_dashboard_graph.xml b/app/src/main/res/navigation/cp_dashboard_graph.xml new file mode 100644 index 0000000..e5f0eda --- /dev/null +++ b/app/src/main/res/navigation/cp_dashboard_graph.xml @@ -0,0 +1,19 @@ + + + + + + + + \ 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 9332e88..b0da61a 100644 --- a/app/src/main/res/navigation/welcome_nav_graph.xml +++ b/app/src/main/res/navigation/welcome_nav_graph.xml @@ -152,6 +152,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 56df7ea..6a26e99 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ SimpliTend Welcome to\nSimpliTend - Caring for a loved one may be overwhelming.... Let our app assist you! + Caring for a loved one may be overwhelming....\nLet our app assist you! logo_bg welcome_illustration next_btn @@ -125,6 +125,7 @@ You can continue and complete the profile. You don\'t have any medication reminder. Please click on add button to add medication reminder + Please click on add button to add routines reminder TODO March, 16 @@ -138,6 +139,7 @@ Enter temporary pin Caring for a loved one may be overwhelming.... Let our app assist you! Add reminder + Save reminder Medicine name Enter your medicine name Mg @@ -167,6 +169,7 @@ Are you sure you want to delete the medication reminder? Edit reminder + Edit routine Done You don\'t have any medical information Please click on add button to add medical information @@ -182,6 +185,7 @@ Diet Restriction Random description lorum ipsum with short description Add medical information + Edit medical information Enter diagnosis Enter primary doctor number Enter contact number @@ -189,5 +193,24 @@ Enter allergies Enter diet restriction Add + Routine + You don\'t have any routines reminder. + Add routine + Name of the Routine + Enter routine name + Routine description + Enter description + Enter start time + Enter end time + bar + Are you sure you want to delete the Medication routine? + notification + close + Calls + Chats + Apps + Direction + sos + Search chats \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 3e927b1..92b9117 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,4 +18,5 @@ android.useAndroidX=true # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +android.enableJetifier=true \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index bc9b461..73d12d8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,6 +10,8 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven { url 'https://jitpack.io' } + jcenter() } } rootProject.name = "SimpliTend"