// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) package com.openvehicles.OVMS; import android.app.*; import android.content.*; import android.content.res.Configuration; import android.content.res.Resources; import android.os.*; import android.util.Log; import android.view.*; import android.widget.TabHost; import android.widget.Toast; import java.io.*; import java.math.BigInteger; import java.net.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; // Referenced classes of package com.openvehicles.OVMS: // CarData, ServerCommands, GPRSUtilization, TabInfo_xlarge, // TabMap, Tab_SubTabNotifications, Tab_SubTabDataUtilizations, Tab_SubTabCarSettings, // TabCars, TabInfo, TabCar, TabMiscFeatures, // OVMSNotifications, OVMSWidgets, HMAC, Base64, // RC4, DataLog, CarData_Group public class OVMSActivity extends TabActivity implements android.widget.TabHost.OnTabChangeListener { private class ServerCommandResponseHandler implements Runnable { public void run() { Toast.makeText(OVMSActivity.this, message, 0).show(); } String message; final OVMSActivity this$0; ServerCommandResponseHandler(String s) { this$0 = OVMSActivity.this; super(); message = s; } } private class TCPTask extends AsyncTask { private void ConnInit() { String s; String s1; char ac[]; Random random; String s2; int i; s = carData.NetPass; s1 = carData.VehicleID; ac = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray(); random = new Random(); s2 = ""; i = 0; _L7: if(i < 22) goto _L2; else goto _L1 _L1: byte abyte0[] = s2.getBytes(); HMAC hmac; hmac = new HMAC("MD5", s.getBytes()); hmac.update(abyte0); String s3 = Base64.encodeBytes(hmac.sign()); Log.d("TCP", (new StringBuilder("Connecting ")).append(carData.ServerNameOrIP).toString()); Sock = new Socket(); Sock.setSoTimeout(10000); Sock.connect(new InetSocketAddress(carData.ServerNameOrIP, 6867), 5000); Outputstream = new PrintWriter(new BufferedWriter(new OutputStreamWriter(Sock.getOutputStream())), true); Object aobj[] = new Object[3]; aobj[0] = s2; aobj[1] = s3; aobj[2] = s1; Log.d("OVMS", String.format("TX: MP-A 0 %s %s %s", aobj)); PrintWriter printwriter = Outputstream; Object aobj1[] = new Object[3]; aobj1[0] = s2; aobj1[1] = s3; aobj1[2] = s1; printwriter.println(String.format("MP-A 0 %s %s %s", aobj1)); Inputstream = new BufferedReader(new InputStreamReader(Sock.getInputStream())); String as[] = Inputstream.readLine().trim().split("[ ]+"); String s4; byte abyte2[]; Object aobj2[] = new Object[4]; aobj2[0] = as[0]; aobj2[1] = as[1]; aobj2[2] = as[2]; aobj2[3] = as[3]; Log.d("OVMS", String.format("RX: %s %s %s %s", aobj2)); s4 = as[2]; byte abyte1[] = s4.getBytes(); abyte2 = Base64.decode(as[3]); hmac.clear(); hmac.update(abyte1); if(Arrays.equals(hmac.sign(), abyte2)) goto _L4; else goto _L3 _L3: Object aobj5[] = new Object[2]; aobj5[0] = Base64.encodeBytes(hmac.sign()); aobj5[1] = as[3]; Log.d("OVMS", String.format("Server authentication failed. Expected %s Got %s", aobj5)); _L9: String s6; int j; hmac.clear(); String s5 = (new StringBuilder(String.valueOf(s4))).append(s2).toString(); hmac.update(s5.getBytes()); byte abyte3[] = hmac.sign(); Object aobj3[] = new Object[3]; aobj3[0] = s5; aobj3[1] = toHex(abyte3).toLowerCase(); aobj3[2] = Base64.encodeBytes(abyte3); Log.d("OVMS", String.format("Client version of the shared key is %s - (%s) %s", aobj3)); RC4 rc4 = new RC4(abyte3); rxcipher = rc4; RC4 rc4_1 = new RC4(abyte3); txcipher = rc4_1; s6 = ""; j = 0; _L10: if(j < 1024) goto _L6; else goto _L5 _L5: rxcipher.rc4(s6.getBytes()); txcipher.rc4(s6.getBytes()); Object aobj4[] = new Object[1]; aobj4[0] = carData.ServerNameOrIP; Log.d("OVMS", String.format("Connected to %s. Ciphers initialized. Listening...", aobj4)); loginComplete(); _L8: return; _L2: s2 = (new StringBuilder(String.valueOf(s2))).append(ac[random.nextInt(-1 + ac.length)]).toString(); i++; goto _L7 Exception exception1; exception1; String s7; try { notifyServerSocketError(exception1); } catch(UnknownHostException unknownhostexception) { notifyServerSocketError(unknownhostexception); } catch(SocketTimeoutException sockettimeoutexception) { notifyServerSocketError(sockettimeoutexception); } catch(Exception exception) { notifyServerSocketError(exception); } goto _L8 _L4: Log.d("OVMS", "Server authentication OK."); goto _L9 _L6: s7 = (new StringBuilder(String.valueOf(s6))).append("0").toString(); s6 = s7; j++; goto _L10 } private void notifyCommandResponse(String s) { if(OVMSActivity.this != null) { mCommandResponse = new ServerCommandResponseHandler(s); UIHandler.post(mCommandResponse); } } private void processMessage(String s) { char c; String s1; c = s.charAt(0); s1 = s.substring(1); if(c != 'E') goto _L2; else goto _L1 _L1: char c1 = s.charAt(1); if(c1 != 'T') goto _L4; else goto _L3 _L3: Log.d("TCP", (new StringBuilder("ET MSG Received: ")).append(s).toString()); try { String s11 = s.substring(2); HMAC hmac = new HMAC("MD5", carData.RegPass.getBytes()); hmac.update(s11.getBytes()); pmDigest = hmac.sign(); Log.d("OVMS", (new StringBuilder("Paranoid Mode Token Accepted. Entering Privacy Mode. (pmDigest = ")).append(Base64.encodeBytes(pmDigest)).append(")").toString()); } catch(Exception exception2) { Log.d("ERR", exception2.getMessage()); exception2.printStackTrace(); } _L2: Log.d("TCP", (new StringBuilder(String.valueOf(c))).append(" MSG Received: ").append(s1).toString()); com.openvehicles.OVMS.DataLog.Log((new StringBuilder("[RX] ")).append(c).append(s1).toString()); c; JVM INSTR lookupswitch 12: default 300 // 67: 2370 // 68: 1045 // 70: 1755 // 76: 909 // 83: 542 // 84: 787 // 87: 1943 // 90: 524 // 97: 2358 // 99: 2370 // 102: 1897 // 103: 2119; goto _L5 _L6 _L7 _L8 _L9 _L10 _L11 _L12 _L13 _L14 _L6 _L15 _L16 _L5: return; _L4: if(c1 != 'M') goto _L2; else goto _L17 _L17: Log.d("TCP", (new StringBuilder("EM MSG Received: ")).append(s).toString()); c = s.charAt(2); s1 = s.substring(3); byte abyte0[]; String s8; int j2; abyte0 = Base64.decode(s1); pmcipher = new RC4(pmDigest); s8 = ""; j2 = 0; _L20: if(j2 < 1024) goto _L19; else goto _L18 _L18: String s10; pmcipher.rc4(s8.getBytes()); s10 = new String(pmcipher.rc4(abyte0)); s1 = s10; _L21: if(!carData.ParanoidMode) { Log.d("OVMS", "Paranoid Mode Detected"); carData.ParanoidMode = true; refreshUI(); } goto _L2 _L19: String s9 = (new StringBuilder(String.valueOf(s8))).append("0").toString(); s8 = s9; j2++; goto _L20 Exception exception1; exception1; Log.d("ERR", exception1.getMessage()); exception1.printStackTrace(); goto _L21 _L13: carData.Data_CarsConnected = Integer.parseInt(s1); refreshUI(); goto _L5 _L10: String as10[] = s1.split(",\\s*"); if(as10.length >= 8) { Log.d("TCP", "S MSG Validated"); carData.Data_SOC = Integer.parseInt(as10[0]); carData.Data_DistanceUnit = as10[1].toString(); carData.Data_LineVoltage = Integer.parseInt(as10[2]); carData.Data_ChargeCurrent = Integer.parseInt(as10[3]); carData.Data_ChargeState = as10[4].toString(); carData.Data_ChargeMode = as10[5].toString(); carData.Data_IdealRange = Integer.parseInt(as10[6]); carData.Data_EstimatedRange = Integer.parseInt(as10[7]); } if(as10.length >= 14) { carData.Data_ChargeAmpsLimit = Integer.parseInt(as10[8]); carData.Data_ChargerB4State = Integer.parseInt(as10[9]); carData.Data_ChargerKWHConsumed = Double.parseDouble(as10[10]); carData.Data_ChargeSubstate = Integer.parseInt(as10[11]); carData.Data_ChargeState_raw = Integer.parseInt(as10[12]); carData.Data_ChargeMode_raw = Integer.parseInt(as10[13]); } refreshUI(); goto _L5 _L11: if(s1.length() > 0) { carData.Data_LastCarUpdate_raw = Long.parseLong(s1); carData.Data_LastCarUpdate = new Date((new Date()).getTime() - 1000L * carData.Data_LastCarUpdate_raw); if(carData.Data_ParkedTime_raw > 0.0D) carData.Data_ParkedTime = new Date(carData.Data_LastCarUpdate.getTime() - 1000L * (long)carData.Data_ParkedTime_raw); refreshUI(); } else { Log.d("TCP", "T MSG Invalid"); } goto _L5 _L9: String as9[] = s1.split(",\\s*"); if(as9.length >= 2) { Log.d("TCP", "L MSG Validated"); carData.Data_Latitude = Double.parseDouble(as9[0]); carData.Data_Longitude = Double.parseDouble(as9[1]); } if(as9.length >= 6) { carData.Data_Direction = Double.parseDouble(as9[2]); carData.Data_Altitude = Double.parseDouble(as9[3]); carData.Data_GPSLocked = as9[4].trim().equals("1"); carData.Data_GPSDataStale = as9[5].trim().equals("0"); } refreshUI(); goto _L5 _L7: String as8[] = s1.split(",\\s*"); if(as8.length >= 9) { Log.d("TCP", "D MSG Validated"); int k1 = Integer.parseInt(as8[0]); CarData cardata = carData; boolean flag; CarData cardata1; boolean flag1; CarData cardata2; boolean flag2; CarData cardata3; boolean flag3; CarData cardata4; boolean flag4; CarData cardata5; boolean flag5; CarData cardata6; boolean flag6; int l1; CarData cardata7; boolean flag7; CarData cardata8; boolean flag8; CarData cardata9; boolean flag9; CarData cardata10; boolean flag10; CarData cardata11; boolean flag11; int i2; CarData cardata12; boolean flag12; if((k1 & 1) > 0) flag = true; else flag = false; cardata.Data_LeftDoorOpen = flag; cardata1 = carData; if((k1 & 2) > 0) flag1 = true; else flag1 = false; cardata1.Data_RightDoorOpen = flag1; cardata2 = carData; if((k1 & 4) > 0) flag2 = true; else flag2 = false; cardata2.Data_ChargePortOpen = flag2; cardata3 = carData; if((k1 & 8) > 0) flag3 = true; else flag3 = false; cardata3.Data_PilotPresent = flag3; cardata4 = carData; if((k1 & 0x10) > 0) flag4 = true; else flag4 = false; cardata4.Data_Charging = flag4; cardata5 = carData; if((k1 & 0x40) > 0) flag5 = true; else flag5 = false; cardata5.Data_HandBrakeApplied = flag5; cardata6 = carData; if((k1 & 0x80) > 1) flag6 = true; else flag6 = false; cardata6.Data_CarPoweredON = flag6; l1 = Integer.parseInt(as8[1]); cardata7 = carData; if((l1 & 8) > 0) flag7 = true; else flag7 = false; cardata7.Data_PINLocked = flag7; cardata8 = carData; if((l1 & 0x10) > 0) flag8 = true; else flag8 = false; cardata8.Data_ValetON = flag8; cardata9 = carData; if((l1 & 0x20) > 0) flag9 = true; else flag9 = false; cardata9.Data_HeadlightsON = flag9; cardata10 = carData; if((l1 & 0x40) > 0) flag10 = true; else flag10 = false; cardata10.Data_BonnetOpen = flag10; cardata11 = carData; if((l1 & 0x80) > 0) flag11 = true; else flag11 = false; cardata11.Data_TrunkOpen = flag11; i2 = Integer.parseInt(as8[2]); cardata12 = carData; if(i2 == 4) flag12 = true; else flag12 = false; cardata12.Data_CarLocked = flag12; carData.Data_TemperaturePEM = Double.parseDouble(as8[3]); carData.Data_TemperatureMotor = Double.parseDouble(as8[4]); carData.Data_TemperatureBattery = Double.parseDouble(as8[5]); carData.Data_TripMeter = Double.parseDouble(as8[6]); carData.Data_Odometer = Double.parseDouble(as8[7]); carData.Data_Speed = Double.parseDouble(as8[8]); if(as8.length >= 10) { carData.Data_ParkedTime_raw = Double.parseDouble(as8[9]); if(carData.Data_LastCarUpdate == null) carData.Data_ParkedTime = null; else carData.Data_ParkedTime = new Date(carData.Data_LastCarUpdate.getTime() - 1000L * (long)carData.Data_ParkedTime_raw); } if(as8.length >= 11) carData.Data_TemperatureAmbient = Double.parseDouble(as8[10]); if(as8.length >= 14) { carData.Data_CoolingPumpON_DoorState3 = as8[11].trim().equals("1"); carData.Data_PEM_Motor_Battery_TemperaturesDataStale = as8[12].trim().equals("0"); carData.Data_AmbientTemperatureDataStale = as8[13].trim().equals("0"); } refreshUI(); } goto _L5 _L8: String as7[] = s1.split(",\\s*"); if(as7.length >= 3) { Log.d("TCP", "F MSG Validated"); carData.Data_CarModuleFirmwareVersion = as7[0].toString(); carData.Data_VIN = as7[1].toString(); carData.Data_CarModuleGSMSignalLevel = as7[2].toString(); if(as7.length >= 4) { carData.Data_Features.put(Integer.valueOf(15), as7[3].toString()); carData.Data_CANWriteEnabled = as7[3].trim().equals("1"); } if(as7.length >= 5) carData.Data_CarType = as7[4].toString(); refreshUI(); } _L15: String as6[] = s1.split(",\\s*"); if(as6.length >= 1) { Log.d("TCP", "f MSG Validated"); carData.Data_OVMSServerFirmwareVersion = as6[0].toString(); refreshUI(); } goto _L5 _L12: String as5[] = s1.split(",\\s*"); if(as5.length >= 8) { Log.d("TCP", "W MSG Validated"); carData.Data_FRWheelPressure = Double.parseDouble(as5[0]); carData.Data_FRWheelTemperature = Double.parseDouble(as5[1]); carData.Data_RRWheelPressure = Double.parseDouble(as5[2]); carData.Data_RRWheelTemperature = Double.parseDouble(as5[3]); carData.Data_FLWheelPressure = Double.parseDouble(as5[4]); carData.Data_FLWheelTemperature = Double.parseDouble(as5[5]); carData.Data_RLWheelPressure = Double.parseDouble(as5[6]); carData.Data_RLWheelTemperature = Double.parseDouble(as5[7]); if(as5.length >= 9) carData.Data_TPMSDataStale = as5[8].trim().equals("0"); refreshUI(); } goto _L5 _L16: String as4[] = s1.split(",\\s*"); if(as4.length >= 9) { Log.d("TCP", "g MSG Validated"); CarData_Group cardata_group = new CarData_Group(); cardata_group.VehicleID = as4[0]; cardata_group.SOC = Double.parseDouble(as4[2]); cardata_group.Speed = Double.parseDouble(as4[3]); cardata_group.Direction = Double.parseDouble(as4[4]); cardata_group.Altitude = Double.parseDouble(as4[5]); cardata_group.GPSLocked = as4[6].trim().equals("1"); cardata_group.GPSDataStale = as4[7].trim().equals("0"); cardata_group.Latitude = Double.parseDouble(as4[8]); cardata_group.Longitude = Double.parseDouble(as4[9]); if(carData.Group == null) carData.Group = new HashMap(); CarData_Group cardata_group1 = (CarData_Group)carData.Group.get(cardata_group.VehicleID); if(cardata_group1 != null) cardata_group.VehicleImageDrawable = cardata_group1.VehicleImageDrawable; carData.Group.put(as4[0], cardata_group); refreshUI(); } goto _L5 _L14: Log.d("TCP", "Server acknowleged ping"); goto _L5 _L6: label0: { if(s1.length() != 0) break label0; Log.d("TCP", (new StringBuilder(String.valueOf(c))).append(" MSG Code Invalid").toString()); } goto _L5 String s2 = ""; if(s1.indexOf(',') <= 0) goto _L23; else goto _L22 _L22: int j; String s7; j = Integer.parseInt(s1.substring(0, s1.indexOf(','))); s7 = s1.substring(1 + s1.indexOf(',')); s2 = s7; _L28: j; JVM INSTR lookupswitch 3: default 2488 // 1: 2588 // 3: 2914 // 30: 3240; goto _L24 _L25 _L26 _L27 _L24: String as3[] = s2.split(",\\s*"); Exception exception; int i; String as[]; SimpleDateFormat simpledateformat; ParseException parseexception; NumberFormatException numberformatexception; Object aobj[]; String as1[]; Object aobj1[]; Object aobj2[]; String s3; int k; int l; StringBuilder stringbuilder; String s4; Object aobj3[]; String as2[]; Object aobj4[]; Object aobj5[]; String s5; int i1; int j1; StringBuilder stringbuilder1; String s6; Object aobj6[]; if(as3[0].equals("0")) { Object aobj9[] = new Object[1]; aobj9[0] = ServerCommands.toString(j); notifyCommandResponse(String.format("Server Acknowledged %s", aobj9)); } else if(as3[0].equals("1")) if(as3.length > 1) { Object aobj8[] = new Object[2]; aobj8[0] = ServerCommands.toString(j); aobj8[1] = as3[1]; notifyCommandResponse(String.format("[ERROR] %s\n%s\nTry turning on CAN_WRITE in the settings tab.", aobj8)); } else { Object aobj7[] = new Object[1]; aobj7[0] = ServerCommands.toString(j); notifyCommandResponse(String.format("[ERROR] %s\nTry turning on CAN_WRITE in the settings tab.", aobj7)); } goto _L5 _L23: i = Integer.parseInt(s1); j = i; goto _L28 exception; Log.d("TCP", (new StringBuilder("!!! ")).append(c).append(" message is invalid.").toString()); goto _L5 _L25: as2 = s2.split(","); if(as2.length <= 4) goto _L30; else goto _L29 _L29: s5 = ""; i1 = 3; _L33: j1 = as2.length; if(i1 < j1) goto _L32; else goto _L31 _L31: aobj6 = new Object[2]; aobj6[0] = as2[1]; aobj6[1] = s5; Log.d("TCP", String.format("FEATURE %s = %s", aobj6)); carData.Data_Features.put(Integer.valueOf(Integer.parseInt(as2[1])), s5); _L34: if(Integer.parseInt(as2[1]) == -1 + Integer.parseInt(as2[2])) { carData.Data_Features_LastRefreshed = new Date(); refreshUI(); } goto _L5 _L32: stringbuilder1 = new StringBuilder(String.valueOf(s5)); if(s5.length() > 0) s6 = ","; else s6 = ""; s5 = stringbuilder1.append(s6).append(as2[i1]).toString(); i1++; goto _L33 _L30: if(as2.length == 4) { aobj5 = new Object[2]; aobj5[0] = as2[1]; aobj5[1] = as2[3]; Log.d("TCP", String.format("FEATURE %s = %s", aobj5)); carData.Data_Features.put(Integer.valueOf(Integer.parseInt(as2[1])), as2[3]); } else if(as2.length >= 2) { aobj4 = new Object[1]; aobj4[0] = as2[1]; Log.d("TCP", String.format("FEATURE %s = EMPTY", aobj4)); carData.Data_Features.put(Integer.valueOf(Integer.parseInt(as2[1])), ""); } goto _L34 _L26: as1 = s2.split(","); if(as1.length <= 4) goto _L36; else goto _L35 _L35: s3 = ""; k = 3; _L39: l = as1.length; if(k < l) goto _L38; else goto _L37 _L37: aobj3 = new Object[2]; aobj3[0] = as1[1]; aobj3[1] = s3; Log.d("TCP", String.format("PARAMETER %s = %s", aobj3)); carData.Data_Parameters.put(Integer.valueOf(Integer.parseInt(as1[1])), s3); _L40: if(Integer.parseInt(as1[1]) == -1 + Integer.parseInt(as1[2])) { carData.Data_Parameters_LastRefreshed = new Date(); refreshUI(); } goto _L5 _L38: stringbuilder = new StringBuilder(String.valueOf(s3)); if(s3.length() > 0) s4 = ","; else s4 = ""; s3 = stringbuilder.append(s4).append(as1[k]).toString(); k++; goto _L39 _L36: if(as1.length == 4) { aobj2 = new Object[2]; aobj2[0] = as1[1]; aobj2[1] = as1[3]; Log.d("TCP", String.format("PARAMETER %s = %s", aobj2)); carData.Data_Parameters.put(Integer.valueOf(Integer.parseInt(as1[1])), as1[3]); } else if(as1.length >= 2) { aobj1 = new Object[1]; aobj1[0] = as1[1]; Log.d("TCP", String.format("PARAMETER %s = EMPTY", aobj1)); carData.Data_Parameters.put(Integer.valueOf(Integer.parseInt(as1[1])), ""); } goto _L40 _L27: as = s2.split(",\\s*"); if(as.length >= 3) { if(carData.Data_GPRSUtilization == null) carData.Data_GPRSUtilization = new GPRSUtilization(OVMSActivity.this); if(as[1].equals("1")) carData.Data_GPRSUtilization.Clear(); simpledateformat = new SimpleDateFormat("yyyy-MM-dd"); try { carData.Data_GPRSUtilization.AddData(simpledateformat.parse(as[3]), Long.parseLong(as[4]), Long.parseLong(as[5]), Long.parseLong(as[6]), Long.parseLong(as[7])); aobj = new Object[7]; aobj[0] = as[1]; aobj[1] = as[2]; aobj[2] = simpledateformat.parse(as[3]).toLocaleString(); aobj[3] = as[4]; aobj[4] = as[5]; aobj[5] = as[6]; aobj[6] = as[7]; Log.d("TCP", String.format("GPRS UTIL [%s/%s] %s: car_rx %s car_tx %s app_rx %s app_tx %s", aobj)); } // Misplaced declaration of an exception variable catch(NumberFormatException numberformatexception) { numberformatexception.printStackTrace(); } // Misplaced declaration of an exception variable catch(ParseException parseexception) { parseexception.printStackTrace(); } if(as[1].equals(as[2])) { carData.Data_GPRSUtilization.LastDataRefresh = new Date(); carData.Data_GPRSUtilization.Save(OVMSActivity.this); refreshUI(); } } goto _L5 } private void refreshUI() { if(OVMSActivity.this != null) UIHandler.post(mRefresh); } private String toHex(byte abyte0[]) { BigInteger biginteger = new BigInteger(1, abyte0); String s = (new StringBuilder("%0")).append(abyte0.length << 1).append("X").toString(); Object aobj[] = new Object[1]; aobj[0] = biginteger; return String.format(s, aobj); } public void ConnClose() { socketMarkedClosed = true; SuppressServerErrorDialog = true; isLoggedIn = false; if(Sock != null) Sock.close(); IOException ioexception; try { Thread.sleep(200L); } catch(InterruptedException interruptedexception) { } Sock = null; SuppressServerErrorDialog = false; _L1: return; ioexception; ioexception.printStackTrace(); goto _L1 } public void Ping() { SendCommand("A"); } public boolean SendCommand(String s) { if(isLoggedIn) goto _L2; else goto _L1 _L1: boolean flag; Log.d("TCP", "Server not ready. TX aborted."); flag = false; _L10: return flag; _L2: com.openvehicles.OVMS.DataLog.Log((new StringBuilder("[TX] ")).append(s).toString()); if(!carData.ParanoidMode || s.startsWith("A") || s.startsWith("C") || s.startsWith("C30") || s.startsWith("p")) goto _L4; else goto _L3 _L3: String s3; int i; pmcipher = new RC4(pmDigest); s3 = ""; i = 0; _L7: if(i < 1024) goto _L6; else goto _L5 _L5: String s2; pmcipher.rc4(s3.getBytes()); String s4 = Base64.encodeBytes(pmcipher.rc4(s.getBytes())); s2 = (new StringBuilder("MP-0 EM")).append(s4).toString(); Log.d("TCP", (new StringBuilder("TX (Paranoid-Mode Command): ")).append(s2).append(" (using pmDigest: ").append(Base64.encodeBytes(pmDigest)).append(")").toString()); _L8: byte abyte0[] = txcipher.rc4(s2.getBytes()); Log.d("TCP", (new StringBuilder("TX (Encrypted): ")).append(Base64.encodeBytes(abyte0)).toString()); Outputstream.println(Base64.encodeBytes(abyte0)); break MISSING_BLOCK_LABEL_342; _L6: s3 = (new StringBuilder(String.valueOf(s3))).append("0").toString(); i++; goto _L7 _L4: String s1 = (new StringBuilder("MP-0 ")).append(s).toString(); s2 = s1; goto _L8 Exception exception; exception; exception.printStackTrace(); notifyServerSocketError(exception); flag = true; if(true) goto _L10; else goto _L9 _L9: } protected volatile transient Object doInBackground(Object aobj[]) { return doInBackground((Void[])aobj); } protected transient Void doInBackground(Void avoid[]) { Log.d("TCP", "Starting background TCP thread"); SuppressServerErrorDialog = false; socketMarkedClosed = false; ConnInit(); if(!isLoggedIn) goto _L2; else goto _L1 _L1: Log.d("TCP", "Background TCP ready"); Sock.setSoTimeout(5000); _L7: boolean flag = Sock.isConnected(); if(flag) goto _L3; else goto _L2 _L2: if(Outputstream != null) Outputstream.close(); Exception exception; String s; IOException ioexception; String s1; String s2; String s3; Object aobj[]; boolean flag1; Exception exception3; String s4; try { if(Inputstream != null) Inputstream.close(); } catch(Exception exception1) { } try { if(Sock != null) Sock.close(); } catch(Exception exception2) { } Sock = null; Log.d("TCP", "TCP thread ending"); return null; _L3: s = ""; _L10: s4 = Inputstream.readLine(); s = s4; if(s == null) goto _L5; else goto _L4 _L4: if(s == null) goto _L7; else goto _L6 _L6: if(s.length() <= 5) goto _L7; else goto _L8 _L8: s1 = s.trim(); s2 = new String(rxcipher.rc4(Base64.decode(s1))); if(s2 == null || s2.length() <= 5) goto _L7; else goto _L9 _L9: s3 = s2.trim(); aobj = new Object[2]; aobj[0] = s3; aobj[1] = s1; Log.d("OVMS", String.format("RX: %s (%s)", aobj)); flag1 = s3.substring(0, 5).equals("MP-0 "); if(!flag1) break MISSING_BLOCK_LABEL_355; processMessage(s3.substring(5)); goto _L7 exception3; com.openvehicles.OVMS.DataLog.Log((new StringBuilder("##ERROR## ")).append(exception3.getMessage()).append(" - ").append(s3).toString()); exception3.printStackTrace(); goto _L7 exception; if(!socketMarkedClosed) notifyServerSocketError(exception); goto _L2 _L5: Thread.sleep(100L); goto _L10 ioexception; goto _L4 Log.d("OVMS", "Unknown protection scheme"); goto _L7 } protected transient void onProgressUpdate(Integer ainteger[]) { } protected volatile transient void onProgressUpdate(Object aobj[]) { onProgressUpdate((Integer[])aobj); } private BufferedReader Inputstream; private PrintWriter Outputstream; public Socket Sock; private CarData carData; private byte pmDigest[]; private RC4 pmcipher; private RC4 rxcipher; private boolean socketMarkedClosed; final OVMSActivity this$0; private RC4 txcipher; public TCPTask(CarData cardata) { this$0 = OVMSActivity.this; super(); carData = OVMSActivity.this.carData; } } public OVMSActivity() { c2dmReportTimerHandler = new Handler(); pingServerTimerHandler = new Handler(); UIHandler = new Handler(); delayedRequest = new Handler(); SuppressServerErrorDialog = false; progressLogin = null; mRecreateChildTabLayout = new Runnable() { public void run() { String s; s = getLocalActivityManager().getCurrentId().trim(); Log.d("Tab", (new StringBuilder("Tab recreate: ")).append(s).toString()); if(s != null && getLocalActivityManager().getActivity(s) != null) goto _L2; else goto _L1 _L1: return; _L2: if(s.equals("tabInfo_xlarge")) { TabInfo_xlarge tabinfo_xlarge = (TabInfo_xlarge)getLocalActivityManager().getActivity(s); tabinfo_xlarge.OrientationChanged(); tabinfo_xlarge.Refresh(carData, isLoggedIn); } else if(s.equals("tabInfo")) { TabInfo tabinfo = (TabInfo)getLocalActivityManager().getActivity(s); tabinfo.OrientationChanged(); tabinfo.Refresh(carData, isLoggedIn); } else if(s.equals("tabCar")) { TabCar tabcar = (TabCar)getLocalActivityManager().getActivity(s); tabcar.OrientationChanged(); tabcar.Refresh(carData, isLoggedIn); } if(true) goto _L1; else goto _L3 _L3: } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; mRefresh = new Runnable() { private void notifyTabRefresh(String s) { Log.d("Tab", (new StringBuilder("Tab refresh: ")).append(s).toString()); if(s != null && getLocalActivityManager().getActivity(s) != null) { if(DeviceScreenSize == 4) { if(s.equals("tabInfo_xlarge")) { TabInfo_xlarge tabinfo_xlarge = (TabInfo_xlarge)getLocalActivityManager().getActivity(s); if(tabinfo_xlarge.CurrentScreenOrientation != getResources().getConfiguration().orientation) tabinfo_xlarge.OrientationChanged(); tabinfo_xlarge.Refresh(carData, isLoggedIn); } else if(s.equals("tabMap")) ((TabMap)getLocalActivityManager().getActivity(s)).Refresh(carData, isLoggedIn); else if(s.equals("tabNotifications")) ((Tab_SubTabNotifications)getLocalActivityManager().getActivity(s)).Refresh(carData, isLoggedIn); else if(s.equals("tabDataUtilizations")) ((Tab_SubTabDataUtilizations)getLocalActivityManager().getActivity(s)).Refresh(carData, isLoggedIn); else if(s.equals("tabCarSettings")) ((Tab_SubTabCarSettings)getLocalActivityManager().getActivity(s)).Refresh(carData, isLoggedIn); else if(s.equals("tabCars")) ((TabCars)getLocalActivityManager().getActivity(s)).LoadCars(allSavedCars); } else if(s.equals("tabInfo")) { TabInfo tabinfo = (TabInfo)getLocalActivityManager().getActivity(s); if(tabinfo.CurrentScreenOrientation != getResources().getConfiguration().orientation) tabinfo.OrientationChanged(); tabinfo.Refresh(carData, isLoggedIn); } else if(s.equals("tabCar")) { TabCar tabcar = (TabCar)getLocalActivityManager().getActivity(s); if(tabcar.CurrentScreenOrientation != getResources().getConfiguration().orientation) tabcar.OrientationChanged(); tabcar.Refresh(carData, isLoggedIn); } else if(s.equals("tabMap")) ((TabMap)getLocalActivityManager().getActivity(s)).Refresh(carData, isLoggedIn); else if(s.equals("tabMiscFeatures")) ((TabMiscFeatures)getLocalActivityManager().getActivity(s)).Refresh(carData, isLoggedIn); else if(s.equals("tabCars")) ((TabCars)getLocalActivityManager().getActivity(s)).LoadCars(allSavedCars); else getTabHost().setCurrentTab(0); getTabHost().invalidate(); } } public void run() { if(isLoggedIn) { if(progressLogin != null && progressLogin.isShowing()) progressLogin.dismiss(); if(alertDialog != null && alertDialog.isShowing()) alertDialog.dismiss(); } notifyTabRefresh(getLocalActivityManager().getCurrentId().trim()); } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; progressLoginCloseDialog = new Runnable() { public void run() { if(progressLogin != null) progressLogin.dismiss(); _L2: return; Exception exception; exception; if(true) goto _L2; else goto _L1 _L1: } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; progressLoginShowDialog = new Runnable() { public void run() { Exception exception2; try { if(progressLogin != null) progressLogin.dismiss(); } catch(Exception exception) { } try { if(alertDialog != null) alertDialog.dismiss(); } catch(Exception exception1) { } progressLogin = new ProgressDialog(OVMSActivity.this); progressLogin.setIndeterminate(true); progressLogin.setMessage("Connecting to OVMS Server..."); progressLogin.getWindow().clearFlags(2); progressLogin.show(); _L2: return; exception2; if(true) goto _L2; else goto _L1 _L1: } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; serverSocketErrorDialog = new Runnable() { public void run() { if(!SuppressServerErrorDialog && (alertDialog == null || !alertDialog.isShowing())) { android.app.AlertDialog.Builder builder; String s; try { if(progressLogin != null) progressLogin.dismiss(); } catch(Exception exception) { } builder = new android.app.AlertDialog.Builder(OVMSActivity.this); if(isLoggedIn) s = String.format("OVMS Server Connection Lost", new Object[0]); else s = String.format("Please check the following:\n1. OVMS Server address\n2. Your vehicle ID and passwords", new Object[0]); builder.setMessage(s).setTitle("Connection Problem").setCancelable(false).setPositiveButton("Retry", new android.content.DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { ChangeCar(carData); dialoginterface.dismiss(); } final _cls5 this$1; { this$1 = _cls5.this; super(); } } ).setNegativeButton("Open Settings", new android.content.DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { getTabHost().setCurrentTabByTag("tabCars"); dialoginterface.dismiss(); } final _cls5 this$1; { this$1 = _cls5.this; super(); } } ); alertDialog = builder.create(); try { alertDialog.show(); } catch(Exception exception1) { } } } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; pingServer = new Runnable() { public void run() { if(isLoggedIn) { Log.d("OVMS", "Pinging server..."); tcpTask.Ping(); } pingServerTimerHandler.postDelayed(pingServer, 60000L); } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; reportC2DMRegistrationID = new Runnable() { public void run() { if(tcpTask != null) goto _L2; else goto _L1 _L1: return; _L2: SharedPreferences sharedpreferences = getSharedPreferences("C2DM", 0); String s = sharedpreferences.getString("RegID", ""); String s1; if(!sharedpreferences.contains("UUID")) { s1 = UUID.randomUUID().toString(); android.content.SharedPreferences.Editor editor = getSharedPreferences("C2DM", 0).edit(); editor.putString("UUID", s1); editor.commit(); Log.d("OVMS", (new StringBuilder("Generated New App ID: ")).append(s1).toString()); } else { s1 = sharedpreferences.getString("UUID", ""); Log.d("OVMS", (new StringBuilder("Loaded Saved App ID: ")).append(s1).toString()); } if(s.length() == 0) { Log.d("C2DM", "C2DM registration ID not found. Rescheduling."); c2dmReportTimerHandler.postDelayed(reportC2DMRegistrationID, 15000L); } else if(!SendServerCommand(ServerCommands.SUBSCRIBE_PUSH_NOTIFICATIONS(s1, carData.VehicleID, carData.NetPass, s.trim()))) { Log.d("OVMS", "Reporting C2DM ID failed. Rescheduling."); c2dmReportTimerHandler.postDelayed(reportC2DMRegistrationID, 5000L); } if(true) goto _L1; else goto _L3 _L3: } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; } private void initializeSavedCars() { Log.d("OVMS", "Invalid save file. Initializing with demo car."); allSavedCars = new ArrayList(); CarData cardata = new CarData(); cardata.VehicleID = "DEMO"; cardata.RegPass = "DEMO"; cardata.NetPass = "DEMO"; cardata.ServerNameOrIP = "tmc.openvehicles.com"; cardata.VehicleImageDrawable = "car_models_signaturered"; cardata.lastResetVersion = 1; allSavedCars.add(cardata); carData = cardata; saveCars(); } private void loadCars() { Iterator iterator; Log.d("OVMS", "Loading saved cars from internal storage file: OVMSSavedCars.obj"); ObjectInputStream objectinputstream = new ObjectInputStream(openFileInput("OVMSSavedCars.obj")); allSavedCars = (ArrayList)objectinputstream.readObject(); objectinputstream.close(); iterator = allSavedCars.iterator(); _L3: CarData cardata; String s; if(!iterator.hasNext()) { s = getSharedPreferences("OVMS", 0).getString("LastVehicleID", "").trim(); if(s.length() == 0) { carData = (CarData)allSavedCars.get(0); break MISSING_BLOCK_LABEL_399; } break MISSING_BLOCK_LABEL_271; } cardata = (CarData)iterator.next(); if(cardata.VehicleID != null && cardata.RegPass != null && cardata.NetPass != null && cardata.ServerNameOrIP != null && cardata.VehicleImageDrawable != null) goto _L2; else goto _L1 _L1: initializeSavedCars(); goto _L3 Exception exception; exception; exception.printStackTrace(); initializeSavedCars(); break MISSING_BLOCK_LABEL_399; _L2: if(cardata.lastResetVersion == 1) goto _L3; else goto _L4 _L4: CarData cardata1 = new CarData(); cardata1.VehicleID = cardata.VehicleID; cardata1.RegPass = cardata.RegPass; cardata1.NetPass = cardata.NetPass; cardata1.ServerNameOrIP = cardata.ServerNameOrIP; cardata1.VehicleImageDrawable = cardata.VehicleImageDrawable; cardata1.lastResetVersion = 1; allSavedCars.set(allSavedCars.indexOf(cardata), cardata1); goto _L3 int i; Object aobj[] = new Object[2]; aobj[0] = Integer.valueOf(allSavedCars.size()); aobj[1] = s; Log.d("OVMS", String.format("Loaded %s cars. Last used car is %s", aobj)); i = 0; _L8: if(i < allSavedCars.size()) goto _L6; else goto _L5 _L5: if(carData == null) carData = (CarData)allSavedCars.get(0); break MISSING_BLOCK_LABEL_399; _L6: if(!((CarData)allSavedCars.get(i)).VehicleID.equals(s)) break; /* Loop/switch isn't completed */ carData = (CarData)allSavedCars.get(i); if(true) goto _L5; else goto _L7 _L7: i++; goto _L8 } private void loginComplete() { isLoggedIn = true; UIHandler.post(progressLoginCloseDialog); ReportC2DMRegistrationID(); if(((String)carData.Data_Parameters.get(Integer.valueOf(11))).length() > 0) { SendServerCommand(ServerCommands.SUBSCRIBE_GROUP((String)carData.Data_Parameters.get(Integer.valueOf(11)))); } else { SendServerCommand("C3"); Runnable runnable = new Runnable() { public void run() { SendServerCommand("C1"); } final OVMSActivity this$0; { this$0 = OVMSActivity.this; super(); } } ; delayedRequest.postDelayed(runnable, 200L); } } private void notifyServerSocketError(Exception exception) { lastServerException = exception; if(exception != null) exception.printStackTrace(); if(!SuppressServerErrorDialog) UIHandler.post(serverSocketErrorDialog); } private void notifyTabRefresh() { UIHandler.post(mRefresh); } public void ChangeCar(CarData cardata) { ChangeCar(cardata, "tabInfo"); } public void ChangeCar(CarData cardata, String s) { UIHandler.post(progressLoginShowDialog); Log.d("OVMS", (new StringBuilder("Changed car to: ")).append(cardata.VehicleID).toString()); isLoggedIn = false; if(tcpTask != null) { Log.d("TCP", "Shutting down pervious TCP connection (ChangeCar())"); tcpTask.ConnClose(); tcpTask.cancel(true); tcpTask = null; } carData = cardata; if(carData.Data_GPRSUtilization == null) carData.Data_GPRSUtilization = new GPRSUtilization(this); notifyTabRefresh(); cardata.ParanoidMode = false; tcpTask = new TCPTask(carData); Log.d("TCP", "Starting TCP Connection (ChangeCar())"); tcpTask.execute(new Void[0]); getTabHost().setCurrentTabByTag(s); } public void ReportC2DMRegistrationID() { c2dmReportTimerHandler.postDelayed(reportC2DMRegistrationID, 500L); } public boolean SendServerCommand(String s) { return tcpTask.SendCommand(s); } public void onConfigurationChanged(Configuration configuration) { super.onConfigurationChanged(configuration); UIHandler.post(mRecreateChildTabLayout); } public void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(0x7f030002); loadCars(); String s = getSharedPreferences("C2DM", 0).getString("RegID", ""); Display display; Object aobj[]; TabHost tabhost; if(s.length() == 0) { Log.d("C2DM", "Doing first time registration."); ServerCommands.RequestC2DMRegistrationID(this); } else { Log.d("C2DM", (new StringBuilder("Loaded Saved C2DM registration ID: ")).append(s).toString()); } DeviceScreenSize = 0xf & getResources().getConfiguration().screenLayout; display = ((WindowManager)getSystemService("window")).getDefaultDisplay(); aobj = new Object[2]; aobj[0] = Integer.valueOf(display.getWidth()); aobj[1] = Integer.valueOf(display.getHeight()); Log.d("INIT", String.format("Screen size: %d x %d", aobj)); if(display.getWidth() >= 976 || display.getHeight() >= 976) DeviceScreenSize = 4; tabhost = getTabHost(); if(DeviceScreenSize == 4) { Intent intent5 = (new Intent()).setClass(this, com/openvehicles/OVMS/TabInfo_xlarge); android.widget.TabHost.TabSpec tabspec5 = tabhost.newTabSpec("tabInfo_xlarge"); tabspec5.setContent(intent5); tabspec5.setIndicator("", getResources().getDrawable(0x7f020045)); tabhost.addTab(tabspec5); Intent intent6 = (new Intent()).setClass(this, com/openvehicles/OVMS/TabMap); android.widget.TabHost.TabSpec tabspec6 = tabhost.newTabSpec("tabMap"); tabspec6.setContent(intent6); tabspec6.setIndicator("", getResources().getDrawable(0x7f02004b)); tabhost.addTab(tabspec6); Intent intent7 = (new Intent()).setClass(this, com/openvehicles/OVMS/Tab_SubTabNotifications); android.widget.TabHost.TabSpec tabspec7 = tabhost.newTabSpec("tabNotifications"); tabspec7.setContent(intent7); tabspec7.setIndicator("", getResources().getDrawable(0x7f020055)); tabhost.addTab(tabspec7); Intent intent8 = (new Intent()).setClass(this, com/openvehicles/OVMS/Tab_SubTabDataUtilizations); android.widget.TabHost.TabSpec tabspec8 = tabhost.newTabSpec("tabDataUtilizations"); tabspec8.setContent(intent8); tabspec8.setIndicator("", getResources().getDrawable(0x7f020049)); tabhost.addTab(tabspec8); Intent intent9 = (new Intent()).setClass(this, com/openvehicles/OVMS/Tab_SubTabCarSettings); android.widget.TabHost.TabSpec tabspec9 = tabhost.newTabSpec("tabCarSettings"); tabspec9.setContent(intent9); tabspec9.setIndicator("", getResources().getDrawable(0x7f02004e)); tabhost.addTab(tabspec9); Intent intent10 = (new Intent()).setClass(this, com/openvehicles/OVMS/TabCars); android.widget.TabHost.TabSpec tabspec10 = tabhost.newTabSpec("tabCars"); tabspec10.setContent(intent10); tabspec10.setIndicator("", getResources().getDrawable(0x7f02005a)); tabhost.addTab(tabspec10); } else { Intent intent = (new Intent()).setClass(this, com/openvehicles/OVMS/TabInfo); android.widget.TabHost.TabSpec tabspec = tabhost.newTabSpec("tabInfo"); tabspec.setContent(intent); tabspec.setIndicator("", getResources().getDrawable(0x7f020045)); tabhost.addTab(tabspec); Intent intent1 = (new Intent()).setClass(this, com/openvehicles/OVMS/TabCar); android.widget.TabHost.TabSpec tabspec1 = tabhost.newTabSpec("tabCar"); tabspec1.setContent(intent1); tabspec1.setIndicator("", getResources().getDrawable(0x7f020046)); tabhost.addTab(tabspec1); Intent intent2 = (new Intent()).setClass(this, com/openvehicles/OVMS/TabMap); android.widget.TabHost.TabSpec tabspec2 = tabhost.newTabSpec("tabMap"); tabspec2.setContent(intent2); tabspec2.setIndicator("", getResources().getDrawable(0x7f02004b)); tabhost.addTab(tabspec2); Intent intent3 = (new Intent()).setClass(this, com/openvehicles/OVMS/TabMiscFeatures); android.widget.TabHost.TabSpec tabspec3 = tabhost.newTabSpec("tabMiscFeatures"); tabspec3.setContent(intent3); tabspec3.setIndicator("", getResources().getDrawable(0x7f020054)); tabhost.addTab(tabspec3); Intent intent4 = (new Intent()).setClass(this, com/openvehicles/OVMS/TabCars); android.widget.TabHost.TabSpec tabspec4 = tabhost.newTabSpec("tabCars"); tabspec4.setContent(intent4); tabspec4.setIndicator("", getResources().getDrawable(0x7f02005a)); tabhost.addTab(tabspec4); } getTabHost().setOnTabChangedListener(this); } public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(0x7f030003, menu); return true; } protected void onDestory() { if(tcpTask != null) { Log.d("TCP", "Shutting down TCP connection (OnDestroy())"); tcpTask.ConnClose(); tcpTask = null; } } public void onNewIntent(Intent intent) { TabHost tabhost; Log.d("EVENT", "onNewIntent"); tabhost = getTabHost(); if(intent == null) goto _L2; else goto _L1 _L1: CarData cardata; Iterator iterator; if(!intent.hasExtra("VehicleID")) break MISSING_BLOCK_LABEL_154; cardata = null; iterator = allSavedCars.iterator(); _L6: if(iterator.hasNext()) goto _L4; else goto _L3 _L3: if(cardata != null) { Log.d("EVENT", (new StringBuilder("Launching with default car set to: ")).append(cardata.VehicleID).toString()); CarData cardata1; if(intent.hasExtra("SetTab")) ChangeCar(cardata, intent.getStringExtra("SetTab")); else ChangeCar(cardata); } _L2: return; _L4: cardata1 = (CarData)iterator.next(); if(!cardata1.VehicleID.equals(intent.getStringExtra("VehicleID"))) goto _L6; else goto _L5 _L5: cardata = cardata1; goto _L3 if(intent.hasExtra("SetTab")) tabhost.setCurrentTabByTag(intent.getStringExtra("SetTab")); else tabhost.setCurrentTabByTag("tabInfo"); goto _L2 } public boolean onOptionsItemSelected(MenuItem menuitem) { boolean flag = true; menuitem.getItemId(); JVM INSTR tableswitch 2131296266 2131296267: default 32 // 2131296266 40 // 2131296267 47; goto _L1 _L2 _L3 _L1: flag = super.onOptionsItemSelected(menuitem); _L5: return flag; _L2: finish(); continue; /* Loop/switch isn't completed */ _L3: OVMSNotifications ovmsnotifications = new OVMSNotifications(this); ovmsnotifications.Clear(); ovmsnotifications.Save(); notifyTabRefresh(); if(true) goto _L5; else goto _L4 _L4: } protected void onPause() { super.onPause(); if(tcpTask != null) { Log.d("TCP", "Shutting down TCP connection (OnPause())"); tcpTask.ConnClose(); tcpTask.cancel(true); tcpTask = null; } saveCars(); OVMSWidgets.UpdateWidgets(this); } protected void onResume() { super.onResume(); if(tcpTask == null) { UIHandler.post(progressLoginCloseDialog); String s = getTabHost().getCurrentTabTag(); ChangeCar(carData, s); } } public void onTabChanged(String s) { UIHandler.post(mRefresh); } public void saveCars() { Log.d("OVMS", "Saving cars to interal storage..."); android.content.SharedPreferences.Editor editor = getSharedPreferences("OVMS", 0).edit(); editor.putString("LastVehicleID", carData.VehicleID); editor.commit(); ObjectOutputStream objectoutputstream = new ObjectOutputStream(openFileOutput("OVMSSavedCars.obj", 0)); objectoutputstream.writeObject(allSavedCars); objectoutputstream.close(); _L1: return; Exception exception; exception; exception.printStackTrace(); goto _L1 } 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; private Handler UIHandler; private AlertDialog alertDialog; private ArrayList allSavedCars; private Handler c2dmReportTimerHandler; private CarData carData; private Handler delayedRequest; private boolean isLoggedIn; private Exception lastServerException; private ServerCommandResponseHandler mCommandResponse; private Runnable mRecreateChildTabLayout; private Runnable mRefresh; private Runnable pingServer; private Handler pingServerTimerHandler; private ProgressDialog progressLogin; private Runnable progressLoginCloseDialog; private Runnable progressLoginShowDialog; private Runnable reportC2DMRegistrationID; private Runnable serverSocketErrorDialog; private final String settingsFileName = "OVMSSavedCars.obj"; private TCPTask tcpTask; }