Compare commits

...

33 Commits

Author SHA1 Message Date
ba0dc850f7 display notifications 2022-03-31 14:12:03 +03:00
ca4255943a clean code 2022-03-30 12:52:38 +03:00
cbeb912820 Merge pull request 'allow server to reconnect on mobile data' (#15) from feature/allow_server_reconnection_on_mobile_data into develop
Reviewed-on: #15
2022-03-30 08:52:35 +00:00
f15688b9a1 allow server to reconnect on mobile data 2022-03-30 11:50:48 +03:00
94091a9a31 Merge pull request 'text color on radio' (#13) from feature/icon_and_background into develop
Reviewed-on: #13
2022-03-28 13:38:39 +00:00
d9d325b18b text color on radio 2022-03-28 16:34:53 +03:00
f4c6b8163d Merge pull request 'change text color + small changes' (#12) from feature/icon_and_background into develop
Reviewed-on: #12
2022-03-28 11:09:20 +00:00
17a7e1711e merge with develop 2022-03-28 14:06:36 +03:00
9b302d0461 change text color + small changes 2022-03-28 14:02:10 +03:00
e80272e0a4 Merge pull request 'features/SD-188-Create_Permission_module_and_request_audio' (#11) from features/SD-188-Create_Permission_module_and_request_audio into develop
Reviewed-on: #11
Reviewed-by: Adriana <adriana.epure@safemobile.com>
2022-03-24 16:59:12 +00:00
3268286e76 #SD-188 - fix merge conflicts 2022-03-24 12:55:53 +02:00
c07986d604 Merge branch 'develop' into features/SD-188-Create_Permission_module_and_request_audio
# Conflicts:
#	safeDispatch/src/main/java/com/safemobile/dispatch/HistoryActivity.java
#	safeDispatch/src/main/java/com/safemobile/safedispatch/TabLayoutActivity.java
2022-03-24 12:29:12 +02:00
c70a1b71a1 Merge pull request 'change package name + apk && aab' (#10) from feature/change_package_name into develop
Reviewed-on: #10
2022-03-24 09:42:32 +00:00
142558d057 change package name + apk && aab 2022-03-24 11:18:49 +02:00
968d9e7296 Merge pull request 'new credential generated' (#9) from feature/new_signature into develop
Reviewed-on: #9
2022-03-23 11:35:40 +00:00
2855e9bde6 new credential generated 2022-03-23 13:33:54 +02:00
ee8bfe56b4 Merge pull request 'feature/icon_and_background' (#8) from feature/icon_and_background into develop
Reviewed-on: #8
2022-03-23 09:23:35 +00:00
d519a2be14 change app name 2022-03-23 11:12:20 +02:00
1b3912c682 change background image 2022-03-23 11:12:00 +02:00
ba9383248c chage icon 2022-03-23 10:56:09 +02:00
07127cea18 Merge pull request 'feature/apk_versioning_mechanism' (#7) from feature/apk_versioning_mechanism into develop
Reviewed-on: #7
2022-03-22 13:19:47 +00:00
6a235d1d3f merge with develop 2022-03-22 15:18:25 +02:00
bac12825c9 edit apk name 2022-03-22 15:10:29 +02:00
bbed107c42 get versionCode & name from tag 2022-03-22 12:11:08 +02:00
bca16caf94 new marker icon 2022-03-21 13:01:04 +02:00
0b887deb99 remove marker icon 2022-03-21 12:19:23 +02:00
c85dc279dc clean history activity 2022-03-21 11:58:34 +02:00
db360c4d45 speed limit 2022-03-21 11:50:52 +02:00
89f8cbfcae WIP 2022-03-18 23:12:20 +02:00
4420af337d cleanups 2022-03-18 15:40:15 +02:00
6b6543ca3f display test positions 2022-03-18 15:22:35 +02:00
f554356af1 small cleanups 2022-03-18 15:03:34 +02:00
0fabbc73be comment line in order to move vehicle 2022-03-17 15:13:25 +02:00
74 changed files with 1663 additions and 1831 deletions

0
gradlew vendored Normal file → Executable file
View File

View File

@ -19,6 +19,13 @@ android {
buildFeatures { buildFeatures {
viewBinding false viewBinding false
} }
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
//abortOnError false
}
} }
dependencies { dependencies {

View File

@ -4,9 +4,10 @@
android:versionCode="1" android:versionCode="1"
android:versionName="1.0" > android:versionName="1.0" >
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application <application
android:allowBackup="true" android:allowBackup="true"
android:icon="@drawable/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme" > android:theme="@style/AppTheme" >
</application> </application>

View File

@ -198,12 +198,11 @@ public abstract class AbstractSDParentActivity extends TabActivity {
return res; return res;
} }
public boolean getHistoryPositions(int sc_id, long timeGMTStart, long timeGMTStop) public boolean getHistoryPositions(int sc_id, long timeGMTStart, long timeGMTStop) {
{
if(tcp == null) if(tcp == null)
return false; return false;
String histSeqID = "1."+Integer.toString((int) (System.currentTimeMillis() / 1000L)); String histSeqID = "1."+ (int) (System.currentTimeMillis() / 1000L);
boolean res = tcp.Write(histSeqID,"#26#"+sc_id+"#"+timeGMTStart+"#"+timeGMTStop+"#"); boolean res = tcp.Write(histSeqID,"#26#"+sc_id+"#"+timeGMTStart+"#"+timeGMTStop+"#");
if(res) if(res)
SM.Debug("Message [getHistoryPositions] sent to app server"); SM.Debug("Message [getHistoryPositions] sent to app server");
@ -213,8 +212,7 @@ public abstract class AbstractSDParentActivity extends TabActivity {
return res; return res;
} }
public boolean getRadiosList() public boolean getRadiosList() {
{
if(tcp == null) if(tcp == null)
return false; return false;

View File

@ -28,13 +28,11 @@ public class TCPService extends Service {
int port = 13589; int port = 13589;
try { try {
port = Integer.parseInt(AppParams.PORT); port = Integer.parseInt(AppParams.PORT);
} } catch(Exception ex) { }
catch(Exception ex) { }
tcpParser = new TCPmsgParser(); tcpParser = new TCPmsgParser();
if(tcp == null && !AppParams.IP.equalsIgnoreCase("n/a")) if(tcp == null && !AppParams.IP.equalsIgnoreCase("n/a")) {
{
tcp = new TCPhandler(getApplicationContext(), AppParams.IP, port); tcp = new TCPhandler(getApplicationContext(), AppParams.IP, port);
} }

View File

@ -1,7 +1,6 @@
package com.safemobile.services; package com.safemobile.services;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.nio.charset.Charset;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Timer; import java.util.Timer;
@ -12,7 +11,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import com.safemobile.lib.AppParams; import com.safemobile.lib.AppParams;
@ -20,247 +18,178 @@ import com.safemobile.lib.SM;
import com.safemobile.lib.TCPmsg; import com.safemobile.lib.TCPmsg;
public class TCPhandler implements Runnable public class TCPhandler implements Runnable {
{
private boolean alive = true; private boolean alive = true;
public String serverHostname = new String ("10.120.1.114");// public String serverHostname;
private int port = 13579; private int port;
private Thread listenThread; private Thread listenThread;
private Socket soc =null; private Socket soc =null;
//private BufferedReader recv;
//private PrintWriter writer;
private DataInputStream input; private DataInputStream input;
private DataOutputStream output; private DataOutputStream output;
private Timer timer;
private String leftOver = ""; private String leftOver = "";
public static LinkedList<TCPmsg> msgList; public static LinkedList<TCPmsg> msgList;
private volatile int n=0;
public Boolean isConnectionUP = false; public Boolean isConnectionUP = false;
public Boolean previousConnectionWasUP = false; public Boolean previousConnectionWasUP = false;
private Context context; private final Context context;
private boolean isWiFiOn = true; private boolean isWiFiOn;
public TCPhandler(Context context, String hostName, int p)
{
public TCPhandler(Context context, String hostName, int p) {
this.context = context; this.context = context;
serverHostname=hostName; serverHostname=hostName;
port=p; port = p;
msgList = new LinkedList<TCPmsg>(); msgList = new LinkedList<>();
SM.Debug("---TCPhandler constructor [" + hostName + "," + p + "] ---"); SM.Debug("---TCPhandler constructor [" + hostName + "," + p + "] ---");
listenThread = new Thread(this, "TCPlisten"); listenThread = new Thread(this, "TCPlisten");
listenThread.start(); // (2) Start the thread. listenThread.start(); // (2) Start the thread.
// create timer to check socket status // create timer to check socket status
timer = new Timer(); Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() { timer.scheduleAtFixedRate(new TimerTask() {
@Override @Override
public void run() { public void run() {
try { try {
//Looper.prepare(); previousConnectionWasUP = isConnectionUP;
//mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // try to send something
// get if is authenticated TCPmsgParser._fireonTCPConnectionStatusEvent(isConnectionUP, previousConnectionWasUP);
//Write("0.0", "d"); } catch (Exception e) {
previousConnectionWasUP = isConnectionUP;
// try to send something
TCPmsgParser._fireonTCPConnectionStatusEvent(isConnectionUP, previousConnectionWasUP);
}
catch (Exception e) {
//e.printStackTrace();
SM.Exception("TIMERException", e.toString()); SM.Exception("TIMERException", e.toString());
} }
} }
}, 0, 3000); }, 0, 3000);
// get WiFi state // get WiFi state
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); isWiFiOn = isNetworkConnected();
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(mWifi.isConnectedOrConnecting())
isWiFiOn = true;
IntentFilter intentFilter = new IntentFilter(); IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
context.registerReceiver(mReceived, intentFilter); context.registerReceiver(mReceived, intentFilter);
} }
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
}
@Override @Override
public void run() public void run() {
{ try {
try if (soc != null)
{ soc.close();
if(soc!=null)
soc.close();
soc = new Socket(); soc = new Socket();
soc.connect(new InetSocketAddress(serverHostname, port), 5000); soc.connect(new InetSocketAddress(serverHostname, port), 5000);
//soc.setSoTimeout(3000); input = new DataInputStream(soc.getInputStream());
//SM.Debug("Socket timeout:" + soc.getSoTimeout() ); output = new DataOutputStream(soc.getOutputStream());
//soc.setSoTimeout(5000);
input = new DataInputStream(soc.getInputStream());
output = new DataOutputStream(soc.getOutputStream());
//recv= new BufferedReader(new InputStreamReader(soc.getInputStream()));
//writer =new PrintWriter(soc.getOutputStream()) ;
if(soc !=null) {
//previousConnectionWasUP = isConnectionUP;
isConnectionUP = true;
triggerTCPConnectionStateEvent();
}
if (soc != null) {
isConnectionUP = true;
triggerTCPConnectionStateEvent();
} }
catch (UnknownHostException e) } catch (UnknownHostException e) {
{ SM.Debug("UnknownHostException", "TCPhandler break:"+ e);
SM.Debug("UnknownHostException", "TCPhandler break:"+e.toString()); } catch (IllegalArgumentException e) {
} SM.Debug("IllegalArgumentException", "TCPhandler break:"+ e);
catch (IllegalArgumentException e) } catch (IOException e) {
{ SM.Debug("IOException", "TCPhandler break:"+ e);
SM.Debug("IllegalArgumentException", "TCPhandler break:"+e.toString()); }
}
catch (IOException e)
{
SM.Debug("IOException", "TCPhandler break:"+e.toString());
}
while(alive) while (alive) {
{
//SM.Debug("Waiting for data...");
try { try {
Thread.sleep(3000); Thread.sleep(3000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
SM.Debug("TCPhandler Crash1 on sleep:"+e.toString()); SM.Debug("TCPhandler Crash1 on sleep:"+ e);
} }
while(isConnectionUP) while(isConnectionUP) {
{ try {
try
{
Thread.sleep(100); Thread.sleep(100);
//SM.Debug("Waiting for data..."); try {
//process leftover boolean FinishLeftOver = true;
try while (FinishLeftOver) {
{ // add this replacement if message length doesn't contain the last #
boolean FinishLeftOver =true; String[] tempArr2 = leftOver.split("#");
while (FinishLeftOver) if (tempArr2.length > 1) {
{ int messLen;
// add this replacement if message length doesn't contain the last # try {
// leftOver = leftOver.replace("##", "#"); messLen = Integer.parseInt(tempArr2[1]);
String[] tempArr2 = leftOver.split("#");
if (tempArr2.length > 1)
{
int messLen;
try
{
messLen = Integer.parseInt(tempArr2[1]);
//TODO talk to Gaby to fix this on Bridge //TODO talk to Gaby to fix this on Bridge
} catch (Exception e) {
SM.Debug("leftovers", "incorect msg len leftOver =" + tempArr2[1]);
messLen =-1;
}
} if (messLen > leftOver.length()) {
catch (Exception e) break;
{ } else if (messLen == leftOver.length()) {
SM.Debug("leftovers", "incorect msg len leftOver =" + tempArr2[1]); TCPmsg msg = new TCPmsg(leftOver.toCharArray());
messLen =-1; SM.Debug("leftovers", "RX from leftOver:"+msg.allData);
}
if(messLen>leftOver.length()) if(msg.allData.contains("#92#"))
{ prioritizePongReceived();
FinishLeftOver =false;
break;
}
else if(messLen==leftOver.length())
{
TCPmsg msg = new TCPmsg(leftOver.toCharArray());
SM.Debug("leftovers", "RX from leftOver:"+msg.allData);
if(msg.allData.contains("#92#")) msgList.add(msg);
prioritizePongReceived(); leftOver ="";
break;
} else { // we have more message in leftover
TCPmsg msg = new TCPmsg(leftOver.substring(0,messLen).toCharArray());
SM.Debug("leftovers", "RX from leftOver:"+msg.allData);
msgList.add(msg); if(msg.allData.contains("#92#"))
leftOver =""; prioritizePongReceived();
FinishLeftOver =false;
break;
}
else // we have more message in leftover
{
TCPmsg msg = new TCPmsg(leftOver.substring(0,messLen).toCharArray());
SM.Debug("leftovers", "RX from leftOver:"+msg.allData);
if(msg.allData.contains("#92#")) msgList.add(msg);
prioritizePongReceived(); leftOver = leftOver.substring(messLen);
}
msgList.add(msg); } else FinishLeftOver = false;
leftOver = leftOver.substring(messLen,leftOver.length()); }
} } catch (Exception e) {
} SM.Debug("leftovers", "Error on process leftover"+ e);
else FinishLeftOver = false; }
} String data;
} int n;
catch (Exception e)
{
SM.Debug("leftovers", "Error on process leftover"+e.toString());
}
//end process leftover
String data ="";
n=0;
//char[] buf = new char[1024];
//n = recv.read(buf);
byte[] buf = new byte[1024]; byte[] buf = new byte[1024];
// read data into buffer // read data into buffer
n = input.read(buf); n = input.read(buf);
//connection closed by server //connection closed by server
if(n==-1) if (n == -1) {
{
SM.Debug("TCP Client", "Connection closed by server!"); SM.Debug("TCP Client", "Connection closed by server!");
soc.close(); soc.close();
//previousConnectionWasUP = isConnectionUP;
isConnectionUP = false; isConnectionUP = false;
triggerTCPConnectionStateEvent(); triggerTCPConnectionStateEvent();
soc = null; soc = null;
break; break;
} }
byte[] temp = new byte[n]; byte[] temp = new byte[n];
for(int i=0;i<n;i++) temp[i] = buf[i]; System.arraycopy(buf, 0, temp, 0, n);
//String data =new String(temp);
// decryptData // decryptData
temp = decryptTEA(temp); temp = decryptTEA(temp);
data = new String(temp); data = new String(temp);
//if we have any leftovers from previous message add them //if we have any leftovers from previous message add them
if(leftOver.length()>1) // avoid case with only one # if(leftOver.length() > 1) { // avoid case with only one #
{
data = leftOver+data; data = leftOver+data;
leftOver = ""; leftOver = "";
} }
//search for overflow message //search for overflow message
String[] tempArr = data.split("#"); String[] tempArr = data.split("#");
if ((tempArr.length == 0) || (tempArr.length == 1)) if ((tempArr.length == 0) || (tempArr.length == 1)) {
{
SM.Debug("TCP Client", "incorect messagebuss message=" + data); SM.Debug("TCP Client", "incorect messagebuss message=" + data);
continue; continue;
} }
//get msg len //get msg len
// for(int i=0;i<tempArr.length;i++)
// SM.Debug("I:"+i+" tempArr[i]:"+tempArr[i]);
int messLen; int messLen;
try { try {
messLen = Integer.parseInt(tempArr[1]); messLen = Integer.parseInt(tempArr[1]);
@ -269,72 +198,51 @@ public class TCPhandler implements Runnable
continue; continue;
} }
//messLen not int //messLen not int
if(messLen == -1) if (messLen == -1) {
{
//SM.Debug("messLen not int=" + messLen +" tempArr[1]:" +tempArr[1]);
continue; continue;
} }
char[] temMSG = data.toCharArray(); char[] temMSG = data.toCharArray();
//SM.Debug("MessLen:"+messLen+" Data len:"+data.length()+"IF:"+(data.length() != messLen)); if (data.length() != messLen) {
if (data.length() != messLen)
{
//if expected string message is smaller then actual string then exit processing; //if expected string message is smaller then actual string then exit processing;
if(messLen>data.length()) if (messLen > data.length()) {
//if(messLen>n)
{
//SM.Debug("duda","messLen=" + messLen +" data.length():" +data.length()+"n:"+n);
leftOver = data; // Add by bigu leftOver = data; // Add by bigu
continue; continue;
} }
//perform cut //perform cut
//SM.Debug("We got leftover ....message length("+messLen+") != actual length("+data.length()+")");
temMSG = data.substring(0,messLen).toCharArray(); temMSG = data.substring(0,messLen).toCharArray();
//SM.Debug("temMSG:"+temMSG.toString()); leftOver = data.substring(messLen);
leftOver = data.substring(messLen,data.length());
//SM.Debug("leftOver:"+leftOver);
//leftOver = data.substring(messLen,n);
//SM.Debug("left over string:"+leftOver);
} }
//decode TCP msg //decode TCP msg
TCPmsg msg = new TCPmsg(temMSG); TCPmsg msg = new TCPmsg(temMSG);
SM.Debug("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RX <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", msg.allData); SM.Debug("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RX <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", msg.allData);
if(msg.allData.contains("#92#")) if (msg.allData.contains("#92#"))
prioritizePongReceived(); prioritizePongReceived();
msgList.add(msg); msgList.add(msg);
} catch(Exception ex) {
} SM.Debug("TCPHandler", "TCPhandler/run/break:"+ ex);
catch(Exception ex)
{
SM.Debug("TCPHandler", "TCPhandler/run/break:"+ex.toString());
//previousConnectionWasUP = isConnectionUP;
isConnectionUP = false; isConnectionUP = false;
triggerTCPConnectionStateEvent(); triggerTCPConnectionStateEvent();
} }
}//while(connOK) }
// //
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
SM.Debug("TCPhandler Crash2 on sleep:"+e.toString()); SM.Debug("TCPhandler Crash2 on sleep:"+ e);
//previousConnectionWasUP = isConnectionUP;
} }
//try to restart connection //try to restart connection
if(alive && isWiFiOn) if (alive && isWiFiOn)
RestartTCP(); RestartTCP();
}
}//while(alive)
SM.Debug("=================================="); SM.Debug("==================================");
SM.Debug("TCP listenThread stoped!! alive = false"); SM.Debug("TCP listenThread stoped!! alive = false");
SM.Debug("=================================="); SM.Debug("==================================");
} }
/** /**
* Create a bypass in order to trigger the ping received event * Create a bypass in order to trigger the ping received event
*/ */
@ -342,7 +250,6 @@ public class TCPhandler implements Runnable
TCPmsgParser._firePONGReceivedEvent(); TCPmsgParser._firePONGReceivedEvent();
} }
/* Broadcast Received for WiFi Connect/Disconnect */ /* Broadcast Received for WiFi Connect/Disconnect */
public BroadcastReceiver mReceived = new BroadcastReceiver() { public BroadcastReceiver mReceived = new BroadcastReceiver() {
@ -351,183 +258,74 @@ public class TCPhandler implements Runnable
final String action = intent.getAction(); final String action = intent.getAction();
SM.Debug("WIFI STATE", action); SM.Debug("WIFI STATE", action);
if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){ if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
// close socket if the wifi is disconnecting or disconnected // close socket if the wifi is disconnecting or disconnected
if(!info.isConnectedOrConnecting()) { isWiFiOn = isNetworkConnected();
closeSocket(); if (!isWiFiOn)
isWiFiOn = false; closeSocket();
}
else
isWiFiOn = true;
} }
} }
}; };
/** Send a message through the TCP Socket /** Send a message through the TCP Socket
* @param seqID The messages's sequence ID (a number of order) * @param seqID The messages's sequence ID (a number of order)
* @param msg The messages which will be sent * @param msg The messages which will be sent
* @return True if the message was sent * @return True if the message was sent
*/ */
public boolean Write(String seqID, String msg) public boolean Write(String seqID, String msg) {
{ try {
if (output != null) {
try
{
/*
if(writer != null)
{
String cmdok = "#" + seqID + msg;
Integer tmp = cmdok.length() + 1;
//SM.Debug("tmp:"+tmp);
tmp += Integer.toString(tmp).length();// tmp.ToString().Length;
if((tmp==10)||(tmp==100)||(tmp==1000)) tmp++;
cmdok = "#" + Integer.toString(tmp) + cmdok;
writer.write(encryptTEA(cmdok));
writer.flush();
SM.Debug("TX:"+encryptTEA(cmdok));
return true;
}*/
if(output != null)
{
try { try {
Thread.sleep(10); Thread.sleep(10);
String cmdok = "#" + seqID + msg; String cmdok = "#" + seqID + msg;
Integer tmp = cmdok.length() + 1; int tmp = cmdok.length() + 1;
//SM.Debug("tmp:"+tmp); //SM.Debug("tmp:"+tmp);
tmp += Integer.toString(tmp).length();// tmp.ToString().Length; tmp += Integer.toString(tmp).length();
if((tmp==10)||(tmp==100)||(tmp==1000)) tmp++; if ((tmp == 10)||(tmp == 100)||(tmp == 1000)) tmp++;
cmdok = "#" + Integer.toString(tmp) + cmdok; cmdok = "#" + tmp + cmdok;
byte[] mess = encryptTEA(cmdok); byte[] mess = encryptTEA(cmdok);
output.write(mess); output.write(mess);
output.flush(); output.flush();
// show only notACK messages // show only notACK messages
//if(mess[3] != 0x0C)
SM.Debug(" ", new String(mess)); SM.Debug(" ", new String(mess));
return true; return true;
} catch (IOException | NoSuchElementException | InterruptedException e) {
SM.Exception("TCPClient[Send]", e.toString());
} }
catch (IOException e) { } else
//e.printStackTrace();
SM.Exception("TCPClient[Send]", e.toString());
} catch (InterruptedException e) {
SM.Exception("TCPClient[Send]", e.toString());
} catch (NoSuchElementException e) {
SM.Exception("TCPClient[Send]", e.toString());
}
}
else
{
return false; return false;
} } catch (Exception e) {
} SM.Debug("TCPhandler Write Procedure:"+ e);
catch (Exception e)
{
SM.Debug("TCPhandler Write Procedure:"+e.toString());
} }
return false; return false;
} }
public void setConnectionIsDown() {
if(input != null) {
try {
input.close();
} catch (IOException e) {
}
finally {
input = null;
}
}
isConnectionUP = false;
}
/* Encrypt a string using an encryption algorithm, /* Encrypt a string using an encryption algorithm,
* in this case TEA */ * in this case TEA */
public static byte[] encryptTEA(String toEncryptData) { public static byte[] encryptTEA(String toEncryptData) {
byte[] encryptedByteArray = new byte[]{};
/*
//encrypt message using TEA
try {
encryptedByteArray = TEA.encrypt(toEncryptData);
} catch (UnsupportedEncodingException e) {
SM.Exception("encryptTEA Exception(UEE): " + e.toString());
} catch (IndexOutOfBoundsException e) {
SM.Exception("encryptTEA Exception(IOoBE): " + e.toString());
} catch (NullPointerException e) {
SM.Exception("encryptTEA Exception(NPE): " + e.toString());
}
//*/
// no encryption // no encryption
encryptedByteArray = toEncryptData.getBytes(); return toEncryptData.getBytes();
return encryptedByteArray;
} }
/* Decrypt a string using an encryption algorithm, /* Decrypt a string using an encryption algorithm,
* in this case TEA */ * in this case TEA */
public static byte[] decryptTEA(byte[] toDecryptData) { public static byte[] decryptTEA(byte[] toDecryptData) {
byte[] decryptedByteArray = new byte[]{}; byte[] decryptedByteArray;
/*
String sm = "";
for(int i=0; i<toDecryptData.length; i++)
sm+=toDecryptData[i] + " ";
SM.Debug("DDDDDD: " + sm);
//*/
/*
//decrypt message using TEA
try {
decryptedByteArray = TEA.decrypt(toDecryptData);
} catch (UnsupportedEncodingException e) {
SM.Exception("encryptTEA Exception(UEE): " + e.toString());
} catch (IndexOutOfBoundsException e) {
SM.Exception("encryptTEA Exception(IOoBE): " + e.toString());
} catch (NullPointerException e) {
SM.Exception("encryptTEA Exception(NPE): " + e.toString());
}
String sm = "";
for(int i=0; i<decryptedByteArray.length; i++)
sm+= (int)decryptedByteArray[i] + " ";
//sm = new String(decryptedByteArray.toString());
try {
SM.Debug("##### " + new String(decryptedByteArray, "UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SM.Debug("DEcrypted: " + decryptedByteArray.toString());
//*/
// no decryption // no decryption
decryptedByteArray = toDecryptData; decryptedByteArray = toDecryptData;
return decryptedByteArray; return decryptedByteArray;
} }
public int getPort() { public int getPort() {
return port; return port;
} }
public void updateTCPparameters(String ip, String _port) public void updateTCPparameters(String ip, String _port) {
{
// stop socket // stop socket
try { try {
if(soc != null) if(soc != null)
@ -537,30 +335,23 @@ public class TCPhandler implements Runnable
} }
serverHostname = ip; serverHostname = ip;
try try {
{
port = Integer.parseInt(_port); port = Integer.parseInt(_port);
} } catch (Exception ignored) { }
catch (Exception e) { finally {
}
finally
{
port = 13589; port = 13589;
} }
} }
public void triggerTCPConnectionStateEvent() { public void triggerTCPConnectionStateEvent() {
if(!isConnectionUP) if (!isConnectionUP)
TCPmsgParser._fireTCPConnectionDownEvent(previousConnectionWasUP); TCPmsgParser._fireTCPConnectionDownEvent(previousConnectionWasUP);
else else
TCPmsgParser._fireTCPConnectionUpEvent(previousConnectionWasUP); TCPmsgParser._fireTCPConnectionUpEvent(previousConnectionWasUP);
} }
private void RestartTCP() private void RestartTCP() {
{ try {
try
{
isConnectionUP = false; isConnectionUP = false;
previousConnectionWasUP = false; previousConnectionWasUP = false;
@ -569,76 +360,22 @@ public class TCPhandler implements Runnable
soc.connect(new InetSocketAddress(serverHostname, port), 5000); soc.connect(new InetSocketAddress(serverHostname, port), 5000);
input = new DataInputStream(soc.getInputStream()); input = new DataInputStream(soc.getInputStream());
//input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//output stream //output stream
output = new DataOutputStream(soc.getOutputStream()); output = new DataOutputStream(soc.getOutputStream());
//recv= new BufferedReader(new InputStreamReader(soc.getInputStream())); if (soc != null)
//writer =new PrintWriter(soc.getOutputStream()) ;
if(soc !=null)
{
//previousConnectionWasUP = isConnectionUP;
isConnectionUP = true; isConnectionUP = true;
//triggerTCPConnectionStateEvent(); } catch (NullPointerException | IOException e) {
SM.Exception("RestartTCP break:"+ e);
/*
//init connection
boolean res = Write("0.0", "#19#" + AppParams.crtRadio.ip + "&"
+ AppParams.crtRadio.id + "#");
if(res){
SM.Debug("Message (AirPadInit) sent to controller");
}else{
SM.Debug("Could not send message(AirPadInit)!!");
}
//get
res = Write("0.0", "#30#104#0#0#0#0#");
if(res){
SM.Debug("Message (GetSetZoneAndChannel) sent to app server zoneNR:"+0+ " channelNR:"+0);
}else{
SM.Debug("Could not send message(GetSetZoneAndChannel)!!!");
}
*/
//init audio
//AudioHandle.b_SendinitUDP = true;
}
}
catch (UnknownHostException e)
{
SM.Exception("RestartTCP break:"+e.toString());
isConnectionUP = false; isConnectionUP = false;
} catch (IllegalArgumentException e) {
SM.Debug("IllegalArgumentException", "RestartTCP break:"+ e);
} }
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;
}
triggerTCPConnectionStateEvent(); triggerTCPConnectionStateEvent();
} }
public boolean isAlive() {
return alive;
}
public void setAlive(boolean alive) {
this.alive = alive;
}
/** close Socket when unReachable */ /** close Socket when unReachable */
public void closeSocket() { public void closeSocket() {
try { try {
input = null; input = null;
output = null; output = null;
@ -650,27 +387,23 @@ public class TCPhandler implements Runnable
} }
} }
public void Stop() {
public void Stop()
{
SM.Debug("Stopping TCP", "TCP Connection is stopping on " + AppParams.IP + ":" + port); SM.Debug("Stopping TCP", "TCP Connection is stopping on " + AppParams.IP + ":" + port);
alive = false; alive = false;
if (mReceived!= null)
if(mReceived!= null) try {
try{ context.unregisterReceiver(mReceived); } catch(Exception ex) {/* receiver not registered //*/}; context.unregisterReceiver(mReceived);
} catch(Exception ex) {/* receiver not registered //*/}
// stop thread // stop thread
if(listenThread != null) if (listenThread != null) {
{
Thread moribund = listenThread; Thread moribund = listenThread;
listenThread = null; listenThread = null;
moribund.interrupt(); moribund.interrupt();
} }
if (input != null) {
if(input!=null)
{
try { try {
input.close(); input.close();
input = null; input = null;
@ -679,8 +412,7 @@ public class TCPhandler implements Runnable
} }
} }
if(output!=null) if (output != null) {
{
try { try {
output.close(); output.close();
output = null; output = null;
@ -689,16 +421,13 @@ public class TCPhandler implements Runnable
} }
} }
if(soc !=null) if (soc !=null) {
{
try { try {
soc.close(); soc.close();
soc = null; soc = null;
} } catch (IOException e) {
catch (IOException e) { SM.Exception("TCPClient[STOP]", "Stop break:"+ e);
SM.Exception("TCPClient[STOP]", "Stop break:"+e.toString());
} }
} }
} }
} }

