导航菜单

页面标题

页面副标题

xDrip+ v04633772025.07.16 - EmergencyAssistActivity.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;
        }
    }
}