.
This commit is contained in:
15
.idea/deploymentTargetDropDown.xml
generated
15
.idea/deploymentTargetDropDown.xml
generated
@@ -1,18 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="deploymentTargetDropDown">
|
||||
<runningDeviceTargetSelectedWithDropDown>
|
||||
<Target>
|
||||
<type value="RUNNING_DEVICE_TARGET" />
|
||||
<deviceKey>
|
||||
<Key>
|
||||
<type value="VIRTUAL_DEVICE_PATH" />
|
||||
<value value="C:\Users\adity\.android\avd\Pixel_6_Pro_API_34.avd" />
|
||||
</Key>
|
||||
</deviceKey>
|
||||
</Target>
|
||||
</runningDeviceTargetSelectedWithDropDown>
|
||||
<targetSelectedWithDropDown>
|
||||
<Target>
|
||||
<type value="QUICK_BOOT_TARGET" />
|
||||
<deviceKey>
|
||||
<Key>
|
||||
<type value="VIRTUAL_DEVICE_PATH" />
|
||||
<value value="C:\Users\adity\.android\avd\Samsung_Z3_flip_API_34.avd" />
|
||||
<value value="C:\Users\adity\.android\avd\Pixel_6_Pro_API_34.avd" />
|
||||
</Key>
|
||||
</deviceKey>
|
||||
</Target>
|
||||
</targetSelectedWithDropDown>
|
||||
<timeTargetWasSelectedWithDropDown value="2023-09-29T07:38:19.397126700Z" />
|
||||
<timeTargetWasSelectedWithDropDown value="2023-10-04T14:40:58.987676300Z" />
|
||||
<runningDeviceTargetsSelectedWithDialog>
|
||||
<Target>
|
||||
<type value="RUNNING_DEVICE_TARGET" />
|
||||
|
||||
@@ -7,7 +7,9 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- permissions for app blocking -->
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
|
||||
<!-- permissions for app blocking -->
|
||||
<uses-permission
|
||||
android:name="android.permission.PACKAGE_USAGE_STATS"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
@@ -42,7 +44,8 @@
|
||||
<activity
|
||||
android:name=".patient_dashboard.fragments.CallsActivity"
|
||||
android:exported="false"
|
||||
android:screenOrientation="portrait" />
|
||||
android:screenOrientation="portrait">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".patient_dashboard.DirectionToHomeActivity"
|
||||
android:exported="false"
|
||||
@@ -116,6 +119,20 @@
|
||||
android:name=".patient_dashboard.DashBoardActivity"
|
||||
android:exported="true"
|
||||
android:screenOrientation="portrait">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<action android:name="android.intent.action.DIAL" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data android:scheme="tel" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.DIAL" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="" />
|
||||
@@ -130,6 +147,21 @@
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<action android:name="android.intent.action.DIAL" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data android:scheme="tel" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.DIAL" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="" />
|
||||
@@ -171,6 +203,15 @@
|
||||
android:resource="@xml/accessibility_service_config" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".callwhitelisting.CallService"
|
||||
android:exported="true"
|
||||
android:permission="android.permission.BIND_SCREENING_SERVICE">
|
||||
<intent-filter>
|
||||
<action android:name="android.telecom.CallScreeningService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<receiver android:name=".patientgeofencing.GeoFenceBroadcastReceiver" />
|
||||
|
||||
<provider
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user