View File

@ -1,7 +1,6 @@
package com.safemobile.services; package com.safemobile.services;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
@ -12,16 +11,14 @@ import com.safemobile.lib.SM;
import com.safemobile.lib.TCPmsg; import com.safemobile.lib.TCPmsg;
public class TCPmsgParser implements Runnable{ public class TCPmsgParser implements Runnable {
public boolean run = true; public boolean run = true;
private TCPmsg _msg; private TCPmsg _msg;
private static List<ITCPListener> _listeners = new ArrayList<ITCPListener>(); private static final List<ITCPListener> _listeners = new ArrayList<>();
private Thread TCPmsgParserThread; private Thread TCPmsgParserThread;
public TCPmsgParser() public TCPmsgParser() {
{
TCPmsgParserThread = new Thread(this, "TCPmsgParserThread"); TCPmsgParserThread = new Thread(this, "TCPmsgParserThread");
TCPmsgParserThread.start(); // (2) Start the thread. TCPmsgParserThread.start(); // (2) Start the thread.
} }
@ -38,177 +35,151 @@ public class TCPmsgParser implements Runnable{
_listeners.clear(); _listeners.clear();
} }
public int getListenersSize()
{
return _listeners.size();
}
private synchronized void _fireLoginEvent() { private synchronized void _fireLoginEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onLoginReceived(event);
( (ITCPListener) listeners.next() ).onLoginReceived( event );
} }
} }
private synchronized void _fireGPSEvent() { private synchronized void _fireGPSEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onGPSReceived(event);
( (ITCPListener) listeners.next() ).onGPSReceived(event);
} }
} }
private synchronized void _fireSMSEvent() { private synchronized void _fireSMSEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onSMSReceived(event);
( (ITCPListener) listeners.next() ).onSMSReceived( event );
} }
} }
private synchronized void _fireLastSMSEvent() { private synchronized void _fireLastSMSEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onLastSMSsReceived(event);
( (ITCPListener) listeners.next() ).onLastSMSsReceived(event);
} }
} }
private synchronized void _fireVehEvent() { private synchronized void _fireVehEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onVehiclesReceived(event);
( (ITCPListener) listeners.next() ).onVehiclesReceived( event );
} }
} }
private synchronized void _fireNewSMS() { private synchronized void _fireNewSMS() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onNewSMSReceived(event);
( (ITCPListener) listeners.next() ).onNewSMSReceived(event);
} }
} }
private synchronized void _fireSMSconfirm() { private synchronized void _fireSMSconfirm() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onSMSAckReceived(event);
( (ITCPListener) listeners.next() ).onSMSAckReceived(event);
} }
} }
private synchronized void _fireLastPos() { private synchronized void _fireLastPos() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onLastPositionsReceived(event);
( (ITCPListener) listeners.next() ).onLastPositionsReceived(event);
} }
} }
private synchronized void _fireRadioEvent() { private synchronized void _fireRadioEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onRadioMsgReceived(event);
( (ITCPListener) listeners.next() ).onRadioMsgReceived(event);
} }
} }
private synchronized void _fireHistPos() { private synchronized void _fireHistPos() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onHistoryPositionsReceived(event);
( (ITCPListener) listeners.next() ).onHistoryPositionsReceived(event);
} }
} }
private synchronized void _fireHistCount() { private synchronized void _fireHistCount() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onHistoryPositionsCountReceived(event);
( (ITCPListener) listeners.next() ).onHistoryPositionsCountReceived(event);
} }
} }
private synchronized void _fireAlarmList() { private synchronized void _fireAlarmList() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onAlarmsReceived(event);
( (ITCPListener) listeners.next() ).onAlarmsReceived(event);
} }
} }
private synchronized void _fireAlarmACK() { private synchronized void _fireAlarmACK() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onAlarmAckReceived(event);
( (ITCPListener) listeners.next() ).onAlarmAckReceived(event);
} }
} }
private synchronized void _fireAlarmLive() { private synchronized void _fireAlarmLive() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.alarmLiveReceived(event);
( (ITCPListener) listeners.next() ).alarmLiveReceived(event);
} }
} }
private synchronized void _fireRecordList() { private synchronized void _fireRecordList() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onRecordingsListReceived(event);
( (ITCPListener) listeners.next()).onRecordingsListReceived(event);
} }
} }
private synchronized void _fireRecordPlay() { private synchronized void _fireRecordPlay() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onRecordingPlayReceived(event);
( (ITCPListener) listeners.next()).onRecordingPlayReceived(event);
} }
} }
private synchronized void _firePOLLEvent() { private synchronized void _firePOLLEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onPollReceived(event);
( (ITCPListener) listeners.next()).onPollReceived(event);
} }
} }
private synchronized void _fireConnectionReplyEvent() { private synchronized void _fireConnectionReplyEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onConnectionReplyReceived(event);
( (ITCPListener) listeners.next()).onConnectionReplyReceived(event);
} }
} }
private synchronized void _fireContactsReceivedEvent() { private synchronized void _fireContactsReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onContactsListReceived(event);
( (ITCPListener) listeners.next()).onContactsListReceived(event);
} }
} }
private synchronized void _fireRecordingsReceivedEvent() { private synchronized void _fireRecordingsReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onRecordingsListReceived(event);
( (ITCPListener) listeners.next()).onRecordingsListReceived(event);
} }
} }
private synchronized void _fireTextMessagesReceivedEvent() { private synchronized void _fireTextMessagesReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onTextMessagesListReceived(event);
( (ITCPListener) listeners.next()).onTextMessagesListReceived(event);
} }
} }
@ -216,225 +187,196 @@ public class TCPmsgParser implements Runnable{
private synchronized void _fireRecordingPlayReceivedEvent() { private synchronized void _fireRecordingPlayReceivedEvent() {
TCPEvent event = new TCPEvent( this, _msg ); TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onRecordingPlayReceived(event);
( (ITCPListener) listeners.next()).onRecordingPlayReceived(event);
} }
} }
public static synchronized void _fireTCPConnectionDownEvent(boolean previuosWasConnectionUp) { public static synchronized void _fireTCPConnectionDownEvent(boolean previuosWasConnectionUp) {
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onTCPConnectionDown(previuosWasConnectionUp);
( (ITCPListener) listeners.next()).onTCPConnectionDown(previuosWasConnectionUp);
} }
} }
public static synchronized void _fireTCPConnectionUpEvent(boolean previuosWasConnectionUp) { public static synchronized void _fireTCPConnectionUpEvent(boolean previuosWasConnectionUp) {
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onTCPConnectionUp(previuosWasConnectionUp);
( (ITCPListener) listeners.next()).onTCPConnectionUp(previuosWasConnectionUp);
} }
} }
public static synchronized void _fireonTCPConnectionStatusEvent(boolean isConnectionUp, boolean previuosWasConnectionUp) { public static synchronized void _fireonTCPConnectionStatusEvent(boolean isConnectionUp, boolean previuosWasConnectionUp) {
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onTCPConnectionStatusReceived(isConnectionUp, previuosWasConnectionUp);
( (ITCPListener) listeners.next()).onTCPConnectionStatusReceived(isConnectionUp, previuosWasConnectionUp);
} }
} }
public static synchronized void _firePONGReceivedEvent() { public static synchronized void _firePONGReceivedEvent() {
Iterator<ITCPListener> listeners = _listeners.iterator(); for (ITCPListener listener : _listeners) {
while( listeners.hasNext() ) { listener.onPONGReceived();
( (ITCPListener) listeners.next()).onPONGReceived();
} }
} }
@Override @Override
public void run() public void run() {
{ while(run) {
while(run)
{
//SM.Debug("TCPmsgParser waiting for data...");
sleep(1); sleep(1);
if(TCPhandler.msgList==null) if (TCPhandler.msgList == null)
continue; continue;
if(!TCPhandler.msgList.isEmpty()) if(!TCPhandler.msgList.isEmpty()) {
{ try {
try
{
_msg = TCPhandler.msgList.poll(); _msg = TCPhandler.msgList.poll();
if(_msg == null) if(_msg == null)
continue; continue;
if(_msg.OK == false) if(!_msg.OK)
continue; continue;
//parse the rest of the message; //parse the rest of the message;
switch(_msg.opCode) switch(_msg.opCode) {
{ case 40:{
case 40:{ _fireLoginEvent();
_fireLoginEvent(); break;
break; }
}
case 41:{ case 41:{
_fireVehEvent(); _fireVehEvent();
break; break;
} }
case 42:{ case 42:{
_fireSMSEvent(); _fireSMSEvent();
break; break;
} }
case 43:{ case 43:{
_fireLastSMSEvent(); _fireLastSMSEvent();
break; break;
} }
case OperationCodes.TM_ACK:{ case OperationCodes.TM_ACK:
_fireSMSconfirm(); case OperationCodes.TM_ACK_SD: {
break; _fireSMSconfirm();
} break;
case OperationCodes.TM_ACK_SD:{ }
_fireSMSconfirm();
break;
}
case OperationCodes.RECEIVED_TM:{ case OperationCodes.RECEIVED_TM:{
_fireNewSMS(); _fireNewSMS();
break; break;
} }
case 45:{ case 45:{
_fireLastPos(); _fireLastPos();
break; break;
} }
case 131:{ case 131:{
_fireGPSEvent(); _fireGPSEvent();
break; break;
} }
case 231:{ case 231:{
_firePOLLEvent(); _firePOLLEvent();
break; break;
} }
case 50:{ case 50:{
_fireRadioEvent(); _fireRadioEvent();
break; break;
} }
case 46:{ case 46:{
_fireHistPos(); _fireHistPos();
break; break;
} }
case 86:{ case 86:{
_fireHistCount(); _fireHistCount();
break; break;
} }
case 47:{ case 47:{
_fireAlarmList(); _fireAlarmList();
break; break;
} }
case 48:{ case 48:{
_fireAlarmACK(); _fireAlarmACK();
break; break;
} }
case 49:{ case 49:{
_fireRecordList(); _fireRecordList();
break; break;
} }
case 38:{ case 38:{
_fireRecordPlay(); _fireRecordPlay();
break; break;
} }
case 135: case 135:
case 136: case 136:
case 137: case 137:
case 138: case 138:
case 140:{ case 140:{
_fireAlarmLive(); _fireAlarmLive();
break; break;
} }
case OperationCodes.PONG: { case OperationCodes.PONG: {
//_firePONGReceivedEvent(); //_firePONGReceivedEvent();
break; break;
} }
case OperationCodes.CONNECTION_REP: { case OperationCodes.CONNECTION_REP: {
_fireConnectionReplyEvent(); _fireConnectionReplyEvent();
break; break;
} }
case OperationCodes.CONTACTS_REP: { case OperationCodes.CONTACTS_REP: {
sleep(15); sleep(15);
_fireContactsReceivedEvent(); _fireContactsReceivedEvent();
break; break;
} }
case OperationCodes.TM_LIST_REP: { case OperationCodes.TM_LIST_REP: {
_fireTextMessagesReceivedEvent(); _fireTextMessagesReceivedEvent();
break; break;
} }
case OperationCodes.RECORDINGS_LIST_REP: { case OperationCodes.RECORDINGS_LIST_REP: {
_fireRecordingsReceivedEvent(); _fireRecordingsReceivedEvent();
break; break;
} }
case OperationCodes.RECORDING_REP: {
_fireRecordingPlayReceivedEvent();
break;
}
default:
break;
}
}
catch(Exception ex)
{
try {
if(TCPhandler.msgList.size() > 0)
_msg = TCPhandler.msgList.remove(0);
}
catch(NoSuchElementException exe)
{
SM.Exception("TCP msg Parser", "NoSuchElementException");
}
}
}
case OperationCodes.RECORDING_REP: {
_fireRecordingPlayReceivedEvent();
break;
}
default:
break;
}
} catch(Exception ex) {
try {
if(TCPhandler.msgList.size() > 0)
_msg = TCPhandler.msgList.remove(0);
} catch(NoSuchElementException exe) {
SM.Exception("TCP msg Parser", "NoSuchElementException");
}
}
}
} }
/*
catch (Exception e)
{
SM.Debug("Error on fire Event:"+e.toString());
break;
}
}*/
SM.Debug("TCPmsgParser listen thread stoped."); SM.Debug("TCPmsgParser listen thread stoped.");
} }
private void sleep(int miliseconds) { private void sleep(int miliseconds) {
try { try {
Thread.sleep(miliseconds); Thread.sleep(miliseconds);
} catch (InterruptedException e) { } catch (InterruptedException ignored) { }
}
} }
public void clearMsgList() public void clearMsgList()
@ -442,17 +384,14 @@ public class TCPmsgParser implements Runnable{
TCPhandler.msgList.clear(); TCPhandler.msgList.clear();
} }
public void Stop() public void Stop() {
{
run = false; run = false;
// stop thread // stop thread
if(TCPmsgParserThread != null) if(TCPmsgParserThread != null) {
{
Thread moribund = TCPmsgParserThread; Thread moribund = TCPmsgParserThread;
TCPmsgParserThread = null; TCPmsgParserThread = null;
moribund.interrupt(); moribund.interrupt();
} }
SM.Debug("Stoping TCPmsgParser"); SM.Debug("Stoping TCPmsgParser");
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,14 +1,36 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' apply plugin: 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
apply plugin: "com.gladed.androidgitversion"
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
mavenCentral()
}
dependencies {
classpath "gradle.plugin.com.gladed.gradle.androidgitversion:gradle-android-git-version:0.4.3"
}
}
androidGitVersion {
codeFormat 'MNNBBBB'
format '%tag%%.count%'
hideBranches = ['develop']
}
android { android {
compileSdkVersion 31 compileSdkVersion 31
buildToolsVersion "31.0.0" buildToolsVersion "31.0.0"
defaultConfig { defaultConfig {
applicationId "com.safemobile.dispatch" applicationId "com.safemobile.safedispatch"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 31 targetSdkVersion 31
versionName androidGitVersion.name()
versionCode androidGitVersion.code()
archivesBaseName = "SafeDispatchMobile_v.$versionName"
} }
buildTypes { buildTypes {
@ -20,6 +42,13 @@ android {
buildFeatures { buildFeatures {
viewBinding false viewBinding false
} }
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
//abortOnError false
}
} }
dependencies { dependencies {
implementation project(':libSafeMobile') implementation project(':libSafeMobile')
@ -49,6 +78,4 @@ dependencies {
// add Gson // add Gson
implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.google.code.gson:gson:2.8.6'
//retrofit
} }

View File

@ -0,0 +1,20 @@
{
"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"
}

View File

@ -1,9 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" package="com.safemobile.safedispatch">
package="com.safemobile.dispatch"
android:versionCode="9"
android:versionName="1.0.9">
<!-- require OpenGL ES version 2 for Google Maps --> <!-- require OpenGL ES version 2 for Google Maps -->
<uses-feature <uses-feature
@ -30,7 +27,7 @@
<application <application
android:configChanges="orientation" android:configChanges="orientation"
android:icon="@drawable/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:screenOrientation="landscape" android:screenOrientation="landscape"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
@ -45,7 +42,7 @@
<service android:name="com.safemobile.services.TCPService" /> <service android:name="com.safemobile.services.TCPService" />
<activity <activity
android:name=".SDMobileActivity" android:name="com.safemobile.safedispatch.SDMobileActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:exported="true" android:exported="true"
android:label="@string/app_name_demo" android:label="@string/app_name_demo"
@ -57,41 +54,41 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity
android:name=".SetupActivity" android:name="com.safemobile.safedispatch.SetupActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name=".TabLayoutActivity" android:name="com.safemobile.safedispatch.TabLayoutActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name=".LiveActivity" android:name="com.safemobile.safedispatch.LiveActivity"
android:exported="false" android:exported="false"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" android:screenOrientation="landscape"
android:label="@string/title_activity_google_maps" /> android:label="@string/title_activity_google_maps" />
<activity <activity
android:name=".HistoryActivity" android:name="com.safemobile.safedispatch.HistoryActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name=".MessagesActivity" android:name="com.safemobile.safedispatch.MessagesActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name=".AlarmActivity" android:name="com.safemobile.safedispatch.AlarmActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name=".RadioActivity" android:name="com.safemobile.safedispatch.RadioActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name=".RecordingsActivity" android:name="com.safemobile.safedispatch.RecordingsActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name=".NotificationActivity" android:name="com.safemobile.safedispatch.NotificationActivity"
android:configChanges="orientation" android:configChanges="orientation"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
</application> </application>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,162 +0,0 @@
package com.safemobile.dispatch;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.SM;
import com.safemobile.lib.Vehicle;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class HistoryActivity extends AppCompatActivity {
public Bundle savedInstanceState;
private TabLayoutActivity parentTab;
private GoogleMap googleMap;
private Spinner spinnerVehicle;
private ImageView changeMapType, checkTraffic, slideLayoutImage;
private LinearLayout layoutTraffic, slidelayout, layoutVehicles;
private ArrayList<Vehicle> allVehicle = new ArrayList<>();
private ArrayList<String> allVehicleNames = new ArrayList<>();
private ArrayAdapter<String> adapter;
private boolean showVehicle = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.savedInstanceState = savedInstanceState;
setContentView(R.layout.tabhistory);
parentTab = (TabLayoutActivity) getParent();
parentTab.setHistoryActivity(this);
Locale locale = new Locale(AppParams.LANGUAGETMP);
Locale.setDefault(locale);
googleMap = parentTab.getLiveActivity().getMap();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
spinnerVehicle = findViewById(R.id.spinnerVehicle);
getVehicles();
adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, allVehicleNames);
adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinnerVehicle.setAdapter(adapter);
spinnerVehicle.setSelection(0);
changeMapType();
changeTraffic();
slidelayout = findViewById(R.id.slidelayout);
slideLayoutImage = findViewById(R.id.slideLayoutImage);
layoutVehicles = findViewById(R.id.layoutBig);
// slidelayout.setOnTouchListener((v, event) -> {
// if (showVehicle) {
// layoutVehicles.setVisibility(View.GONE);
// slideLayoutImage.setImageResource(R.drawable.arrow_right);
// showVehicle = false;
// } else {
// layoutVehicles.setVisibility(View.VISIBLE);
// slideLayoutImage.setImageResource(R.drawable.arrow_left);
// showVehicle = true;
// }
// return false;
// });
setDate();
}
private void setDate() {
Calendar calendar = Calendar.getInstance();
Date endDate = calendar.getTime();
calendar.add(Calendar.DATE, -1);
Date startDate = calendar.getTime();
LinearLayout layoutStartPicker = findViewById(R.id.layoutStartPicker);
TextView textViewDate = findViewById(R.id.textViewStartDate);
textViewDate.setText(new SimpleDateFormat("HH:mm, dd.MM.yyyy").format(startDate));
// layoutStartPicker.setOnTouchListener((v, event) -> {
// showDialog(layoutStartPicker);
// return false;
// });
// layoutEndPicker.setOnTouchListener(new OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// showDialog(layoutEndPicker);
// return false;
// }
// });
}
private void changeTraffic() {
ImageView changeTrafficImageView = findViewById(R.id.changeTraffic);
changeTrafficImageView.setOnClickListener(v -> {
if (googleMap.isTrafficEnabled()) {
changeTrafficImageView.setImageResource(R.drawable.traffic_off);
googleMap.setTrafficEnabled(false);
} else {
changeTrafficImageView.setImageResource(R.drawable.traffic);
googleMap.setTrafficEnabled(true);
}
});
}
private void changeMapType() {
changeMapType = findViewById(R.id.changeMapType);
ImageView changeMapTypeImageView = findViewById(R.id.changeMapType);
changeMapType.setOnClickListener(view -> {
if (googleMap.getMapType() == GoogleMap.MAP_TYPE_SATELLITE) {
changeMapTypeImageView.setImageResource(R.drawable.satellite);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
} else {
changeMapTypeImageView.setImageResource(R.drawable.map);
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
});
}
public void getVehicles() {
try {
for (Vehicle vehicle : parentTab.getAllVehicle()) {
allVehicleNames.add(vehicle.name);
allVehicle.add(vehicle);
}
} catch (Exception ex) { }
}
public void UpdateMap() {
SM.Debug("Do the updateMAP post");
}
public void UpdateUnableDisp() {
SM.Debug("Do Cancelwindow");
}
public void UpdateCancel() {
SM.Debug("Do Cancelwindow");
}
public void UpdateNrPos(int size) {
SM.Debug("Do Cancelwindow");
}
}

View File

@ -5,7 +5,7 @@ import android.app.AlertDialog;
import com.google.android.gms.tasks.Task; import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.TaskCompletionSource; import com.google.android.gms.tasks.TaskCompletionSource;
import com.safemobile.dispatch.R; import com.safemobile.safedispatch.R;
import com.safemobile.interfaces.IDialogService; import com.safemobile.interfaces.IDialogService;
public class DialogService implements IDialogService { public class DialogService implements IDialogService {

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.content.Context; import android.content.Context;
import android.util.Log; import android.util.Log;
@ -12,10 +12,12 @@ import androidx.annotation.NonNull;
import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.Marker;
import com.safemobile.lib.HistPos;
import com.safemobile.lib.SuperVehicle; import com.safemobile.lib.SuperVehicle;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Locale; import java.util.Locale;
@ -25,8 +27,10 @@ public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
private final String TAG = GoogleMapsInfoBubble.class.getName(); private final String TAG = GoogleMapsInfoBubble.class.getName();
private final View mWindow; private final View mWindow;
private final Hashtable<Long, SuperVehicle> superVehHash; private Hashtable<Long, SuperVehicle> superVehHash;
private final Context context; private final Context context;
private ArrayList<HistPos> histPosList;
private boolean isLiveTab = true;
public GoogleMapsInfoBubble(LayoutInflater layoutInflater, Context context, Hashtable<Long, SuperVehicle> vehicles) { public GoogleMapsInfoBubble(LayoutInflater layoutInflater, Context context, Hashtable<Long, SuperVehicle> vehicles) {
@ -35,6 +39,17 @@ public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
mWindow = layoutInflater.inflate(R.layout.map_marker_info_bubble, null); mWindow = layoutInflater.inflate(R.layout.map_marker_info_bubble, null);
} }
public GoogleMapsInfoBubble(LayoutInflater layoutInflater, Context context) {
isLiveTab = false;
this.context = context;
// this.superVehHash = vehicles;
mWindow = layoutInflater.inflate(R.layout.map_marker_info_bubble, null);
}
public void setHistoryPositions(ArrayList<HistPos> positions) {
this.histPosList = positions;
}
@Override @Override
public View getInfoWindow(@NonNull Marker marker) { public View getInfoWindow(@NonNull Marker marker) {
render(marker, mWindow); render(marker, mWindow);
@ -49,13 +64,21 @@ public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
private void render(Marker marker, View view) { private void render(Marker marker, View view) {
long key = 0; long key = 0;
int position = 0;
try { if (isLiveTab) {
key = Long.parseLong(marker.getTitle()); try {
} catch (Exception ex) { key = Long.parseLong(marker.getTitle());
Log.v(TAG, "Unable to parse Google Maps Info Bubble title"); } catch (Exception ex) {
Log.v(TAG, "Unable to parse Google Maps Info Bubble title");
}
} else {
try {
position = Integer.getInteger(marker.getTitle());
} catch (Exception e) {
Log.v(TAG, "Unable to parse Google Maps Info Bubble title on History");
}
} }
SuperVehicle vehicle = superVehHash.get(key);
RelativeLayout rlMapInfoBubbleInfo = view.findViewById(R.id.rlMapInfoBubbleInfo); RelativeLayout rlMapInfoBubbleInfo = view.findViewById(R.id.rlMapInfoBubbleInfo);
TextView tvUnitName = view.findViewById(R.id.tvUnitName); TextView tvUnitName = view.findViewById(R.id.tvUnitName);
@ -67,27 +90,39 @@ public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
rlMapInfoBubbleInfo.setVisibility(View.VISIBLE); rlMapInfoBubbleInfo.setVisibility(View.VISIBLE);
boolean isMilitaryTime = false; boolean isMilitaryTime = false;
Date positionTime = new Date(vehicle.timeGMT); Date positionTime;
String speed, address, gpsLocation, name = "";
if (isLiveTab) {
SuperVehicle vehicle = superVehHash.get(key);
positionTime = new Date(vehicle.timeGMT);
address = vehicle.Address != null ? vehicle.Address : "";
name = vehicle.name;
speed = String.format(context.getResources().getString(R.string.speedMph), vehicle.speed);
gpsLocation = "[" + String.format("%.4f", vehicle.lat) + "," + String.format("%.4f",vehicle.lng) + "]";
} else {
HistPos histPos = histPosList.get(position);
positionTime = new Date(histPos.timeGMT);
address = histPos.Address != null ? histPos.Address : "";
speed = String.format(context.getResources().getString(R.string.speedMph), histPos.speed);
gpsLocation = "[" + String.format("%.4f", histPos.lat) + "," + String.format("%.4f",histPos.lng) + "]";
}
String timeFormat = isMilitaryTime String timeFormat = isMilitaryTime
? "HH:mm:ss dd.MMM.yyyy" ? "HH:mm:ss dd.MMM.yyyy"
: "hh:mm:ss a dd.MMM.yyy"; : "hh:mm:ss a dd.MMM.yyy";
DateFormat format = new SimpleDateFormat(timeFormat, Locale.ENGLISH); DateFormat format = new SimpleDateFormat(timeFormat, Locale.ENGLISH);
tvTimeAgo.setText(format.format(positionTime)); tvTimeAgo.setText(format.format(positionTime));
tvSpeed.setText(String.format(context.getResources().getString(R.string.speedMph), vehicle.speed));
String address = vehicle.Address != null ? vehicle.Address : "";
tvStreetView.setText(address); tvStreetView.setText(address);
streetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE); streetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE);
tvStreetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE); tvStreetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE);
tvUnitName.setText(vehicle.name); if (!isLiveTab)
tvGPSLocation.setText("[" + String.format("%.4f", vehicle.lat) tvUnitName.setVisibility(View.GONE);
+ "," + String.format("%.4f",vehicle.lng) + "]"); else
tvUnitName.setText(name);
tvSpeed.setText(speed);
tvGPSLocation.setText(gpsLocation);
} }
} }

