Compare commits
29 Commits
Author | SHA1 | Date | |
---|---|---|---|
4ba0ceb627 | |||
4b09464638 | |||
a9732e5a52 | |||
31d6b0027f | |||
5c8b857664 | |||
8b89319d09 | |||
b17ba94950 | |||
6fda464ed8 | |||
8cc6dfceca | |||
2a1517526d | |||
49d15e1064 | |||
729bdf5d90 | |||
e1bcc44fbe | |||
ad5b4327d1 | |||
0e9ae233de | |||
7bcec6e81b | |||
ab0108fab9 | |||
2771fe0114 | |||
e7b6d0b9c3 | |||
aedeb80fbd | |||
8a9ea703c7 | |||
0dffcdec13 | |||
0ba536e323 | |||
27ef47ec1e | |||
8661d85218 | |||
6e2a4a6aee | |||
e22f6eb24b | |||
dc2cb825bb | |||
04fa7a5b2e |
3
.gitignore
vendored
3
.gitignore
vendored
@ -184,3 +184,6 @@ $RECYCLE.BIN/
|
||||
/.idea/misc.xml
|
||||
/.idea
|
||||
/.idea/modules.xml
|
||||
|
||||
/safeDispatch/debug
|
||||
/safeDispatch/release
|
||||
|
@ -25,6 +25,7 @@ public abstract class AbstractLiveActivity extends AppCompatActivity {
|
||||
public abstract void vehicleStatusReceived(long imei, int opCode, int status); // --> UpdateOptions
|
||||
public abstract void emergencyAlarmReceived(int position, double lat, double lng); // --> UpdateEmergencyAlarm
|
||||
public abstract GoogleMap getMap(); // --> UpdateEmergencyAlarm
|
||||
public abstract void setLanguage();
|
||||
|
||||
/** Misc */
|
||||
public AbstractSDParentActivity getParentTab() {
|
||||
|
@ -97,6 +97,10 @@ public class AlertGridViewAdapter extends BaseAdapter
|
||||
switch(acknowledged.get(position) ? 1 : 0)
|
||||
{
|
||||
case 1:
|
||||
ViewGroup.LayoutParams params = convertView.getLayoutParams();
|
||||
if (params != null) {
|
||||
params.height = 0;
|
||||
}
|
||||
view.imageViewAlert.setImageResource(R.drawable.alert_off);
|
||||
//view.layoutAlarm.setBackgroundColor(0xffffffff);
|
||||
break;
|
||||
|
@ -15,7 +15,7 @@ public class RadioMSG extends TCPmsg {
|
||||
|
||||
public int rOpcode;
|
||||
public String payload="";
|
||||
public ArrayList<RadioGW> RadioGWList=null;
|
||||
public ArrayList<RadioGW> RadioGWList = null;
|
||||
|
||||
//zone and channel;
|
||||
public Zone_and_channel zac= null;
|
||||
@ -35,7 +35,9 @@ public class RadioMSG extends TCPmsg {
|
||||
// Contacts list
|
||||
public ArrayList<Contact> contacts;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public RadioMSG(TCPmsg tcp) {
|
||||
super(tcp);
|
||||
String date4parsing = super.data;
|
||||
@ -47,148 +49,34 @@ public class RadioMSG extends TCPmsg {
|
||||
|
||||
switch(rOpcode)
|
||||
{
|
||||
case 200:
|
||||
{
|
||||
RadioGWList = new ArrayList<RadioGW>();
|
||||
String[] tempArr = payload.split(";");
|
||||
|
||||
int count = 0;
|
||||
for(int i =0; i<tempArr.length;i++)
|
||||
{
|
||||
String[] oneRadio = tempArr[i].split("&");
|
||||
|
||||
if(oneRadio.length<5)
|
||||
continue;
|
||||
RadioGW rgw = new RadioGW();
|
||||
|
||||
rgw.ID = Integer.parseInt(oneRadio[0]);
|
||||
rgw.GW_ID = Integer.parseInt(oneRadio[1]);
|
||||
rgw.IMEI = oneRadio[2];
|
||||
rgw.IP = oneRadio[3];
|
||||
|
||||
String zonelistStr =oneRadio[4];
|
||||
String[] zoneArr = zonelistStr.split("@");
|
||||
for(int j =0; j<zoneArr.length;j++)
|
||||
{
|
||||
Zone zon = new Zone();
|
||||
String[] oneZoneArr = zoneArr[j].split(":");
|
||||
|
||||
//TODO check what this values are from SD
|
||||
zon.dbID = Integer.parseInt(oneZoneArr[0]);
|
||||
zon.id = Integer.parseInt(oneZoneArr[1]);
|
||||
zon.ZoneName = oneZoneArr[2];
|
||||
String channelListStr = oneZoneArr[3];
|
||||
|
||||
String[] channelArr = channelListStr.split(",");
|
||||
for(int k =0; k < channelArr.length; k++)
|
||||
{
|
||||
Channel chn = new Channel();
|
||||
String[] oneChnArr = channelArr[k].split("/");
|
||||
chn.dbID = Integer.parseInt(oneChnArr[0]);
|
||||
chn.id = Integer.parseInt(oneChnArr[1]);
|
||||
chn.chName = oneChnArr[2];
|
||||
|
||||
//add channel to zone
|
||||
zon.channelList.add(chn);
|
||||
}
|
||||
|
||||
//add zone to radio GW
|
||||
rgw.zoneList.add(zon);
|
||||
}
|
||||
|
||||
RadioGWList.add(rgw);
|
||||
count++;
|
||||
}
|
||||
count +=this.RadioGWList.size();
|
||||
SM.Debug("radio","RadioGWList size:" +this.RadioGWList.size() + " total:" +count);
|
||||
case 200 /* gw list */:
|
||||
RadioGWList = getRadioGWList();
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case OperationCodes.CHANNEL_BRDCST:
|
||||
{
|
||||
try {
|
||||
zac = new Zone_and_channel();
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
String[] gwID_and_rgwID = tempArr[0].split("/");
|
||||
zac.gwID = Integer.parseInt(gwID_and_rgwID[0]);
|
||||
zac.rgwID = Integer.parseInt(gwID_and_rgwID[1]);
|
||||
|
||||
String[] zoneNr_and_channelNr = tempArr[1].split("/");
|
||||
zac.zoneNr = Integer.parseInt(zoneNr_and_channelNr[0]);
|
||||
zac.channelNr = Integer.parseInt(zoneNr_and_channelNr[1]);
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 204 error:"+e.toString());
|
||||
}
|
||||
|
||||
zac = parse_CHANNEL_BRDCST(payload);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case OperationCodes.RADIO_STATUS_REP:
|
||||
{
|
||||
try {
|
||||
rStatus = new RadioStatus();
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
if(tempArr.length == 4 || tempArr.length == 5) {
|
||||
rStatus.status = 1;
|
||||
rStatus.incCall.callStatus = Integer.parseInt(tempArr[0]);
|
||||
rStatus.incCall.callType = Integer.parseInt(tempArr[1]);
|
||||
rStatus.incCall.Imei = Integer.parseInt(tempArr[2]);
|
||||
rStatus.incCall.callerID = Integer.parseInt(tempArr[2]);
|
||||
rStatus.incCall.groupId = Integer.parseInt(tempArr[3]);
|
||||
rStatus.incCall.callDestID = Integer.parseInt(tempArr[3]);
|
||||
|
||||
if(tempArr.length == 5)
|
||||
rStatus.incCall.userID = Integer.parseInt(tempArr[4]);
|
||||
}
|
||||
else {
|
||||
String[] gwID_and_rgwID = tempArr[0].split("/");
|
||||
rStatus.gwID = Integer.parseInt(gwID_and_rgwID[0]);
|
||||
rStatus.rgwID = Integer.parseInt(gwID_and_rgwID[1]);
|
||||
rStatus.status = Integer.parseInt(tempArr[1]);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 199 error:"+e.toString());
|
||||
}
|
||||
rStatus = parse_RADIO_STATUS_REP(payload);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case 250:
|
||||
{
|
||||
try {
|
||||
suStatus = new SUstatus();
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
suStatus.imei = Integer.parseInt(tempArr[0]);
|
||||
|
||||
suStatus.status = Integer.parseInt(tempArr[1]);
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 250 error:"+e.toString());
|
||||
}
|
||||
case OperationCodes.UNIT_STATUS_UPDATE :
|
||||
suStatus = parse_UNIT_STATUS_UPDATE(payload);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case 125:
|
||||
case OperationCodes.CALL_STATUS_BRDCST:
|
||||
{
|
||||
try {
|
||||
incCall = new IncCall();
|
||||
incCall.opCode = rOpcode;
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
|
||||
incCall.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
|
||||
incCall.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
|
||||
incCall.Imei = Long.parseLong(gwID_and_rgwID_imei[2]);
|
||||
|
||||
incCall.callStatus = Integer.parseInt(tempArr[1]);
|
||||
incCall.callType = Integer.parseInt(tempArr[2]);
|
||||
incCall.groupId = Integer.parseInt(tempArr[3]);
|
||||
incCall.userID = Integer.parseInt(tempArr[4]);
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 125, 126 error:"+e.toString());
|
||||
}
|
||||
|
||||
incCall = parse_CALL_STATUS_BRDCST(payload);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case 121:
|
||||
case 122:
|
||||
@ -265,21 +153,9 @@ public class RadioMSG extends TCPmsg {
|
||||
}
|
||||
|
||||
case OperationCodes.CALL_TYPE_REP:
|
||||
{
|
||||
|
||||
try {
|
||||
incCall = new IncCall();
|
||||
incCall.opCode = rOpcode;
|
||||
String[] tempArr = payload.split("/");
|
||||
incCall.callType = Integer.parseInt(tempArr[0]);
|
||||
incCall.callStatus = Integer.parseInt(tempArr[1]);
|
||||
|
||||
SM.Debug("GOT CHANGE CALL TYPE MSG", incCall.opCode + " # " + incCall.callType + " # " + incCall.callStatus);
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 115,116,117 error:"+e.toString());
|
||||
}
|
||||
incCall = parse_CALL_TYPE_REP(payload);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case 172:
|
||||
{
|
||||
@ -302,20 +178,10 @@ public class RadioMSG extends TCPmsg {
|
||||
}
|
||||
|
||||
case OperationCodes.EMERGENCY_REP:
|
||||
{
|
||||
try {
|
||||
emerg = new Emerg();
|
||||
String[] tempArr = payload.split("/");
|
||||
|
||||
emerg.function = Integer.parseInt(tempArr[0]);
|
||||
emerg.status = Integer.parseInt(tempArr[1]);
|
||||
|
||||
// emerg.userID = Integer.parseInt(tempArr[2]);
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 230 error:"+e.toString());
|
||||
}
|
||||
emerg = parse_EMERGENCY_REP(payload);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
case OperationCodes.CONTACTS_REP:
|
||||
@ -341,4 +207,254 @@ public class RadioMSG extends TCPmsg {
|
||||
|
||||
}
|
||||
|
||||
private RadioGW parseRadioGW(String buffer)
|
||||
{
|
||||
RadioGW rgw = new RadioGW();
|
||||
String[] radioFields = buffer.split("&");
|
||||
|
||||
if( radioFields.length > 3 ) {
|
||||
|
||||
rgw.ID = Integer.parseInt(radioFields[0].trim());
|
||||
rgw.GW_ID = Integer.parseInt(radioFields[1].trim());
|
||||
rgw.IMEI = radioFields[2];
|
||||
rgw.IP = radioFields[3];
|
||||
}
|
||||
|
||||
return rgw;
|
||||
}
|
||||
|
||||
private Zone parseZone(String buffer)
|
||||
{
|
||||
Zone zone = new Zone();
|
||||
String[] zoneFields = buffer.split(":");
|
||||
|
||||
if( zoneFields.length > 2 ) {
|
||||
|
||||
zone.dbID = Integer.parseInt(zoneFields[0].trim());
|
||||
zone.id = Integer.parseInt(zoneFields[1].trim());
|
||||
zone.ZoneName = zoneFields[2];
|
||||
}
|
||||
|
||||
return zone;
|
||||
}
|
||||
|
||||
private Channel parseChannel(String buffer)
|
||||
{
|
||||
Channel channel = new Channel();
|
||||
String[] channelFields = buffer.split("/");
|
||||
|
||||
if( channelFields.length > 2 ) {
|
||||
|
||||
channel.dbID = Integer.parseInt(channelFields[0].trim());
|
||||
channel.id = Integer.parseInt(channelFields[1].trim());
|
||||
channel.chName = channelFields[2].trim();
|
||||
}
|
||||
|
||||
return channel;
|
||||
}
|
||||
|
||||
private String[] getChannelList(String zone)
|
||||
{
|
||||
String[] zoneArr = zone.split(":");
|
||||
if ( zoneArr.length > 3)
|
||||
return zoneArr[3].split(",");
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private String[] getZoneList(String gw)
|
||||
{
|
||||
String[] zoneArr = gw.split("&");
|
||||
if ( zoneArr.length > 4)
|
||||
return zoneArr[4].split("@");
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private ArrayList<RadioGW> getRadioGWList()
|
||||
{
|
||||
ArrayList<RadioGW> radioGWList = new ArrayList<RadioGW>();
|
||||
String[] radioGWArr = payload.split(";");
|
||||
|
||||
for(int i=0; i < radioGWArr.length; i++)
|
||||
{
|
||||
RadioGW rgw = parseRadioGW(radioGWArr[i]);
|
||||
String[] zoneArr = getZoneList(radioGWArr[i]);
|
||||
if( zoneArr == null)
|
||||
continue;
|
||||
|
||||
for(int j=0; j < zoneArr.length; j++)
|
||||
{
|
||||
|
||||
Zone zone = parseZone(zoneArr[j]);
|
||||
String[] channelArr = getChannelList(zoneArr[j]);
|
||||
if( channelArr == null)
|
||||
continue;
|
||||
|
||||
for(int k =0; k < channelArr.length; k++)
|
||||
{
|
||||
Channel channel = parseChannel(channelArr[k]);
|
||||
|
||||
//add channel to zone
|
||||
zone.channelList.add(channel);
|
||||
}
|
||||
|
||||
//add zone to radio GW
|
||||
rgw.zoneList.add(zone);
|
||||
}
|
||||
|
||||
radioGWList.add(rgw);
|
||||
|
||||
}
|
||||
|
||||
return radioGWList;
|
||||
}
|
||||
|
||||
private Zone_and_channel parse_CHANNEL_BRDCST(String payload) {
|
||||
Zone_and_channel zacObj = new Zone_and_channel();
|
||||
|
||||
try {
|
||||
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
String[] gwID_and_rgwID = tempArr[0].split("/");
|
||||
zacObj.gwID = Integer.parseInt(gwID_and_rgwID[0].trim());
|
||||
zacObj.rgwID = Integer.parseInt(gwID_and_rgwID[1].trim());
|
||||
|
||||
String[] zoneNr_and_channelNr = tempArr[1].split("/");
|
||||
zacObj.zoneNr = Integer.parseInt(zoneNr_and_channelNr[0].trim());
|
||||
zacObj.channelNr = Integer.parseInt(zoneNr_and_channelNr[1].trim());
|
||||
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 204 error:"+e.toString());
|
||||
|
||||
}
|
||||
|
||||
return zacObj;
|
||||
|
||||
}
|
||||
|
||||
private IncCall parse_CALL_STATUS_BRDCST(String payload)
|
||||
{
|
||||
IncCall incCallObj = new IncCall();
|
||||
|
||||
try {
|
||||
|
||||
incCallObj.opCode = rOpcode;
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
String[] gwID_and_rgwID_imei = tempArr[0].split("/");
|
||||
incCallObj.gwID = Integer.parseInt(gwID_and_rgwID_imei[0]);
|
||||
incCallObj.rgwID = Integer.parseInt(gwID_and_rgwID_imei[1]);
|
||||
incCallObj.Imei = Long.parseLong(gwID_and_rgwID_imei[2]);
|
||||
|
||||
incCallObj.callStatus = Integer.parseInt(tempArr[1]);
|
||||
incCallObj.callType = Integer.parseInt(tempArr[2]);
|
||||
incCallObj.groupId = Integer.parseInt(tempArr[3]);
|
||||
if (tempArr.length > 4 )
|
||||
incCallObj.userID = Integer.parseInt(tempArr[4]);
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 125, 126 error:"+e.toString());
|
||||
}
|
||||
|
||||
return incCallObj;
|
||||
}
|
||||
|
||||
private RadioStatus parse_RADIO_STATUS_REP(String payload)
|
||||
{
|
||||
RadioStatus radioStatus = new RadioStatus();
|
||||
|
||||
try
|
||||
{
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
if(tempArr.length == 4 || tempArr.length == 5) {
|
||||
|
||||
radioStatus.status = 1;
|
||||
radioStatus.incCall.callStatus = Integer.parseInt(tempArr[0]);
|
||||
radioStatus.incCall.callType = Integer.parseInt(tempArr[1]);
|
||||
radioStatus.incCall.Imei = Integer.parseInt(tempArr[2]);
|
||||
radioStatus.incCall.callerID = Integer.parseInt(tempArr[2]);
|
||||
radioStatus.incCall.groupId = Integer.parseInt(tempArr[3]);
|
||||
radioStatus.incCall.callDestID = Integer.parseInt(tempArr[3]);
|
||||
|
||||
if(tempArr.length == 5)
|
||||
radioStatus.incCall.userID = Integer.parseInt(tempArr[4]);
|
||||
}
|
||||
else {
|
||||
String[] gwID_and_rgwID = tempArr[0].split("/");
|
||||
radioStatus.gwID = Integer.parseInt(gwID_and_rgwID[0]);
|
||||
radioStatus.rgwID = Integer.parseInt(gwID_and_rgwID[1]);
|
||||
radioStatus.status = Integer.parseInt(tempArr[1]);
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
SM.Debug("Cmd 199 error:"+e.toString());
|
||||
}
|
||||
|
||||
return radioStatus;
|
||||
|
||||
}
|
||||
|
||||
private Emerg parse_EMERGENCY_REP(String payload)
|
||||
{
|
||||
Emerg emergObj = new Emerg();
|
||||
|
||||
try {
|
||||
|
||||
String[] tempArr = payload.split("/");
|
||||
|
||||
emergObj.function = Integer.parseInt(tempArr[0]);
|
||||
emergObj.status = Integer.parseInt(tempArr[1]);
|
||||
|
||||
// emerg.userID = Integer.parseInt(tempArr[2]);
|
||||
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 230 error:"+e.toString());
|
||||
}
|
||||
|
||||
return emergObj;
|
||||
}
|
||||
|
||||
private SUstatus parse_UNIT_STATUS_UPDATE(String payload)
|
||||
{
|
||||
SUstatus suStatusObj = new SUstatus();
|
||||
|
||||
try {
|
||||
|
||||
String[] tempArr = payload.split("&");
|
||||
|
||||
suStatusObj.imei = Integer.parseInt(tempArr[0]);
|
||||
suStatusObj.status = Integer.parseInt(tempArr[1]);
|
||||
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 250 error:"+e.toString());
|
||||
}
|
||||
|
||||
return suStatusObj;
|
||||
|
||||
}
|
||||
|
||||
private IncCall parse_CALL_TYPE_REP(String payload)
|
||||
{
|
||||
IncCall incCallObj = new IncCall();
|
||||
|
||||
try {
|
||||
|
||||
incCallObj.opCode = rOpcode;
|
||||
String[] tempArr = payload.split("/");
|
||||
incCallObj.callType = Integer.parseInt(tempArr[0]);
|
||||
incCallObj.callStatus = Integer.parseInt(tempArr[1]);
|
||||
|
||||
SM.Debug("GOT CHANGE CALL TYPE MSG", incCallObj.opCode + " # " + incCallObj.callType + " # " + incCallObj.callStatus);
|
||||
} catch (Exception e) {
|
||||
SM.Debug("Cmd 115,116,117 error:"+e.toString());
|
||||
}
|
||||
|
||||
return incCallObj;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,9 +16,9 @@ import android.widget.Toast;
|
||||
public class TCPService extends Service {
|
||||
|
||||
private int[] startModes = {START_STICKY, START_NOT_STICKY, START_REDELIVER_INTENT};
|
||||
private int mStartMode = startModes[0]; // indicates how to behave if the service is killed
|
||||
private int mStartMode = startModes[0]; // indicates how to behave if the service is killed
|
||||
private IBinder mBinder = new TCPBinder(); // interface for clients that bind
|
||||
private boolean mAllowRebind = true; // indicates whether onRebind should be used
|
||||
private boolean mAllowRebind = true; // indicates whether onRebind should be used
|
||||
private TCPhandler tcp = null;
|
||||
private TCPmsgParser tcpParser = null;
|
||||
|
||||
@ -102,10 +102,8 @@ public class TCPService extends Service {
|
||||
|
||||
|
||||
/** Stop TCP Connection */
|
||||
public void stopTCPConnection()
|
||||
{
|
||||
if(tcp != null)
|
||||
{
|
||||
public void stopTCPConnection() {
|
||||
if(tcp != null) {
|
||||
tcp.Stop();
|
||||
tcp = null;
|
||||
}
|
||||
@ -114,27 +112,7 @@ public class TCPService extends Service {
|
||||
/** restart the TCP Connection after the connection parameters had been changed */
|
||||
public void recreateTCPConnection()
|
||||
{
|
||||
/*
|
||||
Thread t = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Thread.sleep(1000*2);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
*/
|
||||
// create a tcp connection
|
||||
int port = 13589;
|
||||
try {
|
||||
port = Integer.parseInt(AppParams.PORT);
|
||||
}
|
||||
catch(Exception ex) { }
|
||||
tcp = new TCPhandler(getApplicationContext(), AppParams.IP, port);
|
||||
/* }
|
||||
});
|
||||
t.start();
|
||||
*/
|
||||
recreateTCPConnection(AppParams.IP, AppParams.PORT);
|
||||
}
|
||||
|
||||
public void recreateTCPConnection(String _ip, String _port)
|
||||
|
@ -6,6 +6,7 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.safemobile.lib.AppParams;
|
||||
import com.safemobile.lib.SM;
|
||||
@ -24,6 +25,7 @@ import java.util.TimerTask;
|
||||
|
||||
|
||||
public class TCPhandler implements Runnable {
|
||||
private final String TAG = "TCPhandler";
|
||||
private boolean alive = true;
|
||||
|
||||
public String serverHostname;
|
||||
@ -56,18 +58,22 @@ public class TCPhandler implements Runnable {
|
||||
|
||||
// create timer to check socket status
|
||||
Timer timer = new Timer();
|
||||
timer.scheduleAtFixedRate(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
previousConnectionWasUP = isConnectionUP;
|
||||
// try to send something
|
||||
TCPmsgParser._fireonTCPConnectionStatusEvent(isConnectionUP, previousConnectionWasUP);
|
||||
} catch (Exception e) {
|
||||
SM.Exception("TIMERException", e.toString());
|
||||
try {
|
||||
timer.scheduleAtFixedRate(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
previousConnectionWasUP = isConnectionUP;
|
||||
// try to send something
|
||||
TCPmsgParser._fireonTCPConnectionStatusEvent(isConnectionUP, previousConnectionWasUP);
|
||||
} catch (Exception e) {
|
||||
SM.Exception("TIMERException", e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 0, 3000);
|
||||
}, 0, 3000);
|
||||
} catch(Exception e) {
|
||||
Log.v("Exception", e.getMessage());
|
||||
}
|
||||
|
||||
// get WiFi state
|
||||
isWiFiOn = isNetworkConnected();
|
||||
@ -104,6 +110,8 @@ public class TCPhandler implements Runnable {
|
||||
SM.Debug("IllegalArgumentException", "TCPhandler break:"+ e);
|
||||
} catch (IOException e) {
|
||||
SM.Debug("IOException", "TCPhandler break:"+ e);
|
||||
} catch (Exception e) {
|
||||
Log.v("Exception", e.getMessage());
|
||||
}
|
||||
|
||||
while (alive) {
|
||||
@ -111,6 +119,8 @@ public class TCPhandler implements Runnable {
|
||||
Thread.sleep(3000);
|
||||
} catch (InterruptedException e) {
|
||||
SM.Debug("TCPhandler Crash1 on sleep:"+ e);
|
||||
} catch (Exception e) {
|
||||
Log.v("Exception", e.getMessage());
|
||||
}
|
||||
|
||||
while (Boolean.TRUE.equals(isConnectionUP)) {
|
||||
@ -242,6 +252,8 @@ public class TCPhandler implements Runnable {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
SM.Debug("TCPhandler Crash2 on sleep:"+ e);
|
||||
} catch (Exception e) {
|
||||
Log.v("Exception", e.getMessage());
|
||||
}
|
||||
//try to restart connection
|
||||
if (alive && isWiFiOn)
|
||||
@ -350,6 +362,7 @@ public class TCPhandler implements Runnable {
|
||||
if (soc != null)
|
||||
soc.close();
|
||||
} catch (IOException e1) {
|
||||
Log.v("IOException", e1.getMessage());
|
||||
e1.printStackTrace();
|
||||
}
|
||||
|
||||
@ -371,14 +384,15 @@ public class TCPhandler implements Runnable {
|
||||
|
||||
private void restartTCP() {
|
||||
try {
|
||||
Log.v(TAG, "restartTCP");
|
||||
isConnectionUP = false;
|
||||
previousConnectionWasUP = false;
|
||||
|
||||
SM.Debug("Restarting TCP...ip:" + serverHostname + ":" + port);
|
||||
soc = new Socket();
|
||||
soc.connect(new InetSocketAddress(serverHostname, port), 5000);
|
||||
|
||||
soc.connect(new InetSocketAddress(serverHostname, port), 50000);
|
||||
input = new DataInputStream(soc.getInputStream());
|
||||
|
||||
//output stream
|
||||
output = new DataOutputStream(soc.getOutputStream());
|
||||
|
||||
@ -386,17 +400,11 @@ public class TCPhandler implements Runnable {
|
||||
isConnectionUP = true;
|
||||
}
|
||||
|
||||
} catch (UnknownHostException e) {
|
||||
SM.Exception("restartTCP break:" + e.toString());
|
||||
} catch (NullPointerException | IOException e) {
|
||||
SM.Exception("restartTCP break:" + e);
|
||||
isConnectionUP = false;
|
||||
} catch (IllegalArgumentException e) {
|
||||
SM.Debug("IllegalArgumentException", "restartTCP break:" + e.toString());
|
||||
} catch (IOException e) {
|
||||
SM.Exception("restartTCP break:" + e.toString());
|
||||
isConnectionUP = false;
|
||||
} catch (NullPointerException e) {
|
||||
SM.Exception("restartTCP break:" + e.toString());
|
||||
isConnectionUP = false;
|
||||
SM.Debug("IllegalArgumentException", "restartTCP break:" + e);
|
||||
}
|
||||
triggerTCPConnectionStateEvent();
|
||||
}
|
||||
@ -410,6 +418,7 @@ public class TCPhandler implements Runnable {
|
||||
soc.close();
|
||||
soc = null;
|
||||
} catch (IOException e) {
|
||||
Log.v("IOException", e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -227,7 +227,8 @@ public class TCPmsgParser implements Runnable {
|
||||
if (TCPhandler.msgList == null)
|
||||
continue;
|
||||
if(!TCPhandler.msgList.isEmpty()) {
|
||||
try {
|
||||
|
||||
try {
|
||||
_msg = TCPhandler.msgList.poll();
|
||||
if(_msg == null)
|
||||
continue;
|
||||
@ -235,27 +236,32 @@ public class TCPmsgParser implements Runnable {
|
||||
continue;
|
||||
//parse the rest of the message;
|
||||
|
||||
switch(_msg.opCode) {
|
||||
case 40:{
|
||||
|
||||
switch(_msg.opCode)
|
||||
{
|
||||
case 40: /* login */{
|
||||
_fireLoginEvent();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case 41:{
|
||||
case 41: /* vehicle */ {
|
||||
_fireVehEvent();
|
||||
break;
|
||||
}
|
||||
|
||||
case 42:{
|
||||
|
||||
case 42: /* Text Message */{
|
||||
_fireSMSEvent();
|
||||
break;
|
||||
}
|
||||
|
||||
case 43:{
|
||||
|
||||
case 43: /* Last text message */ {
|
||||
_fireLastSMSEvent();
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case OperationCodes.TM_ACK:
|
||||
case OperationCodes.TM_ACK_SD: {
|
||||
_fireSMSconfirm();
|
||||
@ -265,24 +271,25 @@ public class TCPmsgParser implements Runnable {
|
||||
case OperationCodes.RECEIVED_TM:{
|
||||
_fireNewSMS();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case 45:{
|
||||
case 45: /* last position */ {
|
||||
_fireLastPos();
|
||||
break;
|
||||
}
|
||||
|
||||
case 131:{
|
||||
case 131: /* gps */ {
|
||||
_fireGPSEvent();
|
||||
break;
|
||||
}
|
||||
|
||||
case 231:{
|
||||
case 231: /* pool */ {
|
||||
_firePOLLEvent();
|
||||
break;
|
||||
}
|
||||
|
||||
case 50:{
|
||||
|
||||
case 50: /* radio */ {
|
||||
_fireRadioEvent();
|
||||
break;
|
||||
}
|
||||
@ -297,12 +304,14 @@ public class TCPmsgParser implements Runnable {
|
||||
break;
|
||||
}
|
||||
|
||||
case 47:{
|
||||
|
||||
case 47: /* alert list */ {
|
||||
_fireAlarmList();
|
||||
break;
|
||||
}
|
||||
|
||||
case 48:{
|
||||
|
||||
case 48: /* alert ack */ {
|
||||
_fireAlarmACK();
|
||||
break;
|
||||
}
|
||||
@ -359,8 +368,10 @@ public class TCPmsgParser implements Runnable {
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
} catch(Exception ex) {
|
||||
}
|
||||
catch(Exception ex) {
|
||||
try {
|
||||
if(TCPhandler.msgList.size() > 0)
|
||||
_msg = TCPhandler.msgList.remove(0);
|
||||
@ -370,6 +381,7 @@ public class TCPmsgParser implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SM.Debug("TCPmsgParser listen thread stoped.");
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
@ -1,20 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "APK",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "com.safemobile.safedispatch",
|
||||
"variantName": "release",
|
||||
"elements": [
|
||||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"attributes": [],
|
||||
"versionCode": 8000035,
|
||||
"versionName": "8.0.35",
|
||||
"outputFile": "SafeDispatchMobile_v.8.0.35-release.apk"
|
||||
}
|
||||
],
|
||||
"elementType": "File"
|
||||
}
|
@ -7,6 +7,7 @@
|
||||
android:glEsVersion="0x00020000"
|
||||
android:required="true" />
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.CAMERA" android:required="false"/>
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
|
@ -24,6 +24,7 @@ public class AudioHandle implements Runnable{
|
||||
private UDPclient udp;
|
||||
private TcpAudioClient tcp;
|
||||
private int audioport = 50001;
|
||||
|
||||
|
||||
public int typeUDP;
|
||||
public AudioHandle(String IP, int _typeUDP)
|
||||
@ -89,7 +90,7 @@ public class AudioHandle implements Runnable{
|
||||
t_micListner.start();
|
||||
|
||||
|
||||
if(typeUDP==1)
|
||||
if(typeUDP == 1)
|
||||
{
|
||||
udp.addUDPListener(new IUDPListener()
|
||||
{
|
||||
@ -99,7 +100,7 @@ public class AudioHandle implements Runnable{
|
||||
byte[] data = event.data();
|
||||
int len = event.len();
|
||||
SM.Debug("recv b:"+len+" data.length:"+data.length);
|
||||
if(data!=null)
|
||||
if(data != null)
|
||||
PlaySound(data, len);
|
||||
}
|
||||
|
||||
@ -141,20 +142,22 @@ public class AudioHandle implements Runnable{
|
||||
if (soundNeeded)
|
||||
{
|
||||
//SM.Debug("sending b:"+bRead);
|
||||
if(typeUDP==1)
|
||||
{
|
||||
tempBuffer = new byte[512];//128];//invers3.bufferSize];
|
||||
bRead = recDev.read(tempBuffer, 0, 512);// 128);//invers3.bufferSize);
|
||||
if(typeUDP == 1)
|
||||
{
|
||||
int size = 512; // 2048
|
||||
|
||||
tempBuffer = new byte[size];
|
||||
bRead = recDev.read(tempBuffer, 0, size);
|
||||
|
||||
udp.Send(tempBuffer,bRead);
|
||||
SM.Debug("UDP sending b:"+bRead);
|
||||
}
|
||||
else
|
||||
{
|
||||
tempBuffer = new byte[2048];//128];//invers3.bufferSize];
|
||||
bRead = recDev.read(tempBuffer, 0, 2048);// 128);//invers3.bufferSize);
|
||||
/*
|
||||
tempBuffer = new byte[16384];//128];//invers3.bufferSize];
|
||||
bRead = recDev.read(tempBuffer, 0,16384);// 128);//invers3.bufferSize);*/
|
||||
int size = 1024; //
|
||||
tempBuffer = new byte[size];
|
||||
bRead = recDev.read(tempBuffer, 0, size);
|
||||
|
||||
tcp.send(tempBuffer,bRead);
|
||||
SM.Debug("TCP sending b:"+bRead);
|
||||
}
|
||||
|
@ -107,7 +107,6 @@ public class TcpAudioClient implements Runnable {
|
||||
recv = soc.getInputStream();
|
||||
writer = soc.getOutputStream();
|
||||
setConnOK(true);
|
||||
|
||||
} catch (IOException e) {
|
||||
SM.Debug("break:" + e);
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ public class AlarmActivity extends Activity {
|
||||
setContentView(R.layout.tabalarm);
|
||||
|
||||
gridView = findViewById(R.id.gridViewAlarms);
|
||||
gridView.setNestedScrollingEnabled(true);
|
||||
adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged);
|
||||
gridView.setAdapter(adapter);
|
||||
|
||||
@ -128,9 +129,12 @@ public class AlarmActivity extends Activity {
|
||||
setConvertViewAlarm(arg1);
|
||||
// save position
|
||||
ackPosition = position;
|
||||
if (!AppParams.DEMO)
|
||||
if (!AppParams.DEMO) {
|
||||
getParentTab().getAlarms(AppParams.USERID);
|
||||
setACK(getAllAlarms().get(position).idx, getAllAlarms().get(position).type, getAllAlarms().get(position).unitName);
|
||||
else {
|
||||
acknowledged.set(position, true);
|
||||
updateResultsInUi(ALARM);
|
||||
} else {
|
||||
getAllAlarms().get(position).ack = 1;
|
||||
updateResultsInUi("else");
|
||||
}
|
||||
@ -168,7 +172,10 @@ public class AlarmActivity extends Activity {
|
||||
if (param.equals(ALARM)) {
|
||||
// set adapter
|
||||
adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged);
|
||||
int position = gridView.getFirstVisiblePosition();
|
||||
|
||||
gridView.setAdapter(adapter);
|
||||
gridView.setSelection(position);
|
||||
} else {
|
||||
adapter.changeACK(ackPosition);
|
||||
SM.Debug("Set ACK: " + ackPosition + " | " + (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? "true" : "false"));
|
||||
|
@ -21,6 +21,7 @@ import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
|
||||
@ -90,28 +91,38 @@ public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
|
||||
|
||||
boolean isMilitaryTime = false;
|
||||
Date positionTime;
|
||||
long timeGMT = 0;
|
||||
String speed, address, gpsLocation, name = "";
|
||||
if (isLiveTab) {
|
||||
SuperVehicle vehicle = superVehHash.get(key);
|
||||
positionTime = new Date((new Date()).getTime() - vehicle.timeGMT);
|
||||
|
||||
//positionTime = new Date((new Date()).getTime() - vehicle.timeGMT);
|
||||
|
||||
timeGMT = vehicle.timeGMT;
|
||||
address = vehicle.Address != null ? vehicle.Address : "";
|
||||
name = vehicle.name;
|
||||
speed = String.format(context.getResources().getString(R.string.speedMph), vehicle.speed);
|
||||
speed = String.format(context.getResources().getString(R.string.speedMph), (int)(0.621371192 * vehicle.speed));
|
||||
gpsLocation = "[" + String.format("%.4f", vehicle.lat) + "," + String.format("%.4f",vehicle.lng) + "]";
|
||||
} else {
|
||||
HistPos histPos = histPosList.get(position);
|
||||
positionTime = new Date((new Date()).getTime() - histPos.timeGMT);
|
||||
|
||||
//positionTime = new Date((new Date()).getTime() - histPos.timeGMT);
|
||||
timeGMT = histPos.timeGMT;
|
||||
address = histPos.Address != null ? histPos.Address : "";
|
||||
speed = String.format(context.getResources().getString(R.string.speedMph), histPos.speed);
|
||||
speed = String.format(context.getResources().getString(R.string.speedMph), (int)(0.621371192 * histPos.speed));
|
||||
gpsLocation = "[" + String.format("%.4f", histPos.lat) + "," + String.format("%.4f",histPos.lng) + "]";
|
||||
}
|
||||
|
||||
String timeFormat = isMilitaryTime
|
||||
? "HH:mm:ss dd.MMM.yyyy"
|
||||
: "hh:mm:ss a dd.MMM.yyy";
|
||||
//String timeFormat = isMilitaryTime
|
||||
// ? "HH:mm:ss dd.MMM.yyyy"
|
||||
// : "hh:mm:ss a dd.MMM.yyy";
|
||||
|
||||
//DateFormat format = new SimpleDateFormat(timeFormat, Locale.ENGLISH);
|
||||
//tvTimeAgo.setText(format.format(positionTime));
|
||||
|
||||
DateFormat format = new SimpleDateFormat("hh:mm:ss", Locale.ENGLISH);
|
||||
tvTimeAgo.setText( getDateTimeAgo(timeGMT * 1000) + " [" + format.format(new Date(timeGMT*1000) ) + "]");
|
||||
|
||||
DateFormat format = new SimpleDateFormat(timeFormat, Locale.ENGLISH);
|
||||
tvTimeAgo.setText(format.format(positionTime));
|
||||
tvStreetView.setText(address);
|
||||
streetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE);
|
||||
tvStreetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE);
|
||||
@ -123,5 +134,38 @@ public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
|
||||
tvSpeed.setText(speed);
|
||||
tvGPSLocation.setText(gpsLocation);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a text representation for the date time representing
|
||||
/// the difference in minutes/hours/days from now
|
||||
/// </summary>
|
||||
/// <param name="utcTime">DateTime value which needs to be converted</param>
|
||||
/// <returns>String 'Ago' representation fot he date</returns>
|
||||
public static String getDateTimeAgo(long time)
|
||||
{
|
||||
String timeValue = "";
|
||||
|
||||
long diffInMs = (new Date().getTime() - time);
|
||||
|
||||
long secondsDifference = TimeUnit.MILLISECONDS.toSeconds(diffInMs);;
|
||||
|
||||
if (secondsDifference < 60)
|
||||
timeValue = "less than 1 minute";
|
||||
else if (secondsDifference < 3600)
|
||||
timeValue = (secondsDifference / 60) + " minute" + ((secondsDifference / 60) > 1 ? "s" : "") + " ago";
|
||||
else if (secondsDifference < 7200)
|
||||
timeValue = "1 hour ago";
|
||||
else if (secondsDifference < 86400)
|
||||
{
|
||||
timeValue = (secondsDifference / 3600) + " hours ago";
|
||||
}
|
||||
else
|
||||
{
|
||||
timeValue = (secondsDifference / 86400) + " days ago";
|
||||
}
|
||||
|
||||
return timeValue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -132,6 +132,17 @@ public class HistoryActivity extends AppCompatActivity implements OnMapReadyCall
|
||||
setDate();
|
||||
}
|
||||
|
||||
public void setLanguage() {
|
||||
TextView labelVehicle = findViewById(R.id.labelVehicle);
|
||||
TextView labelStartDate = findViewById(R.id.labelStartDate);
|
||||
TextView labelEndDate = findViewById(R.id.labelEndDate);
|
||||
|
||||
labelVehicle.setText(R.string.vehicle);
|
||||
labelStartDate.setText(R.string.startDate);
|
||||
labelEndDate.setText(R.string.endDate);
|
||||
displayButton.setText(R.string.display);
|
||||
}
|
||||
|
||||
private void displayHistory(ArrayList<HistPos> positions) {
|
||||
LatLng latLng = null;
|
||||
PolylineOptions polylineOptions = new PolylineOptions();
|
||||
@ -168,8 +179,9 @@ public class HistoryActivity extends AppCompatActivity implements OnMapReadyCall
|
||||
|
||||
private void setDate() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.DATE, 1);
|
||||
endDate = calendar.getTime();
|
||||
calendar.add(Calendar.DATE, -1);
|
||||
calendar.add(Calendar.DATE, -2);
|
||||
startDate = calendar.getTime();
|
||||
|
||||
TextView textViewStartDate = findViewById(R.id.textViewStartDate);
|
||||
@ -279,6 +291,5 @@ public class HistoryActivity extends AppCompatActivity implements OnMapReadyCall
|
||||
this.googleMap.getUiSettings().setMapToolbarEnabled(false);
|
||||
|
||||
parentTab.demoPositionsList();
|
||||
displayButton.performClick();
|
||||
}
|
||||
}
|
@ -296,6 +296,11 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
|
||||
registerBroadcastIntents();
|
||||
}
|
||||
|
||||
public void setLanguage() {
|
||||
TextView textView = findViewById(R.id.unit_name);
|
||||
textView.setText(R.string.unitName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Manipulates the map once available.
|
||||
* This callback is triggered when the map is ready to be used.
|
||||
@ -444,12 +449,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
|
||||
|
||||
public void displayVehicle(double latZoom, double lngZoom) {
|
||||
if (googleMap != null) {
|
||||
String openWindow = "";
|
||||
for (Marker marker : markers) {
|
||||
if (marker.isInfoWindowShown()) {
|
||||
openWindow = marker.getTitle();
|
||||
}
|
||||
}
|
||||
googleMap.clear();
|
||||
|
||||
for (int i = 0; i < displayedVehicles.size(); i++) {
|
||||
@ -464,7 +463,8 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
|
||||
markerOptions.icon(markerIcon);
|
||||
|
||||
Marker marker = this.googleMap.addMarker(markerOptions);
|
||||
if (openWindow.equals(marker.getTitle()) || i == lastItemClicked) {
|
||||
|
||||
if (i == lastItemClicked) {
|
||||
marker.showInfoWindow();
|
||||
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newLocation, 14));
|
||||
}
|
||||
@ -474,7 +474,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
|
||||
}
|
||||
}
|
||||
}
|
||||
lastItemClicked = 0;
|
||||
}
|
||||
|
||||
private BitmapDescriptor getProperBitmap(int largeIcon, String text) {
|
||||
|
@ -10,6 +10,7 @@ import android.graphics.Typeface;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
@ -45,6 +46,7 @@ public class MessagesActivity extends Activity {
|
||||
/**
|
||||
* Called when the activity is first created.
|
||||
*/
|
||||
private final String TAG = "MessagesActivity";
|
||||
|
||||
private MessagesGridViewAdapter mAdapter;
|
||||
private ConversationGridViewAdapter convAdapter;
|
||||
@ -138,6 +140,7 @@ public class MessagesActivity extends Activity {
|
||||
|
||||
// Implement On Item click listener
|
||||
gridView.setOnItemClickListener((arg0, arg1, position, arg3) -> {
|
||||
Log.v(TAG, "onItemClick " + LASTMESSAGES);
|
||||
if (LASTMESSAGES) {
|
||||
// get position
|
||||
Msg item = mAdapter.getItem(position);
|
||||
@ -167,6 +170,8 @@ public class MessagesActivity extends Activity {
|
||||
// button send message
|
||||
imageButtonSend = findViewById(R.id.imageButtonSend);
|
||||
imageButtonSend.setOnClickListener(v -> {
|
||||
if (editTextMsg.getText().toString().isEmpty())
|
||||
return;
|
||||
sendSMS(getScId(), editTextMsg.getText().toString());
|
||||
Toast.makeText(context, "Sending message...", Toast.LENGTH_SHORT).show();
|
||||
// disable send button and editBox
|
||||
@ -194,6 +199,7 @@ public class MessagesActivity extends Activity {
|
||||
imageButtonBack.setOnClickListener(v -> {
|
||||
// set LastMessage conversation type
|
||||
LASTMESSAGES = true;
|
||||
Log.v(TAG, "lastmessages: true");
|
||||
// refresh Grid
|
||||
getLastSMS();
|
||||
if (AppParams.DEMO)
|
||||
@ -386,6 +392,7 @@ public class MessagesActivity extends Activity {
|
||||
listLastMessages.add(new Msg(sentVehicle, txt, Calendar.getInstance().getTime(), sendSMSSeqID));
|
||||
}
|
||||
SM.Debug("time: " + timeGMT + " | " + Calendar.getInstance().getTime());
|
||||
Log.v(TAG, "lastmessages: false");
|
||||
LASTMESSAGES = false;
|
||||
|
||||
updateResultsInUi();
|
||||
@ -625,6 +632,7 @@ public class MessagesActivity extends Activity {
|
||||
setScId(item.sc_id);
|
||||
SM.Debug("Selected scId: " + getScId());
|
||||
// set Conversation type
|
||||
Log.v(TAG, "lastmessages: false");
|
||||
LASTMESSAGES = false;
|
||||
// call get SMS
|
||||
getSMS4unit(getScId());
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -26,6 +26,7 @@ import com.safemobile.lib.AppParams;
|
||||
import com.safemobile.lib.OperationCodes;
|
||||
import com.safemobile.lib.Recording;
|
||||
import com.safemobile.lib.SM;
|
||||
import com.safemobile.lib.Vehicle;
|
||||
import com.safemobile.lib.radio.RadioGW;
|
||||
import com.safemobile.lib.sound.RecordingHandle;
|
||||
|
||||
@ -295,9 +296,27 @@ public class RecordingsActivity extends Activity {
|
||||
private void updateResultsInUi() {
|
||||
// clear played items
|
||||
playingPositions = new ArrayList<>();
|
||||
|
||||
ArrayList<Recording> recordings = getAllRecordings();
|
||||
ArrayList<Recording> filteredList = new ArrayList<>();
|
||||
ArrayList<Vehicle> vehicles = getParentTab().getAllVehicle();
|
||||
for (Recording recording : recordings) {
|
||||
if (recording.callType == 0 || recording.callType == 4) {
|
||||
for (Vehicle vehicle : vehicles)
|
||||
if (vehicle.imei.equals(String.valueOf(recording.subID))) {
|
||||
filteredList.add(recording);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
filteredList.add(recording);
|
||||
}
|
||||
}
|
||||
|
||||
setAllRecordings(filteredList);
|
||||
|
||||
for (int i = 0; i < getAllRecordings().size(); i++)
|
||||
playingPositions.add(true);
|
||||
// set adapter - where playingPositions stores exists values
|
||||
|
||||
adapter = new RecordingsGridViewAdapter(activity, getAllRecordings(), playingPositions);
|
||||
|
||||
// playing positions need to be false because no recording is played
|
||||
|
@ -123,9 +123,9 @@ public class SDMobileActivity extends Activity {
|
||||
ConnectivityManager connectivityManager =
|
||||
(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
connectivityManager.registerDefaultNetworkCallback(networkCallback);
|
||||
} else {
|
||||
else {
|
||||
NetworkRequest request = new NetworkRequest.Builder()
|
||||
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build();
|
||||
connectivityManager.registerNetworkCallback(request, networkCallback);
|
||||
@ -182,37 +182,16 @@ public class SDMobileActivity extends Activity {
|
||||
ImageView imageLoading = (ImageView) findViewById(R.id.imageLoading);
|
||||
imageLoading.setBackgroundResource(R.drawable.loading);
|
||||
|
||||
// language
|
||||
imageLanguage = (ImageView) findViewById(R.id.imageLanguage);
|
||||
|
||||
// change spinner icon and selected language according to tmpLanguage
|
||||
switch (AppParams.LANGUAGETMP) {
|
||||
case "en":
|
||||
imageLanguage.setImageResource(R.drawable.en);
|
||||
break;
|
||||
case "de":
|
||||
imageLanguage.setImageResource(R.drawable.de);
|
||||
break;
|
||||
case "tr":
|
||||
imageLanguage.setImageResource(R.drawable.tr);
|
||||
break;
|
||||
case "ro":
|
||||
imageLanguage.setImageResource(R.drawable.ro);
|
||||
break;
|
||||
case "es":
|
||||
imageLanguage.setImageResource(R.drawable.es);
|
||||
break;
|
||||
case "ru":
|
||||
imageLanguage.setImageResource(R.drawable.ru);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + AppParams.LANGUAGETMP);
|
||||
}
|
||||
|
||||
imageLanguage.setOnClickListener(LanguageListener);
|
||||
setLanguageIcon();
|
||||
|
||||
// username and password
|
||||
etUsername = (EditText) findViewById(R.id.etUsername);
|
||||
etPassword = (EditText) findViewById(R.id.etPassword);
|
||||
|
||||
// login button
|
||||
btLogin = (Button) findViewById(R.id.btLogin);
|
||||
btLogin.setOnClickListener(arg0 -> {
|
||||
|
||||
@ -304,6 +283,35 @@ public class SDMobileActivity extends Activity {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void setLanguageIcon()
|
||||
{
|
||||
// change spinner icon and selected language according to tmpLanguage
|
||||
switch (AppParams.LANGUAGETMP) {
|
||||
case "en":
|
||||
imageLanguage.setImageResource(R.drawable.en);
|
||||
break;
|
||||
case "de":
|
||||
imageLanguage.setImageResource(R.drawable.de);
|
||||
break;
|
||||
case "tr":
|
||||
imageLanguage.setImageResource(R.drawable.tr);
|
||||
break;
|
||||
case "ro":
|
||||
imageLanguage.setImageResource(R.drawable.ro);
|
||||
break;
|
||||
case "es":
|
||||
imageLanguage.setImageResource(R.drawable.es);
|
||||
break;
|
||||
case "ru":
|
||||
imageLanguage.setImageResource(R.drawable.ru);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + AppParams.LANGUAGETMP);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (loadingDialog.isShowing())
|
||||
@ -557,7 +565,6 @@ public class SDMobileActivity extends Activity {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private void startTabActivity(long userID) {
|
||||
// good login - load activity
|
||||
Intent intent = new Intent(context, TabLayoutActivity.class);
|
||||
|
@ -2,16 +2,13 @@ package com.safemobile.safedispatch;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
/** fix import */
|
||||
import com.safemobile.adapters.LanguageSpinnerAdapter;
|
||||
import com.safemobile.lib.AppParams;
|
||||
import com.safemobile.lib.SM;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
@ -73,52 +70,49 @@ public class SetupActivity extends Activity {
|
||||
setContentView(R.layout.tabsetup);
|
||||
|
||||
|
||||
layoutSpinnerLanguage = (LinearLayout) findViewById(R.id.layoutSpinnerLanguage);
|
||||
layoutSpinnerLanguage = findViewById(R.id.layoutSpinnerLanguage);
|
||||
layoutSpinnerLanguage.setOnClickListener(LanguageListener);
|
||||
imageLanguage = (ImageView) findViewById(R.id.imageLanguage);
|
||||
textViewSpinnerLanguage = (TextView) findViewById(R.id.textViewSpinnerLanguage);
|
||||
imageLanguage = findViewById(R.id.imageLanguage);
|
||||
textViewSpinnerLanguage = findViewById(R.id.textViewSpinnerLanguage);
|
||||
|
||||
// change spinner icon and selected language according to tmpLanguage
|
||||
if (AppParams.LANGUAGETMP.equals("en")){
|
||||
imageLanguage.setImageResource(R.drawable.en);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.en));
|
||||
}
|
||||
else if (AppParams.LANGUAGETMP.equals("de")){
|
||||
imageLanguage.setImageResource(R.drawable.de);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.de));
|
||||
}
|
||||
else if (AppParams.LANGUAGETMP.equals("tr")){
|
||||
imageLanguage.setImageResource(R.drawable.tr);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.tr));
|
||||
}
|
||||
else if (AppParams.LANGUAGETMP.equals("ro")){
|
||||
imageLanguage.setImageResource(R.drawable.ro);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.ro));
|
||||
}
|
||||
else if(AppParams.LANGUAGETMP.equals("es")){
|
||||
imageLanguage.setImageResource(R.drawable.es);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.es));
|
||||
}
|
||||
else if(AppParams.LANGUAGETMP.equals("ru")){
|
||||
imageLanguage.setImageResource(R.drawable.ru);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.ru));
|
||||
switch (AppParams.LANGUAGETMP) {
|
||||
case "en":
|
||||
imageLanguage.setImageResource(R.drawable.en);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.en));
|
||||
break;
|
||||
case "de":
|
||||
imageLanguage.setImageResource(R.drawable.de);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.de));
|
||||
break;
|
||||
case "tr":
|
||||
imageLanguage.setImageResource(R.drawable.tr);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.tr));
|
||||
break;
|
||||
case "ro":
|
||||
imageLanguage.setImageResource(R.drawable.ro);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.ro));
|
||||
break;
|
||||
case "es":
|
||||
imageLanguage.setImageResource(R.drawable.es);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.es));
|
||||
break;
|
||||
case "ru":
|
||||
imageLanguage.setImageResource(R.drawable.ru);
|
||||
textViewSpinnerLanguage.setText(getString(R.string.ru));
|
||||
break;
|
||||
}
|
||||
|
||||
// get visual elements
|
||||
appServerIP = (EditText) findViewById(R.id.appServerIP);
|
||||
appServerPort = (EditText) findViewById(R.id.appServerPort);
|
||||
appServerIP = findViewById(R.id.appServerIP);
|
||||
appServerPort = findViewById(R.id.appServerPort);
|
||||
|
||||
// hide path layout used only on Pad/Pod
|
||||
layoutPath = (LinearLayout) findViewById(R.id.layoutPath);
|
||||
layoutPath = findViewById(R.id.layoutPath);
|
||||
layoutPath.setVisibility(View.GONE);
|
||||
btn_save = (Button) findViewById(R.id.btn_save);
|
||||
btn_save = findViewById(R.id.btn_save);
|
||||
|
||||
btn_save.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
saveSettings();
|
||||
}
|
||||
});
|
||||
btn_save.setOnClickListener(v -> saveSettings());
|
||||
|
||||
// set values
|
||||
if(!AppParams.IP.equals("n/a"))
|
||||
@ -134,46 +128,31 @@ public class SetupActivity extends Activity {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setMessage(getString(R.string.exit))
|
||||
.setCancelable(false)
|
||||
.setNeutralButton(getString(R.string.logout), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
parentTab.whenBackPressed(AppParams.ActivityResult.logout);
|
||||
}
|
||||
})
|
||||
.setPositiveButton(getString(R.string.ext), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
parentTab.whenBackPressed(AppParams.ActivityResult.exit);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
.setNeutralButton(getString(R.string.logout), (dialog, id) -> parentTab.whenBackPressed(AppParams.ActivityResult.logout))
|
||||
.setPositiveButton(getString(R.string.ext), (dialog, id) -> parentTab.whenBackPressed(AppParams.ActivityResult.exit))
|
||||
.setNegativeButton(getString(R.string.cancel), (dialog, id) -> dialog.cancel());
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
// listener when select language pressed
|
||||
private OnClickListener LanguageListener = new OnClickListener() {
|
||||
private final OnClickListener LanguageListener = new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
final LanguageSpinnerAdapter adapter = new LanguageSpinnerAdapter(context, android.R.layout.simple_spinner_item, Languages, getLayoutInflater());
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setTitle(getString(R.string.selLanguage));
|
||||
builder.setAdapter(adapter , new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
textViewSpinnerLanguage.setText(adapter.getItem(which));
|
||||
switch(which)
|
||||
{
|
||||
case 0: imageLanguage.setImageResource(R.drawable.en); AppParams.LANGUAGETMP = "en"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 1: imageLanguage.setImageResource(R.drawable.de); AppParams.LANGUAGETMP = "de"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 2: imageLanguage.setImageResource(R.drawable.tr); AppParams.LANGUAGETMP = "tr"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 3: imageLanguage.setImageResource(R.drawable.ro); AppParams.LANGUAGETMP = "ro"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 4: imageLanguage.setImageResource(R.drawable.ru); AppParams.LANGUAGETMP = "ru"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 5: imageLanguage.setImageResource(R.drawable.es); AppParams.LANGUAGETMP = "es"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
}
|
||||
builder.setAdapter(adapter , (dialog, which) -> {
|
||||
textViewSpinnerLanguage.setText(adapter.getItem(which));
|
||||
switch(which)
|
||||
{
|
||||
case 0: imageLanguage.setImageResource(R.drawable.en); AppParams.LANGUAGETMP = "en"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 1: imageLanguage.setImageResource(R.drawable.de); AppParams.LANGUAGETMP = "de"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 2: imageLanguage.setImageResource(R.drawable.tr); AppParams.LANGUAGETMP = "tr"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 3: imageLanguage.setImageResource(R.drawable.ro); AppParams.LANGUAGETMP = "ro"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 4: imageLanguage.setImageResource(R.drawable.ru); AppParams.LANGUAGETMP = "ru"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
case 5: imageLanguage.setImageResource(R.drawable.es); AppParams.LANGUAGETMP = "es"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
|
||||
}
|
||||
});
|
||||
|
||||
@ -215,12 +194,12 @@ public class SetupActivity extends Activity {
|
||||
String oldIP = AppParams.IP;
|
||||
String oldPort = AppParams.PORT;
|
||||
|
||||
editor.putString("ip", appServerIP.getText().toString());
|
||||
editor.putString("port", appServerPort.getText().toString());
|
||||
editor.putString("language", AppParams.LANGUAGETMP);
|
||||
Boolean result = editor.commit();
|
||||
editor.putString("ip", appServerIP.getText().toString());
|
||||
editor.putString("port", appServerPort.getText().toString());
|
||||
editor.putString("language", AppParams.LANGUAGETMP);
|
||||
boolean result = editor.commit();
|
||||
// saved completed
|
||||
if(result)
|
||||
if (result)
|
||||
Toast.makeText(context, "Settings saved successfully.", Toast.LENGTH_LONG).show();
|
||||
else
|
||||
Toast.makeText(context, "Settings failed to complete!", Toast.LENGTH_LONG).show();
|
||||
@ -265,31 +244,4 @@ public class SetupActivity extends Activity {
|
||||
//showDialog(result);
|
||||
}
|
||||
|
||||
public void showDialog(Boolean result)
|
||||
{
|
||||
Dialog dialog = new Dialog(context);
|
||||
if(result)
|
||||
dialog.setTitle("Save Completed");
|
||||
else
|
||||
dialog.setTitle("Save Failed");
|
||||
dialog.setContentView(R.layout.dialog);
|
||||
dialog.setCancelable(true);
|
||||
dialog.setCanceledOnTouchOutside(true);
|
||||
|
||||
TextView text = (TextView) dialog.findViewById(R.id.text);
|
||||
ImageView image = (ImageView) dialog.findViewById(R.id.image);
|
||||
if(result)
|
||||
{
|
||||
image.setImageResource(R.drawable.error);
|
||||
text.setText("Settings saved successfully.");
|
||||
}
|
||||
else
|
||||
{
|
||||
image.setImageResource(R.drawable.error);
|
||||
text.setText("Settings failed to complete!");
|
||||
}
|
||||
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -150,18 +150,18 @@
|
||||
android:enabled="true"
|
||||
android:textColor="#000000"
|
||||
android:layout_marginBottom="5sp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageSettings"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:contentDescription="holds the icon for language"
|
||||
android:src="@drawable/change_ip"
|
||||
android:adjustViewBounds="true"
|
||||
android:scaleType="fitCenter"
|
||||
android:layout_alignTop="@+id/imageLanguage"
|
||||
android:layout_alignBottom="@+id/imageLanguage"
|
||||
android:layout_alignParentRight="true" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageSettings"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_alignTop="@+id/imageLanguage"
|
||||
android:layout_alignBottom="@+id/imageLanguage"
|
||||
android:layout_alignParentRight="true"
|
||||
android:adjustViewBounds="true"
|
||||
android:contentDescription="holds the icon for language"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="@drawable/change_ip" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonLogin"
|
||||
|
@ -10,6 +10,7 @@
|
||||
android:gravity="center_vertical" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/unit_name"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/unitName"
|
||||
|
Loading…
Reference in New Issue
Block a user