Prevents crashes, but does not fix #8
This commit is contained in:
parent
bee6184c36
commit
5ed13652f3
|
@ -7,11 +7,11 @@
|
||||||
<deviceKey>
|
<deviceKey>
|
||||||
<Key>
|
<Key>
|
||||||
<type value="VIRTUAL_DEVICE_PATH" />
|
<type value="VIRTUAL_DEVICE_PATH" />
|
||||||
<value value="$USER_HOME$/.android/avd/Pixel_2_API_30.avd" />
|
<value value="$USER_HOME$/.android/avd/Pixel_XL_API_31.avd" />
|
||||||
</Key>
|
</Key>
|
||||||
</deviceKey>
|
</deviceKey>
|
||||||
</Target>
|
</Target>
|
||||||
</targetSelectedWithDropDown>
|
</targetSelectedWithDropDown>
|
||||||
<timeTargetWasSelectedWithDropDown value="2022-11-01T19:47:52.688690Z" />
|
<timeTargetWasSelectedWithDropDown value="2022-11-08T21:31:23.279356Z" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -27,6 +27,8 @@ import android.telephony.CellInfoLte;
|
||||||
import android.telephony.CellInfoWcdma;
|
import android.telephony.CellInfoWcdma;
|
||||||
import android.telephony.SmsManager;
|
import android.telephony.SmsManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
|
|
||||||
|
@ -35,6 +37,17 @@ import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class SmsHandler {
|
public class SmsHandler {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO When Location is automatically enabled, it is not fast enough to lock on to the satellite.
|
||||||
|
* This causes:
|
||||||
|
* 1. On Android >= API 31 a location = null
|
||||||
|
* 2. On Android < API 31 to never fire onLocationChanged()
|
||||||
|
* We should wait for the signal to stabilize before calling these methods but a prefixed sleep
|
||||||
|
* time might be wrong and/or inefficient. Help wanted!
|
||||||
|
* https://stackoverflow.com/questions/74367356/problem-with-locationmanager-and-broadcastreceiver-in-android
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Messages:
|
* Messages:
|
||||||
* [command] [password] [option]
|
* [command] [password] [option]
|
||||||
|
@ -49,7 +62,7 @@ public class SmsHandler {
|
||||||
String providedOption = "";
|
String providedOption = "";
|
||||||
String providedPassword = "";
|
String providedPassword = "";
|
||||||
|
|
||||||
// Deny communication to those not in the whitelist, if enabled
|
// Deny communication to those not in the whitelist, if enabled.
|
||||||
// Deny communication if the message does not start with "LMD "
|
// Deny communication if the message does not start with "LMD "
|
||||||
WhitelistDbHandler whitelistDbHandler = new WhitelistDbHandler(context);
|
WhitelistDbHandler whitelistDbHandler = new WhitelistDbHandler(context);
|
||||||
if(!message.startsWith(command + " ") || (settings.getBoolean(Settings.WHITELIST_ENABLED) && !whitelistDbHandler.isContactPresent(sender))){
|
if(!message.startsWith(command + " ") || (settings.getBoolean(Settings.WHITELIST_ENABLED) && !whitelistDbHandler.isContactPresent(sender))){
|
||||||
|
@ -92,6 +105,9 @@ public class SmsHandler {
|
||||||
locationManager.getCurrentLocation(LocationManager.FUSED_PROVIDER, null, context.getMainExecutor(), new Consumer<Location>() {
|
locationManager.getCurrentLocation(LocationManager.FUSED_PROVIDER, null, context.getMainExecutor(), new Consumer<Location>() {
|
||||||
@Override
|
@Override
|
||||||
public void accept(Location location) {
|
public void accept(Location location) {
|
||||||
|
if(location == null)
|
||||||
|
return;
|
||||||
|
|
||||||
String response = Utils.buildCoordinatesResponse(location.getLatitude(), location.getLongitude());
|
String response = Utils.buildCoordinatesResponse(location.getLatitude(), location.getLongitude());
|
||||||
Utils.sendSms(smsManager, response , sender);
|
Utils.sendSms(smsManager, response , sender);
|
||||||
}
|
}
|
||||||
|
@ -105,9 +121,20 @@ public class SmsHandler {
|
||||||
locationManager.requestSingleUpdate(locationCriteria, new LocationListener() {
|
locationManager.requestSingleUpdate(locationCriteria, new LocationListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onLocationChanged(@NonNull Location location) {
|
public void onLocationChanged(@NonNull Location location) {
|
||||||
|
Log.d("SmsHandler", "Going to send coordinates: " + location.getLatitude() + " " + location.getLongitude());
|
||||||
String response = Utils.buildCoordinatesResponse(location.getLatitude(), location.getLongitude());
|
String response = Utils.buildCoordinatesResponse(location.getLatitude(), location.getLongitude());
|
||||||
Utils.sendSms(smsManager, response, sender);
|
Utils.sendSms(smsManager, response, sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderEnabled(@NonNull String provider) {
|
||||||
|
Log.d("SmsHandler", "PROVIDER ENABLED");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderDisabled(@NonNull String provider) {
|
||||||
|
Log.d("SmsHandler", "PROVIDER DISABLED");
|
||||||
|
}
|
||||||
}, null);
|
}, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,9 +343,15 @@ public class SmsHandler {
|
||||||
|
|
||||||
// show
|
// show
|
||||||
else if(providedOption.contains(Utils.SHOW_MESSAGE_OPTION)){
|
else if(providedOption.contains(Utils.SHOW_MESSAGE_OPTION)){
|
||||||
String messageToDisplay = message.substring(message.indexOf("\"") + 1,
|
String messageToDisplay;
|
||||||
|
try {
|
||||||
|
messageToDisplay = message.substring(message.indexOf("\"") + 1,
|
||||||
message.lastIndexOf("\""));
|
message.lastIndexOf("\""));
|
||||||
|
}
|
||||||
|
catch(StringIndexOutOfBoundsException ex){
|
||||||
|
Utils.sendSms(smsManager, "Wrong usage", sender);
|
||||||
|
return;
|
||||||
|
}
|
||||||
Intent lockScreenMessage = new Intent(context, ShowMessageActivity.class);
|
Intent lockScreenMessage = new Intent(context, ShowMessageActivity.class);
|
||||||
lockScreenMessage.putExtra(Utils.SHOW_MESSAGE_OPTION, messageToDisplay);
|
lockScreenMessage.putExtra(Utils.SHOW_MESSAGE_OPTION, messageToDisplay);
|
||||||
lockScreenMessage.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
lockScreenMessage.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|
Loading…
Reference in New Issue