View File

@ -0,0 +1,241 @@
package com.safemobile.safedispatch;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.HistPos;
import com.safemobile.lib.OperationCodes;
import com.safemobile.lib.SM;
import com.safemobile.lib.Vehicle;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class HistoryActivity extends AppCompatActivity implements OnMapReadyCallback {
public Bundle savedInstanceState;
private TabLayoutActivity parentTab;
private GoogleMap googleMap;
private Spinner spinnerVehicle;
private Button displayButton;
private Date startDate, endDate;
private final Handler myHandler = new Handler();
private GoogleMapsInfoBubble infoBubble;
private final ArrayList<Vehicle> allVehicle = new ArrayList<>();
private final ArrayList<String> allVehicleNames = new ArrayList<>();
private final SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd yyyy");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.savedInstanceState = savedInstanceState;
setContentView(R.layout.tabhistory);
parentTab = (TabLayoutActivity) getParent();
parentTab.setHistoryActivity(this);
Locale locale = new Locale(AppParams.LANGUAGETMP);
Locale.setDefault(locale);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
if (mapFragment != null)
mapFragment.getMapAsync(this);
spinnerVehicle = findViewById(R.id.spinnerVehicle);
getVehicles();
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, allVehicleNames);
adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinnerVehicle.setAdapter(adapter);
spinnerVehicle.setSelection(0);
changeMapType();
changeTraffic();
displayButton = findViewById(R.id.buttonDisplay);
displayButton.setOnClickListener(view -> {
googleMap.clear();
if (!AppParams.DEMO) {
parentTab.setDropAllData(false);
parentTab.setFirstHistoryData(true);
parentTab.clearHistoryMessageList();
parentTab.clearHistoryPositionList();
// request history
parentTab.executeNetworkStuff(new String[] {OperationCodes.GetHistoryPositions + "", allVehicle.get(spinnerVehicle.getSelectedItemPosition()).sc_id + "",
(startDate.getTime()/ 1000L) + "", (endDate.getTime()/ 1000L) + ""});
} else {
parentTab.demoPositionsList();
displayHistory(parentTab.getDemoPositions());
}
});
setDate();
}
private void displayHistory(ArrayList<HistPos> positions) {
LatLng latLng = null;
PolylineOptions polylineOptions = new PolylineOptions();
BitmapDescriptor markerIcon = BitmapDescriptorFactory.fromResource(R.drawable.history_pin);
for (int i = 0; i < positions.size(); i++) {
HistPos pos = positions.get(i);
if (pos.speed > 0) {
latLng = new LatLng(pos.lat, pos.lng);
polylineOptions.add(latLng);
googleMap.addMarker(new MarkerOptions()
.position(latLng)
.icon(markerIcon)
.title(String.valueOf(i)));
}
}
googleMap.addPolyline(polylineOptions);
if (latLng != null)
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14));
}
private void setDate() {
Calendar calendar = Calendar.getInstance();
endDate = calendar.getTime();
calendar.add(Calendar.DATE, -1);
startDate = calendar.getTime();
TextView textViewStartDate = findViewById(R.id.textViewStartDate);
TextView textViewEndDate = findViewById(R.id.textViewEndDate);
textViewStartDate.setText(sdf.format(startDate));
textViewEndDate.setText(sdf.format(endDate));
textViewStartDate.setOnClickListener(view -> openDialog(textViewStartDate, true));
textViewEndDate.setOnClickListener(view -> openDialog(textViewEndDate, false));
}
private void openDialog(TextView textView, Boolean isStartDate) {
Date date = startDate;
if (!isStartDate)
date = endDate;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
DatePickerDialog.OnDateSetListener setListener = (datePicker, y, m, d) -> {
calendar.set(y, m, d);
String dateString = sdf.format(calendar.getTime());
textView.setText(dateString);
if (isStartDate)
startDate = calendar.getTime();
else
endDate = calendar.getTime();
};
Dialog dialog = new DatePickerDialog(this, android.R.style.Theme_Holo_Light_Dialog_MinWidth, setListener,
calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
private void changeTraffic() {
ImageView changeTrafficImageView = findViewById(R.id.changeTraffic);
changeTrafficImageView.setOnClickListener(v -> {
if (googleMap.isTrafficEnabled()) {
changeTrafficImageView.setImageResource(R.drawable.traffic_off);
googleMap.setTrafficEnabled(false);
} else {
changeTrafficImageView.setImageResource(R.drawable.traffic);
googleMap.setTrafficEnabled(true);
}
});
}
private void changeMapType() {
ImageView changeMapType = findViewById(R.id.changeMapType);
changeMapType.setOnClickListener(view -> {
if (googleMap.getMapType() == GoogleMap.MAP_TYPE_SATELLITE) {
changeMapType.setImageResource(R.drawable.satellite);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
} else {
changeMapType.setImageResource(R.drawable.map);
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
});
}
public void getVehicles() {
try {
allVehicle.clear();
allVehicleNames.clear();
for (Vehicle vehicle : parentTab.getAllVehicle()) {
allVehicleNames.add(vehicle.name);
allVehicle.add(vehicle);
}
} catch (Exception ignored) { }
}
final Runnable UpdateMapResults = new Runnable() {
public void run() {
Log.v("updateMap", parentTab.getHistoryPositionList().toString());
SM.Debug("Do the Display");
infoBubble.setHistoryPositions(parentTab.getHistoryPositionList());
displayHistory(parentTab.getHistoryPositionList());
}
};
public void UpdateMap() {
myHandler.post(UpdateMapResults);
SM.Debug("Do the updateMAP post");
}
public void UpdateUnableDisp() {
SM.Debug("Do Cancelwindow");
}
public void UpdateCancel() {
SM.Debug("Do Cancelwindow");
}
public void UpdateNrPos(int size) {
SM.Debug("Do Cancelwindow");
}
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
this.googleMap = googleMap;
infoBubble = new GoogleMapsInfoBubble(getLayoutInflater(), this);
this.googleMap.setInfoWindowAdapter(infoBubble);
parentTab.demoPositionsList();
displayButton.performClick();
}
}

View File

@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.os.Bundle; import android.os.Bundle;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
@ -16,17 +16,22 @@ public class NotificationActivity extends Activity{
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// get notification type // get notification type
int key = getIntent().getExtras().getInt("key"); int key = getIntent().getExtras().getInt("key");
// broadcast intent // broadcast intent
Intent i = new Intent(); Intent i = new Intent();
switch(key) switch(key) {
{ case AppParams.messageNotif:
case AppParams.messageNotif: i.setAction(NOTIFICATION_MESSAGE_INTENT); break; i.setAction(NOTIFICATION_MESSAGE_INTENT);
case AppParams.alertNotif: i.setAction(NOTIFICATION_ALERT_INTENT); break; break;
case AppParams.pollNotif: i.setAction(NOTIFICATION_POLL_INTENT); break; case AppParams.alertNotif:
} i.setAction(NOTIFICATION_ALERT_INTENT);
break;
case AppParams.pollNotif:
i.setAction(NOTIFICATION_POLL_INTENT);
break;
}
getBaseContext().sendBroadcast(i); getBaseContext().sendBroadcast(i);
@ -35,6 +40,4 @@ public class NotificationActivity extends Activity{
/* Finish activity and return to parent activity */ /* Finish activity and return to parent activity */
finish(); finish();
} }
} }

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
@ -673,10 +673,10 @@ public class RadioActivity extends Activity {
dialog.setCancelable(true); dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true); dialog.setCanceledOnTouchOutside(true);
TextView text = (TextView) dialog.findViewById(R.id.text); TextView text = dialog.findViewById(R.id.text);
ImageView image = (ImageView) dialog.findViewById(R.id.image); ImageView image = dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.ic_launcher); image.setImageResource(R.mipmap.ic_launcher);
text.setText(errorMsg); text.setText(errorMsg);
dialog.show(); dialog.show();
} }

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
@ -184,10 +184,10 @@ public class RecordingsActivity extends Activity {
dialog.setCancelable(true); dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true); dialog.setCanceledOnTouchOutside(true);
TextView text = (TextView) dialog.findViewById(R.id.text); TextView text = dialog.findViewById(R.id.text);
ImageView image = (ImageView) dialog.findViewById(R.id.image); ImageView image = dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.ic_launcher); image.setImageResource(R.mipmap.ic_launcher);
text.setText(errorMsg); text.setText(errorMsg);
dialog.show(); dialog.show();
} }

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
@ -233,10 +233,10 @@ public class SDMobileActivity extends Activity {
etPassword.setText(AppParams.PASSWORD.equalsIgnoreCase("n/a") ? "" : AppParams.PASSWORD); etPassword.setText(AppParams.PASSWORD.equalsIgnoreCase("n/a") ? "" : AppParams.PASSWORD);
} }
layoutTCP = (RelativeLayout) findViewById(R.id.layoutTCP); layoutTCP = findViewById(R.id.layoutTCP);
llUsername = (LinearLayout) findViewById(R.id.llUsername); llUsername = findViewById(R.id.llUsername);
llPassword = (LinearLayout) findViewById(R.id.llPassword); llPassword = findViewById(R.id.llPassword);
// enable ui after the language is changed and tcp connection is on // enable ui after the language is changed and tcp connection is on
if (tcp != null && tcp.isConnectionUP) { if (tcp != null && tcp.isConnectionUP) {
@ -663,7 +663,7 @@ public class SDMobileActivity extends Activity {
// get default password // get default password
AppParams.PASSWORD = AppParams.prefs.getString(PASSWORD, "n/a"); AppParams.PASSWORD = AppParams.prefs.getString(PASSWORD, "n/a");
// get default IP // get default IP
AppParams.IP = AppParams.prefs.getString("ip", "192.168.2.100"); AppParams.IP = AppParams.prefs.getString("ip", "185.8.154.190");
// get Radio ID & IP // get Radio ID & IP
AppParams.RADIOID = AppParams.prefs.getInt("radioId", 100); AppParams.RADIOID = AppParams.prefs.getInt("radioId", 100);
@ -737,10 +737,10 @@ public class SDMobileActivity extends Activity {
Dialog dialogInfo = new Dialog(context); Dialog dialogInfo = new Dialog(context);
dialogInfo.requestWindowFeature(Window.FEATURE_NO_TITLE); dialogInfo.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialogInfo.setContentView(R.layout.dialog_login); dialogInfo.setContentView(R.layout.dialog_login);
TextView textTitle = (TextView) dialogInfo.findViewById(R.id.textTitle); TextView textTitle = dialogInfo.findViewById(R.id.textTitle);
TextView text = (TextView) dialogInfo.findViewById(R.id.text); TextView text = dialogInfo.findViewById(R.id.text);
TextView text2 = (TextView) dialogInfo.findViewById(R.id.text2); TextView text2 = dialogInfo.findViewById(R.id.text2);
ImageView image = (ImageView) dialogInfo.findViewById(R.id.image); ImageView image = dialogInfo.findViewById(R.id.image);
textTitle.setText(getString(R.string.connectionError)); textTitle.setText(getString(R.string.connectionError));
image.setImageResource(R.drawable.error); image.setImageResource(R.drawable.error);

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import java.util.Locale; import java.util.Locale;

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch; package com.safemobile.safedispatch;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
@ -14,7 +14,6 @@ import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import com.google.android.gms.tasks.Task; import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.TaskCompletionSource;
import com.safemobile.activities.AbstractEmptyActivity; import com.safemobile.activities.AbstractEmptyActivity;
import com.safemobile.activities.AbstractLiveActivity; import com.safemobile.activities.AbstractLiveActivity;
import com.safemobile.activities.AbstractMessagesActivity; import com.safemobile.activities.AbstractMessagesActivity;
@ -58,7 +57,7 @@ import com.safemobile.services.TCPService.TCPBinder;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Dialog; import android.app.Dialog;
import android.app.Notification; import android.app.NotificationChannel;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@ -73,6 +72,7 @@ import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
@ -93,6 +93,8 @@ import android.widget.Toast;
import android.widget.TabHost.TabSpec; import android.widget.TabHost.TabSpec;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
public class TabLayoutActivity extends AbstractSDParentActivity { public class TabLayoutActivity extends AbstractSDParentActivity {
@ -260,6 +262,10 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
this.historyPositionList = historyPositionList; this.historyPositionList = historyPositionList;
} }
public void clearHistoryPositionList() {
this.historyPositionList.clear();
}
public Boolean getFirstHistoryData() { public Boolean getFirstHistoryData() {
return firstHistoryData; return firstHistoryData;
} }
@ -284,6 +290,10 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
this.historyMessageList = historyMessageList; this.historyMessageList = historyMessageList;
} }
public void clearHistoryMessageList() {
this.historyMessageList.clear();
}
public ArrayList<SMS> getDemoSmsList() { public ArrayList<SMS> getDemoSmsList() {
return demoSmsList; return demoSmsList;
} }
@ -465,7 +475,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
// add radio tab // add radio tab
intent[6] = new Intent(context, AbstractEmptyActivity.class); intent[6] = new Intent(context, AbstractEmptyActivity.class);
tabSpecs[6] = tabHost.newTabSpec(ABOUT) tabSpecs[6] = tabHost.newTabSpec(ABOUT)
.setIndicator(ABOUT, res.getDrawable(AppParams.DEMO ? R.drawable.icon_demo : R.drawable.ic_launcher)) .setIndicator(ABOUT, res.getDrawable(AppParams.DEMO ? R.drawable.icon_demo : R.mipmap.ic_launcher))
.setContent(intent[6]); .setContent(intent[6]);
// add history tab // add history tab
@ -744,7 +754,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
dialog.setTitle(AppParams.DEMO ? getString(R.string.app_name_demo) : getString(R.string.app_name)); dialog.setTitle(AppParams.DEMO ? getString(R.string.app_name_demo) : getString(R.string.app_name));
dialog.setContentView(R.layout.dialog); dialog.setContentView(R.layout.dialog);
ImageView image = dialog.findViewById(R.id.image); ImageView image = dialog.findViewById(R.id.image);
image.setImageResource(AppParams.DEMO ? R.drawable.icon_demo : R.drawable.ic_launcher); image.setImageResource(AppParams.DEMO ? R.drawable.icon_demo : R.mipmap.ic_launcher);
TextView text = dialog.findViewById(R.id.text); TextView text = dialog.findViewById(R.id.text);
TextView text2 = dialog.findViewById(R.id.text2); TextView text2 = dialog.findViewById(R.id.text2);
text.setText(String.format("%s1.0.8", getString(R.string.version))); text.setText(String.format("%s1.0.8", getString(R.string.version)));
@ -935,7 +945,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
} }
} }
private void demoPositionsList() { public void demoPositionsList() {
AssetManager assetManager = res.getAssets(); AssetManager assetManager = res.getAssets();
SM.Debug("TRY 2 OPEN demo_positions.txt"); SM.Debug("TRY 2 OPEN demo_positions.txt");
InputStream input = null; InputStream input = null;
@ -1224,7 +1234,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
getMessageActivity().updateSMS(sms.smsList); getMessageActivity().updateSMS(sms.smsList);
} }
} catch (Exception ex) { } catch (Exception ex) {
SM.Debug("Error on smsReceived:" + ex.toString()); SM.Debug("Error on smsReceived:" + ex);
} }
} }
@ -1417,7 +1427,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
SM.Debug("tmpHist seqID:" + tmpHist.seqID); SM.Debug("tmpHist seqID:" + tmpHist.seqID);
int pos = Integer.parseInt(tmpHist.seqID.substring(0, tmpHist.seqID.indexOf('.'))); int pos = Integer.parseInt(tmpHist.seqID.substring(0, tmpHist.seqID.indexOf('.')));
int all = Integer.parseInt(tmpHist.seqID.substring(tmpHist.seqID.indexOf('.') + 1, tmpHist.seqID.length())); int all = Integer.parseInt(tmpHist.seqID.substring(tmpHist.seqID.indexOf('.') + 1));
if (all != 0) { if (all != 0) {
if (Boolean.TRUE.equals(getFirstHistoryData())) { if (Boolean.TRUE.equals(getFirstHistoryData())) {
try { try {
@ -1659,13 +1669,11 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
case 137: case 137:
setMess("zone " + tempArr[1]); setMess("zone " + tempArr[1]);
break; break;
case 138:
setMess("emergency");
break;
case 140: case 140:
setMess("telemetry " + tempArr[1]); setMess("telemetry " + tempArr[1]);
break; break;
default: default:
// 138
setMess("emergency"); setMess("emergency");
} }
myHandler.post(updateResultsAlarm); myHandler.post(updateResultsAlarm);
@ -1887,10 +1895,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
public void createNotification(int icon) { public void createNotification(int icon) {
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String tickerText = "SafeMobile Dispatch: New Message from " + getImei(); String contentTitle, contentText;
String contentTitle = "New Message from " + getImei();
String contentText = "\"" + getMess() + "\"";
Vehicle veh = getVehicle4Imei(getImei()); Vehicle veh = getVehicle4Imei(getImei());
int iconValue = icon; int iconValue = icon;
@ -1903,7 +1908,6 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
case AppParams.pollNotif: case AppParams.pollNotif:
contentText = "\"" + getMess() + "\""; contentText = "\"" + getMess() + "\"";
contentTitle = "Poll Reply from " + (veh != null ? getVehicle4Imei(getImei()).name : getImei()); contentTitle = "Poll Reply from " + (veh != null ? getVehicle4Imei(getImei()).name : getImei());
tickerText = "SafeMobile Dispatch: Poll Reply from " + (veh != null ? getVehicle4Imei(getImei()).name : getImei());
icon = R.drawable.poll; icon = R.drawable.poll;
break; break;
case AppParams.alertNotif: case AppParams.alertNotif:
@ -1912,34 +1916,53 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
vehName = getString(R.string.from) + ": " + getVehicle4Imei(getImei()).name; vehName = getString(R.string.from) + ": " + getVehicle4Imei(getImei()).name;
contentText = "\"" + getMess() + "\""; contentText = "\"" + getMess() + "\"";
contentTitle = getString(R.string.newAlarm) + vehName; contentTitle = getString(R.string.newAlarm) + vehName;
tickerText = "SafeMobile Dispatch: " + getString(R.string.newAlarm) + vehName; icon = R.drawable.arrow_down;
icon = R.drawable.alert;
break; break;
default: default:
throw new IllegalStateException("Unexpected value: " + icon); throw new IllegalStateException("Unexpected value: " + icon);
} }
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
// set intent to be opened on NotificationClick // set intent to be opened on NotificationClick
/* Notification */ /* Notification */
Intent notificationIntent = new Intent(this, NotificationActivity.class); Intent intent = new Intent(this, NotificationActivity.class);
notificationIntent.putExtra("key", iconValue); intent.putExtra("key", iconValue);
// cancel old notification // cancel old notification
mNotificationManager.cancel(icon); mNotificationManager.cancel(icon);
PendingIntent contentIntent = PendingIntent.getActivity(context, NOTIFICATION_ACTIVITY_RESULT, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); PendingIntent pendingIntent = PendingIntent.getActivity(context, NOTIFICATION_ACTIVITY_RESULT, intent, PendingIntent.FLAG_CANCEL_CURRENT);
createNotificationChannel(icon, contentTitle, contentText, pendingIntent);
// flag that the notification will be closed when clicked
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.number = 1; // the same notification will be shown;
notification.tickerText = tickerText; // notification text when arrives
notification.sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.new_sms);
// add notification to the manager
mNotificationManager.notify(icon, notification);
} }
private void createNotificationChannel(int icon, String title, String text, PendingIntent pendingIntent) {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
String notificationChannelID = String.valueOf(icon);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "Notification Channel";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(notificationChannelID, name, importance);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, notificationChannelID)
.setSmallIcon(icon)
.setContentTitle(title)
.setContentText(text)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
Log.v("test111", "test");
NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context);
managerCompat.notify(icon, builder.build());
}
// return vehicle according to imei // return vehicle according to imei
private Vehicle getVehicle4Imei(String imei) { private Vehicle getVehicle4Imei(String imei) {
Vehicle veh = null; Vehicle veh = null;
@ -2083,7 +2106,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
setVehicleStatus(Integer.parseInt(params[1]), Integer.parseInt(params[2]), Integer.parseInt(params[3]), Integer.parseInt(params[4])); setVehicleStatus(Integer.parseInt(params[1]), Integer.parseInt(params[2]), Integer.parseInt(params[3]), Integer.parseInt(params[4]));
} catch (Exception ex) { } catch (Exception ex) {
SM.Exception("Paramas -> setVehicleStatus", "EXCeption ex " + ex.toString()); SM.Exception("Paramas -> setVehicleStatus", "EXCeption ex " + ex);
} }
break; break;
@ -2114,21 +2137,6 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
new ConnectTask().execute(params); new ConnectTask().execute(params);
} }
public class ConnectParserTask extends AsyncTask<String, Void, TCPhandler> {
@Override
protected TCPhandler doInBackground(String... params) {
if (myService != null)
tcpParser = myService.getTCPmsgParser();
// add TCPParserListener
if (tcpParser != null) {
SM.Debug("## tcpParser != null ", "#### call tcpParserListener(");
tcpParserListener();
}
return null;
}
}
/* Display Toast messages*/ /* Display Toast messages*/
@Override @Override
public void displayToast(final String msg) { public void displayToast(final String msg) {
@ -2238,10 +2246,8 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);
SM.Debug("onRequestPermissionsResult", "[requestCode] " + requestCode); SM.Debug("onRequestPermissionsResult", "[requestCode] " + requestCode);
String permission = "";
switch (requestCode) { switch (requestCode) {
case PermissionModule.RECORD_AUDIO_PERMISSION_REQUEST_CODE: case PermissionModule.RECORD_AUDIO_PERMISSION_REQUEST_CODE:
permission = Manifest.permission.RECORD_AUDIO;
break; break;
default: default:
throw new IllegalStateException("Unexpected value: " + requestCode); throw new IllegalStateException("Unexpected value: " + requestCode);
@ -2292,10 +2298,9 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
private void waitForUserInput(Boolean result) { private void waitForUserInput(Boolean result) {
if (result) { if (result) {
final int requestCode = 1202;
//navigate to application's settings //navigate to application's settings
String action = ProviderSettingsHelper.getAction(ProviderSettingsStatus.APPLICATION_DETAILS); String action = ProviderSettingsHelper.getAction(ProviderSettingsStatus.APPLICATION_DETAILS);
if (action == null || action == "") if (action == null || action.equals(""))
return; return;
boolean isActionApplicationDetailsSettings = action.equals(ProviderSettingsHelper.ACTION_APPLICATION_DETAILS_SETTINGS); boolean isActionApplicationDetailsSettings = action.equals(ProviderSettingsHelper.ACTION_APPLICATION_DETAILS_SETTINGS);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -31,10 +31,10 @@
android:paddingLeft="3dp" android:paddingLeft="3dp"
android:layout_weight="1"/> android:layout_weight="1"/>
<LinearLayout <LinearLayout
android:id="@+id/linearLayoutChecked" android:id="@+id/linearLayoutChecked"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0" android:layout_weight="0"
android:background="@drawable/checked"> android:background="@drawable/checked"
</LinearLayout> android:orientation="horizontal" />
</LinearLayout> </LinearLayout>

View File

@ -89,6 +89,8 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/layoutNewMessage" android:id="@+id/layoutNewMessage"
android:layout_width="350dp" android:layout_width="350dp"

View File

@ -32,7 +32,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/serverIP" android:text="@string/serverIP"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:textStyle="bold" android:textStyle="bold"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:gravity="center_vertical|right" android:gravity="center_vertical|right"
@ -67,7 +66,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/serverPort" android:text="@string/serverPort"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center_vertical|right" android:gravity="center_vertical|right"
android:layout_gravity="center_vertical|right" android:layout_gravity="center_vertical|right"
@ -112,7 +110,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/configName" android:text="@string/configName"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center_vertical|right" android:gravity="center_vertical|right"
android:layout_gravity="center_vertical"/> android:layout_gravity="center_vertical"/>
@ -181,7 +178,6 @@
android:text="@string/language" android:text="@string/language"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" android:textStyle="bold"
android:textColor="#FFFFFF"
android:gravity="right" android:gravity="right"
android:layout_gravity="center_vertical"/> android:layout_gravity="center_vertical"/>
<LinearLayout <LinearLayout

View File

@ -7,9 +7,9 @@
android:padding="2dp" android:padding="2dp"
android:background="@drawable/style_nameoverlay"> android:background="@drawable/style_nameoverlay">
<TextView android:layout_height="wrap_content" <TextView android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:id="@+id/balloon_vehicle_name" android:id="@+id/balloon_vehicle_name"
android:textSize="12dip" android:textSize="12dip"
android:textColor="#FF000000"></TextView> android:textColor="#FF000000" />
</LinearLayout> </LinearLayout>

View File

@ -1,37 +1,38 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout
android:id="@+id/layout_root" xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:id="@+id/layout_root"
android:layout_width="fill_parent" android:orientation="horizontal"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:padding="10dp" android:layout_height="fill_parent"
> android:padding="10dp" >
<ImageView android:id="@+id/image" <ImageView
android:layout_width="wrap_content" android:id="@+id/image"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_marginRight="10dp" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_marginRight="10dp"
android:src="@drawable/ic_launcher" android:layout_gravity="center_vertical"
/> android:src="@mipmap/ic_launcher"
<LinearLayout />
android:layout_width="wrap_content" <LinearLayout
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:orientation="vertical" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:orientation="vertical"
android:gravity="center_vertical"> android:layout_gravity="center_vertical"
<TextView android:id="@+id/text" android:gravity="center_vertical">
android:layout_width="wrap_content" <TextView
android:layout_height="wrap_content" android:id="@+id/text"
android:paddingTop="8dp" android:layout_width="wrap_content"
android:textSize="18dp" android:layout_height="wrap_content"
android:textColor="@color/black" android:paddingTop="8dp"
/> android:textSize="18dp"
<TextView android:id="@+id/text2" />
android:layout_width="wrap_content" <TextView
android:layout_height="wrap_content" android:id="@+id/text2"
android:paddingTop="8dp" android:layout_width="wrap_content"
android:textSize="18dp" android:layout_height="wrap_content"
android:textColor="@color/black" android:paddingTop="8dp"
/> android:textSize="18dp"
</LinearLayout> />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -11,7 +11,7 @@
android:paddingTop="2dp" android:paddingTop="2dp"
android:text="TITLE" android:text="TITLE"
android:textAppearance="?android:attr/textAppearanceLarge" android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFFF" android:textColor="@color/black"
/> />
<LinearLayout <LinearLayout
android:id="@+id/layout_horizontal" android:id="@+id/layout_horizontal"
@ -24,7 +24,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="10dp" android:layout_marginRight="10dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:src="@drawable/ic_launcher" android:src="@mipmap/ic_launcher"
android:contentDescription="image for dialog" android:contentDescription="image for dialog"
/> />
<LinearLayout <LinearLayout
@ -40,7 +40,6 @@
android:paddingTop="8dp" android:paddingTop="8dp"
android:text="Row1" android:text="Row1"
android:textAppearance="?android:attr/textAppearanceLarge" android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFFF"
/> />
<TextView android:id="@+id/text2" <TextView android:id="@+id/text2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -48,7 +47,6 @@
android:paddingTop="8dp" android:paddingTop="8dp"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Row2" android:text="Row2"
android:textColor="#FFFFFF"
/> />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -217,13 +217,13 @@
<ImageView <ImageView
android:id="@+id/imageLoading" android:id="@+id/imageLoading"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="64dp" android:layout_height="64dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_weight="0" android:layout_weight="0"
android:visibility="gone" android:visibility="gone"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" /> android:layout_alignParentLeft="true" />
</RelativeLayout> </RelativeLayout>

View File

@ -210,8 +210,6 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/frameLayoutLanguage" android:id="@+id/frameLayoutLanguage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -221,20 +219,16 @@
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_gravity="right" android:layout_gravity="right"
android:paddingBottom="6dp" android:paddingBottom="6dp"
android:layout_toLeftOf="@+id/frameLayout13"> android:layout_toLeftOf="@+id/frameLayout13" />
</RelativeLayout>
<ImageView <ImageView
android:id="@+id/imageLoading" android:id="@+id/imageLoading"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="64dp" android:layout_height="64dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_weight="0" android:layout_weight="0"
android:visibility="gone" android:visibility="gone"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" /> android:layout_alignParentLeft="true" />
</RelativeLayout> </RelativeLayout>

View File

@ -31,10 +31,10 @@
android:paddingLeft="3dp" android:paddingLeft="3dp"
android:layout_weight="1"/> android:layout_weight="1"/>
<LinearLayout <LinearLayout
android:id="@+id/linearLayoutChecked" android:id="@+id/linearLayoutChecked"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0" android:layout_weight="0"
android:background="@drawable/checked"> android:background="@drawable/checked"
</LinearLayout> android:orientation="horizontal" />
</LinearLayout> </LinearLayout>

View File

@ -1,30 +1,30 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:src="@mipmap/ic_launcher"
<ImageView android:paddingLeft="5dp"
android:id="@+id/icon" android:paddingRight="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:id="@+id/language"
android:textSize="20dp"
android:textColor="#000000"
android:textStyle="bold"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" android:gravity="center_vertical"/>
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:id="@+id/language"
android:textSize="20dp"
android:textColor="#000000"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -10,14 +10,14 @@
android:gravity="center_vertical" > android:gravity="center_vertical" >
<ImageButton <ImageButton
android:id="@+id/imageButtonAdd" android:id="@+id/imageButtonAdd"
android:layout_width="1dp" android:layout_width="1dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0" android:layout_weight="0"
android:layout_marginRight="5dp" android:layout_marginRight="5dp"
android:paddingLeft="2dp" android:paddingLeft="2dp"
android:visibility="invisible" android:visibility="invisible"
android:background="@drawable/addmessage_selector"/> android:background="@drawable/addmessage_selector"/>
<TextView <TextView
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@ -9,7 +9,6 @@
style="?header" style="?header"
android:gravity="center_vertical" > android:gravity="center_vertical" >
<TextView <TextView
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -21,13 +20,13 @@
android:gravity="left|center_vertical" android:gravity="left|center_vertical"
android:textAppearance="?android:attr/textAppearanceMedium" /> android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageButton <ImageButton
android:id="@+id/imageCheckAll" android:id="@+id/imageCheckAll"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0" android:layout_weight="0"
android:layout_marginRight="1dp" android:layout_marginRight="1dp"
android:paddingLeft="2dp" android:paddingLeft="2dp"
android:background="@drawable/uncheck_all"/> android:background="@drawable/uncheck_all"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -5,85 +5,84 @@
android:orientation="vertical" android:orientation="vertical"
style="?bg"> style="?bg">
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="left" android:gravity="left"
android:layout_weight="0" android:layout_weight="0"
android:orientation="horizontal" android:orientation="horizontal"
style="?header" style="?header"
android:id="@+id/layoutHeader"> android:id="@+id/layoutHeader">
<ImageView <ImageView
android:id="@+id/imageViewMsg" android:id="@+id/imageViewMsg"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:src="@drawable/alert" android:src="@drawable/alert"
android:paddingLeft="0dp" android:paddingLeft="0dp"
android:layout_margin="3dp" android:layout_margin="3dp"
android:layout_weight="0" /> android:layout_weight="0" />
<TextView <TextView
android:id="@+id/textView1" android:id="@+id/textView1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:gravity="center_vertical" android:gravity="center_vertical"
android:text="@string/alarms" android:text="@string/alarms"
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:textStyle="bold" android:textStyle="bold"
android:paddingTop="7dp" android:paddingTop="7dp"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/> android:layout_weight="0"/>
<ImageView <ImageView
android:id="@+id/imageViewSeparator" android:id="@+id/imageViewSeparator"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:src="@drawable/separator_white" android:src="@drawable/separator_white"
android:layout_margin="2dp" android:layout_margin="2dp"
android:layout_weight="0" android:layout_weight="0"
android:visibility="invisible" android:visibility="invisible"
android:focusable="false" /> android:focusable="false" />
<ImageView <ImageView
android:id="@+id/imageViewDown" android:id="@+id/imageViewDown"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginBottom="2dp" android:layout_marginBottom="2dp"
android:layout_marginTop="2dp" android:layout_marginTop="2dp"
android:focusable="false" android:focusable="false"
android:visibility="invisible" android:visibility="invisible"
android:src="@drawable/arrow_menu_down" /> android:src="@drawable/arrow_menu_down" />
<ImageButton <ImageButton
android:id="@+id/imageButtonAdd2" android:id="@+id/imageButtonAdd2"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:scaleType="centerInside" android:scaleType="centerInside"
android:layout_marginRight="5dp" android:layout_marginRight="5dp"
android:paddingLeft="2dp" android:paddingLeft="2dp"
android:visibility="invisible" android:visibility="invisible"
android:background="@drawable/addmessage_selector"/> android:background="@drawable/addmessage_selector"/>
<!-- android:background="@drawable/addmessage_selector" --> </LinearLayout>
</LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"> android:layout_weight="1">
<GridView <GridView
android:id="@+id/gridViewAlarms" android:id="@+id/gridViewAlarms"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="#999999" android:background="#999999"
android:drawSelectorOnTop="false" android:drawSelectorOnTop="false"
android:horizontalSpacing="0dp" android:horizontalSpacing="0dp"
android:listSelector="@drawable/gridalarm_selector" android:listSelector="@drawable/gridalarm_selector"
android:numColumns="1" android:numColumns="1"
android:verticalSpacing="1dp" android:verticalSpacing="1dp"
android:padding="5dp"/> android:padding="5dp"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_width="fill_parent"
android:id="@+id/tab1Layout" android:orientation="horizontal" android:layout_height="fill_parent"
android:id="@+id/tab1Layout"
android:orientation="horizontal"
style="?bg"> style="?bg">
<RelativeLayout <RelativeLayout
@ -162,10 +164,11 @@
android:text="@string/startDate" android:text="@string/startDate"
android:textSize="22dp" android:textSize="22dp"
android:paddingLeft="5dp" android:paddingLeft="5dp"
android:layout_marginTop="15sp"
android:textColor="#000000" android:textColor="#000000"
android:gravity="left" android:gravity="left"
android:id="@+id/labelStartDate" android:id="@+id/labelStartDate"
android:visibility="gone"/> />
<LinearLayout <LinearLayout
android:id="@+id/layoutStartPicker" android:id="@+id/layoutStartPicker"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -202,7 +205,7 @@
android:textColor="#000000" android:textColor="#000000"
android:gravity="left" android:gravity="left"
android:id="@+id/labelEndDate" android:id="@+id/labelEndDate"
android:visibility="gone"/> />
<LinearLayout <LinearLayout
android:id="@+id/layoutEndPicker" android:id="@+id/layoutEndPicker"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -284,14 +287,15 @@
</LinearLayout> </LinearLayout>
<fragment <fragment
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:id="@+id/map" android:id="@+id/map"
android:layout_toRightOf="@id/slidelayout" android:layout_toRightOf="@id/slidelayout"
android:layout_weight="1" android:layout_weight="1"
tools:context=".HistoryActivity"
android:name="com.google.android.gms.maps.SupportMapFragment" /> android:name="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout> </LinearLayout>
<ImageView <ImageView
android:id="@+id/changeMapType" android:id="@+id/changeMapType"

View File

@ -7,356 +7,352 @@
style="?bg"> style="?bg">
<LinearLayout <LinearLayout
android:id="@+id/layoutGateway" android:id="@+id/layoutGateway"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:weightSum="100" android:weightSum="100"
android:orientation="horizontal" android:orientation="horizontal"
style="?header"> style="?header">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageViewRadioStation"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/enable"
android:layout_weight="0" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:id="@+id/textViewGateway"
android:text="n/a"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:id="@+id/textViewIP"
android:text="[192.168.2.100]"
android:paddingLeft="4dp"
android:paddingTop="17dp"
android:textColor="#FFFFFF"
android:visibility="gone"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="1"/>
<ImageView
android:id="@+id/imageViewSeparator"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:src="@drawable/separator_white"
android:layout_margin="2dp"
android:layout_weight="0"
android:visibility="invisible"
android:focusable="false" />
<ImageView
android:id="@+id/imageViewDown"
android:layout_width="20dp"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp"
android:focusable="false"
android:visibility="visible"
android:src="@drawable/arrow_menu_down" />
<ImageView
android:id="@+id/imageViewStatus"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:scaleType="fitCenter"
android:src="@drawable/status_offline" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right"
android:layout_marginRight="8dp"
android:visibility="gone">
<ImageButton
android:id="@+id/imageButtonAdd"
android:layout_width="1dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginRight="2dp"
android:paddingLeft="2dp"
android:background="@drawable/addmessage_selector"
android:visibility="invisible"/>
<ImageView
android:id="@+id/imageViewGreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:paddingTop="4dp"
android:src="@drawable/call_private_green_small"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/textViewLoggedIn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:text="@string/login"
android:textColor="#FFFFFF"
android:textSize="16dp"
android:paddingTop="7dp" />
</LinearLayout>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/style_bluebutton"
android:paddingLeft="5dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:visibility="gone"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:text="@string/IP"
android:textColor="#FFFFFF"
android:textSize="17dp" />
<TextView
android:id="@+id/textViewIP2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:text="@string/emptyIP"
android:textColor="#FFFFFF"
android:textSize="17dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/layoutGateway2">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/enable" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textViewGateway2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="#FFFFFF"
android:textSize="17dp"
android:paddingRight="2dp"/>
<ImageView
android:id="@+id/imageViewGateway"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/arrow_down" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:layout_weight="6">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:text="@string/Status"
android:textColor="#FFFFFF"
android:textSize="17dp" />
<ImageView
android:id="@+id/imageViewStatus2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/status_offline"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="horizontal" >
android:paddingTop="2dp">
<ImageView
android:id="@+id/imageViewRadioStation"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/enable"
android:layout_weight="0" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:id="@+id/textViewGateway"
android:text="n/a"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:id="@+id/textViewIP"
android:text="[192.168.2.100]"
android:paddingLeft="4dp"
android:paddingTop="17dp"
android:textColor="#FFFFFF"
android:visibility="gone"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="1"/>
<ImageView
android:id="@+id/imageViewSeparator"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:src="@drawable/separator_white"
android:layout_margin="2dp"
android:layout_weight="0"
android:visibility="invisible"
android:focusable="false" />
<ImageView
android:id="@+id/imageViewDown"
android:layout_width="20dp"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp"
android:focusable="false"
android:visibility="visible"
android:src="@drawable/arrow_menu_down" />
<ImageView
android:id="@+id/imageViewStatus"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:scaleType="fitCenter"
android:src="@drawable/status_offline" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="horizontal"
android:layout_gravity="center" android:gravity="right"
android:gravity="center"> android:layout_marginRight="8dp"
android:visibility="gone">
<ImageButton
android:id="@+id/imageButtonAdd"
android:layout_width="1dp"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginRight="2dp"
android:paddingLeft="2dp"
android:background="@drawable/addmessage_selector"
android:visibility="invisible"/>
<ImageView
android:id="@+id/imageViewGreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:paddingTop="4dp"
android:src="@drawable/call_private_green_small"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/textViewLoggedIn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:text="@string/login"
android:textColor="#FFFFFF"
android:textSize="16dp"
android:paddingTop="7dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/style_bluebutton"
android:paddingLeft="5dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:visibility="gone"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:text="@string/IP"
android:textColor="#FFFFFF"
android:textSize="17dp" />
<TextView
android:id="@+id/textViewIP2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:text="@string/emptyIP"
android:textColor="#FFFFFF"
android:textSize="17dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/layoutGateway2">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/enable" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textViewGateway2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="#FFFFFF"
android:textSize="17dp"
android:paddingRight="2dp"/>
<ImageView
android:id="@+id/imageViewGateway"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/arrow_down" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:layout_weight="6">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:text="@string/Status"
android:textColor="#FFFFFF"
android:textSize="17dp" />
<ImageView
android:id="@+id/imageViewStatus2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/status_offline" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="2dp">
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center">
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingRight="10dp" android:paddingRight="10dp"
android:layout_gravity="center_vertical"> android:layout_gravity="center_vertical">
<LinearLayout <LinearLayout
android:layout_weight="1" android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:gravity="center"> android:gravity="center">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/Zone" android:text="@string/Zone"
android:textStyle="bold" android:textStyle="bold"
android:textColor="#ffffffff" android:textAppearance="?android:attr/textAppearanceMedium"/>
android:textAppearance="?android:attr/textAppearanceMedium"/> <LinearLayout
<LinearLayout android:id="@+id/layoutSpinnerZone"
android:id="@+id/layoutSpinnerZone" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:background="@drawable/style_spinner"
android:background="@drawable/style_spinner" android:gravity="right"
android:gravity="right" android:minWidth="150dp"
android:minWidth="150dp" android:orientation="horizontal"
android:orientation="horizontal" android:paddingBottom="4dp"
android:paddingBottom="4dp" android:paddingLeft="3dp"
android:paddingLeft="3dp" android:paddingRight="3dp"
android:paddingRight="3dp" android:paddingTop="4dp" >
android:paddingTop="4dp" >
<TextView <TextView
android:id="@+id/textViewZone" android:id="@+id/textViewZone"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:text="" android:text=""
android:textColor="#000000" android:textColor="#000000"
android:textStyle="bold" android:textStyle="bold"
android:textSize="20dp"/> android:textSize="20dp"/>
<ImageView <ImageView
android:src="@drawable/arrow_spinner" android:src="@drawable/arrow_spinner"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" /> android:layout_gravity="center_vertical" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_weight="1" android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:gravity="center"> android:gravity="center">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/Channel" android:text="@string/Channel"
android:textColor="#ffffffff" android:textStyle="bold"
android:textStyle="bold" android:textAppearance="?android:attr/textAppearanceMedium"/>
android:textAppearance="?android:attr/textAppearanceMedium"/>
<LinearLayout <LinearLayout
android:id="@+id/layoutSpinnerChannel" android:id="@+id/layoutSpinnerChannel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/style_spinner" android:background="@drawable/style_spinner"
android:gravity="right" android:gravity="right"
android:minWidth="150dp" android:minWidth="150dp"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingBottom="4dp" android:paddingBottom="4dp"
android:paddingLeft="3dp" android:paddingLeft="3dp"
android:paddingRight="3dp" android:paddingRight="3dp"
android:paddingTop="4dp" > android:paddingTop="4dp" >
<TextView <TextView
android:id="@+id/textViewChannel" android:id="@+id/textViewChannel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:text="" android:text=""
android:textColor="#000000" android:textColor="#000000"
android:textStyle="bold" android:textStyle="bold"
android:textSize="20dp"/> android:textSize="20dp"/>
<ImageView <ImageView
android:src="@drawable/arrow_spinner" android:src="@drawable/arrow_spinner"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" /> android:layout_gravity="center_vertical" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="center" android:gravity="center"
android:layout_gravity="center_horizontal"> android:layout_gravity="center_horizontal">
<LinearLayout <LinearLayout
android:layout_weight="1" android:layout_weight="1"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:gravity="center" android:gravity="center"
android:paddingTop="3dp"> android:paddingTop="3dp">
<LinearLayout <LinearLayout
android:layout_width="276dp" android:layout_width="276dp"
android:layout_height="93dp" android:layout_height="93dp"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/screen" android:background="@drawable/screen"
android:gravity="center" android:gravity="center"
android:orientation="vertical" android:orientation="vertical"
android:paddingBottom="0dp" android:paddingBottom="0dp"
android:paddingTop="7dp"> android:paddingTop="7dp">
<TextView <TextView
android:id="@+id/textViewMessageChannel" android:id="@+id/textViewMessageChannel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:paddingBottom="7dp" android:paddingBottom="7dp"
android:textColor="#000000" android:textColor="#000000"
android:textSize="20dp" android:textSize="20dp"
android:textStyle="bold"/> android:textStyle="bold"/>
<TextView <TextView
android:id="@+id/textViewMessageStatus" android:id="@+id/textViewMessageStatus"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:textColor="#000000" android:textColor="#000000"
android:textSize="20dp" android:textSize="20dp"
android:textStyle="bold"/> android:textStyle="bold"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -366,104 +362,104 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"> android:gravity="center_horizontal">
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:layout_weight="1"> android:layout_weight="1">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<RadioGroup android:id="@+id/radioGroupCallType" <RadioGroup
android:layout_width="wrap_content" android:id="@+id/radioGroupCallType"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_marginBottom="3sp"> android:layout_height="wrap_content"
android:layout_marginBottom="3sp">
<RadioButton <RadioButton
android:id="@+id/radioAll" android:id="@+id/radioAll"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="30dp" android:layout_height="30dp"
android:checked="true" android:checked="true"
android:text="@string/AllCall" android:text="@string/AllCall"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ffffffff" /> />
<RadioButton <RadioButton
android:id="@+id/radioGroup" android:id="@+id/radioGroup"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="30dp" android:layout_height="30dp"
android:text="@string/GroupCall" android:text="@string/GroupCall"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ffffffff" /> />
<RadioButton <RadioButton
android:id="@+id/radioPrivate" android:id="@+id/radioPrivate"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="30dp" android:layout_height="30dp"
android:text="@string/PrivateCall" android:text="@string/PrivateCall"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ffffffff" /> />
</RadioGroup> </RadioGroup>
<LinearLayout <LinearLayout
android:id="@+id/layoutSpinnerCallType" android:id="@+id/layoutSpinnerCallType"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/style_spinner" android:background="@drawable/style_spinner"
android:gravity="right" android:gravity="right"
android:minWidth="150dp" android:minWidth="150dp"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingBottom="4dp" android:paddingBottom="4dp"
android:paddingLeft="3dp" android:paddingLeft="3dp"
android:paddingRight="3dp" android:paddingRight="3dp"
android:paddingTop="4dp" android:paddingTop="4dp"
android:visibility="invisible" > android:visibility="invisible" >
<TextView <TextView
android:id="@+id/textViewCallType" android:id="@+id/textViewCallType"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:text="" android:text=""
android:textColor="#000000" android:textColor="#000000"
android:textStyle="bold" android:textStyle="bold"
android:textSize="20dp"/> android:textSize="20dp"/>
<ImageView <ImageView
android:src="@drawable/arrow_spinner" android:src="@drawable/arrow_spinner"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" /> android:layout_gravity="center_vertical" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:orientation="vertical" >
<Button
android:id="@+id/buttonPTT"
style="@style/ButtonPTT"
android:layout_width="135dp"
android:layout_height="88dp"
android:background="@drawable/style_buttonptt"
android:gravity="center"
android:paddingBottom="20dp"
android:text="@string/PTT" />
<Button
android:id="@+id/buttonDKey"
style="@style/ButtonText"
android:layout_width="135dp"
android:layout_height="wrap_content"
android:background="@drawable/style_bluebutton"
android:text="@string/DeKey"
android:textSize="18dp" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:orientation="vertical" >
<Button
android:id="@+id/buttonPTT"
style="@style/ButtonPTT"
android:layout_width="135dp"
android:layout_height="88dp"
android:background="@drawable/style_buttonptt"
android:gravity="center"
android:paddingBottom="20dp"
android:text="@string/PTT" />
<Button
android:id="@+id/buttonDKey"
style="@style/ButtonText"
android:layout_width="135dp"
android:layout_height="wrap_content"
android:background="@drawable/style_bluebutton"
android:text="@string/DeKey"
android:textSize="18dp" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -123,19 +123,18 @@
android:visibility="gone" android:visibility="gone"
android:background="@drawable/recycle"/> android:background="@drawable/recycle"/>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<GridView
android:id="@+id/gridViewRecordings"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:verticalSpacing="1dp"
android:horizontalSpacing="0dp"
android:background="#999999"
android:drawSelectorOnTop="false"
android:listSelector="@drawable/gridalarm_selector"
android:numColumns="1"
android:padding="5dp"></GridView>
</LinearLayout> </LinearLayout>
<GridView
android:id="@+id/gridViewRecordings"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:verticalSpacing="1dp"
android:horizontalSpacing="0dp"
android:background="#999999"
android:drawSelectorOnTop="false"
android:listSelector="@drawable/gridalarm_selector"
android:numColumns="1"
android:padding="5dp"></GridView>
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutMain" android:id="@+id/layoutMain"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
@ -10,246 +11,237 @@
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_weight="80"> android:layout_weight="80">
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:layout_gravity="center" android:layout_gravity="center"
android:paddingLeft="5dp" android:paddingLeft="5dp"
android:paddingBottom="50dp" > android:paddingBottom="50dp" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal"
<LinearLayout android:gravity="left"
android:layout_width="fill_parent" android:paddingTop="10dp"
android:layout_height="wrap_content" android:paddingLeft="7dp"
android:orientation="horizontal" android:layout_weight="0.4">
android:gravity="left" <TextView
android:paddingTop="10dp" android:layout_width="fill_parent"
android:paddingLeft="7dp" android:layout_height="wrap_content"
android:layout_weight="0.4"> android:text="@string/serverIP"
<TextView android:textSize="14dp"
android:layout_width="fill_parent" android:textStyle="bold"
android:layout_height="wrap_content" android:layout_gravity="center_vertical"
android:text="@string/serverIP" android:gravity="center_vertical|right"
android:textSize="14dp" android:layout_weight="2"/>
android:textColor="#FFFFFF"
android:textStyle="bold"
android:layout_gravity="center_vertical"
android:gravity="center_vertical|right"
android:layout_weight="2"/>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:paddingTop="3dp"> android:paddingTop="3dp">
<EditText <EditText
android:id="@+id/appServerIP" android:id="@+id/appServerIP"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:minWidth="200dp" android:minWidth="200dp"
android:singleLine="true" android:singleLine="true"
android:imeOptions="actionDone" > android:imeOptions="actionDone" >
</EditText> </EditText>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="left" android:gravity="left"
android:paddingTop="10dp" android:paddingTop="10dp"
android:layout_weight="0.6"> android:layout_weight="0.6">
<TextView <TextView
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/serverPort" android:text="@string/serverPort"
android:textSize="14dp" android:textSize="14dp"
android:textColor="#FFFFFF" android:textStyle="bold"
android:textStyle="bold" android:gravity="center_vertical|right"
android:gravity="center_vertical|right" android:layout_gravity="center_vertical|right"
android:layout_gravity="center_vertical|right" android:layout_weight="1.4"/>
android:layout_weight="1.4"/> <LinearLayout
<LinearLayout android:layout_width="fill_parent"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:layout_weight="1"
android:layout_weight="1" android:paddingTop="3dp">
android:paddingTop="3dp"> <EditText
<EditText android:layout_height="wrap_content"
android:layout_height="wrap_content" android:id="@+id/appServerPort"
android:id="@+id/appServerPort" android:maxLength="5"
android:maxLength="5" android:minWidth="73dp"
android:minWidth="73dp" android:gravity="center"
android:gravity="center" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_gravity="center_vertical|right"
android:layout_gravity="center_vertical|right" android:inputType="number"
android:inputType="number" android:imeOptions="actionDone" />
android:imeOptions="actionDone"> </LinearLayout>
</EditText>
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:id="@+id/layoutPath"> android:id="@+id/layoutPath">
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingTop="0dp" android:paddingTop="0dp"
android:gravity="center_vertical|left"> android:gravity="center_vertical|left">
<LinearLayout <LinearLayout
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="95dp" android:layout_width="95dp"
android:layout_weight="0"> android:layout_weight="0">
<TextView <TextView
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/configName" android:text="@string/configName"
android:textSize="14dp" android:textSize="14dp"
android:textColor="#FFFFFF" android:textStyle="bold"
android:textStyle="bold" android:gravity="center_vertical|right"
android:gravity="center_vertical|right" android:layout_gravity="center_vertical"/>
android:layout_gravity="center_vertical"/> </LinearLayout>
</LinearLayout> <LinearLayout
<LinearLayout android:layout_height="wrap_content"
android:layout_height="wrap_content" android:layout_width="0dp"
android:layout_width="0dp" android:layout_weight="1"
android:layout_weight="1" android:paddingTop="3dp">
android:paddingTop="3dp">
<EditText <EditText
android:id="@+id/editTextPath" android:id="@+id/editTextPath"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="right|center_vertical" android:gravity="right|center_vertical"
android:text="serial" android:text="serial"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:minWidth="73dp" android:minWidth="73dp"
android:singleLine="true" > android:singleLine="true" >
<requestFocus /> <requestFocus />
</EditText> </EditText>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="0"
android:paddingTop="3dp">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_browse"
android:text="@string/load"
style="@style/ButtonText"
android:textColor="#000"
android:textSize="18dp"/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="0"
android:paddingTop="3dp"
android:paddingRight="3dp">
</LinearLayout> <ImageView
<LinearLayout android:id="@+id/imageViewQuestionMark"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0" android:src="@drawable/questionmark_small" />
android:paddingTop="3dp"> </LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_browse"
android:text="@string/load"
style="@style/ButtonText"
android:textColor="#000"
android:textSize="18dp"/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="0"
android:paddingTop="3dp"
android:paddingRight="3dp">
<ImageView
android:id="@+id/imageViewQuestionMark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/questionmark_small" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/frameLayout11" android:id="@+id/frameLayout11"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="left" > android:gravity="left" >
<TextView <TextView
android:layout_width="95dp" android:layout_width="95dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/language" android:text="@string/language"
android:textSize="14dp" android:textSize="14dp"
android:layout_marginRight="2dp" android:layout_marginRight="2dp"
android:textColor="#FFFFFF" android:textStyle="bold"
android:textStyle="bold" android:gravity="right"
android:gravity="right" android:layout_gravity="center_vertical"/>
android:layout_gravity="center_vertical"/> <LinearLayout
<LinearLayout android:id="@+id/layoutSpinnerLanguage"
android:id="@+id/layoutSpinnerLanguage" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:background="@drawable/style_spinner"
android:background="@drawable/style_spinner" android:gravity="left|center_vertical"
android:gravity="left|center_vertical" android:minWidth="223dp"
android:minWidth="223dp" android:orientation="horizontal"
android:orientation="horizontal" android:paddingBottom="4dp"
android:paddingBottom="4dp" android:paddingLeft="3dp"
android:paddingLeft="3dp" android:paddingRight="3dp"
android:paddingRight="3dp" android:paddingTop="4dp" >
android:paddingTop="4dp" > <ImageView
<ImageView android:id="@+id/imageLanguage"
android:id="@+id/imageLanguage" android:src="@drawable/de"
android:src="@drawable/de" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_height="fill_parent"
android:layout_height="fill_parent" android:layout_gravity="center_vertical"
android:layout_gravity="center_vertical" android:layout_weight="0" />
android:layout_weight="0" /> <TextView
<TextView android:id="@+id/textViewSpinnerLanguage"
android:id="@+id/textViewSpinnerLanguage" android:layout_width="fill_parent"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:layout_gravity="center_vertical"
android:layout_gravity="center_vertical" android:gravity="left"
android:gravity="left" android:text="Germany"
android:text="Germany" android:textColor="#000000"
android:textColor="#000000" android:textSize="17dp"
android:textSize="17dp" android:layout_weight="1"
android:layout_weight="1" android:paddingBottom="2dp"
android:paddingBottom="2dp" android:paddingLeft="3dp">
android:paddingLeft="3dp"> <requestFocus />
<requestFocus /> </TextView>
</TextView> <ImageView
<ImageView android:src="@drawable/arrow_spinner"
android:src="@drawable/arrow_spinner" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:layout_gravity="center_vertical"
android:layout_gravity="center_vertical" android:layout_weight="0" />
android:layout_weight="0" /> </LinearLayout>
</LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:layout_marginTop="20dp"> android:layout_marginTop="20dp">
<Button <Button
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/btn_save" android:id="@+id/btn_save"
android:text="@string/save" android:text="@string/save"
style="@style/ButtonText" style="@style/ButtonText"
android:textSize="22dp" android:textSize="22dp"
android:background="@drawable/style_bluebutton"/> android:background="@drawable/style_bluebutton"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<RelativeLayout <RelativeLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content"/>
</RelativeLayout>
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FFFFFF</color>
</resources>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">SafeMobile Dispatch</string> <string name="app_name">SafeDispatch Mobile</string>
<string name="app_name_demo">SafeMobile Dispatch Demo</string> <string name="app_name_demo">SafeDispatch Mobile Demo</string>
<string name="app_name_radiopod">RadioPod</string> <string name="app_name_radiopod">RadioPod</string>
<string name="app_name_radiopad">RadioPad</string> <string name="app_name_radiopad">RadioPad</string>
<string name="app_name_radiopodd">RadioPod</string> <string name="app_name_radiopodd">RadioPod</string>

View File

@ -82,7 +82,7 @@
<style name="mainBackground_sd"> <style name="mainBackground_sd">
<item name="android:orientation">vertical</item> <item name="android:orientation">vertical</item>
<item name="android:background">@drawable/safedispatch</item> <item name="android:background">@drawable/safedispatch_logo</item>
<item name="android:scaleType">centerInside</item> <item name="android:scaleType">centerInside</item>
</style> </style>
@ -138,7 +138,7 @@
</style> </style>
<style name="bg_sd"> <style name="bg_sd">
<item name="android:background">@drawable/safedispatch</item> <item name="android:background">@drawable/safedispatch_logo</item>
</style> </style>
<style name="header_sd"> <style name="header_sd">
@ -155,7 +155,7 @@
<style name="mainBackground_hy"> <style name="mainBackground_hy">
<item name="android:orientation">vertical</item> <item name="android:orientation">vertical</item>
<item name="android:background">@drawable/safedispatch</item> <item name="android:background">@drawable/safedispatch_logo</item>
<item name="android:scaleType">centerInside</item> <item name="android:scaleType">centerInside</item>
</style> </style>
@ -211,7 +211,7 @@
</style> </style>
<style name="bg_hy"> <style name="bg_hy">
<item name="android:background">@drawable/safedispatch</item> <item name="android:background">@drawable/safedispatch_logo</item>
</style> </style>
<style name="header_hy"> <style name="header_hy">
@ -228,7 +228,7 @@
<style name="mainBackground_vi"> <style name="mainBackground_vi">
<item name="android:orientation">vertical</item> <item name="android:orientation">vertical</item>
<item name="android:background">@drawable/safedispatch</item> <item name="android:background">@drawable/safedispatch_logo</item>
<item name="android:scaleType">centerInside</item> <item name="android:scaleType">centerInside</item>
</style> </style>
@ -285,7 +285,7 @@
</style> </style>
<style name="bg_vi"> <style name="bg_vi">
<item name="android:background">@drawable/safedispatch</item> <item name="android:background">@drawable/safedispatch_logo</item>
</style> </style>
<style name="header_vi"> <style name="header_vi">