导航菜单

页面标题

页面副标题

xDrip+ v04633772025.07.16 - CalibrationGraph.java 源代码

正在查看: xDrip+ v04633772025.07.16 应用的 CalibrationGraph.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.eveningoutpost.dexdrip;

import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import com.eveningoutpost.dexdrip.calibrations.CalibrationAbstract;
import com.eveningoutpost.dexdrip.calibrations.PluggableCalibration;
import com.eveningoutpost.dexdrip.models.Calibration;
import com.eveningoutpost.dexdrip.models.JoH;
import com.eveningoutpost.dexdrip.utilitymodels.CalibrationSendQueue;
import com.eveningoutpost.dexdrip.utilitymodels.Pref;
import com.eveningoutpost.dexdrip.utils.ActivityWithMenu;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import lecho.lib.hellocharts.model.Axis;
import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.util.ChartUtils;
import lecho.lib.hellocharts.view.LineChartView;

public class CalibrationGraph extends ActivityWithMenu {
    TextView GraphHeader;
    TextView PluginHeader;
    private LineChartView chart;
    private LineChartData data;
    private final boolean doMgdl = Pref.getString("units", "mgdl").equals("mgdl");
    private final boolean show_days_since = true;
    private final double start_x = 50.0d;
    private double end_x = 300.0d;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(2131492902);
        JoH.fixActionBar(this);
        this.GraphHeader = (TextView) findViewById(2131296263);
        TextView textView = (TextView) findViewById(2131296478);
        this.PluginHeader = textView;
        textView.setText("");
    }

    @Override
    public String getMenuName() {
        return getString(2131755269);
    }

    @Override
    protected void onResume() {
        super.onResume();
        setupCharts();
    }

    public void setupCharts() {
        this.chart = findViewById(2131296489);
        ArrayList arrayList = new ArrayList();
        List<Line> calibrationsLine = getCalibrationsLine(Calibration.allForSensor(), Color.parseColor("#66FFFFFF"));
        List<Line> calibrationsLine2 = getCalibrationsLine(Calibration.allForSensorInLastFourDays(), ChartUtils.COLOR_BLUE);
        Calibration lastValid = Calibration.lastValid();
        if (lastValid != null) {
            DecimalFormat decimalFormat = new DecimalFormat("#");
            decimalFormat.setMaximumFractionDigits(2);
            decimalFormat.setMinimumFractionDigits(2);
            this.GraphHeader.setText(getString(2131755276, decimalFormat.format(lastValid.slope), decimalFormat.format(lastValid.intercept)));
            ArrayList arrayList2 = new ArrayList();
            float f = (float) (this.doMgdl ? 1.0d : 0.0554994394556615d);
            arrayList2.add(new PointValue(50.0f, ((float) ((lastValid.slope * 50.0d) + lastValid.intercept)) * f));
            double d = this.end_x;
            arrayList2.add(new PointValue((float) d, ((float) ((d * lastValid.slope) + lastValid.intercept)) * f));
            Line line = new Line(arrayList2);
            line.setColor(ChartUtils.COLOR_RED);
            line.setHasLines(true);
            line.setHasPoints(false);
            arrayList.add(line);
            CalibrationAbstract calibrationPluginFromPreferences = PluggableCalibration.getCalibrationPluginFromPreferences();
            if (calibrationPluginFromPreferences != null) {
                CalibrationAbstract.CalibrationData calibrationData = calibrationPluginFromPreferences.getCalibrationData();
                ArrayList arrayList3 = new ArrayList();
                arrayList3.add(new PointValue(50.0f, ((float) calibrationPluginFromPreferences.getGlucoseFromSensorValue(50.0d, calibrationData)) * f));
                double d2 = this.end_x;
                arrayList3.add(new PointValue((float) d2, f * ((float) calibrationPluginFromPreferences.getGlucoseFromSensorValue(d2, calibrationData))));
                Line line2 = new Line(arrayList3);
                line2.setColor(Color.parseColor("#88CCFF00"));
                line2.setHasLines(true);
                line2.setHasPoints(false);
                arrayList.add(line2);
                this.PluginHeader.setText("(" + calibrationPluginFromPreferences.getAlgorithmName() + ")  s = " + decimalFormat.format(calibrationData.slope) + "  i = " + decimalFormat.format(calibrationData.intercept));
                this.PluginHeader.setTextColor(Color.parseColor("#88CCFF00"));
            }
            Iterator<Line> it = calibrationsLine.iterator();
            while (it.hasNext()) {
                arrayList.add(it.next());
            }
            Iterator<Line> it2 = calibrationsLine2.iterator();
            while (it2.hasNext()) {
                arrayList.add(it2.next());
            }
        }
        Axis axis = new Axis();
        Axis hasLines = new Axis().setHasLines(true);
        axis.setName(getString(2131755192));
        Object[] objArr = new Object[1];
        objArr[0] = this.doMgdl ? "mg/dl" : "mmol/l";
        hasLines.setName(getString(2131755193, objArr));
        LineChartData lineChartData = new LineChartData(arrayList);
        this.data = lineChartData;
        lineChartData.setAxisXBottom(axis);
        this.data.setAxisYLeft(hasLines);
        this.chart.setLineChartData(this.data);
    }

    private static int daysAgo(long j) {
        return ((int) (JoH.tsl() - j)) / 86400000;
    }

    public List<Line> getCalibrationsLine(List<Calibration> list, int i) {
        if (list == null) {
            return new ArrayList();
        }
        ArrayList arrayList = new ArrayList();
        ArrayList arrayList2 = new ArrayList();
        ArrayList arrayList3 = new ArrayList();
        for (Calibration calibration : list) {
            double d = calibration.estimate_raw_at_time_of_calibration;
            if (d > this.end_x) {
                this.end_x = d;
            }
            float f = (float) d;
            boolean z = this.doMgdl;
            double d2 = calibration.bg;
            PointValue pointValue = new PointValue(f, z ? (float) d2 : ((float) d2) * 0.05549944f);
            PointValue pointValue2 = new PointValue((float) calibration.raw_value, this.doMgdl ? (float) calibration.bg : ((float) calibration.bg) * 0.05549944f);
            PointValue pointValue3 = new PointValue((float) calibration.adjusted_raw_value, this.doMgdl ? (float) calibration.bg : 0.05549944f * ((float) calibration.bg));
            int daysAgo = daysAgo(calibration.raw_timestamp);
            pointValue.setLabel((daysAgo > 0 ? Integer.toString(daysAgo) + "d  " : "") + JoH.hourMinuteString(calibration.raw_timestamp));
            arrayList.add(pointValue);
            arrayList2.add(pointValue2);
            arrayList3.add(pointValue3);
        }
        Line line = new Line(arrayList);
        line.setColor(i);
        line.setHasLines(false);
        line.setPointRadius(4);
        line.setHasPoints(true);
        line.setHasLabels(true);
        ArrayList arrayList4 = new ArrayList();
        arrayList4.add(line);
        if (Pref.getBooleanDefaultFalse("engineering_mode")) {
            Line line2 = new Line(arrayList2);
            line2.setColor(-65536);
            line2.setHasLines(false);
            line2.setPointRadius(1);
            line2.setHasPoints(true);
            line2.setHasLabels(false);
            Line line3 = new Line(arrayList3);
            line3.setColor(-256);
            line3.setHasLines(false);
            line3.setPointRadius(1);
            line3.setHasPoints(true);
            line3.setHasLabels(false);
            arrayList4.add(line2);
            arrayList4.add(line3);
        }
        return arrayList4;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (!Pref.getBooleanDefaultFalse("engineering_mode")) {
            return false;
        }
        getMenuInflater().inflate(2131558404, menu);
        if (Calibration.lastValid() != null) {
            menu.findItem(2131296333).setVisible(true);
            menu.findItem(2131296334).setVisible(true);
            menu.findItem(2131296332).setVisible(false);
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case 2131296333:
                overWriteIntercept();
                return true;
            case 2131296334:
                overWriteSlope();
                return true;
            default:
                return super.onOptionsItemSelected(menuItem);
        }
    }

    private void overWriteIntercept() {
        final EditText editText = new EditText(this);
        editText.setInputType(12290);
        new AlertDialog.Builder(this).setTitle("Ovewrite Intercept").setMessage("Overwrite Intercept").setView(editText).setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                String obj = editText.getText().toString();
                if (!TextUtils.isEmpty(obj)) {
                    double d = JoH.tolerantParseDouble(obj);
                    Calibration lastValid = Calibration.lastValid();
                    lastValid.intercept = d;
                    lastValid.save();
                    CalibrationSendQueue.addToQueue(lastValid, CalibrationGraph.this.getApplicationContext());
                    CalibrationGraph.this.recreate();
                    return;
                }
                JoH.static_toast_long(xdrip.gs(2131755693));
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                JoH.static_toast_long(xdrip.gs(2131755284));
            }
        }).show();
    }

    private void overWriteSlope() {
        final EditText editText = new EditText(this);
        editText.setInputType(8194);
        new AlertDialog.Builder(this).setTitle("Ovewrite Slope").setMessage("Overwrite Slope").setView(editText).setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                String obj = editText.getText().toString();
                if (!TextUtils.isEmpty(obj)) {
                    double d = JoH.tolerantParseDouble(obj);
                    Calibration lastValid = Calibration.lastValid();
                    lastValid.slope = d;
                    lastValid.save();
                    CalibrationSendQueue.addToQueue(lastValid, CalibrationGraph.this.getApplicationContext());
                    CalibrationGraph.this.recreate();
                    return;
                }
                JoH.static_toast_long(xdrip.gs(2131755693));
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                JoH.static_toast_long(xdrip.gs(2131755284));
            }
        }).show();
    }
}