diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 84c83ed..8844a9b 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,18 +1,29 @@ + + + + + + + + + + + - + - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14af527..563fb3b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ - + + + @@ -42,7 +44,8 @@ + android:screenOrientation="portrait"> + + + + + + + + + + + + + + + @@ -130,6 +147,21 @@ + + + + + + + + + + + + + + + @@ -171,6 +203,15 @@ android:resource="@xml/accessibility_service_config" /> + + + + + + contactList){ + Set 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 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, diff --git a/app/src/main/java/com/app/simplitend/callwhitelisting/CallService.java b/app/src/main/java/com/app/simplitend/callwhitelisting/CallService.java new file mode 100644 index 0000000..9b5b43e --- /dev/null +++ b/app/src/main/java/com/app/simplitend/callwhitelisting/CallService.java @@ -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 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()); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java b/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java index f31517d..1f5babc 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/DashBoardActivity.java @@ -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 diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java b/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java index dfc0980..7b1c710 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java @@ -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) { + + } } diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/CallsActivity.java b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/CallsActivity.java index a0932c2..38a0ae5 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/CallsActivity.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/CallsActivity.java @@ -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() { diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java index 2acb298..501d181 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java @@ -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(); diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java index 0b2db15..3888f02 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/AddContactFragment.java @@ -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));