package com.openvehicles.OVMS; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.TimeZone; import org.achartengine.ChartFactory; import org.achartengine.chart.BarChart; import org.achartengine.model.CategorySeries; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.renderer.SimpleSeriesRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import android.app.Activity; import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class Tab_SubTabDataUtilizations extends Activity { View chart = null; private CarData data; private Handler handler = new Handler() { public void handleMessage(Message paramAnonymousMessage) { try { Tab_SubTabDataUtilizations.this.refreshChart(); return; } catch (Exception localException) { while (true) { localException.printStackTrace(); if (Tab_SubTabDataUtilizations.this.data.Data_GPRSUtilization != null) Tab_SubTabDataUtilizations.this.data.Data_GPRSUtilization .Clear(); Toast.makeText(Tab_SubTabDataUtilizations.this, "Tap refresh button to update data", 0).show(); } } } }; private boolean isLoggedIn; private Date lastRefresh = null; private String lastVehicleID = ""; private OVMSActivity mOVMSActivity; private void refreshChart() { if (this.data.Data_GPRSUtilization == null); while (true) { return; SimpleDateFormat localSimpleDateFormat1 = new SimpleDateFormat("MMM dd"); localSimpleDateFormat1.setTimeZone(TimeZone.getDefault()); SimpleDateFormat localSimpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd"); Object localObject = null; try { Date localDate5 = localSimpleDateFormat2.parse(localSimpleDateFormat2.format(new Date())); localObject = localDate5; Calendar localCalendar1 = Calendar.getInstance(); localCalendar1.add(2, -1); Date localDate1 = ((GPRSUtilizationData)this.data.Data_GPRSUtilization.Utilizations.get(-1 + this.data.Data_GPRSUtilization.Utilizations.size())).DataDate; localDate2 = ((GPRSUtilizationData)this.data.Data_GPRSUtilization.Utilizations.get(0)).DataDate; StringBuilder localStringBuilder = new StringBuilder("Summing data from: ").append(localDate1.toLocaleString()).append(" to ").append(localDate2.toLocaleString()).append(" flags "); Log.d("CHART", 3); GPRSUtilization localGPRSUtilization1 = this.data.Data_GPRSUtilization; l1 = localGPRSUtilization1.GetUtilizationBytes(localDate1, 3); GPRSUtilization localGPRSUtilization2 = this.data.Data_GPRSUtilization; Date localDate3 = localCalendar1.getTime(); l2 = localGPRSUtilization2.GetUtilizationBytes(localDate3, 3); GPRSUtilization localGPRSUtilization3 = this.data.Data_GPRSUtilization; l3 = localGPRSUtilization3.GetUtilizationBytes(localObject, 3); i = 1 + (int)((localObject.getTime() - localDate1.getTime()) / 86400000L); Log.d("CHART", "Total Bars: " + i); if (i == 0) Toast.makeText(this, "No data to plot", 0).show(); } catch (ParseException localParseException) { Date localDate2; long l1; long l2; long l3; int i; while (true) localParseException.printStackTrace(); long l4 = 0L; String[] arrayOfString = new String[2]; arrayOfString[0] = "CAR TX"; arrayOfString[1] = "CAR RX"; ArrayList localArrayList = new ArrayList(); localArrayList.add(new double[i]); localArrayList.add(new double[i]); int j = i - 1; Log.d("CHART", "today: " + localObject.toGMTString() + " data start: " + localDate2.toGMTString()); if (localDate2.before(localObject)) { int i3 = (int)((localDate2.getTime() - localObject.getTime()) / 86400000L); Log.d("CHART", "initial skip: " + i3); j += i3; } int k = 0; label538: int m = this.data.Data_GPRSUtilization.Utilizations.size(); XYMultipleSeriesRenderer localXYMultipleSeriesRenderer; Calendar localCalendar2; int i2; label605: TextView localTextView2; if (k >= m) { int[] arrayOfInt = new int[2]; arrayOfInt[0] = -256; arrayOfInt[1] = -16711681; localXYMultipleSeriesRenderer = buildBarRenderer(arrayOfInt); localCalendar2 = Calendar.getInstance(); localCalendar2.add(5, -1); i2 = i - 1; if (i2 > 0) break label1317; setChartSettings(localXYMultipleSeriesRenderer, "GPRS Data Utilization", "Date", "KB", 0.0D, i, 0.0D, 1.1D * l4, -7829368, -1); localXYMultipleSeriesRenderer.getSeriesRendererAt(1).setDisplayChartValues(false); localXYMultipleSeriesRenderer.getSeriesRendererAt(1).setGradientEnabled(true); localXYMultipleSeriesRenderer.getSeriesRendererAt(1).setGradientStart(0.0D, -1); localXYMultipleSeriesRenderer.getSeriesRendererAt(1).setGradientStop(5.0D, -16711681); localXYMultipleSeriesRenderer.getSeriesRendererAt(1).setChartValuesTextSize(13.0F); localXYMultipleSeriesRenderer.getSeriesRendererAt(0).setDisplayChartValues(true); localXYMultipleSeriesRenderer.getSeriesRendererAt(0).setGradientEnabled(true); localXYMultipleSeriesRenderer.getSeriesRendererAt(0).setGradientStart(0.0D, -1); localXYMultipleSeriesRenderer.getSeriesRendererAt(0).setGradientStop(10.0D, -256); localXYMultipleSeriesRenderer.getSeriesRendererAt(0).setChartValuesTextSize(13.0F); localXYMultipleSeriesRenderer.setXLabels(0); localXYMultipleSeriesRenderer.setYLabels(10); localXYMultipleSeriesRenderer.setXLabelsAlign(Paint.Align.LEFT); localXYMultipleSeriesRenderer.setYLabelsAlign(Paint.Align.LEFT); localXYMultipleSeriesRenderer.setPanEnabled(true, false); localXYMultipleSeriesRenderer.setZoomEnabled(false, false); localXYMultipleSeriesRenderer.setBarSpacing(1.0D); LinearLayout localLinearLayout = (LinearLayout)findViewById(2131296277); if (this.chart != null) localLinearLayout.removeView(this.chart); this.chart = ChartFactory.getBarChartView(this, buildBarDataset(arrayOfString, localArrayList), localXYMultipleSeriesRenderer, BarChart.Type.STACKED); localLinearLayout.addView(this.chart); TextView localTextView1 = (TextView)findViewById(2131296276); long l6 = ()Math.ceil(l3 / 1024.0D); Object[] arrayOfObject1 = new Object[1]; arrayOfObject1[0] = Long.valueOf(l6); localTextView1.setText(String.format("%s KB", arrayOfObject1)); localTextView2 = (TextView)findViewById(2131296275); if (l2 <= 1048576L) break label1363; Object[] arrayOfObject5 = new Object[1]; arrayOfObject5[0] = Long.valueOf(()Math.ceil(l2 / 1024.0D / 1024.0D)); localTextView2.setText(String.format("%s MB", arrayOfObject5)); } TextView localTextView3; while (true) { localTextView3 = (TextView)findViewById(2131296274); if (l1 <= 1048576L) break label1403; Object[] arrayOfObject4 = new Object[1]; arrayOfObject4[0] = Long.valueOf(()Math.ceil(l1 / 1024.0D / 1024.0D)); localTextView3.setText(String.format("%s MB", arrayOfObject4)); break; GPRSUtilizationData localGPRSUtilizationData = (GPRSUtilizationData)this.data.Data_GPRSUtilization.Utilizations.get(k); if (j < 0) { Log.d("CHART", "Ignoring a rendering error"); j = 0; } ((double[])localArrayList.get(0))[j] = Math.ceil(localGPRSUtilizationData.Car_tx + localGPRSUtilizationData.Car_rx / 1024.0D); ((double[])localArrayList.get(1))[j] = Math.ceil(localGPRSUtilizationData.Car_rx / 1024.0D); long l5 = ()Math.ceil(localGPRSUtilizationData.Car_rx + localGPRSUtilizationData.Car_tx / 1024.0D); if (l5 > l4) l4 = l5; int n = -1 + this.data.Data_GPRSUtilization.Utilizations.size(); if (k < n) { Date localDate4 = ((GPRSUtilizationData)this.data.Data_GPRSUtilization.Utilizations.get(k + 1)).DataDate; int i1 = (int)((localDate4.getTime() - localGPRSUtilizationData.DataDate.getTime()) / 86400000L); if (i1 < -1) Log.d("CHART", "curr: " + localGPRSUtilizationData.DataDate.toGMTString() + " next: " + localDate4.toGMTString() + " skip: " + i1); j += i1; } k++; break label538; label1317: if (i2 % 7 == (i - 1) % 7) localXYMultipleSeriesRenderer.addXTextLabel(i2, localSimpleDateFormat1.format(localCalendar2.getTime())); localCalendar2.add(5, -1); i2--; break label605; label1363: Object[] arrayOfObject2 = new Object[1]; arrayOfObject2[0] = Long.valueOf(()Math.ceil(l2 / 1024.0D)); localTextView2.setText(String.format("%s KB", arrayOfObject2)); } label1403: Object[] arrayOfObject3 = new Object[1]; arrayOfObject3[0] = Long.valueOf(()Math.ceil(l1 / 1024.0D)); localTextView3.setText(String.format("%s KB", arrayOfObject3)); } } } private void requestData() { Toast.makeText(this, "Requesting Data...", 1).show(); this.data.Data_GPRSUtilization.Clear(); this.mOVMSActivity.SendServerCommand("C30"); } public void Refresh(CarData paramCarData, boolean paramBoolean) { this.data = paramCarData; if ((this.data.Data_GPRSUtilization == null) || (!this.lastVehicleID.equals(this.data.VehicleID)) || ((this.data.Data_GPRSUtilization.LastDataRefresh != null) && (!this.data.Data_GPRSUtilization.LastDataRefresh .equals(this.lastRefresh)))) { this.lastVehicleID = this.data.VehicleID; this.lastRefresh = this.data.Data_GPRSUtilization.LastDataRefresh; this.handler.sendEmptyMessage(0); } } protected XYMultipleSeriesDataset buildBarDataset( String[] paramArrayOfString, List<double[]> paramList) { XYMultipleSeriesDataset localXYMultipleSeriesDataset = new XYMultipleSeriesDataset(); int i = paramArrayOfString.length; int j = 0; if (j >= i) return localXYMultipleSeriesDataset; CategorySeries localCategorySeries = new CategorySeries( paramArrayOfString[j]); double[] arrayOfDouble = (double[]) paramList.get(j); int k = arrayOfDouble.length; for (int m = 0;; m++) { if (m >= k) { localXYMultipleSeriesDataset.addSeries(localCategorySeries .toXYSeries()); j++; break; } localCategorySeries.add(arrayOfDouble[m]); } } protected XYMultipleSeriesRenderer buildBarRenderer(int[] paramArrayOfInt) { XYMultipleSeriesRenderer localXYMultipleSeriesRenderer = new XYMultipleSeriesRenderer(); localXYMultipleSeriesRenderer.setAxisTitleTextSize(16.0F); localXYMultipleSeriesRenderer.setChartTitleTextSize(20.0F); localXYMultipleSeriesRenderer.setLabelsTextSize(15.0F); localXYMultipleSeriesRenderer.setLegendTextSize(15.0F); int i = paramArrayOfInt.length; for (int j = 0;; j++) { if (j >= i) return localXYMultipleSeriesRenderer; SimpleSeriesRenderer localSimpleSeriesRenderer = new SimpleSeriesRenderer(); localSimpleSeriesRenderer.setColor(paramArrayOfInt[j]); localXYMultipleSeriesRenderer .addSeriesRenderer(localSimpleSeriesRenderer); } } public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130903047); this.mOVMSActivity = ((OVMSActivity) getParent().getParent()); if (this.mOVMSActivity == null) this.mOVMSActivity = ((OVMSActivity) getParent()); if (this.mOVMSActivity == null) Toast.makeText( this, "Unexpected Layout Error - controls on this page may not work", 1).show(); while (true) { return; ((ImageButton) findViewById(2131296273)) .setOnClickListener(new View.OnClickListener() { public void onClick(View paramAnonymousView) { Tab_SubTabDataUtilizations.this.requestData(); } }); } } protected void setChartSettings( XYMultipleSeriesRenderer paramXYMultipleSeriesRenderer, String paramString1, String paramString2, String paramString3, double paramDouble1, double paramDouble2, double paramDouble3, double paramDouble4, int paramInt1, int paramInt2) { paramXYMultipleSeriesRenderer.setChartTitle(paramString1); paramXYMultipleSeriesRenderer.setXTitle(paramString2); paramXYMultipleSeriesRenderer.setYTitle(paramString3); paramXYMultipleSeriesRenderer.setXAxisMin(paramDouble1); paramXYMultipleSeriesRenderer.setXAxisMax(paramDouble2); paramXYMultipleSeriesRenderer.setYAxisMin(paramDouble3); paramXYMultipleSeriesRenderer.setYAxisMax(paramDouble4); paramXYMultipleSeriesRenderer.setAxesColor(paramInt1); paramXYMultipleSeriesRenderer.setLabelsColor(paramInt2); } }