正在查看: xDrip+ v04633772025.07.16 应用的 EmergencyAssistActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: xDrip+ v04633772025.07.16 应用的 EmergencyAssistActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.eveningoutpost.dexdrip.eassist;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import com.eveningoutpost.dexdrip.BaseAppCompatActivity;
import com.eveningoutpost.dexdrip.databinding.ActivityEmergencyAssistBinding;
import com.eveningoutpost.dexdrip.eassist.EmergencyAssist;
import com.eveningoutpost.dexdrip.models.JoH;
import com.eveningoutpost.dexdrip.models.UserError;
import com.eveningoutpost.dexdrip.ui.dialog.GenericConfirmDialog;
import com.eveningoutpost.dexdrip.utilitymodels.Inevitable;
import com.eveningoutpost.dexdrip.utilitymodels.PrefsViewImpl;
import com.eveningoutpost.dexdrip.utilitymodels.PrefsViewString;
import com.eveningoutpost.dexdrip.utils.LocationHelper;
import com.eveningoutpost.dexdrip.xdrip;
import java.util.List;
import me.tatarka.bindingcollectionadapter2.ItemBinding;
public class EmergencyAssistActivity extends BaseAppCompatActivity {
private static final String TAG = "EmergencyAssistActivity";
private ActivityEmergencyAssistBinding binding;
private final EmergencyAssist model = new EmergencyAssist(EmergencyAssist.Reason.TESTING_FEATURE, 3600000);
private final PrefsViewImpl prefs = new PrefsViewImpl();
private final PrefsViewString sprefs = new PrefsViewStringSnapDefaults();
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
ActivityEmergencyAssistBinding inflate = ActivityEmergencyAssistBinding.inflate(getLayoutInflater());
this.binding = inflate;
inflate.setActivity(this);
this.binding.setPrefs(this.prefs);
this.binding.setSprefs(this.sprefs);
this.binding.setModel(this.model);
this.binding.setContactModel(new ContactModel(this, this));
setContentView(this.binding.getRoot());
this.model.getLocation();
JoH.fixActionBar(this);
}
@Override
protected void onResume() {
super.onResume();
askPermissionIfNeeded();
}
private void askPermissionIfNeeded() {
if (this.prefs.getbool("emergency_assist_enabled") && checkSMSPermission()) {
checkLocationPermission();
}
}
public void checkLocationPermission() {
LocationHelper.requestLocationForEmergencyMessage(this);
}
private boolean checkContactsPermission() {
if (ContextCompat.checkSelfPermission(getApplicationContext(), "android.permission.READ_CONTACTS") == 0) {
return true;
}
JoH.show_ok_dialog(this, xdrip.gs(2131756012), xdrip.gs(2131755877), new Runnable() {
@Override
public void run() {
ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_CONTACTS"}, 46913);
}
});
return false;
}
private static boolean isSMSPermissionGranted() {
return ContextCompat.checkSelfPermission(xdrip.getAppContext(), "android.permission.SEND_SMS") == 0;
}
public synchronized boolean checkSMSPermission() {
if (isSMSPermissionGranted()) {
return true;
}
if (JoH.ratelimit("check-sms-permission", 2)) {
JoH.show_ok_dialog(this, xdrip.gs(2131756012), "Need SMS permission to send text messages to your emergency contacts.\n\nWarning this can cost money at normal telecoms rates!", new Runnable() {
@Override
public final void run() {
EmergencyAssistActivity.lambda$checkSMSPermission$0(this);
}
});
}
return false;
}
public static void lambda$checkSMSPermission$0(Activity activity) {
ActivityCompat.requestPermissions(activity, new String[]{"android.permission.SEND_SMS"}, 46914);
}
public String prettyMinutes(String str) {
if (str != null && str.length() != 0) {
try {
return JoH.niceTimeScalarShortWithDecimalHours(Integer.parseInt(str) * 60000);
} catch (NumberFormatException unused) {
}
}
return "";
}
public void chooseContact(View view) {
if (checkContactsPermission()) {
try {
Intent intent = new Intent("android.intent.action.PICK", Uri.parse("content://contacts"));
intent.setType("vnd.android.cursor.dir/phone_v2");
startActivityForResult(intent, 46912);
} catch (ActivityNotFoundException unused) {
JoH.static_toast_long("Device doesn't have a contact picker!?");
}
}
}
public void testButton(View view) {
EmergencyAssist.test(EmergencyAssist.Reason.TESTING_FEATURE, 3600000L);
}
public void masterEnable() {
Inevitable.task("ea-master-enable", 100L, new Runnable() {
@Override
public void run() {
if (EmergencyAssistActivity.this.prefs.getbool("emergency_assist_enabled")) {
EmergencyAssistActivity.this.prefs.setbool("emergency_assist_enabled", EmergencyAssistActivity.this.checkSMSPermission() && EmergencyAssistActivity.this.atLeastOneContact());
EmergencyAssistActivity.this.checkLocationPermission();
}
}
});
}
public static void checkPermissionRemoved() {
if (!EmergencyAssist.isEnabled() || isSMSPermissionGranted()) {
return;
}
if (JoH.ratelimit("emergency-start-activity", 30)) {
JoH.startActivity(EmergencyAssistActivity.class);
}
UserError.Log.wtf(TAG, "NEED SMS PERMISSION! - EMERGENCY FEATURE CANNOT WORK!!!");
JoH.static_toast_long("NEED SMS PERMISSION! - EMERGENCY FEATURE CANNOT WORK!!!");
}
public boolean atLeastOneContact() {
boolean z = this.binding.getContactModel().items.size() > 0;
if (!z) {
JoH.static_toast_long("Add at least one contact below to send messages to");
}
return z;
}
@Override
protected void onActivityResult(int i, int i2, Intent intent) {
if (intent != null && i == 46912 && i2 == -1) {
Uri data = intent.getData();
String[] strArr = {"data1", "display_name"};
if (data != null) {
try {
Cursor query = getContentResolver().query(data, strArr, null, null, null);
if (query != null) {
query.moveToFirst();
String string = query.getString(query.getColumnIndex("data1"));
String trim = query.getString(query.getColumnIndex("display_name")).trim();
if (trim.length() > 0) {
if (string.length() > 5) {
this.binding.getContactModel().add(trim, string);
} else {
JoH.static_toast_long("Cannot add " + trim + " as number is invalid!");
}
} else {
JoH.static_toast_long("Cannot add as name is invalid");
}
query.close();
return;
}
return;
} catch (Exception e) {
String str = "Got error trying to read contact information: " + e;
UserError.Log.wtf(TAG, str);
JoH.static_toast_long(str);
return;
}
}
JoH.static_toast_long("Got null uri trying to read contact");
}
}
@Override
public void onRequestPermissionsResult(int i, String[] strArr, int[] iArr) {
super.onRequestPermissionsResult(i, strArr, iArr);
if (i == 46913) {
if (iArr.length > 0 && iArr[0] == 0) {
chooseContact(null);
} else {
JoH.static_toast_long(this, "Cannot choose contact without read contacts permission");
}
}
if (i == 46914) {
if (iArr.length > 0 && iArr[0] == 0) {
this.prefs.setbool("emergency_assist_enabled", true);
} else {
JoH.static_toast_long(this, "Cannot send any text messages without SMS permission");
}
}
}
public void askRemove(final EmergencyContact emergencyContact) {
GenericConfirmDialog.show(this, "Remove?", "Remove " + emergencyContact.name + " from emergency text message receivers list?", new Runnable() {
@Override
public final void run() {
EmergencyAssistActivity.this.lambda$askRemove$1(emergencyContact);
}
});
}
public void lambda$askRemove$1(EmergencyContact emergencyContact) {
this.binding.getContactModel().remove(emergencyContact);
masterEnable();
}
public class ContactModel {
public Activity activity;
public final ItemBinding<EmergencyContact> itemBinding;
public final ObservableList<EmergencyContact> items;
ContactModel(Activity activity, List<EmergencyContact> list) {
ObservableArrayList observableArrayList = new ObservableArrayList();
this.items = observableArrayList;
ItemBinding<EmergencyContact> of = ItemBinding.of(10, 2131492982);
this.itemBinding = of;
of.bindExtra(4, this);
this.activity = activity;
of.bindExtra(2, activity);
observableArrayList.addAll(list);
}
ContactModel(EmergencyAssistActivity emergencyAssistActivity, Activity activity) {
this(activity, EmergencyContact.load());
}
void add(String str, String str2) {
this.items.add(new EmergencyContact(str, str2));
EmergencyContact.save(this.items);
}
public void remove(EmergencyContact emergencyContact) {
this.items.remove(emergencyContact);
EmergencyContact.save(this.items);
}
}
public class PrefsViewStringSnapDefaults extends PrefsViewString {
public PrefsViewStringSnapDefaults() {
}
@Override
public String get(Object obj) {
String str = super.get(obj);
if (str.length() == 0 || str.equals("0")) {
String str2 = (String) obj;
str2.hashCode();
switch (str2) {
case "emergency_assist_inactivity_minutes":
str = "1440";
break;
case "emergency_assist_low_alert_minutes":
str = "60";
break;
case "emergency_assist_high_alert_minutes":
str = "240";
break;
}
super.put(str2, str);
}
return str;
}
}
}