This commit is contained in:
2023-10-04 20:35:06 +05:30
parent 49d425d444
commit 1a7388dd96
9 changed files with 207 additions and 15 deletions

View File

@@ -4,6 +4,7 @@ import static com.app.simplitend.apputils.Constants.ACTIVITY_EXTRA_KEY;
import static com.app.simplitend.apputils.Constants.REMINDER_EXTRA_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.callwhitelisting.CallService.CONTACT_WHITE_LISTING_TAG;
import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_ID;
import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_TAG;
@@ -26,6 +27,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.RawRes;
import com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.models.ContactData;
import com.bumptech.glide.Glide;
import com.google.android.gms.location.GeofencingClient;
import com.google.android.gms.location.LocationServices;
@@ -49,8 +51,11 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
@@ -78,6 +83,8 @@ public abstract class AppUtil {
public static final String PATIENT_UID = "patient_uid";
public static final String IS_PATIENT_LOGGED_IN = "patient_logged_in";
public static final String WHITE_LISTED_CONTACTS = "white_listed_contacts";
// util functions
// closes keyboard
@@ -562,6 +569,33 @@ public abstract class AppUtil {
return sp.getString(PATIENT_GEOFENCE_RADIUS_UNIT, null);
}
public static void setWhiteListedContacts(Context context, List<ContactData> contactList){
Set<String> contactSet = new HashSet<>();
for (ContactData contactData: contactList){
contactSet.add(contactData.phone_number);
if (contactData.extra_phone_numbers != null){
String[] extra_phone_numbers = contactData.extra_phone_numbers.split(",");
contactSet.addAll(Arrays.asList(extra_phone_numbers));
}
}
SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putStringSet(WHITE_LISTED_CONTACTS, contactSet);
editor.apply();
Log.d(CONTACT_WHITE_LISTING_TAG, "CONTACT_LIST_UPDATED : " + contactSet);
}
public static Set<String> getWhiteListedContacts(Context context){
SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
return sp.getStringSet(WHITE_LISTED_CONTACTS, null);
}
public static boolean shouldAddPatientGeofence(@NonNull Context context,
@NonNull String remote_radius,
@NonNull String remote_radius_unit,

View File

@@ -0,0 +1,62 @@
package com.app.simplitend.callwhitelisting;
import android.os.Build;
import android.telecom.Call;
import android.telecom.CallScreeningService;
import android.util.Log;
import com.app.simplitend.apputils.AppUtil;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import java.util.Set;
public class CallService extends CallScreeningService {
public static final String CONTACT_WHITE_LISTING_TAG = "CONTACT_WHITELISTING";
private static void endCall(CallResponse.Builder builder) {
builder.setDisallowCall(true)
.setRejectCall(true)
.setSkipNotification(true);
}
@Override
public void onScreenCall(Call.Details callDetails) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
callDetails.getCallDirection() != Call.Details.DIRECTION_INCOMING) {
return;
}
CallResponse.Builder builder = new CallResponse.Builder();
try {
String phoneNumber = callDetails.getHandle().getSchemeSpecificPart();
Log.d(CONTACT_WHITE_LISTING_TAG, "CALL FROM -> " + phoneNumber);
try {
Phonenumber.PhoneNumber parsed_phone = PhoneNumberUtil.getInstance().parse(phoneNumber, "US");
phoneNumber = "+" + parsed_phone.getCountryCode() + parsed_phone.getNationalNumber();
} catch (Exception e) {
// do nothing
}
Log.d(CONTACT_WHITE_LISTING_TAG, "AFTER FORMATTING PHONE NUMBER -> " + phoneNumber);
Set<String> white_contacts = AppUtil.getWhiteListedContacts(this);
Log.d(CONTACT_WHITE_LISTING_TAG, "WHITE LISTED CONTACTS -> " + white_contacts);
if (white_contacts != null && white_contacts.contains(phoneNumber)){
endCall(builder);
Log.d(CONTACT_WHITE_LISTING_TAG, "CALL ENDED");
}
} catch (Throwable t) {
Log.w(CONTACT_WHITE_LISTING_TAG, t);
} finally {
respondToCall(callDetails, builder.build());
}
}
}

View File

