This commit is contained in:
2023-10-03 20:54:09 +05:30
parent 39e1350a4a
commit 78e323ebb1
13 changed files with 400 additions and 32 deletions

View File

@@ -4,6 +4,8 @@ import static com.app.simplitend.apputils.NotificationService.CONTENT_TYPE_KEY;
import static com.app.simplitend.articles.ArticleShowerActivity.ARTICLE_TITLE;
import static com.app.simplitend.articles.ArticleShowerActivity.ARTICLE_URL_KEY;
import static com.app.simplitend.cg_geofencing.CgGeoFencingActivity.GEOFENCE_DETAILS_KEY;
import static com.app.simplitend.patient_dashboard.NotificationsActivity.USER_ID;
import static com.app.simplitend.patient_dashboard.NotificationsActivity.USER_TOKEN;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
@@ -22,13 +24,6 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import com.bumptech.glide.Glide;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.app.simplitend.R;
import com.app.simplitend.apputils.AppUtil;
import com.app.simplitend.apputils.CaregiverDataCache;
@@ -42,6 +37,7 @@ import com.app.simplitend.caregiverdashboard.mvvm.CgHomeContracts;
import com.app.simplitend.caregiverdashboard.mvvm.models.GeoFenceDetails;
import com.app.simplitend.cg_geofencing.CgGeoFencingActivity;
import com.app.simplitend.databinding.CaregiverDashFragmentBinding;
import com.app.simplitend.patient_dashboard.NotificationsActivity;
import com.app.simplitend.patientprofile.ProfileContracts;
import com.app.simplitend.patientprofile.medreminder.mvvm.ReminderViewModel;
import com.app.simplitend.patientprofile.medreminder.mvvm.models.NearestActivity;
@@ -51,6 +47,13 @@ import com.app.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails;
import com.app.simplitend.patientprofile.setuproutine.mvvm.RoutineViewModel;
import com.app.simplitend.welcome.welcomecg.mvvm.CareGiverData;
import com.app.simplitend.welcome.welcomepatient.mvvm.models.PatientData;
import com.bumptech.glide.Glide;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -226,6 +229,17 @@ public class CgDashBoardFragment extends Fragment implements
loadReminders();
loadActivities();
});
binding.notifications.setOnClickListener(view -> {
CaregiverDataCache.getCaregiverData(requireActivity(), (careGiverData1 -> {
this.careGiverData = careGiverData1;
Intent intent = new Intent(requireActivity(), NotificationsActivity.class);
intent.putExtra(USER_ID, careGiverData.caregiver_xid + "");
intent.putExtra(USER_TOKEN, AppUtil.getCgToken(requireContext()));
startActivity(intent);
}), true);
});
}
public void setArticleDetails(ArticleResult articleResult){

View File

@@ -0,0 +1,167 @@
package com.app.simplitend.patient_dashboard;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import com.app.simplitend.R;
import com.app.simplitend.apputils.RetrofitHelper;
import com.app.simplitend.databinding.ActivityNotificationsBinding;
import com.app.simplitend.databinding.NotificationViewholderBinding;
import com.app.simplitend.welcome.welcomepatient.mvvm.models.CallResponse;
import java.util.ArrayList;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Query;
public class NotificationsActivity extends AppCompatActivity implements Callback<CallResponse<ArrayList<NotificationsActivity.Notification>>> {
private ActivityNotificationsBinding binding;
protected NotificationsApiService apiService;
protected String user_id;
public static final String USER_ID = "user_id";
protected String token;
public static final String USER_TOKEN = "user_token";
private NotificationsAdapter notificationsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityNotificationsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
apiService = RetrofitHelper.getRetrofit().create(NotificationsApiService.class);
user_id = getIntent().getStringExtra(USER_ID);
token = getIntent().getStringExtra(USER_TOKEN);
binding.notificationRv.setLayoutManager(new LinearLayoutManager(this));
notificationsAdapter = new NotificationsAdapter();
binding.notificationRv.setAdapter(notificationsAdapter);
if (user_id != null){
binding.progress.setVisibility(View.VISIBLE);
apiService.getNotifications(user_id, user_id,
"Bearer " + token).enqueue(this);
}else{
binding.errorMsg.setText(R.string.couldn_t_load_notifications);
binding.errorView.setVisibility(View.VISIBLE);
}
}
@Override
public void onResponse(Call<CallResponse<ArrayList<Notification>>> call, Response<CallResponse<ArrayList<Notification>>> response) {
binding.progress.setVisibility(View.GONE);
if (response.body() != null){
if (response.code() != 200){
binding.errorMsg.setText(response.body().message);
binding.errorView.setVisibility(View.VISIBLE);
return;
}
if (response.body().result == null || response.body().result.isEmpty()){
binding.errorMsg.setText(R.string.no_notifications);
binding.errorView.setVisibility(View.VISIBLE);
return;
}
binding.errorView.setVisibility(View.GONE);
binding.notificationRv.setVisibility(View.VISIBLE);
notificationsAdapter.submitList(response.body().result);
}else{
binding.errorMsg.setText(R.string.couldn_t_load_notifications);
binding.errorView.setVisibility(View.VISIBLE);
}
}
@Override
public void onFailure(Call<CallResponse<ArrayList<Notification>>> call, Throwable t) {
binding.progress.setVisibility(View.GONE);
binding.errorMsg.setText(R.string.couldn_t_load_notifications);
binding.errorView.setVisibility(View.VISIBLE);
}
// util classes and interfaces
public static class NotificationsAdapter extends ListAdapter<Notification, NotificationsAdapter.NotificationViewHolder> {
private static final DiffUtil.ItemCallback<Notification> DIFF_CALLBACK = new DiffUtil.ItemCallback<Notification>() {
@Override
public boolean areItemsTheSame(@NonNull Notification oldItem, @NonNull Notification newItem) {
return oldItem.id == newItem.id;
}
@Override
public boolean areContentsTheSame(@NonNull Notification oldItem, @NonNull Notification newItem) {
return oldItem.id == newItem.id;
}
};
public NotificationsAdapter(){
super(DIFF_CALLBACK);
}
@NonNull
@Override
public NotificationViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
NotificationViewholderBinding n_binding = NotificationViewholderBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
return new NotificationViewHolder(n_binding);
}
@Override
public void onBindViewHolder(@NonNull NotificationViewHolder holder, int position) {
holder.setData(getItem(position));
}
public static class NotificationViewHolder extends RecyclerView.ViewHolder{
public NotificationViewholderBinding binding;
public NotificationViewHolder(@NonNull NotificationViewholderBinding binding){
super(binding.getRoot());
}
public void setData(Notification notification){
if (notification == null) return;
binding.description.setText(notification.description);
}
}
}
public static class Notification{
public int id;
public String patient_xid;
public String caregiver_xid;
public String type;
public String date_added;
public String description;
public String created_at;
public String updated_at;
}
public interface NotificationsApiService{
@GET("api/get-notifications")
Call<CallResponse<ArrayList<Notification>>> getNotifications(@Query("caregiverId") String c_id,
@Query("patientId") String p_id,
@Header("Authorization") String token);
}
}

