package com.openvehicles.OVMS;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Random;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.TabActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
import android.widget.TabHost;
import android.widget.Toast;
public class OVMSActivity extends TabActivity
implements TabHost.OnTabChangeListener
{
public int DeviceScreenSize;
public final int OVMS_CONFIG_FILE_VERSION = 1;
public final int SCREENLAYOUT_SIZE_LARGE = 3;
public final int SCREENLAYOUT_SIZE_XLARGE = 4;
public boolean SuppressServerErrorDialog = false;
private Handler UIHandler = new Handler();
private AlertDialog alertDialog;
private ArrayList<CarData> allSavedCars;
private Handler c2dmReportTimerHandler = new Handler();
private CarData carData;
private Handler delayedRequest = new Handler();
private boolean isLoggedIn;
private Exception lastServerException;
private ServerCommandResponseHandler mCommandResponse;
private Runnable mRecreateChildTabLayout = new Runnable()
{
public void run()
{
String str = OVMSActivity.this.getLocalActivityManager().getCurrentId().trim();
Log.d("Tab", "Tab recreate: " + str);
if ((str == null) || (OVMSActivity.this.getLocalActivityManager().getActivity(str) == null));
while (true)
{
return;
if (str.equals("tabInfo_xlarge"))
{
TabInfo_xlarge localTabInfo_xlarge = (TabInfo_xlarge)OVMSActivity.this.getLocalActivityManager().getActivity(str);
localTabInfo_xlarge.OrientationChanged();
localTabInfo_xlarge.Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (str.equals("tabInfo"))
{
TabInfo localTabInfo = (TabInfo)OVMSActivity.this.getLocalActivityManager().getActivity(str);
localTabInfo.OrientationChanged();
localTabInfo.Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (str.equals("tabCar"))
{
TabCar localTabCar = (TabCar)OVMSActivity.this.getLocalActivityManager().getActivity(str);
localTabCar.OrientationChanged();
localTabCar.Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
}
}
};
private Runnable mRefresh = new Runnable()
{
private void notifyTabRefresh(String paramAnonymousString)
{
Log.d("Tab", "Tab refresh: " + paramAnonymousString);
if ((paramAnonymousString == null) || (OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString) == null))
return;
if (OVMSActivity.this.DeviceScreenSize == 4)
if (paramAnonymousString.equals("tabInfo_xlarge"))
{
TabInfo_xlarge localTabInfo_xlarge = (TabInfo_xlarge)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString);
if (localTabInfo_xlarge.CurrentScreenOrientation != OVMSActivity.this.getResources().getConfiguration().orientation)
localTabInfo_xlarge.OrientationChanged();
localTabInfo_xlarge.Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
while (true)
{
OVMSActivity.this.getTabHost().invalidate();
break;
if (paramAnonymousString.equals("tabMap"))
{
((TabMap)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabNotifications"))
{
((Tab_SubTabNotifications)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabDataUtilizations"))
{
((Tab_SubTabDataUtilizations)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabCarSettings"))
{
((Tab_SubTabCarSettings)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabCars"))
{
((TabCars)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).LoadCars(OVMSActivity.this.allSavedCars);
continue;
if (paramAnonymousString.equals("tabInfo"))
{
TabInfo localTabInfo = (TabInfo)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString);
if (localTabInfo.CurrentScreenOrientation != OVMSActivity.this.getResources().getConfiguration().orientation)
localTabInfo.OrientationChanged();
localTabInfo.Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabCar"))
{
TabCar localTabCar = (TabCar)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString);
if (localTabCar.CurrentScreenOrientation != OVMSActivity.this.getResources().getConfiguration().orientation)
localTabCar.OrientationChanged();
localTabCar.Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabMap"))
{
((TabMap)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabMiscFeatures"))
{
((TabMiscFeatures)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).Refresh(OVMSActivity.this.carData, OVMSActivity.this.isLoggedIn);
}
else if (paramAnonymousString.equals("tabCars"))
{
((TabCars)OVMSActivity.this.getLocalActivityManager().getActivity(paramAnonymousString)).LoadCars(OVMSActivity.this.allSavedCars);
}
else
{
OVMSActivity.this.getTabHost().setCurrentTab(0);
}
}
}
}
public void run()
{
if (OVMSActivity.this.isLoggedIn)
{
if ((OVMSActivity.this.progressLogin != null) && (OVMSActivity.this.progressLogin.isShowing()))
OVMSActivity.this.progressLogin.dismiss();
if ((OVMSActivity.this.alertDialog != null) && (OVMSActivity.this.alertDialog.isShowing()))
OVMSActivity.this.alertDialog.dismiss();
}
notifyTabRefresh(OVMSActivity.this.getLocalActivityManager().getCurrentId().trim());
}
};
private Runnable pingServer = new Runnable()
{
public void run()
{
if (OVMSActivity.this.isLoggedIn)
{
Log.d("OVMS", "Pinging server...");
OVMSActivity.this.tcpTask.Ping();
}
OVMSActivity.this.pingServerTimerHandler.postDelayed(OVMSActivity.this.pingServer, 60000L);
}
};
private Handler pingServerTimerHandler = new Handler();
private ProgressDialog progressLogin = null;
private Runnable progressLoginCloseDialog = new Runnable()
{
public void run()
{
try
{
if (OVMSActivity.this.progressLogin != null)
OVMSActivity.this.progressLogin.dismiss();
label20: return;
}
catch (Exception localException)
{
break label20;
}
}
};
private Runnable progressLoginShowDialog = new Runnable()
{
public void run()
{
try
{
if (OVMSActivity.this.progressLogin != null)
OVMSActivity.this.progressLogin.dismiss();
try
{
label20: if (OVMSActivity.this.alertDialog != null)
OVMSActivity.this.alertDialog.dismiss();
try
{
label40: OVMSActivity.this.progressLogin = new ProgressDialog(OVMSActivity.this);
OVMSActivity.this.progressLogin.setIndeterminate(true);
OVMSActivity.this.progressLogin.setMessage("Connecting to OVMS Server...");
OVMSActivity.this.progressLogin.getWindow().clearFlags(2);
OVMSActivity.this.progressLogin.show();
label105: return;
}
catch (Exception localException3)
{
break label105;
}
}
catch (Exception localException2)
{
break label40;
}
}
catch (Exception localException1)
{
break label20;
}
}
};
private Runnable reportC2DMRegistrationID = new Runnable()
{
public void run()
{
if (OVMSActivity.this.tcpTask == null);
while (true)
{
return;
SharedPreferences localSharedPreferences = OVMSActivity.this.getSharedPreferences("C2DM", 0);
String str1 = localSharedPreferences.getString("RegID", "");
String str2;
if (!localSharedPreferences.contains("UUID"))
{
str2 = UUID.randomUUID().toString();
SharedPreferences.Editor localEditor = OVMSActivity.this.getSharedPreferences("C2DM", 0).edit();
localEditor.putString("UUID", str2);
localEditor.commit();
Log.d("OVMS", "Generated New App ID: " + str2);
}
while (true)
{
if (str1.length() != 0)
break label184;
Log.d("C2DM", "C2DM registration ID not found. Rescheduling.");
OVMSActivity.this.c2dmReportTimerHandler.postDelayed(OVMSActivity.this.reportC2DMRegistrationID, 15000L);
break;
str2 = localSharedPreferences.getString("UUID", "");
Log.d("OVMS", "Loaded Saved App ID: " + str2);
}
label184: if (!OVMSActivity.this.SendServerCommand(ServerCommands.SUBSCRIBE_PUSH_NOTIFICATIONS(str2, OVMSActivity.this.carData.VehicleID, OVMSActivity.this.carData.NetPass, str1.trim())))
{
Log.d("OVMS", "Reporting C2DM ID failed. Rescheduling.");
OVMSActivity.this.c2dmReportTimerHandler.postDelayed(OVMSActivity.this.reportC2DMRegistrationID, 5000L);
}
}
}
};
private Runnable serverSocketErrorDialog = new Runnable()
{
public void run()
{
if (OVMSActivity.this.SuppressServerErrorDialog);
while (true)
{
return;
if ((OVMSActivity.this.alertDialog != null) && (OVMSActivity.this.alertDialog.isShowing()))
continue;
try
{
if (OVMSActivity.this.progressLogin != null)
OVMSActivity.this.progressLogin.dismiss();
label54: AlertDialog.Builder localBuilder = new AlertDialog.Builder(OVMSActivity.this);
if (OVMSActivity.this.isLoggedIn);
for (String str = String.format("OVMS Server Connection Lost", new Object[0]); ; str = String.format("Please check the following:\n1. OVMS Server address\n2. Your vehicle ID and passwords", new Object[0]))
{
while (true)
{
localBuilder.setMessage(str).setTitle("Connection Problem").setCancelable(false).setPositiveButton("Retry", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface paramAnonymous2DialogInterface, int paramAnonymous2Int)
{
OVMSActivity.this.ChangeCar(OVMSActivity.this.carData);
paramAnonymous2DialogInterface.dismiss();
}
}).setNegativeButton("Open Settings", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface paramAnonymous2DialogInterface, int paramAnonymous2Int)
{
OVMSActivity.this.getTabHost().setCurrentTabByTag("tabCars");
paramAnonymous2DialogInterface.dismiss();
}
});
OVMSActivity.this.alertDialog = localBuilder.create();
try
{
OVMSActivity.this.alertDialog.show();
}
catch (Exception localException2)
{
}
}
break;
}
}
catch (Exception localException1)
{
break label54;
}
}
}
};
private final String settingsFileName = "OVMSSavedCars.obj";
private TCPTask tcpTask;
private void initializeSavedCars()
{
Log.d("OVMS", "Invalid save file. Initializing with demo car.");
this.allSavedCars = new ArrayList();
CarData localCarData = new CarData();
localCarData.VehicleID = "DEMO";
localCarData.RegPass = "DEMO";
localCarData.NetPass = "DEMO";
localCarData.ServerNameOrIP = "tmc.openvehicles.com";
localCarData.VehicleImageDrawable = "car_models_signaturered";
localCarData.lastResetVersion = 1;
this.allSavedCars.add(localCarData);
this.carData = localCarData;
saveCars();
}
private void loadCars()
{
try
{
Log.d("OVMS", "Loading saved cars from internal storage file: OVMSSavedCars.obj");
ObjectInputStream localObjectInputStream = new ObjectInputStream(openFileInput("OVMSSavedCars.obj"));
this.allSavedCars = ((ArrayList)localObjectInputStream.readObject());
localObjectInputStream.close();
Iterator localIterator = this.allSavedCars.iterator();
while (true)
{
if (!localIterator.hasNext())
{
str = getSharedPreferences("OVMS", 0).getString("LastVehicleID", "").trim();
if (str.length() != 0)
break label271;
this.carData = ((CarData)this.allSavedCars.get(0));
return;
}
localCarData1 = (CarData)localIterator.next();
if ((localCarData1.VehicleID != null) && (localCarData1.RegPass != null) && (localCarData1.NetPass != null) && (localCarData1.ServerNameOrIP != null) && (localCarData1.VehicleImageDrawable != null))
break;
initializeSavedCars();
}
}
catch (Exception localException)
{
String str;
while (true)
{
CarData localCarData1;
localException.printStackTrace();
initializeSavedCars();
break;
if (localCarData1.lastResetVersion != 1)
{
CarData localCarData2 = new CarData();
localCarData2.VehicleID = localCarData1.VehicleID;
localCarData2.RegPass = localCarData1.RegPass;
localCarData2.NetPass = localCarData1.NetPass;
localCarData2.ServerNameOrIP = localCarData1.ServerNameOrIP;
localCarData2.VehicleImageDrawable = localCarData1.VehicleImageDrawable;
localCarData2.lastResetVersion = 1;
this.allSavedCars.set(this.allSavedCars.indexOf(localCarData1), localCarData2);
}
}
label271: Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = Integer.valueOf(this.allSavedCars.size());
arrayOfObject[1] = str;
Log.d("OVMS", String.format("Loaded %s cars. Last used car is %s", arrayOfObject));
for (int i = 0; ; i++)
{
if (i >= this.allSavedCars.size());
while (true)
{
if (this.carData != null)
return;
this.carData = ((CarData)this.allSavedCars.get(0));
return;
if (!((CarData)this.allSavedCars.get(i)).VehicleID.equals(str))
break;
this.carData = ((CarData)this.allSavedCars.get(i));
}
}
}
}
private void loginComplete()
{
this.isLoggedIn = true;
this.UIHandler.post(this.progressLoginCloseDialog);
ReportC2DMRegistrationID();
if (((String)this.carData.Data_Parameters.get(Integer.valueOf(11))).length() > 0)
SendServerCommand(ServerCommands.SUBSCRIBE_GROUP((String)this.carData.Data_Parameters.get(Integer.valueOf(11))));
while (true)
{
return;
SendServerCommand("C3");
Runnable local8 = new Runnable()
{
public void run()
{
OVMSActivity.this.SendServerCommand("C1");
}
};
this.delayedRequest.postDelayed(local8, 200L);
}
}
private void notifyServerSocketError(Exception paramException)
{
this.lastServerException = paramException;
if (paramException != null)
paramException.printStackTrace();
if (!this.SuppressServerErrorDialog)
this.UIHandler.post(this.serverSocketErrorDialog);
}
private void notifyTabRefresh()
{
this.UIHandler.post(this.mRefresh);
}
public void ChangeCar(CarData paramCarData)
{
ChangeCar(paramCarData, "tabInfo");
}
public void ChangeCar(CarData paramCarData, String paramString)
{
this.UIHandler.post(this.progressLoginShowDialog);
Log.d("OVMS", "Changed car to: " + paramCarData.VehicleID);
this.isLoggedIn = false;
if (this.tcpTask != null)
{
Log.d("TCP", "Shutting down pervious TCP connection (ChangeCar())");
this.tcpTask.ConnClose();
this.tcpTask.cancel(true);
this.tcpTask = null;
}
this.carData = paramCarData;
if (this.carData.Data_GPRSUtilization == null)
this.carData.Data_GPRSUtilization = new GPRSUtilization(this);
notifyTabRefresh();
paramCarData.ParanoidMode = false;
this.tcpTask = new TCPTask(this.carData);
Log.d("TCP", "Starting TCP Connection (ChangeCar())");
this.tcpTask.execute(new Void[0]);
getTabHost().setCurrentTabByTag(paramString);
}
public void ReportC2DMRegistrationID()
{
this.c2dmReportTimerHandler.postDelayed(this.reportC2DMRegistrationID, 500L);
}
public boolean SendServerCommand(String paramString)
{
return this.tcpTask.SendCommand(paramString);
}
public void onConfigurationChanged(Configuration paramConfiguration)
{
super.onConfigurationChanged(paramConfiguration);
this.UIHandler.post(this.mRecreateChildTabLayout);
}
public void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
setContentView(2130903042);
loadCars();
String str = getSharedPreferences("C2DM", 0).getString("RegID", "");
TabHost localTabHost;
if (str.length() == 0)
{
Log.d("C2DM", "Doing first time registration.");
ServerCommands.RequestC2DMRegistrationID(this);
this.DeviceScreenSize = (0xF & getResources().getConfiguration().screenLayout);
Display localDisplay = ((WindowManager)getSystemService("window")).getDefaultDisplay();
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = Integer.valueOf(localDisplay.getWidth());
arrayOfObject[1] = Integer.valueOf(localDisplay.getHeight());
Log.d("INIT", String.format("Screen size: %d x %d", arrayOfObject));
if ((localDisplay.getWidth() >= 976) || (localDisplay.getHeight() >= 976))
this.DeviceScreenSize = 4;
localTabHost = getTabHost();
if (this.DeviceScreenSize != 4)
break label573;
Intent localIntent6 = new Intent().setClass(this, TabInfo_xlarge.class);
TabHost.TabSpec localTabSpec6 = localTabHost.newTabSpec("tabInfo_xlarge");
localTabSpec6.setContent(localIntent6);
localTabSpec6.setIndicator("", getResources().getDrawable(2130837573));
localTabHost.addTab(localTabSpec6);
Intent localIntent7 = new Intent().setClass(this, TabMap.class);
TabHost.TabSpec localTabSpec7 = localTabHost.newTabSpec("tabMap");
localTabSpec7.setContent(localIntent7);
localTabSpec7.setIndicator("", getResources().getDrawable(2130837579));
localTabHost.addTab(localTabSpec7);
Intent localIntent8 = new Intent().setClass(this, Tab_SubTabNotifications.class);
TabHost.TabSpec localTabSpec8 = localTabHost.newTabSpec("tabNotifications");
localTabSpec8.setContent(localIntent8);
localTabSpec8.setIndicator("", getResources().getDrawable(2130837589));
localTabHost.addTab(localTabSpec8);
Intent localIntent9 = new Intent().setClass(this, Tab_SubTabDataUtilizations.class);
TabHost.TabSpec localTabSpec9 = localTabHost.newTabSpec("tabDataUtilizations");
localTabSpec9.setContent(localIntent9);
localTabSpec9.setIndicator("", getResources().getDrawable(2130837577));
localTabHost.addTab(localTabSpec9);
Intent localIntent10 = new Intent().setClass(this, Tab_SubTabCarSettings.class);
TabHost.TabSpec localTabSpec10 = localTabHost.newTabSpec("tabCarSettings");
localTabSpec10.setContent(localIntent10);
localTabSpec10.setIndicator("", getResources().getDrawable(2130837582));
localTabHost.addTab(localTabSpec10);
Intent localIntent11 = new Intent().setClass(this, TabCars.class);
TabHost.TabSpec localTabSpec11 = localTabHost.newTabSpec("tabCars");
localTabSpec11.setContent(localIntent11);
localTabSpec11.setIndicator("", getResources().getDrawable(2130837594));
localTabHost.addTab(localTabSpec11);
}
while (true)
{
getTabHost().setOnTabChangedListener(this);
return;
Log.d("C2DM", "Loaded Saved C2DM registration ID: " + str);
break;
label573: Intent localIntent1 = new Intent().setClass(this, TabInfo.class);
TabHost.TabSpec localTabSpec1 = localTabHost.newTabSpec("tabInfo");
localTabSpec1.setContent(localIntent1);
localTabSpec1.setIndicator("", getResources().getDrawable(2130837573));
localTabHost.addTab(localTabSpec1);
Intent localIntent2 = new Intent().setClass(this, TabCar.class);
TabHost.TabSpec localTabSpec2 = localTabHost.newTabSpec("tabCar");
localTabSpec2.setContent(localIntent2);
localTabSpec2.setIndicator("", getResources().getDrawable(2130837574));
localTabHost.addTab(localTabSpec2);
Intent localIntent3 = new Intent().setClass(this, TabMap.class);
TabHost.TabSpec localTabSpec3 = localTabHost.newTabSpec("tabMap");
localTabSpec3.setContent(localIntent3);
localTabSpec3.setIndicator("", getResources().getDrawable(2130837579));
localTabHost.addTab(localTabSpec3);
Intent localIntent4 = new Intent().setClass(this, TabMiscFeatures.class);
TabHost.TabSpec localTabSpec4 = localTabHost.newTabSpec("tabMiscFeatures");
localTabSpec4.setContent(localIntent4);
localTabSpec4.setIndicator("", getResources().getDrawable(2130837588));
localTabHost.addTab(localTabSpec4);
Intent localIntent5 = new Intent().setClass(this, TabCars.class);
TabHost.TabSpec localTabSpec5 = localTabHost.newTabSpec("tabCars");
localTabSpec5.setContent(localIntent5);
localTabSpec5.setIndicator("", getResources().getDrawable(2130837594));
localTabHost.addTab(localTabSpec5);
}
}
public boolean onCreateOptionsMenu(Menu paramMenu)
{
getMenuInflater().inflate(2130903043, paramMenu);
return true;
}
protected void onDestory()
{
if (this.tcpTask != null)
{
Log.d("TCP", "Shutting down TCP connection (OnDestroy())");
this.tcpTask.ConnClose();
this.tcpTask = null;
}
}
public void onNewIntent(Intent paramIntent)
{
Log.d("EVENT", "onNewIntent");
TabHost localTabHost = getTabHost();
Object localObject;
Iterator localIterator;
if (paramIntent != null)
{
if (!paramIntent.hasExtra("VehicleID"))
break label154;
localObject = null;
localIterator = this.allSavedCars.iterator();
if (localIterator.hasNext())
break label108;
label51: if (localObject != null)
{
Log.d("EVENT", "Launching with default car set to: " + ((CarData)localObject).VehicleID);
if (!paramIntent.hasExtra("SetTab"))
break label145;
ChangeCar((CarData)localObject, paramIntent.getStringExtra("SetTab"));
}
}
while (true)
{
return;
label108: CarData localCarData = (CarData)localIterator.next();
if (!localCarData.VehicleID.equals(paramIntent.getStringExtra("VehicleID")))
break;
localObject = localCarData;
break label51;
label145: ChangeCar((CarData)localObject);
continue;
label154: if (paramIntent.hasExtra("SetTab"))
localTabHost.setCurrentTabByTag(paramIntent.getStringExtra("SetTab"));
else
localTabHost.setCurrentTabByTag("tabInfo");
}
}
public boolean onOptionsItemSelected(MenuItem paramMenuItem)
{
boolean bool = true;
switch (paramMenuItem.getItemId())
{
default:
bool = super.onOptionsItemSelected(paramMenuItem);
case 2131296266:
case 2131296267:
}
while (true)
{
return bool;
finish();
continue;
OVMSNotifications localOVMSNotifications = new OVMSNotifications(this);
localOVMSNotifications.Clear();
localOVMSNotifications.Save();
notifyTabRefresh();
}
}
protected void onPause()
{
super.onPause();
if (this.tcpTask != null)
{
Log.d("TCP", "Shutting down TCP connection (OnPause())");
this.tcpTask.ConnClose();
this.tcpTask.cancel(true);
this.tcpTask = null;
}
saveCars();
OVMSWidgets.UpdateWidgets(this);
}
protected void onResume()
{
super.onResume();
if (this.tcpTask == null)
{
this.UIHandler.post(this.progressLoginCloseDialog);
String str = getTabHost().getCurrentTabTag();
ChangeCar(this.carData, str);
}
}
public void onTabChanged(String paramString)
{
this.UIHandler.post(this.mRefresh);
}
public void saveCars()
{
try
{
Log.d("OVMS", "Saving cars to interal storage...");
SharedPreferences.Editor localEditor = getSharedPreferences("OVMS", 0).edit();
localEditor.putString("LastVehicleID", this.carData.VehicleID);
localEditor.commit();
ObjectOutputStream localObjectOutputStream = new ObjectOutputStream(openFileOutput("OVMSSavedCars.obj", 0));
localObjectOutputStream.writeObject(this.allSavedCars);
localObjectOutputStream.close();
return;
}
catch (Exception localException)
{
while (true)
localException.printStackTrace();
}
}
private class ServerCommandResponseHandler
implements Runnable
{
String message;
ServerCommandResponseHandler(String arg2)
{
Object localObject;
this.message = localObject;
}
public void run()
{
Toast.makeText(OVMSActivity.this, this.message, 0).show();
}
}
private class TCPTask extends AsyncTask<Void, Integer, Void>
{
private BufferedReader Inputstream;
private PrintWriter Outputstream;
public Socket Sock;
private CarData carData = OVMSActivity.this.carData;
private byte[] pmDigest;
private RC4 pmcipher;
private RC4 rxcipher;
private boolean socketMarkedClosed;
private RC4 txcipher;
public TCPTask(CarData arg2)
{
}
private void ConnInit()
{
String str1 = this.carData.NetPass;
String str2 = this.carData.VehicleID;
char[] arrayOfChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
Random localRandom = new Random();
String str3 = "";
int i = 0;
while (true)
{
byte[] arrayOfByte1;
if (i >= 22)
arrayOfByte1 = str3.getBytes();
try
{
HMAC localHMAC = new HMAC("MD5", str1.getBytes());
localHMAC.update(arrayOfByte1);
String str4 = Base64.encodeBytes(localHMAC.sign());
Log.d("TCP", "Connecting " + this.carData.ServerNameOrIP);
this.Sock = new Socket();
this.Sock.setSoTimeout(10000);
this.Sock.connect(new InetSocketAddress(this.carData.ServerNameOrIP, 6867), 5000);
this.Outputstream = new PrintWriter(new BufferedWriter(new OutputStreamWriter(this.Sock.getOutputStream())), true);
Object[] arrayOfObject1 = new Object[3];
arrayOfObject1[0] = str3;
arrayOfObject1[1] = str4;
arrayOfObject1[2] = str2;
Log.d("OVMS", String.format("TX: MP-A 0 %s %s %s", arrayOfObject1));
PrintWriter localPrintWriter = this.Outputstream;
Object[] arrayOfObject2 = new Object[3];
arrayOfObject2[0] = str3;
arrayOfObject2[1] = str4;
arrayOfObject2[2] = str2;
localPrintWriter.println(String.format("MP-A 0 %s %s %s", arrayOfObject2));
this.Inputstream = new BufferedReader(new InputStreamReader(this.Sock.getInputStream()));
try
{
String[] arrayOfString = this.Inputstream.readLine().trim().split("[ ]+");
Object[] arrayOfObject3 = new Object[4];
arrayOfObject3[0] = arrayOfString[0];
arrayOfObject3[1] = arrayOfString[1];
arrayOfObject3[2] = arrayOfString[2];
arrayOfObject3[3] = arrayOfString[3];
Log.d("OVMS", String.format("RX: %s %s %s %s", arrayOfObject3));
String str5 = arrayOfString[2];
byte[] arrayOfByte2 = str5.getBytes();
byte[] arrayOfByte3 = Base64.decode(arrayOfString[3]);
localHMAC.clear();
localHMAC.update(arrayOfByte2);
if (!Arrays.equals(localHMAC.sign(), arrayOfByte3))
{
Object[] arrayOfObject6 = new Object[2];
arrayOfObject6[0] = Base64.encodeBytes(localHMAC.sign());
arrayOfObject6[1] = arrayOfString[3];
Log.d("OVMS", String.format("Server authentication failed. Expected %s Got %s", arrayOfObject6));
localHMAC.clear();
String str6 = str5 + str3;
localHMAC.update(str6.getBytes());
byte[] arrayOfByte4 = localHMAC.sign();
Object[] arrayOfObject4 = new Object[3];
arrayOfObject4[0] = str6;
arrayOfObject4[1] = toHex(arrayOfByte4).toLowerCase();
arrayOfObject4[2] = Base64.encodeBytes(arrayOfByte4);
Log.d("OVMS", String.format("Client version of the shared key is %s - (%s) %s", arrayOfObject4));
RC4 localRC41 = new RC4(arrayOfByte4);
this.rxcipher = localRC41;
RC4 localRC42 = new RC4(arrayOfByte4);
this.txcipher = localRC42;
localObject = "";
j = 0;
if (j < 1024)
break label745;
this.rxcipher.rc4(((String)localObject).getBytes());
this.txcipher.rc4(((String)localObject).getBytes());
Object[] arrayOfObject5 = new Object[1];
arrayOfObject5[0] = this.carData.ServerNameOrIP;
Log.d("OVMS", String.format("Connected to %s. Ciphers initialized. Listening...", arrayOfObject5));
OVMSActivity.this.loginComplete();
return;
str3 = str3 + arrayOfChar[localRandom.nextInt(-1 + arrayOfChar.length)];
i++;
}
}
catch (Exception localException2)
{
while (true)
OVMSActivity.this.notifyServerSocketError(localException2);
}
}
catch (UnknownHostException localUnknownHostException)
{
while (true)
{
OVMSActivity.this.notifyServerSocketError(localUnknownHostException);
continue;
Log.d("OVMS", "Server authentication OK.");
}
}
catch (SocketTimeoutException localSocketTimeoutException)
{
while (true)
{
int j;
OVMSActivity.this.notifyServerSocketError(localSocketTimeoutException);
continue;
String str7 = localObject + "0";
Object localObject = str7;
j++;
}
}
catch (Exception localException1)
{
while (true)
label745: OVMSActivity.this.notifyServerSocketError(localException1);
}
}
}
private void notifyCommandResponse(String paramString)
{
if (OVMSActivity.this != null)
{
OVMSActivity.this.mCommandResponse = new OVMSActivity.ServerCommandResponseHandler(OVMSActivity.this, paramString);
OVMSActivity.this.UIHandler.post(OVMSActivity.this.mCommandResponse);
}
}
private void processMessage(String paramString)
{
char c = paramString.charAt(0);
Object localObject1 = paramString.substring(1);
int i5;
if (c == 'E')
{
i5 = paramString.charAt(1);
if (i5 != 84)
break label323;
Log.d("TCP", "ET MSG Received: " + paramString);
}
label300: label1214: label1345:
while (true)
{
try
{
String str8 = paramString.substring(2);
HMAC localHMAC = new HMAC("MD5", this.carData.RegPass.getBytes());
localHMAC.update(str8.getBytes());
this.pmDigest = localHMAC.sign();
Log.d("OVMS", "Paranoid Mode Token Accepted. Entering Privacy Mode. (pmDigest = " + Base64.encodeBytes(this.pmDigest) + ")");
Log.d("TCP", c + " MSG Received: " + (String)localObject1);
DataLog.Log("[RX] " + c + (String)localObject1);
switch (c)
{
default:
return;
case 'Z':
case 'S':
case 'T':
case 'L':
case 'D':
case 'F':
case 'f':
case 'W':
case 'g':
case 'a':
case 'C':
case 'c':
}
}
catch (Exception localException3)
{
Log.d("ERR", localException3.getMessage());
localException3.printStackTrace();
continue;
}
label323: if (i5 == 77)
{
Log.d("TCP", "EM MSG Received: " + paramString);
c = paramString.charAt(2);
localObject1 = paramString.substring(3);
try
{
byte[] arrayOfByte = Base64.decode((String)localObject1);
this.pmcipher = new RC4(this.pmDigest);
Object localObject3 = "";
for (int i6 = 0; ; i6++)
{
if (i6 >= 1024)
{
this.pmcipher.rc4(((String)localObject3).getBytes());
String str7 = new String(this.pmcipher.rc4(arrayOfByte));
localObject1 = str7;
if (this.carData.ParanoidMode)
break;
Log.d("OVMS", "Paranoid Mode Detected");
this.carData.ParanoidMode = true;
refreshUI();
break;
}
String str6 = localObject3 + "0";
localObject3 = str6;
}
}
catch (Exception localException2)
{
while (true)
{
Log.d("ERR", localException2.getMessage());
localException2.printStackTrace();
}
}
this.carData.Data_CarsConnected = Integer.parseInt((String)localObject1);
refreshUI();
continue;
String[] arrayOfString11 = ((String)localObject1).split(",\\s*");
if (arrayOfString11.length >= 8)
{
Log.d("TCP", "S MSG Validated");
this.carData.Data_SOC = Integer.parseInt(arrayOfString11[0]);
this.carData.Data_DistanceUnit = arrayOfString11[1].toString();
this.carData.Data_LineVoltage = Integer.parseInt(arrayOfString11[2]);
this.carData.Data_ChargeCurrent = Integer.parseInt(arrayOfString11[3]);
this.carData.Data_ChargeState = arrayOfString11[4].toString();
this.carData.Data_ChargeMode = arrayOfString11[5].toString();
this.carData.Data_IdealRange = Integer.parseInt(arrayOfString11[6]);
this.carData.Data_EstimatedRange = Integer.parseInt(arrayOfString11[7]);
}
if (arrayOfString11.length >= 14)
{
this.carData.Data_ChargeAmpsLimit = Integer.parseInt(arrayOfString11[8]);
this.carData.Data_ChargerB4State = Integer.parseInt(arrayOfString11[9]);
this.carData.Data_ChargerKWHConsumed = Double.parseDouble(arrayOfString11[10]);
this.carData.Data_ChargeSubstate = Integer.parseInt(arrayOfString11[11]);
this.carData.Data_ChargeState_raw = Integer.parseInt(arrayOfString11[12]);
this.carData.Data_ChargeMode_raw = Integer.parseInt(arrayOfString11[13]);
}
refreshUI();
continue;
if (((String)localObject1).length() > 0)
{
this.carData.Data_LastCarUpdate_raw = Long.parseLong((String)localObject1);
this.carData.Data_LastCarUpdate = new Date(new Date().getTime() - 1000L * this.carData.Data_LastCarUpdate_raw);
if (this.carData.Data_ParkedTime_raw > 0.0D)
this.carData.Data_ParkedTime = new Date(this.carData.Data_LastCarUpdate.getTime() - 1000L * ()this.carData.Data_ParkedTime_raw);
refreshUI();
}
else
{
Log.d("TCP", "T MSG Invalid");
continue;
String[] arrayOfString10 = ((String)localObject1).split(",\\s*");
if (arrayOfString10.length >= 2)
{
Log.d("TCP", "L MSG Validated");
this.carData.Data_Latitude = Double.parseDouble(arrayOfString10[0]);
this.carData.Data_Longitude = Double.parseDouble(arrayOfString10[1]);
}
if (arrayOfString10.length >= 6)
{
this.carData.Data_Direction = Double.parseDouble(arrayOfString10[2]);
this.carData.Data_Altitude = Double.parseDouble(arrayOfString10[3]);
this.carData.Data_GPSLocked = arrayOfString10[4].trim().equals("1");
this.carData.Data_GPSDataStale = arrayOfString10[5].trim().equals("0");
}
refreshUI();
continue;
String[] arrayOfString9 = ((String)localObject1).split(",\\s*");
if (arrayOfString9.length >= 9)
{
Log.d("TCP", "D MSG Validated");
int i2 = Integer.parseInt(arrayOfString9[0]);
CarData localCarData1 = this.carData;
boolean bool1;
label1096: boolean bool2;
label1119: boolean bool3;
label1142: boolean bool4;
boolean bool5;
boolean bool6;
boolean bool7;
label1240: boolean bool8;
label1273: boolean bool9;
boolean bool10;
boolean bool11;
boolean bool12;
label1370: boolean bool13;
if ((i2 & 0x1) > 0)
{
bool1 = true;
localCarData1.Data_LeftDoorOpen = bool1;
CarData localCarData2 = this.carData;
if ((i2 & 0x2) <= 0)
break label1643;
bool2 = true;
localCarData2.Data_RightDoorOpen = bool2;
CarData localCarData3 = this.carData;
if ((i2 & 0x4) <= 0)
break label1649;
bool3 = true;
localCarData3.Data_ChargePortOpen = bool3;
CarData localCarData4 = this.carData;
if ((i2 & 0x8) <= 0)
break label1655;
bool4 = true;
localCarData4.Data_PilotPresent = bool4;
CarData localCarData5 = this.carData;
if ((i2 & 0x10) <= 0)
break label1661;
bool5 = true;
localCarData5.Data_Charging = bool5;
CarData localCarData6 = this.carData;
if ((i2 & 0x40) <= 0)
break label1667;
bool6 = true;
localCarData6.Data_HandBrakeApplied = bool6;
CarData localCarData7 = this.carData;
if ((i2 & 0x80) <= 1)
break label1673;
bool7 = true;
localCarData7.Data_CarPoweredON = bool7;
int i3 = Integer.parseInt(arrayOfString9[1]);
CarData localCarData8 = this.carData;
if ((i3 & 0x8) <= 0)
break label1679;
bool8 = true;
localCarData8.Data_PINLocked = bool8;
CarData localCarData9 = this.carData;
if ((i3 & 0x10) <= 0)
break label1685;
bool9 = true;
localCarData9.Data_ValetON = bool9;
CarData localCarData10 = this.carData;
if ((i3 & 0x20) <= 0)
break label1691;
bool10 = true;
localCarData10.Data_HeadlightsON = bool10;
CarData localCarData11 = this.carData;
if ((i3 & 0x40) <= 0)
break label1697;
bool11 = true;
localCarData11.Data_BonnetOpen = bool11;
CarData localCarData12 = this.carData;
if ((i3 & 0x80) <= 0)
break label1703;
bool12 = true;
localCarData12.Data_TrunkOpen = bool12;
int i4 = Integer.parseInt(arrayOfString9[2]);
CarData localCarData13 = this.carData;
if (i4 != 4)
break label1709;
bool13 = true;
label1401: localCarData13.Data_CarLocked = bool13;
this.carData.Data_TemperaturePEM = Double.parseDouble(arrayOfString9[3]);
this.carData.Data_TemperatureMotor = Double.parseDouble(arrayOfString9[4]);
this.carData.Data_TemperatureBattery = Double.parseDouble(arrayOfString9[5]);
this.carData.Data_TripMeter = Double.parseDouble(arrayOfString9[6]);
this.carData.Data_Odometer = Double.parseDouble(arrayOfString9[7]);
this.carData.Data_Speed = Double.parseDouble(arrayOfString9[8]);
if (arrayOfString9.length >= 10)
{
this.carData.Data_ParkedTime_raw = Double.parseDouble(arrayOfString9[9]);
if (this.carData.Data_LastCarUpdate != null)
break label1715;
}
}
for (this.carData.Data_ParkedTime = null; ; this.carData.Data_ParkedTime = new Date(this.carData.Data_LastCarUpdate.getTime() - 1000L * ()this.carData.Data_ParkedTime_raw))
{
if (arrayOfString9.length >= 11)
this.carData.Data_TemperatureAmbient = Double.parseDouble(arrayOfString9[10]);
if (arrayOfString9.length >= 14)
{
this.carData.Data_CoolingPumpON_DoorState3 = arrayOfString9[11].trim().equals("1");
this.carData.Data_PEM_Motor_Battery_TemperaturesDataStale = arrayOfString9[12].trim().equals("0");
this.carData.Data_AmbientTemperatureDataStale = arrayOfString9[13].trim().equals("0");
}
refreshUI();
break;
bool1 = false;
break label1096;
label1643: bool2 = false;
break label1119;
label1649: bool3 = false;
break label1142;
label1655: bool4 = false;
break label1166;
label1661: bool5 = false;
break label1190;
bool6 = false;
break label1214;
bool7 = false;
break label1240;
bool8 = false;
break label1273;
bool9 = false;
break label1297;
bool10 = false;
break label1321;
bool11 = false;
break label1345;
bool12 = false;
break label1370;
bool13 = false;
break label1401;
}
String[] arrayOfString8 = ((String)localObject1).split(",\\s*");
if (arrayOfString8.length >= 3)
{
Log.d("TCP", "F MSG Validated");
this.carData.Data_CarModuleFirmwareVersion = arrayOfString8[0].toString();
this.carData.Data_VIN = arrayOfString8[1].toString();
this.carData.Data_CarModuleGSMSignalLevel = arrayOfString8[2].toString();
if (arrayOfString8.length >= 4)
{
this.carData.Data_Features.put(Integer.valueOf(15), arrayOfString8[3].toString());
this.carData.Data_CANWriteEnabled = arrayOfString8[3].trim().equals("1");
}
if (arrayOfString8.length >= 5)
this.carData.Data_CarType = arrayOfString8[4].toString();
refreshUI();
}
String[] arrayOfString7 = ((String)localObject1).split(",\\s*");
if (arrayOfString7.length >= 1)
{
Log.d("TCP", "f MSG Validated");
this.carData.Data_OVMSServerFirmwareVersion = arrayOfString7[0].toString();
refreshUI();
continue;
String[] arrayOfString6 = ((String)localObject1).split(",\\s*");
if (arrayOfString6.length >= 8)
{
Log.d("TCP", "W MSG Validated");
this.carData.Data_FRWheelPressure = Double.parseDouble(arrayOfString6[0]);
this.carData.Data_FRWheelTemperature = Double.parseDouble(arrayOfString6[1]);
this.carData.Data_RRWheelPressure = Double.parseDouble(arrayOfString6[2]);
this.carData.Data_RRWheelTemperature = Double.parseDouble(arrayOfString6[3]);
this.carData.Data_FLWheelPressure = Double.parseDouble(arrayOfString6[4]);
this.carData.Data_FLWheelTemperature = Double.parseDouble(arrayOfString6[5]);
this.carData.Data_RLWheelPressure = Double.parseDouble(arrayOfString6[6]);
this.carData.Data_RLWheelTemperature = Double.parseDouble(arrayOfString6[7]);
if (arrayOfString6.length >= 9)
this.carData.Data_TPMSDataStale = arrayOfString6[8].trim().equals("0");
refreshUI();
continue;
String[] arrayOfString5 = ((String)localObject1).split(",\\s*");
if (arrayOfString5.length >= 9)
{
Log.d("TCP", "g MSG Validated");
CarData_Group localCarData_Group1 = new CarData_Group();
localCarData_Group1.VehicleID = arrayOfString5[0];
localCarData_Group1.SOC = Double.parseDouble(arrayOfString5[2]);
localCarData_Group1.Speed = Double.parseDouble(arrayOfString5[3]);
localCarData_Group1.Direction = Double.parseDouble(arrayOfString5[4]);
localCarData_Group1.Altitude = Double.parseDouble(arrayOfString5[5]);
localCarData_Group1.GPSLocked = arrayOfString5[6].trim().equals("1");
localCarData_Group1.GPSDataStale = arrayOfString5[7].trim().equals("0");
localCarData_Group1.Latitude = Double.parseDouble(arrayOfString5[8]);
localCarData_Group1.Longitude = Double.parseDouble(arrayOfString5[9]);
if (this.carData.Group == null)
this.carData.Group = new HashMap();
CarData_Group localCarData_Group2 = (CarData_Group)this.carData.Group.get(localCarData_Group1.VehicleID);
if (localCarData_Group2 != null)
localCarData_Group1.VehicleImageDrawable = localCarData_Group2.VehicleImageDrawable;
this.carData.Group.put(arrayOfString5[0], localCarData_Group1);
refreshUI();
continue;
Log.d("TCP", "Server acknowleged ping");
continue;
if (((String)localObject1).length() == 0)
{
Log.d("TCP", c + " MSG Code Invalid");
}
else
{
Object localObject2 = "";
int j;
String[] arrayOfString4;
try
{
if (((String)localObject1).indexOf(',') > 0)
{
j = Integer.parseInt(((String)localObject1).substring(0, ((String)localObject1).indexOf(',')));
String str5 = ((String)localObject1).substring(1 + ((String)localObject1).indexOf(','));
localObject2 = str5;
}
while (true)
switch (j)
{
default:
arrayOfString4 = ((String)localObject2).split(",\\s*");
if (!arrayOfString4[0].equals("0"))
break label3529;
Object[] arrayOfObject10 = new Object[1];
arrayOfObject10[0] = ServerCommands.toString(j);
notifyCommandResponse(String.format("Server Acknowledged %s", arrayOfObject10));
break label300;
int i = Integer.parseInt((String)localObject1);
j = i;
case 1:
case 3:
case 30:
}
}
catch (Exception localException1)
{
Log.d("TCP", "!!! " + c + " message is invalid.");
}
continue;
String[] arrayOfString3 = ((String)localObject2).split(",");
String str3;
int n;
if (arrayOfString3.length > 4)
{
str3 = "";
n = 3;
int i1 = arrayOfString3.length;
if (n >= i1)
{
Object[] arrayOfObject7 = new Object[2];
arrayOfObject7[0] = arrayOfString3[1];
arrayOfObject7[1] = str3;
Log.d("TCP", String.format("FEATURE %s = %s", arrayOfObject7));
this.carData.Data_Features.put(Integer.valueOf(Integer.parseInt(arrayOfString3[1])), str3);
}
}
while (true)
{
if (Integer.parseInt(arrayOfString3[1]) != -1 + Integer.parseInt(arrayOfString3[2]))
break label2912;
this.carData.Data_Features_LastRefreshed = new Date();
refreshUI();
break;
StringBuilder localStringBuilder2 = new StringBuilder(String.valueOf(str3));
if (str3.length() > 0);
for (String str4 = ","; ; str4 = "")
{
str3 = str4 + arrayOfString3[n];
n++;
break;
}
if (arrayOfString3.length == 4)
{
Object[] arrayOfObject6 = new Object[2];
arrayOfObject6[0] = arrayOfString3[1];
arrayOfObject6[1] = arrayOfString3[3];
Log.d("TCP", String.format("FEATURE %s = %s", arrayOfObject6));
this.carData.Data_Features.put(Integer.valueOf(Integer.parseInt(arrayOfString3[1])), arrayOfString3[3]);
}
else if (arrayOfString3.length >= 2)
{
Object[] arrayOfObject5 = new Object[1];
arrayOfObject5[0] = arrayOfString3[1];
Log.d("TCP", String.format("FEATURE %s = EMPTY", arrayOfObject5));
this.carData.Data_Features.put(Integer.valueOf(Integer.parseInt(arrayOfString3[1])), "");
}
}
label2912: continue;
String[] arrayOfString2 = ((String)localObject2).split(",");
String str1;
int k;
if (arrayOfString2.length > 4)
{
str1 = "";
k = 3;
int m = arrayOfString2.length;
if (k >= m)
{
Object[] arrayOfObject4 = new Object[2];
arrayOfObject4[0] = arrayOfString2[1];
arrayOfObject4[1] = str1;
Log.d("TCP", String.format("PARAMETER %s = %s", arrayOfObject4));
this.carData.Data_Parameters.put(Integer.valueOf(Integer.parseInt(arrayOfString2[1])), str1);
}
}
while (true)
{
if (Integer.parseInt(arrayOfString2[1]) != -1 + Integer.parseInt(arrayOfString2[2]))
break label3238;
this.carData.Data_Parameters_LastRefreshed = new Date();
refreshUI();
break;
StringBuilder localStringBuilder1 = new StringBuilder(String.valueOf(str1));
if (str1.length() > 0);
for (String str2 = ","; ; str2 = "")
{
str1 = str2 + arrayOfString2[k];
k++;
break;
}
if (arrayOfString2.length == 4)
{
Object[] arrayOfObject3 = new Object[2];
arrayOfObject3[0] = arrayOfString2[1];
arrayOfObject3[1] = arrayOfString2[3];
Log.d("TCP", String.format("PARAMETER %s = %s", arrayOfObject3));
this.carData.Data_Parameters.put(Integer.valueOf(Integer.parseInt(arrayOfString2[1])), arrayOfString2[3]);
}
else if (arrayOfString2.length >= 2)
{
Object[] arrayOfObject2 = new Object[1];
arrayOfObject2[0] = arrayOfString2[1];
Log.d("TCP", String.format("PARAMETER %s = EMPTY", arrayOfObject2));
this.carData.Data_Parameters.put(Integer.valueOf(Integer.parseInt(arrayOfString2[1])), "");
}
}
continue;
String[] arrayOfString1 = ((String)localObject2).split(",\\s*");
if (arrayOfString1.length >= 3)
{
if (this.carData.Data_GPRSUtilization == null)
this.carData.Data_GPRSUtilization = new GPRSUtilization(OVMSActivity.this);
if (arrayOfString1[1].equals("1"))
this.carData.Data_GPRSUtilization.Clear();
SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try
{
this.carData.Data_GPRSUtilization.AddData(localSimpleDateFormat.parse(arrayOfString1[3]), Long.parseLong(arrayOfString1[4]), Long.parseLong(arrayOfString1[5]), Long.parseLong(arrayOfString1[6]), Long.parseLong(arrayOfString1[7]));
Object[] arrayOfObject1 = new Object[7];
arrayOfObject1[0] = arrayOfString1[1];
arrayOfObject1[1] = arrayOfString1[2];
arrayOfObject1[2] = localSimpleDateFormat.parse(arrayOfString1[3]).toLocaleString();
arrayOfObject1[3] = arrayOfString1[4];
arrayOfObject1[4] = arrayOfString1[5];
arrayOfObject1[5] = arrayOfString1[6];
arrayOfObject1[6] = arrayOfString1[7];
Log.d("TCP", String.format("GPRS UTIL [%s/%s] %s: car_rx %s car_tx %s app_rx %s app_tx %s", arrayOfObject1));
if (!arrayOfString1[1].equals(arrayOfString1[2]))
continue;
this.carData.Data_GPRSUtilization.LastDataRefresh = new Date();
this.carData.Data_GPRSUtilization.Save(OVMSActivity.this);
refreshUI();
}
catch (NumberFormatException localNumberFormatException)
{
while (true)
localNumberFormatException.printStackTrace();
}
catch (ParseException localParseException)
{
while (true)
localParseException.printStackTrace();
}
label3529: if (arrayOfString4[0].equals("1"))
if (arrayOfString4.length > 1)
{
Object[] arrayOfObject9 = new Object[2];
arrayOfObject9[0] = ServerCommands.toString(j);
arrayOfObject9[1] = arrayOfString4[1];
notifyCommandResponse(String.format("[ERROR] %s\n%s\nTry turning on CAN_WRITE in the settings tab.", arrayOfObject9));
}
else
{
Object[] arrayOfObject8 = new Object[1];
arrayOfObject8[0] = ServerCommands.toString(j);
notifyCommandResponse(String.format("[ERROR] %s\nTry turning on CAN_WRITE in the settings tab.", arrayOfObject8));
}
}
}
}
}
}
}
}
}
}
}
private void refreshUI()
{
if (OVMSActivity.this != null)
OVMSActivity.this.UIHandler.post(OVMSActivity.this.mRefresh);
}
private String toHex(byte[] paramArrayOfByte)
{
BigInteger localBigInteger = new BigInteger(1, paramArrayOfByte);
String str = "%0" + (paramArrayOfByte.length << 1) + "X";
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = localBigInteger;
return String.format(str, arrayOfObject);
}
public void ConnClose()
{
try
{
this.socketMarkedClosed = true;
OVMSActivity.this.SuppressServerErrorDialog = true;
OVMSActivity.this.isLoggedIn = false;
if (this.Sock != null)
this.Sock.close();
}
catch (IOException localIOException)
{
try
{
Thread.sleep(200L);
label41: this.Sock = null;
OVMSActivity.this.SuppressServerErrorDialog = false;
while (true)
{
return;
localIOException = localIOException;
localIOException.printStackTrace();
}
}
catch (InterruptedException localInterruptedException)
{
break label41;
}
}
}
public void Ping()
{
SendCommand("A");
}
public boolean SendCommand(String paramString)
{
boolean bool;
if (!OVMSActivity.this.isLoggedIn)
{
Log.d("TCP", "Server not ready. TX aborted.");
bool = false;
}
while (true)
{
return bool;
DataLog.Log("[TX] " + paramString);
try
{
String str2;
int i;
Object localObject;
if ((this.carData.ParanoidMode) && (!paramString.startsWith("A")) && (!paramString.startsWith("C")) && (!paramString.startsWith("C30")) && (!paramString.startsWith("p")))
{
this.pmcipher = new RC4(this.pmDigest);
str2 = "";
i = 0;
if (i >= 1024)
{
this.pmcipher.rc4(str2.getBytes());
String str3 = Base64.encodeBytes(this.pmcipher.rc4(paramString.getBytes()));
localObject = "MP-0 EM" + str3;
Log.d("TCP", "TX (Paranoid-Mode Command): " + (String)localObject + " (using pmDigest: " + Base64.encodeBytes(this.pmDigest) + ")");
}
}
while (true)
{
byte[] arrayOfByte = this.txcipher.rc4(((String)localObject).getBytes());
Log.d("TCP", "TX (Encrypted): " + Base64.encodeBytes(arrayOfByte));
this.Outputstream.println(Base64.encodeBytes(arrayOfByte));
break label342;
str2 = str2 + "0";
i++;
break;
String str1 = "MP-0 " + paramString;
localObject = str1;
}
}
catch (Exception localException)
{
localException.printStackTrace();
OVMSActivity.this.notifyServerSocketError(localException);
label342: bool = true;
}
}
}
protected Void doInBackground(Void[] paramArrayOfVoid)
{
Log.d("TCP", "Starting background TCP thread");
OVMSActivity.this.SuppressServerErrorDialog = false;
this.socketMarkedClosed = false;
try
{
ConnInit();
if (OVMSActivity.this.isLoggedIn)
{
Log.d("TCP", "Background TCP ready");
this.Sock.setSoTimeout(5000);
boolean bool1 = this.Sock.isConnected();
if (bool1);
}
else
{
label69: if (this.Outputstream != null)
this.Outputstream.close();
}
}
catch (Exception localException1)
{
try
{
while (true)
{
if (this.Inputstream != null)
this.Inputstream.close();
try
{
label97: if (this.Sock != null)
this.Sock.close();
label111: this.Sock = null;
Log.d("TCP", "TCP thread ending");
return null;
Object localObject = "";
try
{
while (true)
{
while (true)
{
String str4 = this.Inputstream.readLine();
localObject = str4;
if (localObject == null)
break label341;
label149: if ((localObject == null) || (((String)localObject).length() <= 5))
break;
String str1 = ((String)localObject).trim();
String str2 = new String(this.rxcipher.rc4(Base64.decode(str1)));
if ((str2 == null) || (str2.length() <= 5))
break;
String str3 = str2.trim();
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = str3;
arrayOfObject[1] = str1;
Log.d("OVMS", String.format("RX: %s (%s)", arrayOfObject));
boolean bool2 = str3.substring(0, 5).equals("MP-0 ");
if (!bool2)
break label355;
try
{
processMessage(str3.substring(5));
}
catch (Exception localException4)
{
DataLog.Log("##ERROR## " + localException4.getMessage() + " - " + str3);
localException4.printStackTrace();
}
}
break;
localException1 = localException1;
if (this.socketMarkedClosed)
break label69;
OVMSActivity.this.notifyServerSocketError(localException1);
break label69;
label341: Thread.sleep(100L);
}
}
catch (IOException localIOException)
{
break label149;
label355: Log.d("OVMS", "Unknown protection scheme");
}
}
catch (Exception localException3)
{
break label111;
}
}
}
catch (Exception localException2)
{
break label97;
}
}
}
protected void onProgressUpdate(Integer[] paramArrayOfInteger)
{
}
}
}