@@ -2,10 +2,15 @@ package com.app.simplitend.patient_dashboard;
import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_TAG;
import android.Manifest;
import android.app.role.RoleManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telecom.TelecomManager;
import android.util.Log;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
@@ -28,13 +33,29 @@ public class DashBoardActivity extends AppCompatActivity implements CgHomeContra
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dash_board_cp);
// committtttttt
viewModel = new ViewModelProvider(this).get(PatientMainViewModel.class);
viewModel.getGeoFenceDetails(AppUtil.getPatientUid(this) + "",
"", "Bearer " + AppUtil.getPatientToken(this),
this);
registerForActivityResult(new ActivityResultContracts.RequestPermission(),
result -> {
// reigstering geofencing
viewModel.getGeoFenceDetails(AppUtil.getPatientUid(this) + "",
"", "Bearer " + AppUtil.getPatientToken(this),
this);
if (result){
// permission granted
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
RoleManager roleManager = getSystemService(RoleManager.class);
Intent i = roleManager.createRequestRoleIntent(RoleManager.ROLE_CALL_SCREENING);
startActivityForResult(i, 1214, null);
}else{
Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
startActivity(intent);
}
}
}).launch(Manifest.permission.READ_CONTACTS);
}
private void validateAndAddGeofence(GeoFenceDetails geoFenceDetails) {
@@ -51,6 +72,8 @@ public class DashBoardActivity extends AppCompatActivity implements CgHomeContra
}
}), false);
}
}
@Override
@@ -62,6 +85,7 @@ public class DashBoardActivity extends AppCompatActivity implements CgHomeContra
@Override
public void onGeofenceDetailsFetchFailed(Throwable throwable, String message) {
Log.d(GEOFENCE_TAG, "onGeofenceDetailsFetchFailed: " + message);
}
@Override

View File

@@ -7,6 +7,7 @@ import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_TAG;
import android.Manifest;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Handler;
@@ -20,11 +21,6 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.ViewModel;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingClient;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.model.LatLng;
import com.app.simplitend.apputils.AppUtil;
import com.app.simplitend.apputils.RetrofitHelper;
import com.app.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel;
@@ -39,6 +35,11 @@ import com.app.simplitend.patientprofile.medreminder.mvvm.models.ReminderResult;
import com.app.simplitend.patientprofile.setuproutine.mvvm.RoutineDetails;
import com.app.simplitend.welcome.welcomepatient.mvvm.models.CallResponse;
import com.app.simplitend.welcome.welcomepatient.mvvm.models.PatientData;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingClient;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.model.LatLng;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -401,4 +402,8 @@ public class PatientMainViewModel extends ViewModel {
return true;
}
}
public void contactWhiteList(Context context) {
}
}

View File

@@ -1,16 +1,22 @@
package com.app.simplitend.patient_dashboard.fragments;
import android.Manifest;
import android.app.role.RoleManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telecom.TelecomManager;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TableLayout;
import android.widget.Toast;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.app.simplitend.R;
import com.app.simplitend.apputils.AppUtil;
import com.app.simplitend.databinding.ActivityCallsBinding;
@@ -18,6 +24,7 @@ import com.app.simplitend.databinding.CallListDialogBinding;
import com.app.simplitend.databinding.CreateContactViewHolderBinding;
import com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.AddContactAdapter;
import com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.models.ContactData;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import java.util.ArrayList;
@@ -43,6 +50,7 @@ public class CallsActivity extends AppCompatActivity implements AddContactAdapte
initViews();
clickEvents();
}
private void clickEvents() {

View File

@@ -9,11 +9,13 @@ import static com.app.simplitend.patient_dashboard.NotificationsActivity.USER_TO
import static com.app.simplitend.patient_dashboard.fragments.CallsActivity.CALL_CONTACT_LIST_KEY;
import android.app.Activity;
import android.app.role.RoleManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telecom.TelecomManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -135,6 +137,10 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
PatientDataCache.getContactList(requireContext(),"Bearer " + AppUtil.getPatientToken(requireContext()),
(contactList1 -> {
this.contactList = contactList1;
if (contactList != null){
AppUtil.setWhiteListedContacts(requireContext(), contactList);
}
}), false);
return binding.getRoot();

View File

@@ -129,6 +129,7 @@ public class AddContactFragment extends Fragment implements WelcomeContracts.Con
}
PatientDataCache.setContactList(new ArrayList<>(contactList));
AppUtil.setWhiteListedContacts(requireContext(), contactList);
for (int i = contactList.size(); i<10; i++){
contactList.add(new ContactData(-1));