support features

This commit is contained in:
14Sandee
2023-12-21 20:51:26 +05:30
parent 1e85864467
commit 98557ea238
10 changed files with 130 additions and 37 deletions

View File

@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<targetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="RZCW41EJRPN" />
<type value="VIRTUAL_DEVICE_PATH" />
<value value="$USER_HOME$/.android/avd/Pixel_7_Pro_API_33.avd" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-12-20T13:31:33.742284Z" />
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-12-21T15:11:48.465744Z" />
<targetsSelectedWithDialog>
<Target>
<type value="QUICK_BOOT_TARGET" />

View File

@@ -1,6 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AndroidLintWebViewLayout" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,android.provider.ContactsContract.Contacts,openContactPhotoInputStream" />
</inspection_tool>

View File

@@ -1,5 +1,6 @@
package com.app.simplitend.apputils;
import static android.content.Context.ACTIVITY_SERVICE;
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;
@@ -8,6 +9,7 @@ import static com.app.simplitend.patientgeofencing.GeoFenceHelper.GEOFENCE_TAG;
import android.Manifest;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -385,6 +387,8 @@ public abstract class AppUtil {
public static final String NO_OF_NOTIFICATIONS = "no_of_notifications";
public static final String NO_OF_CHAT_NOTIFICATIONS = "no_of_chat_notifications";
public static final String IS_CALL_BLOCKING_ENABLED = "is_call_blocking_enabled";
public static void savePatientData(String token, int patient_uid, Context context, boolean isLoggedIn) {
SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
@@ -431,7 +435,7 @@ public abstract class AppUtil {
setShouldShowFuaDialog(context, true);
// removing contact listing
// removing contact white listing
setWhiteListedContacts(context, null);
// geofence details clear
@@ -442,15 +446,41 @@ public abstract class AppUtil {
removeGeofence(context);
// clearing location updates
Intent intent = new Intent(context, LocationService.class);
intent.setAction(LocationService.ACTION_STOP_LOCATION_UPDATES);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
}else {
context.startService(intent);
if (isLocationServiceRunning(context)) {
Intent intent = new Intent(context, LocationService.class);
intent.setAction(LocationService.ACTION_STOP_LOCATION_UPDATES);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
}else {
context.startService(intent);
}
}
}
public static boolean isLocationServiceRunning(Context activity){
ActivityManager activityManager = (ActivityManager) activity.getSystemService(ACTIVITY_SERVICE);
for(ActivityManager.RunningServiceInfo service: activityManager.getRunningServices(Integer.MAX_VALUE)) {
if(LocationService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
public static void setIsCallBlockingEnabled(Context context, boolean isCallBlockingEnabled){
SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(IS_CALL_BLOCKING_ENABLED, isCallBlockingEnabled);
editor.apply();
}
public static boolean isCallBlockingEnabled(Context context){
SharedPreferences sp = context.getSharedPreferences(PATIENT_DETAILS, Context.MODE_PRIVATE);
return sp.getBoolean(IS_CALL_BLOCKING_ENABLED, true);
}
public static void removeGeofence(Context context) {
Log.d(GEOFENCE_TAG, "REMOVING GEOFENCE ID: " + GEOFENCE_ID);
GeofencingClient geofencingClient = LocationServices.getGeofencingClient(context);

View File

@@ -45,7 +45,7 @@ public class SimpliTendApp extends Application {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel = new NotificationChannel(LOCATION_NOTIFICATION_CHANNEL_ID,
"Location updates",
NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager.IMPORTANCE_HIGH);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);

View File

@@ -1,16 +1,22 @@
package com.app.simplitend.callwhitelisting;
import static com.app.simplitend.callwhitelisting.CallUnBlockingWorker.CALL_BLOCKING_WORk;
import android.os.Build;
import android.telecom.Call;
import android.telecom.CallScreeningService;
import android.util.Log;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
import androidx.work.WorkRequest;
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;
import java.util.concurrent.TimeUnit;
public class CallService extends CallScreeningService {
@@ -25,6 +31,19 @@ public class CallService extends CallScreeningService {
@Override
public void onScreenCall(Call.Details callDetails) {
if ("911".equals(callDetails.getHandle().getSchemeSpecificPart())){
Log.d(CALL_BLOCKING_WORk, "CALLED 911");
WorkManager.getInstance(this).cancelAllWork();
WorkRequest workRequest = new OneTimeWorkRequest.Builder(CallUnBlockingWorker.class)
.setInitialDelay(1, TimeUnit.MINUTES)
.build();
WorkManager.getInstance(this).enqueue(workRequest);
AppUtil.setIsCallBlockingEnabled(this, false);
Log.d(CALL_BLOCKING_WORk, "CALL BLOCKING DISABLED");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
callDetails.getCallDirection() != Call.Details.DIRECTION_INCOMING) {
return;
@@ -35,6 +54,11 @@ public class CallService extends CallScreeningService {
String phoneNumber = callDetails.getHandle().getSchemeSpecificPart();
Log.d(CONTACT_WHITE_LISTING_TAG, "CALL FROM -> " + phoneNumber);
if (!AppUtil.isCallBlockingEnabled(this)){
// senior has deactivated the call blocking feature
throw new Exception("SENIOR HAS DEACTIVATED CALL BLOCKING");
}
try {
Phonenumber.PhoneNumber parsed_phone = PhoneNumberUtil.getInstance().parse(phoneNumber, "US");
phoneNumber = "+" + parsed_phone.getCountryCode() + parsed_phone.getNationalNumber();

View File

@@ -0,0 +1,30 @@
package com.app.simplitend.callwhitelisting;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import com.app.simplitend.apputils.AppUtil;
public class CallUnBlockingWorker extends Worker {
public static final String CALL_BLOCKING_WORk = "call_blocking_work";
private final Context context;
public CallUnBlockingWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
this.context = context;
}
@NonNull
@Override
public Result doWork() {
Log.d(CALL_BLOCKING_WORk, "CALL BLOCKING ENABLED");
AppUtil.setIsCallBlockingEnabled(context, true);
return Result.success();
}
}

View File

@@ -16,7 +16,6 @@ import android.location.Location;
import android.os.BatteryManager;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -62,6 +61,7 @@ public class LocationService extends Service implements LocationClient.DefaultLo
@Override
public void onCreate() {
super.onCreate();
Log.d(LOCATION_REQUEST_TAG, "onCreate: SERVICE STARTED");
locationClient = new DefaultLocationClient(this,
LocationServices.getFusedLocationProviderClient(this));
@@ -75,17 +75,15 @@ public class LocationService extends Service implements LocationClient.DefaultLo
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level * 100 / (float)scale;
Toast.makeText(context, "" + batteryPct, Toast.LENGTH_SHORT).show();
}
}
};
// try {
// registerReceiver(batteryChangeReceiver, new IntentFilter(ACTION_BATTERY_CHANGED));
// } catch (Exception e) {
// // do nothing
// }
try {
registerReceiver(batteryChangeReceiver, new IntentFilter(ACTION_BATTERY_CHANGED));
} catch (Exception e) {
// do nothing
}
}
@Override
@@ -104,6 +102,7 @@ public class LocationService extends Service implements LocationClient.DefaultLo
break;
}
}
return START_REDELIVER_INTENT;
}
@@ -120,6 +119,7 @@ public class LocationService extends Service implements LocationClient.DefaultLo
Notification notification = new NotificationCompat.Builder(this, LOCATION_NOTIFICATION_CHANNEL_ID)
.setContentTitle("Your phone is connected to your caregiver")
.setSmallIcon(R.mipmap.ic_launcher_round)
.setPriority(Notification.PRIORITY_HIGH)
.setOngoing(true)
.build();
@@ -145,7 +145,7 @@ public class LocationService extends Service implements LocationClient.DefaultLo
removeLocationUpdates();
SocketHelper.getInstance().closeConnection();
// unregisterReceiver(batteryChangeReceiver);
unregisterReceiver(batteryChangeReceiver);
}
public void removeLocationUpdates() {

View File

@@ -12,7 +12,6 @@ import android.os.Build;
import android.os.Bundle;
import android.telecom.TelecomManager;
import android.util.Log;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
@@ -26,7 +25,6 @@ import com.app.simplitend.apputils.AppUtil;
import com.app.simplitend.apputils.PatientDataCache;
import com.app.simplitend.caregiverdashboard.mvvm.CgHomeContracts;
import com.app.simplitend.caregiverdashboard.mvvm.models.GeoFenceDetails;
import com.app.simplitend.chats.SocketHelper;
public class DashBoardActivity extends AppCompatActivity implements CgHomeContracts.GetGeoFenceCallback {

View File

@@ -19,6 +19,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.RequiresPermission;
import androidx.lifecycle.ViewModel;
import com.app.simplitend.apputils.AppUtil;
import com.app.simplitend.apputils.RetrofitHelper;
import com.app.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel;
import com.app.simplitend.caregiverdashboard.mvvm.CgHomeContracts;
@@ -71,7 +72,7 @@ public class PatientMainViewModel extends ViewModel {
@RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
public void addLocationUpdates(Activity activity) {
if (!isLocationServiceRunning(activity)) {
if (!AppUtil.isLocationServiceRunning(activity)) {
Log.d(LOCATION_REQUEST_TAG, "REQUESTING LOCATION UPDATES");
Toast.makeText(activity, "Location updates started", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(activity, LocationService.class);
@@ -85,16 +86,6 @@ public class PatientMainViewModel extends ViewModel {
}
}
public boolean isLocationServiceRunning(Activity activity){
ActivityManager activityManager = (ActivityManager) activity.getSystemService(ACTIVITY_SERVICE);
for(ActivityManager.RunningServiceInfo service: activityManager.getRunningServices(Integer.MAX_VALUE)) {
if(LocationService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
public void getGeoFenceDetails(String p_id,
String cg_xid,
@NonNull String token,

View File

@@ -2,6 +2,7 @@ package com.app.simplitend.patient_dashboard.fragments;
import static com.app.simplitend.appblocking.FUAActivity.IS_FROM_DASHBOARD;
import static com.app.simplitend.apputils.NotificationService.CONTENT_TYPE_KEY;
import static com.app.simplitend.callwhitelisting.CallUnBlockingWorker.CALL_BLOCKING_WORk;
import static com.app.simplitend.caregiverdashboard.activities.EditProfileInfoActivity.IS_CAREGIVER;
import static com.app.simplitend.patient_dashboard.DirectionToHomeActivity.LAT_KEY;
import static com.app.simplitend.patient_dashboard.DirectionToHomeActivity.LNG_KEY;
@@ -18,6 +19,7 @@ import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -28,6 +30,9 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.Navigation;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
import androidx.work.WorkRequest;
import com.app.simplitend.R;
import com.app.simplitend.appblocking.FUAActivity;
@@ -35,6 +40,7 @@ import com.app.simplitend.apputils.AppUtil;
import com.app.simplitend.apputils.Constants;
import com.app.simplitend.apputils.PatientDataCache;
import com.app.simplitend.apputils.RetrofitHelper;
import com.app.simplitend.callwhitelisting.CallUnBlockingWorker;
import com.app.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel;
import com.app.simplitend.chats.ChatFragment;
import com.app.simplitend.databinding.PatientDashboardFragmentBinding;
@@ -62,6 +68,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
public class PatientDashboardFragment extends Fragment implements ProfileContracts.GetRemindersListCallback, CaregiverMainViewModel.GetNearestResultCallback, ProfileContracts.GetRoutinesCallback, CaregiverMainViewModel.GetNearestActivityCallback, INotificationLifecycleListener {
@@ -338,6 +345,18 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac
}
}
if ("911".equals(phone_number)){
WorkManager.getInstance(requireContext()).cancelAllWork();
WorkRequest workRequest = new OneTimeWorkRequest.Builder(CallUnBlockingWorker.class)
.setInitialDelay(1, TimeUnit.MINUTES)
.build();
WorkManager.getInstance(requireContext()).enqueue(workRequest);
AppUtil.setIsCallBlockingEnabled(requireContext(), false);
Log.d(CALL_BLOCKING_WORk, "CALL BLOCKING DISABLED");
}
AppUtil.callPhone(requireActivity(), phone_number);
}), true);