View File

@@ -51,6 +51,8 @@ public class PatSettingsActivity extends AppCompatActivity implements CgHomeCont
private void clickEvents() {
binding.backBtn.setOnClickListener(v -> onBackPressed());
binding.deActivate.setOnClickListener(v -> {
Intent intent = new Intent(this, DeActivateAccountActivity.class);
intent.putExtra(IS_PATIENT_KEY, true);

View File

@@ -22,8 +22,6 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.Navigation;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.app.simplitend.R;
import com.app.simplitend.appblocking.FUAActivity;
import com.app.simplitend.apputils.AppUtil;
@@ -42,6 +40,8 @@ import com.app.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails;
import com.app.simplitend.patientprofile.setuproutine.mvvm.RoutineViewModel;
import com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.models.ContactData;
import com.app.simplitend.welcome.welcomepatient.mvvm.models.PatientData;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

View File

@@ -415,17 +415,19 @@ public class LocationFragment extends Fragment implements OnMapReadyCallback,
}
if ((fineLocationGranted != null && fineLocationGranted) || (coarseLocationGranted != null && coarseLocationGranted)) {
// one of the location access granted.
Toast.makeText(requireContext(), "Fetching your current location", Toast.LENGTH_SHORT).show();
if (googleMap != null) {
if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
if (currentLocation == null) {
// one of the location access granted.
Toast.makeText(requireContext(), "Fetching your current location", Toast.LENGTH_SHORT).show();
if (googleMap != null) {
if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
}
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
}
requestLocations();
requestLocations();
}
}
}
).launch(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION});
@@ -433,18 +435,18 @@ public class LocationFragment extends Fragment implements OnMapReadyCallback,
@Override
public void onLocationChanged(@NonNull Location location) {
Log.d(TAG, "onLocationChanged: " + location);
this.currentLocation = new LatLng(location.getLatitude(), location.getLongitude());
fusedLocationProviderClient.removeLocationUpdates(this);
Log.d(TAG, "onLocationChanged: location updates removed");
if (currentLocation == null) {
this.currentLocation = new LatLng(location.getLatitude(), location.getLongitude());
fusedLocationProviderClient.removeLocationUpdates(this);
Log.d(TAG, "onLocationChanged: location updates removed");
CameraPosition default_map_pos = new CameraPosition.Builder()
.target(currentLocation)
.zoom(15)
.build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(default_map_pos));
CameraPosition default_map_pos = new CameraPosition.Builder()
.target(currentLocation)
.zoom(15)
.build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(default_map_pos));
}
}
@Override