.
This commit is contained in:
12
.idea/deploymentTargetDropDown.xml
generated
12
.idea/deploymentTargetDropDown.xml
generated
@@ -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
8
.idea/misc.xml
generated
@@ -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>
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
9
app/src/main/res/drawable/receiver_msg_bg.xml
Normal file
9
app/src/main/res/drawable/receiver_msg_bg.xml
Normal 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>
|
||||
@@ -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>
|
||||
|
||||
|
||||
43
app/src/main/res/layout/receiver_msg_viewholder.xml
Normal file
43
app/src/main/res/layout/receiver_msg_viewholder.xml
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user