This commit is contained in:
2023-10-11 21:08:52 +05:30
parent ede01c7d27
commit ddaac51b1d
16 changed files with 496 additions and 164 deletions

View File

@@ -1,6 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="RZCW41EJRPN" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-10-11T15:22:55.720575200Z" />
<runningDeviceTargetsSelectedWithDialog>
<Target>
<type value="RUNNING_DEVICE_TARGET" />

8
.idea/misc.xml generated
View File

@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
@@ -6,4 +7,11 @@
<component name="ProjectType">
<option name="id" value="Android" />
</component>
<component name="VisualizationToolProject">
<option name="state">
<ProjectState>
<option name="scale" value="0.088" />
</ProjectState>
</option>
</component>
</project>

View File

@@ -316,7 +316,31 @@ public class CaregiverDashActivity extends AppCompatActivity implements
binding.toolbar.setNavigationIcon(AppCompatResources.getDrawable(this, R.drawable.ic_menu));
binding.toolbar.setNavigationIconTint(getResources().getColor(R.color.white));
} else if (selectedItem == MenuItem.CHATS) {
replaceFragment(new ChatFragment(), "chat");
CaregiverDataCache.getCaregiverData(this, (careGiverData1 -> {
if (careGiverData1 != null && careGiverData1.patientDetails != null){
this.careGiverData = careGiverData1;
String sender_image;
if (careGiverData1.profile_photo == null){
sender_image = String.valueOf(R.drawable.caregiver_img);
}else{
sender_image = AppUtil.IMAGE_BASE_URL + careGiverData1.profile_photo;
}
String receiver_image;
if (careGiverData1.patientDetails.profile_photo == null){
receiver_image = String.valueOf(R.drawable.senior_img);
}else{
receiver_image = AppUtil.IMAGE_BASE_URL + careGiverData1.patientDetails.profile_photo;
}
replaceFragment(new ChatFragment(careGiverData1.patientId + "",
careGiverData1.first_name,
careGiverData1.patientDetails.first_name,
sender_image,
receiver_image), "chat");
}
}), true);
binding.toolbar.setVisibility(View.GONE);
binding.bottomNav.setVisibility(View.GONE);

View File

@@ -1,10 +1,12 @@
package com.app.simplitend.patient_dashboard.chats;
import android.os.Bundle;
import android.util.Log;
import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -12,14 +14,11 @@ import androidx.fragment.app.Fragment;
import com.app.simplitend.R;
import com.app.simplitend.databinding.ChatFragmentBinding;
import com.app.simplitend.patient_dashboard.chats.mvvm.Author;
import com.app.simplitend.patient_dashboard.chats.mvvm.Message;
import com.app.simplitend.patient_dashboard.chats.mvvm.Receiver;
import com.bumptech.glide.Glide;
import com.stfalcon.chatkit.messages.MessagesListAdapter;
import io.socket.emitter.Emitter;
public class ChatFragment extends Fragment implements Emitter.Listener {
public class ChatFragment extends Fragment implements SocketHelper.Callback<Message> {
private static final String TAG = "SOCKET_CHAT_TAG";
@@ -30,8 +29,32 @@ public class ChatFragment extends Fragment implements Emitter.Listener {
protected MessagesListAdapter<Message> messageAdapter;
public ChatFragment() {
private final String nick_name, receiver_name;
private final String author_image, receiver_image;
private final String patient_id;
public static final String SEND = "Send";
public ChatFragment(){
// required
this.patient_id = null;
this.nick_name = "NONE";
this.receiver_name = "NONE";
this.author_image = null;
this.receiver_image = null;
}
public ChatFragment(String patient_id,
String nick_name,
String receiver_name,
String sender_image, String receiver_image) {
this.patient_id = patient_id;
this.nick_name = nick_name;
this.receiver_name = receiver_name;
this.author_image = sender_image;
this.receiver_image = receiver_image;
}
@Nullable
@@ -39,32 +62,21 @@ public class ChatFragment extends Fragment implements Emitter.Listener {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = ChatFragmentBinding.inflate(inflater, container, false);
SocketHelper socketHelper = SocketHelper.getInstance();
socketHelper.establishConnection();
socketHelper.joinChatRoom("BILAL", new Runnable() {
@Override
public void run() {
Log.d(TAG, "ROOM JOINED AS BILAL");
}
});
socketHelper.getMessage(new SocketHelper.Callback<Object>() {
@Override
public void onSuccess(Object result) {
}
@Override
public void onError(Exception e) {
}
});
initViews();
clickEvents();
if (patient_id != null){
SocketHelper socketHelper = SocketHelper.getInstance();
socketHelper.establishConnection();
socketHelper.getMessage(this, patient_id, nick_name,
receiver_image,
author_image);
enableDenButton(true);
}
return binding.getRoot();
}
@@ -72,12 +84,6 @@ public class ChatFragment extends Fragment implements Emitter.Listener {
public void onDestroyView() {
super.onDestroyView();
SocketHelper.getInstance().closeConnection();
SocketHelper.getInstance().leaveChatRoom("BILAL", new Runnable() {
@Override
public void run() {
Log.d(TAG, "LEAVED ROOM AS ADITYA");
}
});
}
private void clickEvents() {
@@ -88,36 +94,83 @@ public class ChatFragment extends Fragment implements Emitter.Listener {
});
binding.sendBtn.setOnClickListener(v -> {
SocketHelper.getInstance().sendMessage("Hi there", "Bilal");
if (binding.messageEt.getText().toString().trim().isEmpty()){
return;
}
SocketHelper.getInstance().sendMessage(binding.messageEt.getText().toString().trim(), nick_name, patient_id);
binding.messageEt.setText("");
enableDenButton(false);
});
}
private void initViews() {
binding.chatTitle.setText("BILAL");
binding.chatTitle.setText(receiver_name);
MessagesListAdapter.HoldersConfig holdersConfig = new MessagesListAdapter.HoldersConfig();
holdersConfig.setOutcomingLayout(R.layout.sender_msg_viewholder);
holdersConfig.setOutcoming(SenderViewHolder.class, R.layout.sender_msg_viewholder);
holdersConfig.setIncoming(ReceiverViewHolder.class, R.layout.receiver_msg_viewholder);
messageAdapter = new MessagesListAdapter<>("sender", holdersConfig, (imageView, url, payload) -> {
if (url != null) imageView.setImageResource(Integer.parseInt(url));
if (url != null){
Glide.with(imageView.getContext())
.load(url)
.fitCenter()
.placeholder(android.R.color.darker_gray)
.error(R.drawable.ic_user_outline)
.into(imageView);
}else{
Glide.with(imageView.getContext())
.load(R.drawable.ic_user_outline)
.fitCenter()
.placeholder(android.R.color.darker_gray)
.error(R.drawable.ic_user_outline)
.into(imageView);
}
});
binding.messageList.setAdapter(messageAdapter);
// static
messageAdapter.addToStart(new Message(new Author(), "Good morning"), true);
messageAdapter.addToStart(new Message(new Receiver(), "Good morning mate! I am fine here how are you there"), true);
messageAdapter.addToStart(new Message(new Author(), "Good morning"), true);
messageAdapter.addToStart(new Message(new Receiver(), "Good morning mate!"), true);
messageAdapter.addToStart(new Message(new Author(), "Good morning"), true);
messageAdapter.addToStart(new Message(new Receiver(), "Good morning mate!"), true);
messageAdapter.addToStart(new Message(new Author(), "Good morning"), true);
messageAdapter.addToStart(new Message(new Receiver(), "Good morning mate!"), true);
binding.messageList.setAdapter(messageAdapter);
}
private void enableDenButton(boolean enable){
binding.sendBtn.setEnabled(enable);
if (enable){
binding.sendProgress.setVisibility(View.GONE);
binding.sendBtn.setText(SEND);
}else{
binding.sendProgress.setVisibility(View.VISIBLE);
binding.sendBtn.setText(null);
}
}
@Override
public void call(Object... args) {
Log.d(TAG, "call: " + args);
public void onMessageReceived(Message message) {
new Handler(Looper.getMainLooper()).post(() -> {
if (messageAdapter == null) return;
messageAdapter.addToStart(message, true);
});
}
@Override
public void onMessageSentSuccessfully() {
new Handler(Looper.getMainLooper()).post(() -> {
enableDenButton(true);
});
}
@Override
public void onError(Exception e) {
new Handler(Looper.getMainLooper()).post(() -> {
enableDenButton(true);
try {
Toast.makeText(requireContext(), "Couldn't send message", Toast.LENGTH_SHORT).show();
} catch (Exception ex) {
// do nothing
}
});
}
}

View File

@@ -0,0 +1,47 @@
package com.app.simplitend.patient_dashboard.chats;
import android.graphics.Color;
import android.view.View;
import android.widget.TextView;
import com.app.simplitend.R;
import com.app.simplitend.patient_dashboard.chats.mvvm.Message;
import com.bumptech.glide.Glide;
import com.stfalcon.chatkit.messages.MessagesListAdapter;
import de.hdodenhof.circleimageview.CircleImageView;
public class ReceiverViewHolder extends MessagesListAdapter.OutcomingMessageViewHolder<Message> {
protected TextView message_txt;
protected CircleImageView avatar;
public ReceiverViewHolder(View itemView) {
super(itemView);
message_txt = itemView.findViewById(R.id.messageText);
avatar = itemView.findViewById(R.id.messageUserAvatar_receiver);
}
@Override
public void onBind(Message message) {
super.onBind(message);
message_txt.setText(message.getText());
message_txt.setTextColor(Color.BLACK);
try {
try {
int res = Integer.parseInt(message.getUser().getAvatar());
avatar.setImageResource(res);
}catch (Exception e){
if (message.getUser().getAvatar() != null){
Glide.with(avatar.getContext())
.load(message.getUser().getAvatar())
.placeholder(android.R.color.darker_gray)
.error(android.R.color.darker_gray)
.into(avatar);
}
}
}catch (Exception e){
// do nothing
}
}
}

View File

@@ -0,0 +1,45 @@
package com.app.simplitend.patient_dashboard.chats;
import android.view.View;
import android.widget.TextView;
import com.app.simplitend.R;
import com.app.simplitend.patient_dashboard.chats.mvvm.Message;
import com.bumptech.glide.Glide;
import com.stfalcon.chatkit.messages.MessagesListAdapter;
import de.hdodenhof.circleimageview.CircleImageView;
public class SenderViewHolder extends MessagesListAdapter.OutcomingMessageViewHolder<Message> {
protected TextView message_txt;
protected CircleImageView avatar;
public SenderViewHolder(View itemView) {
super(itemView);
message_txt = itemView.findViewById(R.id.messageText);
avatar = itemView.findViewById(R.id.messageUserAvatar_send);
}
@Override
public void onBind(Message message) {
super.onBind(message);
message_txt.setText(message.getText());
try {
try {
int res = Integer.parseInt(message.getUser().getAvatar());
avatar.setImageResource(res);
}catch (Exception e){
if (message.getUser().getAvatar() != null){
Glide.with(avatar.getContext())
.load(message.getUser().getAvatar())
.placeholder(android.R.color.darker_gray)
.error(android.R.color.darker_gray)
.into(avatar);
}
}
}catch (Exception e){
// do nothing
}
}
}

View File

@@ -2,7 +2,11 @@ package com.app.simplitend.patient_dashboard.chats;
import android.util.Log;
import org.json.JSONArray;
import androidx.annotation.NonNull;
import com.app.simplitend.patient_dashboard.chats.mvvm.Author;
import com.app.simplitend.patient_dashboard.chats.mvvm.Message;
import com.app.simplitend.patient_dashboard.chats.mvvm.Receiver;
import io.socket.client.IO;
import io.socket.client.Socket;
@@ -13,9 +17,6 @@ public class SocketHelper {
private static final String TAG = "SOCKET_CHAT_TAG";
private static final String kHost = "http://77.68.102.23:3002/";
private static final String kConnectUser = "connectUser";
private static final String kUserList = "userList";
private static final String kExitUser = "exitUser";
private static SocketHelper instance;
private Socket mSocket;
@@ -73,37 +74,49 @@ public class SocketHelper {
}
}
public void joinChatRoom(String nickname, final Runnable completion) {
mSocket.emit(kConnectUser, nickname);
completion.run();
}
public void leaveChatRoom(String nickname, final Runnable completion) {
mSocket.emit(kExitUser, nickname);
completion.run();
}
public void getMessage(final Callback<Object> callback) {
mSocket.on("newChatMessage", new Emitter.Listener() {
public void getMessage(final Callback<Message> callback,
@NonNull String patientId,
@NonNull String nickName,
String receiver_image,
String author_image) {
mSocket.on(patientId, new Emitter.Listener() {
@Override
public void call(Object... args) {
if (args.length >= 3) {
String nickName = (String) args[0];
String message = (String) args[1];
String date = (String) args[2];
try {
if (args.length >= 3) {
String received_nickName = (String) args[0];
String message_txt = (String) args[1];
String date = (String) args[2];
Log.d(TAG, " Message received " + message);
Message message;
if (nickName.equals(received_nickName)){
// Author message
message = new Message(new Author(received_nickName, author_image), message_txt);
callback.onMessageSentSuccessfully();
}else{
// receiver message
message = new Message(new Receiver(received_nickName, receiver_image), message_txt);
}
callback.onMessageReceived(message);
}
} catch (Exception e) {
callback.onError(e);
}
}
});
Log.d(TAG, "LISTENER FOR PATIENT ID : " + patientId);
}
public void sendMessage(String message, String nickname) {
mSocket.emit("chatMessage", nickname, message);
public void sendMessage(@NonNull String message, @NonNull String nickname, @NonNull String patient_id) {
mSocket.emit("chatMessage", nickname, message, patient_id);
}
public interface Callback<T> {
void onSuccess(T result);
void onMessageReceived(T result);
void onMessageSentSuccessfully();
void onError(Exception e);
}
}

View File

@@ -4,6 +4,14 @@ import com.app.simplitend.R;
import com.stfalcon.chatkit.commons.models.IUser;
public class Author implements IUser {
private final String name, avatar;
public Author(String name, String avatar) {
this.name = name;
this.avatar = avatar;
}
@Override
public String getId() {
return "sender";
@@ -11,11 +19,11 @@ public class Author implements IUser {
@Override
public String getName() {
return null;
return name;
}
@Override
public String getAvatar() {
return String.valueOf(R.drawable.static_3);
return avatar;
}
}

View File

@@ -1,10 +1,16 @@
package com.app.simplitend.patient_dashboard.chats.mvvm;
import com.app.simplitend.R;
import com.stfalcon.chatkit.commons.models.IUser;
public class Receiver implements IUser {
private final String name, avatar;
public Receiver(String name, String avatar) {
this.name = name;
this.avatar = avatar;
}
@Override
public String getId() {
return "receiver";
@@ -12,11 +18,11 @@ public class Receiver implements IUser {
@Override
public String getName() {
return null;
return name;
}
@Override
public String getAvatar() {
return String.valueOf(R.drawable.static_3);
return avatar;
}
}

View File

@@ -40,6 +40,7 @@ import com.app.simplitend.databinding.PatientDashboardFragmentBinding;
import com.app.simplitend.patient_dashboard.DirectionToHomeActivity;
import com.app.simplitend.patient_dashboard.NotificationsActivity;
import com.app.simplitend.patient_dashboard.PatientMainViewModel;
import com.app.simplitend.patient_dashboard.chats.ChatFragment;
import com.app.simplitend.patientprofile.ProfileContracts;
import com.app.simplitend.patientprofile.medreminder.mvvm.ReminderViewModel;
import com.app.simplitend.patientprofile.medreminder.mvvm.models.NearestActivity;
@@ -78,13 +79,13 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
// date suffixes
String[] suffixes =
// 0 1 2 3 4 5 6 7 8 9
{ "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th",
{"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th",
// 10 11 12 13 14 15 16 17 18 19
"th", "th", "th", "th", "th", "th", "th", "th", "th", "th",
// 20 21 22 23 24 25 26 27 28 29
"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th",
"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th",
// 30 31
"th", "st" };
"th", "st"};
// ticker broadcast receiver that is called every one minute passes the system clock
private final BroadcastReceiver timeTickReceiver = new BroadcastReceiver() {
@@ -122,7 +123,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
public void onReceive(Context context, Intent intent) {
String content_type = intent.getStringExtra(CONTENT_TYPE_KEY);
if (Constants.ACTIVITY_TIME.equals(content_type) || Constants.MEDICINE_TIME.equals(content_type)){
if (Constants.ACTIVITY_TIME.equals(content_type) || Constants.MEDICINE_TIME.equals(content_type)) {
loadReminders();
}
}
@@ -136,11 +137,11 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
setDetails();
}), true);
PatientDataCache.getContactList(requireContext(),"Bearer " + AppUtil.getPatientToken(requireContext()),
PatientDataCache.getContactList(requireContext(), "Bearer " + AppUtil.getPatientToken(requireContext()),
(contactList1 -> {
this.contactList = contactList1;
if (contactList != null){
if (contactList != null) {
AppUtil.setWhiteListedContacts(requireContext(), contactList);
}
}), false);
@@ -157,7 +158,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
private void setDetails() {
if (patientData == null) return;
if (patientData.profile_photo != null){
if (patientData.profile_photo != null) {
Glide.with(requireContext())
.load(AppUtil.IMAGE_BASE_URL + patientData.profile_photo)
.diskCacheStrategy(DiskCacheStrategy.DATA)
@@ -169,9 +170,9 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
}
private void initViews() {
if (viewModel.message_title == null){
if (viewModel.message_title == null) {
removeReminder();
}else{
} else {
addReminder();
}
}
@@ -181,7 +182,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
super.onResume();
updateTime();
Activity activity = getActivity();
if (activity != null){
if (activity != null) {
activity.registerReceiver(timeTickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
}
}
@@ -190,28 +191,61 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
public void onPause() {
super.onPause();
Activity activity = getActivity();
if (activity != null){
if (activity != null) {
activity.unregisterReceiver(timeTickReceiver);
}
}
private void clickEvents() {
binding.chats.setOnClickListener(v ->
Navigation.findNavController(v).navigate(R.id.action_CPDashboardFragment_to_chatListFragment)
);
binding.chats.setOnClickListener(v -> {
PatientDataCache.getPatientData(requireContext(), (patientData1 -> {
if (patientData1 != null){
this.patientData = patientData1;
try {
String sender_image;
if (patientData1.profile_photo == null){
sender_image = String.valueOf(R.drawable.senior_img);
}else{
sender_image = AppUtil.IMAGE_BASE_URL + patientData.profile_photo;
}
String receiver_image;
if (patientData.caregiver_profile_photo == null){
receiver_image = String.valueOf(R.drawable.caregiver_img);
}else{
receiver_image = AppUtil.IMAGE_BASE_URL + patientData.caregiver_profile_photo;
}
getParentFragmentManager().beginTransaction()
.replace(R.id.fragmentContainerView, new ChatFragment(
patientData1.patientId + "",
patientData1.first_name,
patientData.caregiver_name,
sender_image,
receiver_image
), "patient_chat")
.addToBackStack("patient_chat")
.commitAllowingStateLoss();
} catch (Exception e) {
// do nothing
}
}
}), true);
});
binding.sosBtn.setOnClickListener(v -> {
PatientDataCache.getContactList(requireContext(),
"Bearer " + AppUtil.getPatientToken(requireContext()), (contactList1 -> {
this.contactList = contactList1;
viewModel.notifyRequestedSOS(AppUtil.getPatientUid(requireContext())+"",
viewModel.notifyRequestedSOS(AppUtil.getPatientUid(requireContext()) + "",
AppUtil.getPatientToken(requireContext()));
String phone_number = "911";
for (ContactData contactData: contactList1){
if (contactData.is_sos.equals("1")){
for (ContactData contactData : contactList1) {
if (contactData.is_sos.equals("1")) {
phone_number = contactData.phone_number;
}
}
@@ -228,12 +262,12 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
"Bearer " + AppUtil.getPatientToken(requireContext()), (contactList1 -> {
this.contactList = contactList1;
if (contactList != null){
if (contactList != null) {
Intent intent = new Intent(requireActivity(), CallsActivity.class);
intent.putExtra(CALL_CONTACT_LIST_KEY, contactList);
startActivity(intent);
}else{
} else {
Toast.makeText(requireContext(), "Couldn't load contact list", Toast.LENGTH_SHORT).show();
}
}), true);
@@ -259,7 +293,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
intent.putExtra(LAT_KEY, lat);
intent.putExtra(LNG_KEY, lng);
startActivity(intent);
}catch (Exception e){
} catch (Exception e) {
Toast.makeText(requireContext(), "Couldn't load your home location", Toast.LENGTH_SHORT).show();
}
});
@@ -268,7 +302,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
PatientDataCache.getPatientData(requireActivity(), (patientData1 -> {
this.patientData = patientData1;
if (patientData == null){
if (patientData == null) {
Toast.makeText(requireContext(), "Couldn't load notifications", Toast.LENGTH_SHORT).show();
return;
}
@@ -283,9 +317,9 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
}
private void loadReminders(){
private void loadReminders() {
reminderViewModel.getRemindersList(AppUtil.getPatientUid(requireContext()),
Calendar.getInstance().get(Calendar.DAY_OF_WEEK)-1,
Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1,
"Bearer " + AppUtil.getPatientToken(requireContext()),
this);
}
@@ -306,8 +340,8 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
}
public String getDayOfWeek(int position){
switch (position){
public String getDayOfWeek(int position) {
switch (position) {
case 1:
return "Sunday";
case 2:
@@ -341,8 +375,8 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
viewModel.message_title = null;
}
private void addReminder(){
if (viewModel.message_title == null || viewModel.message_title.isEmpty()){
private void addReminder() {
if (viewModel.message_title == null || viewModel.message_title.isEmpty()) {
// removeReminder();
return;
}
@@ -351,7 +385,8 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
ViewGroup.LayoutParams layoutParams = binding.bgImg.getLayoutParams();
layoutParams.height = (int) getResources().getDimension(com.intuit.sdp.R.dimen._200sdp);;
layoutParams.height = (int) getResources().getDimension(com.intuit.sdp.R.dimen._200sdp);
;
binding.bgImg.setLayoutParams(layoutParams);
@@ -379,7 +414,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
try {
if (nearestReminder == null) throw new Exception();
if (nearestReminder.upcoming_time == null){
if (nearestReminder.upcoming_time == null) {
viewModel.nearest_rem_time = Long.MAX_VALUE;
throw new Exception();
}
@@ -396,20 +431,20 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
viewModel.nearest_rem_time = time_diff;
if (time_diff < 0){
if (time_diff < 0) {
// the nearest time has already passed the current time
// i.e. all the reminders has been done for current day
throw new Exception();
}else{
time_diff = time_diff/1000; // milliseconds to seconds
} else {
time_diff = time_diff / 1000; // milliseconds to seconds
long s = time_diff % 60;
long m = (time_diff / 60) % 60;
long h = (time_diff / (60 * 60)) % 24;
StringBuilder reminder_txt = new StringBuilder("You should take yours medicines");
if (time_diff > 3600){
if (time_diff > 3600) {
// time greater than 60 mins
// thus, showing direct time
SimpleDateFormat format_sdf = new SimpleDateFormat("hh:mm a", Locale.getDefault());
@@ -421,7 +456,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
reminder_txt.append(" at ").append(nearestReminder.upcoming_time);
}
}else{
} else {
// show in minutes
reminder_txt.append(" in ").append(m).append(" min");
@@ -433,7 +468,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
viewModel.message_sub_title_2 = nearestReminder.med_quantity + " " + nearestReminder.med_type;
}
}catch (Exception e){
} catch (Exception e) {
// do nothing
viewModel.message_sub_title_2 = viewModel.message_sub_title_1 = viewModel.message_title = null;
}
@@ -442,7 +477,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
try {
routineViewModel.getRoutines(AppUtil.getPatientUid(requireContext()),
"Bearer " + AppUtil.getPatientToken(requireContext()),
Calendar.getInstance().get(Calendar.DAY_OF_WEEK)-1,
Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1,
this);
} catch (Exception e) {
// do nothing user has left the fragment
@@ -456,9 +491,9 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
@Override
public void onRoutinesFetchedFailed(Throwable t, String message) {
if (viewModel.message_title != null){
if (viewModel.message_title != null) {
addReminder();
}else{
} else {
removeReminder();
}
}
@@ -469,10 +504,10 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
// next routine setting
try {
if (nearestActivity.upcoming_time == null){
if (viewModel.message_title != null){
if (nearestActivity.upcoming_time == null) {
if (viewModel.message_title != null) {
addReminder();
}else{
} else {
removeReminder();
}
return;
@@ -488,24 +523,24 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
long time_diff = upcoming_date.getTime() - cur_date.getTime() + 1000; // +1000 for extra one min to reach that time
if (time_diff < 0){
if (time_diff < 0) {
// the nearest time has already passed the current time
// i.e. all the reminders has been done for current day
if (viewModel.message_title != null){
if (viewModel.message_title != null) {
addReminder();
}else{
} else {
removeReminder();
}
}else if (time_diff < viewModel.nearest_rem_time){
time_diff = time_diff/1000; // milliseconds to seconds
} else if (time_diff < viewModel.nearest_rem_time) {
time_diff = time_diff / 1000; // milliseconds to seconds
long s = time_diff % 60;
long m = (time_diff / 60) % 60;
long h = (time_diff / (60 * 60)) % 24;
StringBuilder up_activity_txt = new StringBuilder("Get ready for your activity starting");
if (time_diff > 3600){
if (time_diff > 3600) {
// time greater than 60 mins
// thus, showing direct time
SimpleDateFormat format_sdf = new SimpleDateFormat("hh:mm a", Locale.getDefault());
@@ -517,7 +552,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
up_activity_txt.append(" at ").append(nearestActivity.upcoming_time);
}
}else{
} else {
// show in minutes
up_activity_txt.append(" in ").append(m).append(" min");
@@ -529,15 +564,15 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
viewModel.message_sub_title_2 = null;
}
}catch (Exception e){
if (viewModel.message_title != null){
} catch (Exception e) {
if (viewModel.message_title != null) {
addReminder();
}else{
} else {
removeReminder();
}
}
if (viewModel.message_title != null){
if (viewModel.message_title != null) {
addReminder();
}
}

View File

@@ -30,6 +30,8 @@ public class PatientData {
public String one_signal_player_id;
public String caregiver_name, caregiver_profile_photo;
// progress flags
public int isCareGiverLink
, isPatientReminderData

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#EEF5FC"
/>
<corners android:radius="5dp"/>
</shape>

View File

@@ -43,23 +43,24 @@
android:layout_height="match_parent"
android:layout_above="@id/message_et"
app:incomingDefaultBubbleColor="#EEF5FC"
app:incomingTextColor="@color/black"
app:outcomingDefaultBubbleColor="#043E61"
app:outcomingTextColor="@color/white_bg"
app:outcomingTimeTextColor="@color/white"
app:outcomingBubblePaddingBottom="10dp"
app:outcomingBubblePaddingLeft="15dp"
app:outcomingBubblePaddingRight="15dp"
app:outcomingBubblePaddingTop="10dp"
/>
<EditText
android:id="@+id/message_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginStart="15dp"
android:layout_marginVertical="10dp"
android:layout_toStartOf="@id/send_btn"
android:layout_toStartOf="@id/btn_view"
android:autofillHints="@null"
android:background="@drawable/edit_text_bg_2"
@@ -83,26 +84,49 @@
android:textColor="@color/black"
android:textColorHint="@android:color/darker_gray" />
<com.google.android.material.button.MaterialButton
android:id="@+id/send_btn"
<RelativeLayout
android:id="@+id/btn_view"
android:layout_width="wrap_content"
android:layout_height="65dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerVertical="true"
>
android:layout_marginVertical="5dp"
android:layout_marginEnd="15dp"
<com.google.android.material.button.MaterialButton
android:id="@+id/send_btn"
android:layout_width="wrap_content"
android:layout_height="65dp"
android:fontFamily="@font/nunito_regular"
android:text="@string/send"
android:textColor="@color/white_bg"
android:enabled="false"
app:backgroundTint="@color/color_primary"
android:layout_marginVertical="5dp"
android:layout_marginEnd="15dp"
app:cornerRadius="5dp"
android:layout_centerInParent="true"
/>
android:fontFamily="@font/nunito_regular"
android:textColor="@color/white_bg"
app:backgroundTint="@color/color_primary"
app:cornerRadius="5dp"
/>
<ProgressBar
android:id="@+id/send_progress"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_centerInParent="true"
android:translationZ="15dp"
android:indeterminate="true"
android:indeterminateTint="@color/white"
/>
</RelativeLayout>
</RelativeLayout>

View File

@@ -0,0 +1,43 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginBottom="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/messageUserAvatar_receiver"
android:layout_marginEnd="40dp"
android:minWidth="80dp"
android:background="@drawable/receiver_msg_bg"
android:orientation="vertical">
<TextView
android:id="@+id/messageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginVertical="10dp"
android:layout_marginHorizontal="15dp"
/>
<TextView
android:id="@+id/messageTime"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/messageUserAvatar_receiver"
android:layout_width="40dp"
android:layout_height="40dp"
android:visibility="visible"
tools:src="@drawable/static_3"
android:layout_alignParentBottom="true"
android:layout_marginEnd="8dp" />
</RelativeLayout>

View File

@@ -1,10 +1,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginBottom="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="8dp">
android:layout_marginRight="16dp">
<LinearLayout
android:id="@+id/bubble"
@@ -12,6 +12,7 @@
android:layout_height="wrap_content"
android:layout_toStartOf="@+id/messageUserAvatar_send"
android:layout_marginStart="40dp"
android:minWidth="80dp"
android:orientation="vertical">
<TextView
@@ -19,25 +20,24 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/messageTime"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_marginStart="16dp" />
</LinearLayout>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/messageUserAvatar_send"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/static_3"
android:visibility="visible"
tools:src="@drawable/static_3"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="8dp" />
<TextView
android:id="@+id/messageTime"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/bubble"
android:textColor="@color/black"
android:layout_below="@+id/bubble"
android:layout_marginStart="16dp" />
</RelativeLayout>

View File

@@ -14,6 +14,9 @@
<action
android:id="@+id/action_CPDashboardFragment_to_patientProfileInfoFragment"
app:destination="@id/patientProfileInfoFragment" />
<action
android:id="@+id/action_CPDashboardFragment_to_chatFragment"
app:destination="@id/chatFragment" />
</fragment>
<fragment
android:id="@+id/chatListFragment"