Compare commits

...

42 Commits

Author SHA1 Message Date
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
81937a5e0f SD-188 - navigate to phone settings if permission is denied 2022-03-24 12:16:30 +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
66625bcdd1 SD-188 - request audio permission on radio tab select 2022-03-23 19:50:15 +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
34c578fdf5 SD-188 - cleaned up TabLayoutActivity of unused code
- small refactor
- null checks
2022-03-23 13:07:40 +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
7039199208 SD-188 - Create IPermissionService and its implementation 2022-03-21 19:39:55 +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
456c27b829 Merge pull request '#SD-207 - send more data for ack to occur' (#5) from features/SD-207-get_alarms_and_send_ack into develop
Reviewed-on: #5
2022-03-18 16:44:57 +00:00
8127caa949 #SD-207 - send more data for ack to occur 2022-03-18 18:43:48 +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
2540b5f511 Merge pull request '#SD-185 - Make the UI compatible with SMS parsing changes' (#4) from features/SD-185-update-app-to_support-new-message-parsing into develop
Reviewed-on: #4
2022-03-18 06:41:30 +00:00
b072355b4f #SD-185 - Make the UI compatible with SMS parsing changes 2022-03-18 08:40:05 +02:00
0fabbc73be comment line in order to move vehicle 2022-03-17 15:13:25 +02:00
85cf7ae6a4 Merge pull request 'Live Page' (#3) from feature/live into develop
Reviewed-on: #3
2022-03-17 08:20:52 +00:00
91a05ae4d1 start working on history 2022-03-17 10:18:23 +02:00
4f7def273f merge with develop 2022-03-16 16:49:04 +02:00
4439687405 display history 2022-03-16 16:40:34 +02:00
5349558ace display info when on move 2022-03-16 14:41:05 +02:00
b91931e833 small changes 2022-03-16 14:32:28 +02:00
201845da3a display info bubble 2022-03-16 10:54:41 +02:00
2334dc2e3c make marker move 2022-03-15 17:42:58 +02:00
4141b2ab8c Merge pull request '#SD-199 - rework SDMobileActivity and check live messages' (#2) from features/SD-199-livetab-check into develop
Reviewed-on: #2
2022-03-15 13:56:44 +00:00
3da44593dd display Markers 2022-03-15 14:45:18 +02:00
89 changed files with 5594 additions and 5529 deletions

0
gradlew vendored Normal file → Executable file
View File

View File

@ -19,6 +19,13 @@ android {
buildFeatures {
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 {

View File

@ -6,7 +6,7 @@
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
</application>

View File

@ -2,6 +2,7 @@ package com.safemobile.activities;
import java.util.ArrayList;
import com.google.android.gms.maps.GoogleMap;
import com.safemobile.lib.Vehicle;
import android.app.Activity;
@ -23,7 +24,7 @@ public abstract class AbstractLiveActivity extends AppCompatActivity {
public abstract void pollReceived(int position, double lat, double lng); // --> UpdatePoll
public abstract void vehicleStatusReceived(long imei, int opCode, int status); // --> UpdateOptions
public abstract void emergencyAlarmReceived(int position, double lat, double lng); // --> UpdateEmergencyAlarm
public abstract GoogleMap getMap(); // --> UpdateEmergencyAlarm
/** Misc */
public AbstractSDParentActivity getParentTab() {

View File

@ -155,12 +155,12 @@ public abstract class AbstractSDParentActivity extends TabActivity {
}
public boolean sendAlarmAcknowledge(int alarm_id, int type)
public boolean sendAlarmAcknowledge(int alarm_id, int type, String unitName)
{
if(tcp == null)
return false;
boolean res = tcp.Write("0.0", "#28#" + alarm_id + "#" + type + "#");
boolean res = tcp.Write("0.0", "#28#" + alarm_id + "#" + type + "#" + AppParams.USERID + "#" + unitName + "#");
if(res)
SM.Debug("Message [sendAlarmAcknowledge] sent to app server alarm_id:" + alarm_id + " type:" + type);
else
@ -198,12 +198,11 @@ public abstract class AbstractSDParentActivity extends TabActivity {
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)
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+"#");
if(res)
SM.Debug("Message [getHistoryPositions] sent to app server");
@ -213,8 +212,7 @@ public abstract class AbstractSDParentActivity extends TabActivity {
return res;
}
public boolean getRadiosList()
{
public boolean getRadiosList() {
if(tcp == null)
return false;

View File

@ -6,7 +6,6 @@ import java.util.Calendar;
import java.util.Hashtable;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -19,23 +18,21 @@ import com.safemobile.lib.Msg;
import com.safemobile.lib.R;
import com.safemobile.lib.SM;
public class ConversationGridViewAdapter extends BaseAdapter
{
private ArrayList<Msg> listMessages;
private Activity activity;
//public String time;
private ArrayList<Boolean> dispatcher_positions = new ArrayList<Boolean>();
private ArrayList<Boolean> ackPositions = new ArrayList<Boolean>();
private Hashtable<Integer, View> hash = new Hashtable<Integer, View>();
public ConversationGridViewAdapter(Activity activity, ArrayList<Msg> listMessages, Context context, long sc_id, int unit_type, ArrayList<Boolean> dispatcher_positions, ArrayList<Boolean> ackPositions) {
public class ConversationGridViewAdapter extends BaseAdapter {
private final ArrayList<Msg> listMessages;
private final Activity activity;
private final ArrayList<Boolean> dispatcherPositions;
private final ArrayList<Boolean> ackPositions;
private final Hashtable<Integer, View> hash = new Hashtable<>();
public ConversationGridViewAdapter(Activity activity, ArrayList<Msg> listMessages, ArrayList<Boolean> dispatcherPositions, ArrayList<Boolean> ackPositions) {
this.activity = activity;
this.listMessages = listMessages;
this.dispatcher_positions = dispatcher_positions;
this.ackPositions = ackPositions;
this.dispatcherPositions = dispatcherPositions;
this.ackPositions = ackPositions;
}
@Override
public int getCount() {
return listMessages.size();
@ -51,149 +48,230 @@ public class ConversationGridViewAdapter extends BaseAdapter
return 0;
}
public static class ViewHolder
{
public ImageView imgViewContact;
public TextView txtViewMsg;
public TextView txtViewDateTime;
public ImageView imgViewReceivedContact;
public TextView txtViewReceivedMsg;
public TextView txtViewReceivedDateTime;
public ImageView imageAck;
public TextView textViewNotACK;
public LinearLayout layoutSend;
public LinearLayout layoutReceived;
public static class ViewHolder {
private ImageView imgViewContact;
private TextView txtViewMsg;
private TextView txtViewDateTime;
private ImageView imgViewReceivedContact;
private TextView txtViewReceivedMsg;
private TextView txtViewReceivedDateTime;
private ImageView imageAck;
private TextView textViewNotACK;
private LinearLayout layoutSend;
private LinearLayout layoutReceived;
public ImageView getImgViewContact() {
return imgViewContact;
}
public void setImgViewContact(ImageView imgViewContact) {
this.imgViewContact = imgViewContact;
}
public TextView getTxtViewMsg() {
return txtViewMsg;
}
public void setTxtViewMsg(TextView txtViewMsg) {
this.txtViewMsg = txtViewMsg;
}
public TextView getTxtViewDateTime() {
return txtViewDateTime;
}
public void setTxtViewDateTime(TextView txtViewDateTime) {
this.txtViewDateTime = txtViewDateTime;
}
public ImageView getImgViewReceivedContact() {
return imgViewReceivedContact;
}
public void setImgViewReceivedContact(ImageView imgViewReceivedContact) {
this.imgViewReceivedContact = imgViewReceivedContact;
}
public TextView getTxtViewReceivedMsg() {
return txtViewReceivedMsg;
}
public void setTxtViewReceivedMsg(TextView txtViewReceivedMsg) {
this.txtViewReceivedMsg = txtViewReceivedMsg;
}
public TextView getTxtViewReceivedDateTime() {
return txtViewReceivedDateTime;
}
public void setTxtViewReceivedDateTime(TextView txtViewReceivedDateTime) {
this.txtViewReceivedDateTime = txtViewReceivedDateTime;
}
public ImageView getImageAck() {
return imageAck;
}
public void setImageAck(ImageView imageAck) {
this.imageAck = imageAck;
}
public TextView getTextViewNotACK() {
return textViewNotACK;
}
public void setTextViewNotACK(TextView textViewNotACK) {
this.textViewNotACK = textViewNotACK;
}
public LinearLayout getLayoutSend() {
return layoutSend;
}
public void setLayoutSend(LinearLayout layoutSend) {
this.layoutSend = layoutSend;
}
public LinearLayout getLayoutReceived() {
return layoutReceived;
}
public void setLayoutReceived(LinearLayout layoutReceived) {
this.layoutReceived = layoutReceived;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder view;
LayoutInflater inflator = activity.getLayoutInflater();
if(convertView==null)
{
LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null) {
view = new ViewHolder();
convertView = inflator.inflate(R.layout.row_conversation, null);
view.imgViewContact = (ImageView) convertView.findViewById(R.id.imageViewSenderIco);
view.txtViewMsg = (TextView) convertView.findViewById(R.id.textViewSendMsg);
view.txtViewDateTime = (TextView) convertView.findViewById(R.id.textViewSendDate);
view.imgViewReceivedContact = (ImageView) convertView.findViewById(R.id.imageViewReceivedIco);
view.txtViewReceivedMsg = (TextView) convertView.findViewById(R.id.textViewReceivedMsg);
view.txtViewReceivedDateTime = (TextView) convertView.findViewById(R.id.textViewReceivedDate);
view.layoutSend = (LinearLayout) convertView.findViewById(R.id.layoutSend);
view.layoutReceived = (LinearLayout) convertView.findViewById(R.id.layoutReceived);
view.textViewNotACK = (TextView) convertView.findViewById(R.id.textViewNotACKSendMsg);
view.imageAck = (ImageView) convertView.findViewById(R.id.imageAck);
convertView = inflater.inflate(R.layout.row_conversation, null);
view.setImgViewContact(convertView.findViewById(R.id.imageViewSenderIco));
view.setTxtViewMsg(convertView.findViewById(R.id.textViewSendMsg));
view.setTxtViewDateTime(convertView.findViewById(R.id.textViewSendDate));
view.setImgViewReceivedContact(convertView.findViewById(R.id.imageViewReceivedIco));
view.setTxtViewReceivedMsg(convertView.findViewById(R.id.textViewReceivedMsg));
view.setTxtViewReceivedDateTime(convertView.findViewById(R.id.textViewReceivedDate));
view.setLayoutSend(convertView.findViewById(R.id.layoutSend));
view.setLayoutReceived(convertView.findViewById(R.id.layoutReceived));
view.setTextViewNotACK(convertView.findViewById(R.id.textViewNotACK));
view.setImageAck(convertView.findViewById(R.id.imageAck));
convertView.setTag(view);
}
else
{
} else {
view = (ViewHolder) convertView.getTag();
}
try
{
try {
hash.put(position, convertView);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm MMM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
if(listMessages.get(position).received.after(calendar.getTime()))
if (listMessages.get(position).received.after(calendar.getTime()))
sdf = new SimpleDateFormat("HH:mm:ss");
else
sdf = new SimpleDateFormat("HH:mm MMM-dd");
//view.imgViewContact.setImageResource(getIcon(listMessages.get(position).from.user_type));
view.imgViewContact.setImageResource(R.drawable.peoplegreen_large);
view.txtViewMsg.setText(listMessages.get(position).message);
view.txtViewDateTime.setText(sdf.format(listMessages.get(position).received));
//view.imgViewReceivedContact.setImageResource(getIcon(listMessages.get(position).from.user_type));
view.imgViewReceivedContact.setImageResource(listMessages.get(position).from.getLargeIcon());
view.txtViewReceivedMsg.setText(listMessages.get(position).message);
view.txtViewReceivedDateTime.setText(sdf.format(listMessages.get(position).received));
if(ackPositions.size() > 0)
switch(ackPositions.get(position) ? 1: 0) {
case 0:
// show not ack
view.textViewNotACK.setVisibility(View.VISIBLE);
view.imageAck.setVisibility(View.VISIBLE);
break;
case 1:
// show not ack
view.textViewNotACK.setVisibility(View.INVISIBLE);
view.imageAck.setVisibility(View.INVISIBLE);
view.getImgViewContact().setImageResource(R.drawable.peoplegreen_large);
view.getTxtViewMsg().setText(listMessages.get(position).message);
view.getTxtViewDateTime().setText(sdf.format(listMessages.get(position).received));
view.getImgViewReceivedContact().setImageResource(listMessages.get(position).from.getLargeIcon());
view.getTxtViewReceivedMsg().setText(listMessages.get(position).message);
view.getTxtViewReceivedDateTime().setText(sdf.format(listMessages.get(position).received));
if (!ackPositions.isEmpty())
switch (Boolean.TRUE.equals(ackPositions.get(position)) ? 1 : 0) {
case 0:
// show not ack
view.getTextViewNotACK().setVisibility(View.VISIBLE);
view.getImageAck().setVisibility(View.VISIBLE);
break;
case 1:
// show not ack
view.getTextViewNotACK().setVisibility(View.INVISIBLE);
view.getImageAck().setVisibility(View.INVISIBLE);
break;
default:
throw new IllegalStateException("Unexpected value: " + (Boolean.TRUE.equals(ackPositions.get(position)) ? 1 : 0));
}
switch(dispatcher_positions.get(position) ? 1 : 0) {
case 1:
view.layoutReceived.setVisibility(View.GONE);
view.layoutSend.setVisibility(View.VISIBLE);
break;
case 0:
view.layoutReceived.setVisibility(View.VISIBLE);
view.layoutSend.setVisibility(View.GONE);
break;
}
}
catch(Exception ex)
{
switch (Boolean.TRUE.equals(dispatcherPositions.get(position)) ? 1 : 0) {
case 1:
view.getLayoutReceived().setVisibility(View.GONE);
view.getLayoutSend().setVisibility(View.VISIBLE);
break;
case 0:
view.getLayoutReceived().setVisibility(View.VISIBLE);
view.getLayoutSend().setVisibility(View.GONE);
break;
default:
throw new IllegalStateException("Unexpected value: " + (Boolean.TRUE.equals(dispatcherPositions.get(position)) ? 1 : 0));
}
} catch (Exception ex) {
SM.Exception(ex.toString());
}
return convertView;
}
public void setACK(String seqID)
{
int position = -1, i=0;
for(Msg msg: listMessages)
{
if(msg.seqID.equals(seqID))
public void setACK(String seqID) {
int position = -1;
int i = 0;
for (Msg msg : listMessages) {
if (msg.seqID.equals(seqID))
position = i;
i++;
}
if(position > -1 && position < ackPositions.size()) {
if (position > -1 && position < ackPositions.size()) {
ackPositions.remove(position);
ackPositions.add(position, true);
}
}
public void changeView(String seqID)
{
int position = -1, i=0;
for(Msg msg: listMessages)
{
if(msg.seqID.equals(seqID))
public void changeView(String seqID) {
int position = -1;
int i = 0;
for (Msg msg : listMessages) {
if (msg.seqID.equals(seqID))
position = i;
i++;
}
if(position != -1 && hash.size() > position)
{
if (position != -1 && hash.size() > position) {
SM.Debug("POSITON : " + position);
View con = hash.get(position);
ViewHolder view = (ViewHolder) con.getTag();
switch(ackPositions.get(position) ? 1 : 0)
{
ViewHolder view = null;
if (con != null) {
view = (ViewHolder) con.getTag();
}
switch (Boolean.TRUE.equals(ackPositions.get(position)) ? 1 : 0) {
case 1:
view.imageAck.setVisibility(View.INVISIBLE);
view.textViewNotACK.setVisibility(View.INVISIBLE);
if (view != null) {
view.getImageAck().setVisibility(View.INVISIBLE);
view.getTextViewNotACK().setVisibility(View.INVISIBLE);
}
break;
case 0:
view.imageAck.setVisibility(View.VISIBLE);
view.textViewNotACK.setVisibility(View.VISIBLE);
if (view != null) {
view.getImageAck().setVisibility(View.VISIBLE);
view.getTextViewNotACK().setVisibility(View.VISIBLE);
}
break;
default:
throw new IllegalStateException("Unexpected value: " + (Boolean.TRUE.equals(ackPositions.get(position)) ? 1 : 0));
}
}
}

View File

@ -5,7 +5,6 @@ import java.util.ArrayList;
import java.util.Calendar;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -18,20 +17,16 @@ import com.safemobile.lib.Msg;
import com.safemobile.lib.R;
import com.safemobile.lib.SM;
public class MessagesGridViewAdapter extends BaseAdapter
{
private ArrayList<Msg> listMessages;
private Activity activity;
//public String time;
//private int[] colors = new int[] { Color.parseColor("#FFFFFF"), Color.parseColor("#D2E4FC") };
public MessagesGridViewAdapter(Activity activity, ArrayList<Msg> listMessages, Context context) {
public class MessagesGridViewAdapter extends BaseAdapter {
private final ArrayList<Msg> listMessages;
private final Activity activity;
public MessagesGridViewAdapter(Activity activity, ArrayList<Msg> listMessages) {
super();
this.activity = activity;
this.listMessages = listMessages;
}
@Override
public int getCount() {
return listMessages.size();
@ -47,86 +42,58 @@ public class MessagesGridViewAdapter extends BaseAdapter
return 0;
}
public static class ViewHolder
{
public static class ViewHolder {
public ImageView imgViewContact;
public TextView txtViewContact;
public TextView txtViewDateTime;
public TextView txtViewLastMsg;
public LinearLayout layoutMessage;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder view;
LayoutInflater inflator = activity.getLayoutInflater();
if(convertView==null)
{
if (convertView == null) {
view = new ViewHolder();
convertView = inflator.inflate(R.layout.row_message, null);
view.imgViewContact = (ImageView) convertView.findViewById(R.id.imageViewContact);
view.txtViewContact = (TextView) convertView.findViewById(R.id.textViewContact);
view.txtViewDateTime = (TextView) convertView.findViewById(R.id.textViewLastDate);
view.txtViewLastMsg = (TextView) convertView.findViewById(R.id.textViewLastMsg);
view.layoutMessage = (LinearLayout) convertView.findViewById(R.id.layoutMessage);
view.imgViewContact = convertView.findViewById(R.id.imageViewContact);
view.txtViewContact = convertView.findViewById(R.id.textViewContact);
view.txtViewDateTime = convertView.findViewById(R.id.textViewLastDate);
view.txtViewLastMsg = convertView.findViewById(R.id.textViewLastMsg);
view.layoutMessage = convertView.findViewById(R.id.layoutMessage);
convertView.setTag(view);
}
else
{
} else {
view = (ViewHolder) convertView.getTag();
}
try
{
try {
view.imgViewContact.setImageResource(listMessages.get(position).from.getLargeIcon());
//view.imgViewContact.setImageResource(R.drawable.peopleblue);
view.txtViewContact.setText(listMessages.get(position).from.name+ " :");
if(listMessages.get(position).message.length() > 25)
view.txtViewLastMsg.setText(listMessages.get(position).message.substring(0, 25) + "...");
view.txtViewContact.setText(String.format("%s :", listMessages.get(position).from.name));
if (listMessages.get(position).message.length() > 25)
view.txtViewLastMsg.setText(String.format("%s...", listMessages.get(position).message.substring(0, 25)));
else
view.txtViewLastMsg.setText(listMessages.get(position).message);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
if(listMessages.get(position).received.after(calendar.getTime()))
if (listMessages.get(position).received.after(calendar.getTime()))
sdf = new SimpleDateFormat("HH:mm:ss");
else
sdf = new SimpleDateFormat("MMM-dd HH:mm");
view.txtViewDateTime.setText(sdf.format(listMessages.get(position).received));
}
catch(Exception ex)
{
} catch (Exception ex) {
SM.Exception(ex.toString());
}
return convertView;
}
public int getIcon(int user_type, String username)
{
// if request was send by MessagesActivity -> Spinner
if(user_type == -1)
{
// get unit_type for selected username
for (Msg mes: listMessages)
{
// if user is selected
if(mes.from.name.equals(username))
{
user_type = (int) mes.from.driver_id; // save user_type
return mes.from.getLargeIcon();
}
}
}
return 0;
}
}

View File

@ -1,215 +0,0 @@
package com.safemobile.adapters;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.safemobile.lib.R;
import com.safemobile.lib.SM;
import com.safemobile.libpad.PadTextMessage;
public class PadConversationGridViewAdapter extends BaseAdapter
{
private ArrayList<PadTextMessage> listMessages;
private Activity activity;
//public String time;
private ArrayList<Boolean> outgoingPositions = new ArrayList<Boolean>();
private ArrayList<Boolean> ackPositions = new ArrayList<Boolean>();
private Hashtable<Integer, View> hash = new Hashtable<Integer, View>();
public PadConversationGridViewAdapter(Activity activity, ArrayList<PadTextMessage> listMessages, Context context, ArrayList<Boolean> outgoingPositions, ArrayList<Boolean> ackPositions) {
this.activity = activity;
this.listMessages = listMessages;
this.outgoingPositions = outgoingPositions;
this.ackPositions = ackPositions;
}
@Override
public int getCount() {
return listMessages.size();
}
@Override
public PadTextMessage getItem(int position) {
return listMessages.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
/** return the list of messages in the adapter
* @return an ArrayList of PadTextMessages
*/
public ArrayList<PadTextMessage> getMessages() {
return listMessages;
}
public static class ViewHolder
{
public ImageView imgViewContact;
public TextView txtViewMsg;
public TextView txtViewDateTime;
public ImageView imgViewReceivedContact;
public TextView txtViewReceivedMsg;
public TextView txtViewReceivedDateTime;
public ImageView imageAck;
public TextView textViewNotACK;
public LinearLayout layoutSend;
public LinearLayout layoutReceived;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder view;
LayoutInflater inflator = activity.getLayoutInflater();
if(convertView==null)
{
view = new ViewHolder();
convertView = inflator.inflate(R.layout.row_conversation, null);
view.imgViewContact = (ImageView) convertView.findViewById(R.id.imageViewSenderIco);
view.txtViewMsg = (TextView) convertView.findViewById(R.id.textViewSendMsg);
view.txtViewDateTime = (TextView) convertView.findViewById(R.id.textViewSendDate);
view.imgViewReceivedContact = (ImageView) convertView.findViewById(R.id.imageViewReceivedIco);
view.txtViewReceivedMsg = (TextView) convertView.findViewById(R.id.textViewReceivedMsg);
view.txtViewReceivedDateTime = (TextView) convertView.findViewById(R.id.textViewReceivedDate);
view.layoutSend = (LinearLayout) convertView.findViewById(R.id.layoutSend);
view.layoutReceived = (LinearLayout) convertView.findViewById(R.id.layoutReceived);
view.textViewNotACK = (TextView) convertView.findViewById(R.id.textViewNotACKSendMsg);
view.imageAck = (ImageView) convertView.findViewById(R.id.imageAck);
convertView.setTag(view);
}
else
{
view = (ViewHolder) convertView.getTag();
}
try
{
hash.put(position, convertView);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm MMM-dd", Locale.getDefault());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date date = new Date(listMessages.get(position).timeGMT * 1000);
if(date.after(calendar.getTime()))
sdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
else
sdf = new SimpleDateFormat("HH:mm MMM-dd", Locale.getDefault());
// set gmt time
//sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
//view.imgViewContact.setImageResource(getIcon(listMessages.get(position).from.user_type));
view.imgViewContact.setImageResource(R.drawable.peoplegreen_large);
view.txtViewMsg.setText(listMessages.get(position).message);
view.txtViewDateTime.setText(sdf.format(date));
//view.imgViewReceivedContact.setImageResource(getIcon(listMessages.get(position).from.user_type));
view.imgViewReceivedContact.setImageResource(R.drawable.peopleblue_large);
view.txtViewReceivedMsg.setText(listMessages.get(position).message);
view.txtViewReceivedDateTime.setText(sdf.format(date));
if(ackPositions.size() > 0)
switch(ackPositions.get(position) ? 1: 0) {
case 0:
// show not ack
view.textViewNotACK.setVisibility(View.VISIBLE);
view.imageAck.setVisibility(View.VISIBLE);
break;
case 1:
// show not ack
view.textViewNotACK.setVisibility(View.INVISIBLE);
view.imageAck.setVisibility(View.INVISIBLE);
}
switch(outgoingPositions.get(position) ? 1 : 0) {
case 1:
view.layoutReceived.setVisibility(View.GONE);
view.layoutSend.setVisibility(View.VISIBLE);
break;
case 0:
view.layoutReceived.setVisibility(View.VISIBLE);
view.layoutSend.setVisibility(View.GONE);
break;
}
}
catch(Exception ex)
{
SM.Exception(ex.toString());
}
return convertView;
}
/*
public void setACK(String seqID)
{
int position = -1, i=0;
for(Msg msg: listMessages)
{
if(msg.seqID.equals(seqID))
position = i;
i++;
}
ackPositions.remove(position);
ackPositions.add(position, true);
}
public void changeView(String seqID)
{
int position = -1, i=0;
for(Msg msg: listMessages)
{
if(msg.seqID.equals(seqID))
position = i;
i++;
}
if(position != -1 && hash.size() > position)
{
SM.Debug("POSITON : " + position);
View con = hash.get(position);
ViewHolder view = (ViewHolder) con.getTag();
switch(ackPositions.get(position) ? 1 : 0)
{
case 1:
view.imageAck.setVisibility(View.INVISIBLE);
view.textViewNotACK.setVisibility(View.INVISIBLE);
break;
case 0:
view.imageAck.setVisibility(View.VISIBLE);
view.textViewNotACK.setVisibility(View.VISIBLE);
break;
}
}
}
*/
}

View File

@ -0,0 +1,10 @@
package com.safemobile.enums;
public enum AuthorizationCode {
UNKNOWN,
RECORD_AUDIO,
CAMERA,
GEOLOCATION,
READ_EXTERNAL_STORAGE,
WRITE_EXTERNAL_STORAGE
}

View File

@ -0,0 +1,7 @@
package com.safemobile.enums;
public enum AuthorizationStatus {
AUTHORIZE,
DENIED,
NOT_DETERMINED
}

View File

@ -0,0 +1,6 @@
package com.safemobile.enums;
public enum ProviderSettingsStatus {
APPLICATION_DETAILS,
SETTINGS
}

View File

@ -0,0 +1,37 @@
package com.safemobile.helpers;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.Settings;
import com.safemobile.enums.ProviderSettingsStatus;
public class ProviderSettingsHelper {
public static final String PACKAGE = "package";
public static final String ACTION_APPLICATION_DETAILS_SETTINGS = Settings.ACTION_APPLICATION_DETAILS_SETTINGS;
public static final String ACTION_SETTINGS = Settings.ACTION_SETTINGS;
private ProviderSettingsHelper() {
}
public static String getAction(ProviderSettingsStatus providerSettingsStatus) {
switch (providerSettingsStatus) {
case APPLICATION_DETAILS:
return ACTION_APPLICATION_DETAILS_SETTINGS;
case SETTINGS:
default:
return ACTION_SETTINGS;
}
}
public static boolean canHandleAction(Context context, String action) {
Intent intent = new Intent(action);
Uri uri = Uri.fromParts(PACKAGE, context.getPackageName(), null);
intent.setData(uri);
return context.getPackageManager() != null && intent.resolveActivity(context.getPackageManager()) != null;
}
}

View File

@ -0,0 +1,12 @@
package com.safemobile.interfaces;
import android.app.Activity;
import com.google.android.gms.tasks.Task;
public interface IDialogService {
Task<Boolean> showDialog(Activity activity, String title, String message, String cancel, String ok);
Task<Boolean> showPermissionRequestDialog(Activity activity, String message, String cancel);
void showError(Activity activity, String message);
}

View File

@ -0,0 +1,11 @@
package com.safemobile.interfaces;
import android.app.Activity;
import com.safemobile.enums.AuthorizationCode;
import com.safemobile.enums.AuthorizationStatus;
public interface IPermissionModule {
AuthorizationStatus getAuthorizationStatus(Activity activity, AuthorizationCode authorizationCode);
void requestAuthorization(Activity activity, AuthorizationCode authorizationCode);
}

View File

@ -16,7 +16,7 @@ public interface ITCPListener {
public void onHistoryPositionsCountReceived( TCPEvent event );
public void onAlarmsReceived( TCPEvent event );
public void onAlarmAckReceived(TCPEvent event);
public void alarmLiveRecv(TCPEvent event);
public void alarmLiveReceived(TCPEvent event);
public void onRecordingPlayReceived(TCPEvent event);
public void onPollReceived(TCPEvent event);
@ -27,7 +27,7 @@ public interface ITCPListener {
public void onRecordingsListReceived(TCPEvent event);
public void onPONGReceived();
public void onTCPConnectionDown(boolean previuosWasConnectionUp);
public void onTCPConnectionUp(boolean previuosWasConnectionUp);
public void onTCPConnectionStatusReceived(boolean isConnectionUp, boolean previuosWasConnectionUp);
public void onTCPConnectionDown(boolean previousWasConnectionUp);
public void onTCPConnectionUp(boolean previousWasConnectionUp);
public void onTCPConnectionStatusReceived(boolean isConnectionUp, boolean previousWasConnectionUp);
}

View File

@ -27,7 +27,7 @@ public class AppParams {
/* SafeMobile Dispatch */
public static ArrayList<User> allUsers = new ArrayList<User>();
public static Theme theme = Theme.SAFENET; // the Theme type
public static Theme theme = Theme.SAFEDISPATCH; // the Theme type
/* ***************************************** */

View File

@ -21,36 +21,28 @@ public class SuperVehicle extends Vehicle{
// TODO Auto-generated constructor stub
}
public void SetDataFromLastPos(Double _lat,Double _lng,long _time,int _speed,String _Address,Boolean _isON)
{
try
{
public void SetDataFromLastPos(Double _lat,Double _lng,long _time,int _speed,String _Address,Boolean _isON) {
try {
lat = _lat;
lng = _lng;
timeGMT = _time;
speed = _speed;
Address = _Address;
isON = _isON;
}
catch (Exception ex)
{
Log.d("Erorr", "Contert Error:"+ex.toString());
} catch (Exception ex) {
Log.d("Erorr", "Contert Error: "+ ex);
}
}
public void SetNewPosition(Double _lat,Double _lng,long _time,int _speed)
{
try
{
public void SetNewPosition(Double _lat,Double _lng,long _time,int _speed) {
try {
lat = _lat;
lng = _lng;
timeGMT = _time;
speed = _speed;
isON = true;
}
catch (Exception ex)
{
Log.d("Erorr", "Contert Error:"+ex.toString());
} catch (Exception ex) {
Log.d("Erorr", "Contert Error: " + ex);
}
}

View File

@ -10,7 +10,6 @@ import com.safemobile.interfaces.TCPEvent;
import com.safemobile.lib.OperationCodes;
import com.safemobile.lib.SM;
import com.safemobile.lib.TCPmsg;
import com.safemobile.services.TCPhandler;
public class TCPmsgParser implements Runnable{
@ -150,7 +149,7 @@ public class TCPmsgParser implements Runnable{
TCPEvent event = new TCPEvent( this, _msg );
Iterator<ITCPListener> listeners = _listeners.iterator();
while( listeners.hasNext() ) {
( (ITCPListener) listeners.next() ).alarmLiveRecv(event);
( (ITCPListener) listeners.next() ).alarmLiveReceived(event);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?><!--
Copyright (C) 2012 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/custom_info_bubble"
android:paddingLeft="7dp"
android:paddingRight="7dp"
android:paddingTop="9dp"
android:orientation="vertical">
<LinearLayout
android:id="@+id/containerTop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/l_bg_gps"
android:orientation="vertical">
<TextView
android:id="@+id/tvUnitName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:ellipsize="end"
android:fontFamily="sans-serif-smallcaps"
android:maxLines="1"
android:paddingTop="5dp"
tools:text="Linux 9910"
android:textColor="#FFFFFF"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvGPSLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:ellipsize="end"
android:fontFamily="sans-serif-smallcaps"
android:maxLines="1"
tools:text="[44.41857,26.09585]"
android:textColor="#FFFFFF"
android:textSize="10sp"
tools:ignore="SmallSp" />
</LinearLayout>
<RelativeLayout
android:layout_width="225dp"
android:layout_height="wrap_content"
android:padding="10dp"
android:id="@+id/rlMapInfoBubbleInfo">
<ImageView
android:id="@+id/time"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginRight="5dp"
android:adjustViewBounds="true"
android:src="@drawable/l_time"
android:layout_marginEnd="5dp" />
<TextView
android:id="@+id/tvTimeAgo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/time"
android:layout_alignTop="@+id/time"
android:layout_gravity="center_horizontal"
android:layout_toEndOf="@+id/time"
android:layout_toRightOf="@+id/time"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
tools:text="a year ago [01:05:01]"
android:textColor="#ff000000"
android:textSize="10sp" />
<ImageView
android:id="@+id/speed"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_below="@+id/time"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:adjustViewBounds="true"
android:src="@drawable/l_speed" />
<TextView
android:id="@+id/tvSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/speed"
android:layout_alignTop="@+id/speed"
android:layout_gravity="center_horizontal"
android:layout_toRightOf="@+id/speed"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
tools:text="24 kph"
android:textColor="#ff000000"
android:textSize="10sp" />
<ImageView
android:id="@+id/streetView"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_below="@+id/speed"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:adjustViewBounds="true"
android:src="@drawable/l_street"
android:visibility="visible" />
<TextView
android:id="@+id/tvStreetView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/streetView"
android:layout_gravity="center_horizontal"
android:layout_toRightOf="@+id/streetView"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="5"
tools:text="3601 E Algonquin Rd., Suite 800 Rolling Meadows, IL 60008"
android:textColor="#ff000000"
android:textSize="10sp"
android:visibility="visible" />
</RelativeLayout>
</LinearLayout>

View File

@ -1,13 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<LinearLayout
android:id="@+id/layoutSend"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<LinearLayout
android:id="@+id/layoutSend"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:paddingRight="13dp"
@ -19,147 +20,151 @@
android:background="#ffffff"
android:layout_marginLeft="5dp"
android:layout_weight="0">
<ImageView
android:id="@+id/imageViewSenderIco"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ambulance_large"
android:adjustViewBounds="true"
android:scaleType="center"
android:background="#ffffff"
android:layout_margin="3dp"
android:layout_gravity="top"
android:layout_weight="0" />
<ImageView
android:id="@+id/imageViewSenderIco"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ambulance_large"
android:adjustViewBounds="true"
android:scaleType="center"
android:background="#ffffff"
android:layout_margin="3dp"
android:layout_gravity="top"
android:layout_weight="0" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="5dp"
android:layout_gravity="center_vertical"
android:background="@layout/row_conversation_style_send"
android:orientation="vertical"
android:layout_weight="1" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="5dp"
android:layout_gravity="center_vertical"
android:background="@layout/row_conversation_style_send"
android:orientation="vertical"
android:layout_weight="1" >
<TextView
android:id="@+id/textViewSendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textColor="#000000"
android:textSize="16dp" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageAckSendMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="center"
android:paddingTop="2dp"
android:src="@drawable/exclamation_small"
android:layout_weight="0"
android:visibility="invisible"/>
<TextView
android:id="@+id/textViewNotACKSendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/notAck"
android:textColor="#000000"
android:textSize="13dp"
android:layout_toRightOf="@+id/imageAck"
android:visibility="invisible" />
<TextView
android:id="@+id/textViewSendDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Small Text"
android:textColor="#4c4c4c"
android:textSize="13dp"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
<TextView
android:id="@+id/textViewSendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textColor="#000000"
android:textSize="16dp" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageAck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="center"
android:paddingTop="2dp"
android:src="@drawable/exclamation_small"
android:layout_weight="0"
android:visibility="invisible"
tools:ignore="DuplicateIds" />
<TextView
android:id="@+id/textViewNotACK"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/notAck"
android:textColor="#000000"
android:textSize="13dp"
android:layout_toRightOf="@+id/imageAck"
android:visibility="invisible"
tools:ignore="DuplicateIds" />
<TextView
android:id="@+id/textViewSendDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Small Text"
android:textColor="#4c4c4c"
android:textSize="13dp"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:paddingLeft="13dp"
android:layout_weight="0"
android:orientation="horizontal"
android:id="@+id/layoutReceived">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="5dp"
android:layout_gravity="center_vertical"
android:background="@layout/row_conversation_style_rec"
android:orientation="vertical"
android:layout_weight="1" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="5dp"
android:layout_gravity="center_vertical"
android:background="@layout/row_conversation_style_rec"
android:orientation="vertical"
android:layout_weight="1" >
<TextView
android:id="@+id/textViewReceivedMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textColor="#000000"
android:textSize="16dp" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageAckReceiveMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="center"
android:paddingTop="2dp"
android:src="@drawable/exclamation_small"
android:layout_weight="0"
android:visibility="invisible"/>
<TextView
android:id="@+id/textViewNotACKReceiveMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/notAck"
android:textColor="#000000"
android:textSize="13dp"
android:layout_toRightOf="@+id/imageAck"
android:visibility="invisible"/>
<TextView
android:id="@+id/textViewReceivedDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Small Text"
android:textColor="#4c4c4c"
android:textSize="13dp"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
<TextView
android:id="@+id/textViewReceivedMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textColor="#000000"
android:textSize="16dp" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageAck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="center"
android:paddingTop="2dp"
android:src="@drawable/exclamation_small"
android:layout_weight="0"
android:visibility="invisible"
tools:ignore="DuplicateIds" />
<TextView
android:id="@+id/textViewNotACK"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/notAck"
android:textColor="#000000"
android:textSize="13dp"
android:layout_toRightOf="@+id/imageAck"
android:visibility="invisible"
tools:ignore="DuplicateIds" />
<TextView
android:id="@+id/textViewReceivedDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Small Text"
android:textColor="#4c4c4c"
android:textSize="13dp"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="#ffffff"
android:layout_marginRight="5dp"
android:layout_weight="0">
<ImageView
android:id="@+id/imageViewReceivedIco"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/error"
android:background="#ffffff"
android:layout_margin="3dp"
android:layout_weight="0"
android:layout_gravity="top"
/>
</LinearLayout>
<ImageView
android:id="@+id/imageViewReceivedIco"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/error"
android:background="#ffffff"
android:layout_margin="3dp"
android:layout_weight="0"
android:layout_gravity="top"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>

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

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
</resources>

View File

@ -1,14 +1,36 @@
apply plugin: 'com.android.application'
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 {
compileSdkVersion 31
buildToolsVersion "31.0.0"
defaultConfig {
applicationId "com.safemobile.dispatch"
applicationId "com.safemobile.safedispatch"
minSdkVersion 21
targetSdkVersion 31
versionName androidGitVersion.name()
versionCode androidGitVersion.code()
archivesBaseName = "SafeDispatchMobile_v.$versionName"
}
buildTypes {
@ -20,6 +42,13 @@ android {
buildFeatures {
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 {
implementation project(':libSafeMobile')

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,22 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.safemobile.dispatch"
android:versionCode="9"
android:versionName="1.0.9">
package="com.safemobile.safedispatch">
<!-- require OpenGL ES version 2 for Google Maps -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAMERA" android:required="false"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature
@ -28,7 +27,7 @@
<application
android:configChanges="orientation"
android:icon="@drawable/ic_launcher"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@style/AppTheme">
@ -43,7 +42,7 @@
<service android:name="com.safemobile.services.TCPService" />
<activity
android:name=".SDMobileActivity"
android:name="com.safemobile.safedispatch.SDMobileActivity"
android:configChanges="orientation"
android:exported="true"
android:label="@string/app_name_demo"
@ -55,41 +54,41 @@
</intent-filter>
</activity>
<activity
android:name=".SetupActivity"
android:name="com.safemobile.safedispatch.SetupActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
<activity
android:name=".TabLayoutActivity"
android:name="com.safemobile.safedispatch.TabLayoutActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
<activity
android:name=".LiveActivity"
android:name="com.safemobile.safedispatch.LiveActivity"
android:exported="false"
android:configChanges="orientation"
android:screenOrientation="landscape"
android:label="@string/title_activity_google_maps" />
<activity
android:name=".HistoryActivity"
android:name="com.safemobile.safedispatch.HistoryActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
<activity
android:name=".MessagesActivity"
android:name="com.safemobile.safedispatch.MessagesActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
<activity
android:name=".AlarmActivity"
android:name="com.safemobile.safedispatch.AlarmActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
<activity
android:name=".RadioActivity"
android:name="com.safemobile.safedispatch.RadioActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
<activity
android:name=".RecordingsActivity"
android:name="com.safemobile.safedispatch.RecordingsActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
<activity
android:name=".NotificationActivity"
android:name="com.safemobile.safedispatch.NotificationActivity"
android:configChanges="orientation"
android:screenOrientation="landscape" />
</application>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,259 +0,0 @@
package com.safemobile.dispatch;
import java.util.ArrayList;
import java.util.Locale;
/** fix import*/
import com.safemobile.adapters.AlertGridViewAdapter;
import com.safemobile.adapters.AlertGridViewAdapter.ViewHolder;
import com.safemobile.lib.Alarm;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.OperationCodes;
import com.safemobile.lib.SM;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
public class AlarmActivity extends Activity {
private Context context;
public TabLayoutActivity parentTab;
public ArrayList<Alarm> allAlarms = new ArrayList<Alarm>();
private ArrayList<Boolean> acknowledged = new ArrayList<Boolean>();
private AlertGridViewAdapter adapter;
/* Visual resources */
private GridView gridView;
public View convertViewAlarm;
private int ack_position;
public Bundle savedInstanceState;
// Need handler for callbacks to the UI thread
private final Handler myHandler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.savedInstanceState = savedInstanceState;
// get parentTab
parentTab = (TabLayoutActivity)getParent();
Locale locale = new Locale(AppParams.LANGUAGETMP);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
context = this;
setContentView(R.layout.tabalarm);
gridView = (GridView) findViewById(R.id.gridViewAlarms);
adapter = new AlertGridViewAdapter(this, allAlarms, context, acknowledged);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(onItemClickListener);
// change tab header fontface
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.setTypeface(Typeface.createFromAsset(getAssets(), "Sketch_Block.ttf"));
textView1.setTextSize(24);
parentTab.alarmActivity = this;
}
@Override
public void onBackPressed()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.exit))
.setCancelable(false)
.setNeutralButton(getString(R.string.logout), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
parentTab.whenBackPressed(AppParams.ActivityResult.logout);
}
})
.setPositiveButton(getString(R.string.ext), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
parentTab.whenBackPressed(AppParams.ActivityResult.exit);
}
})
.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
@Override
public void onPause()
{
super.onPause();
SM.Debug("onPause");
}
@Override
public void onResume()
{
super.onResume();
if(!AppParams.DEMO)
GetAlarms();
else if (AppParams.DEMO)
{
for(int i=allAlarms.size()-1; i>=0; i--)
{
Alarm alarm = allAlarms.get(i);
if(alarm.ack==1)
allAlarms.remove(i);
}
acknowledged = new ArrayList<Boolean>();
for(int i=0;i<allAlarms.size();i++)
acknowledged.add(false);
updateResultsInUi("alarm");
}
SM.Debug("onResume");
}
private OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
SM.Debug(" ### CLICK Alarm : " + position);
convertViewAlarm = arg1;
// save position
ack_position = position;
//Toast.makeText(context, "SETACK " + idx, 1000).show();
if(!AppParams.DEMO)
setACK(allAlarms.get(position).idx,allAlarms.get(position).type);
else
{
allAlarms.get(position).ack = 1;
updateResultsInUi("else");
}
}
};
// Update Alarms received from AppServer
public void UpdateAlarms(ArrayList<Alarm> list)
{
SM.Debug("## UpdateAlarms: " + list.size());
allAlarms = list;
acknowledged = new ArrayList<Boolean>();
// set acknowledged based on alarm.ack value
for(Alarm alarm: allAlarms)
{
acknowledged.add((alarm.ack == 1)? true: false);
SM.Debug("ALARM", "SC_ID> " + alarm.sc_id + " | "
+ (parentTab.getVehHashByScId().get(alarm.sc_id) == null ? "null" : parentTab.getVehHashByScId().get(alarm.sc_id).name ));
if (parentTab.getVehHashByScId().get(alarm.sc_id)!=null)
alarm.unitName = parentTab.getVehHashByScId().get(alarm.sc_id).name;
/*Enumeration<Long> keylist = parentTab.SuperVehHash.keys();
while(keylist.hasMoreElements())
{
SuperVehicle tmp = (SuperVehicle)((parentTab.SuperVehHash.get((long)keylist.nextElement())));
if (tmp.sc_id==alarm.sc_id)
{
alarm.unitName = tmp.name;
break;
}
}*/
}
myHandler.post(UpdateResultsRUN);
}
// Create runnable for posting
final Runnable UpdateResultsRUN = new Runnable() {
public void run() {
updateResultsInUi("alarm");
}
};
private void updateResultsInUi(String param)
{
if(param.equals("alarm"))
{
// set adapter
adapter = new AlertGridViewAdapter(this, allAlarms, context, acknowledged);
gridView.setAdapter(adapter);
}
else
{
adapter.changeACK(ack_position);
SM.Debug("Set ACK: " + ack_position + " | " + (acknowledged.get(ack_position) ? "true": "false"));
ViewHolder viewAlarm = new ViewHolder();
viewAlarm = (ViewHolder) convertViewAlarm.getTag();
switch(acknowledged.get(ack_position) ? 1 : 0)
{
case 1:
viewAlarm.imageViewAlert.setImageResource(R.drawable.alert_off);
//view.imgViewIcon.setImageDrawable(adapter.convertToGrayscale(activity.getResources().getDrawable(liveVehicle.get(position).getSmallIcon())));
break;
case 0:
//view.imgViewAlarm.setImageResource(R.drawable.siren);
//view.imgViewIcon.setImageResource(liveVehicle.get(position).getSmallIcon());
break;
}
}
}
// update ACK received from AppServer
public void UpdateACK()
{
myHandler.post(UpdateAckRUN);
}
// Create runnable for posting
final Runnable UpdateAckRUN = new Runnable() {
public void run() {
SM.Debug(" UpdateACK: ");
updateResultsInUi("adapter");
}
};
// send to AppServer
private void GetAlarms()
{
parentTab.executeNetworkStuff(new String[]{OperationCodes.GetAlarms +"", AppParams.USERID + ""});
//parentTab.getAlarms(AppParams.USERID);
}
// send ACK to AppServer
private void setACK(int idx, int type)
{
parentTab.executeNetworkStuff(new String[]{OperationCodes.SendAlarmAcknoledge +"", idx + "", type + ""});
//parentTab.sendAlarmAcknowledge(idx, type);
}
}

View File

@ -1,35 +0,0 @@
package com.safemobile.dispatch;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.safemobile.lib.SM;
public class HistoryActivity extends AppCompatActivity {
public Bundle savedInstanceState;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.savedInstanceState = savedInstanceState;
setContentView(R.layout.tabhistory);
}
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

@ -1,871 +0,0 @@
/*
* Author : ErVaLt / techwavedev.com
* Description : TabLayout Andorid App
*/
package com.safemobile.dispatch;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.safemobile.adapters.ConversationGridViewAdapter;
import com.safemobile.adapters.MessagesGridViewAdapter;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.Msg;
import com.safemobile.lib.OperationCodes;
import com.safemobile.lib.SM;
import com.safemobile.lib.SMS;
import com.safemobile.lib.Vehicle;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.Locale;
/**
* fix import
*/
public class MessagesActivity extends Activity {
/** Called when the activity is first created. */
private MessagesGridViewAdapter mAdapter;
private ConversationGridViewAdapter convAdapter;
private ArrayList<Msg> listLastMessages = new ArrayList<Msg>();
private ArrayList<Msg> listSpecificConversation = new ArrayList<Msg>();
private ArrayList<Boolean> dispatcher_positions = new ArrayList<Boolean>();
private GridView gridView;
private Context context;
private Activity activity;
//private IconContextMenu iconContextMenu = null;
private Hashtable<Long, ArrayList<SMS>> tableSMS = new Hashtable<Long, ArrayList<SMS>>();
private Hashtable<String, Long> seqIDSMSHash = new Hashtable<String, Long>();
// Need handler for callbacks to the UI thread
private final Handler myHandler = new Handler();
/* Visual resources */
private LinearLayout layoutSend, layoutHeader, layoutHeaderConversation;
private TextView textViewSelectedContact;
private ImageView imageViewSelectedContact, imageBarcode;
/* Buttons and EditBoxes */
private ImageButton imageButtonAdd, imageButtonBack;
private Button imageButtonSend;
private EditText editTextMsg;
private TabLayoutActivity parentTab;
/* Message args */
private int ACTION, MSGUpdate = 0;
private ArrayList<String> allVehicleNames = new ArrayList<String>();
public ArrayList<Vehicle> allVehicle = new ArrayList<Vehicle>();
private Msg selectedVehicle;
// tip of Messages and flag first load
public boolean LASTMESSAGES = true;
private boolean FIRST = true;
// store selected sc_id and selected unit_type
public long sc_id=0;
public int unit_type=0;
private String seqID; // store sms seqId to set to ACK in adapter
public Bundle savedInstanceState;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.savedInstanceState = savedInstanceState;
// get parentTab
parentTab = (TabLayoutActivity)getParent();
context = this;
activity = this;
Locale locale = new Locale(AppParams.LANGUAGETMP);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.tabtext);
// get LayoutSend and hide
layoutSend = (LinearLayout) findViewById(R.id.layoutSendMsg);
layoutSend.setVisibility(View.GONE);
// get header layout
layoutHeader = (LinearLayout) findViewById(R.id.layoutHeader);
layoutHeaderConversation = (LinearLayout) findViewById(R.id.layoutHeaderConversation);
// show only header layout
layoutHeaderConversation.setVisibility(View.GONE);
// get SelectedContact TextView and ImageView
textViewSelectedContact = (TextView) findViewById(R.id.textViewSelectedContact);
imageViewSelectedContact = (ImageView) findViewById(R.id.imageViewSelectedContact);
imageBarcode = (ImageView) findViewById(R.id.imageBarcode);
imageBarcode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try
{
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
// intent.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent, 0);
}
catch (Exception e)
{
showErrorDialog(getResources().getString(R.string.barcodeError));
//Log.d("Error",e.toString());
}
}
});
// change tab header fontface
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.setTypeface(Typeface.createFromAsset(getAssets(), "Sketch_Block.ttf"));
textView1.setTextSize(24);
// prepared arraylist and passed it to the Adapter class
//mAdapter = new GridviewAdapter(this,listFrom, listMessages, listReceived);
mAdapter = new MessagesGridViewAdapter(this, listLastMessages, context);
convAdapter = new ConversationGridViewAdapter(this, listSpecificConversation, context, sc_id, unit_type, dispatcher_positions, new ArrayList<Boolean>());
// Set custom adapter to gridview
gridView = (GridView) findViewById(R.id.gridView1);
gridView.setAdapter(mAdapter);
// Implement On Item click listener
gridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
//if (layoutHeader.getVisibility() == View.VISIBLE)
if(LASTMESSAGES)
{
// get position
Msg item = mAdapter.getItem(position);
// get Specific Conversation
sc_id = item.from.sc_id;
SM.Debug("Selected sc_id: " + sc_id);
// set Conversation type
LASTMESSAGES = false;
// call get SMS
GetSMS4unit(sc_id);
// create crt_Vehicle
unit_type = (int)item.from.driver_id;
// save selected vehicle
selectedVehicle = item;
}
if(AppParams.DEMO)
{
// modify UI
ACTION = MSGUpdate;
updateResultsInUi();
}
}
});
// button create message
imageButtonAdd = (ImageButton) findViewById(R.id.imageButtonAdd);
imageButtonAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog();
}
});
// button send message
imageButtonSend = (Button) findViewById(R.id.imageButtonSend);
imageButtonSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//SM.Debug("SC ID:" + sc_id);
SendSMS(sc_id, editTextMsg.getText().toString());
Toast.makeText(context, "Sending message...", 500).show();
/*
// show busy indicator
dialogHandler.handleMessage(new Message());
ACTION = SHOWLoading;
myHandler.post(UpdateResults);
*/
// disable send button and editBox
editTextMsg.setEnabled(false);
imageButtonSend.setEnabled(false);
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(500);
myHandler.post(enableButtonRUN);
//LASTMESSAGES = false;
if(AppParams.DEMO)
{
Thread.sleep(5500);
myHandler.post(demoReceveidSMSRUN);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
});
// button back to conversations
imageButtonBack = (ImageButton) findViewById(R.id.imageButtonBack);
imageButtonBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// set LastMessage conversation type
LASTMESSAGES = true;
// refresh Grid
GetLastSMS();
if(AppParams.DEMO)
updateResultsInUi();
}
});
// get Message editText
editTextMsg = (EditText) findViewById(R.id.editTextMsg);
gridView.setId(1); // id needed for IconContextMenu
registerForContextMenu(gridView);
parentTab.messageActivity = this;
}
// Create runnable for posting
final Runnable demoReceveidSMSRUN = new Runnable() {
public void run() {
parentTab.setImei(sc_id + "");
parentTab.updateResultsInUi("realpha");
int timeGMT = (int) (System.currentTimeMillis() / 1000L);
String SendSMSSeqID = "1."+timeGMT;
// add mess to not ack list
seqIDSMSHash.put(SendSMSSeqID, sc_id);
// get sc_id conversation and add message
ArrayList<SMS> crtSMSlist = tableSMS.get(sc_id);
SMS sms = new SMS(0, 0, timeGMT, "i got your sms", 0, sc_id);
sms.seq_idx = SendSMSSeqID;
crtSMSlist.add(sms);
// add message to listLast
boolean exists = false;
for (Msg msg : listLastMessages)
// if conversation exists in lastMessages
if(msg.from.sc_id == sc_id)
{
exists = true;
msg.message = "i got your sms";
msg.received = Calendar.getInstance().getTime();
}
// if last messages doesn't contain this conversation
if(!exists)
{
Vehicle sentVehicle = null;
for(Vehicle veh : allVehicle)
if(veh.sc_id == sc_id)
sentVehicle = veh;
listLastMessages.add(new Msg(sentVehicle, "i got your sms", Calendar.getInstance().getTime(), SendSMSSeqID));
}
SM.Debug("time: " + timeGMT + " | " + Calendar.getInstance().getTime().toString() );
updateResultsInUi();
}
};
@Override
public void onBackPressed()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.exit))
.setCancelable(false)
.setNeutralButton(getString(R.string.logout), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
parentTab.whenBackPressed(AppParams.ActivityResult.logout);
}
})
.setPositiveButton(getString(R.string.ext), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
parentTab.whenBackPressed(AppParams.ActivityResult.exit);
}
})
.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
@Override
public void onPause()
{
super.onPause();
SM.Debug("onPause");
}
@Override
public void onResume()
{
super.onResume();
if(parentTab.getTCPState() != null){
if(FIRST)
{
UpdateVehs(parentTab.getAllVehicle());
FIRST = false;
if(LASTMESSAGES)
parentTab.executeNetworkStuff(new String[] {OperationCodes.GetLastSMS + "", AppParams.USERID + ""});
}
//GetLastSMS();
}
SM.Debug("onResume");
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
editTextMsg.setText(editTextMsg.getText().toString() + contents);
// Handle successful scan
Toast.makeText(this, getResources().getString(R.string.barcodeContent) + ":"+contents+" with format:"+format, 6000).show();
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
//Toast.makeText(this, "TRY AGAIN", 6000).show();
}
}
}
// Request SMS 4 Unit from AppServer
private void GetSMS4UnitWithTime(long sc_id, long time) {
if(!AppParams.DEMO) {
parentTab.executeNetworkStuff(new String[] {OperationCodes.GetRecentSMSs + "", sc_id + "", time + ""});
SM.Debug(" #### GetSMS4uni:" + sc_id);
}
}
private void GetSMS4unit(long sc_id)
{
if(!AppParams.DEMO)
{
SM.Debug("GetSMS4unit : " + sc_id);
ArrayList<SMS> listSMS = tableSMS.get(sc_id);
long timeGMT = 0;
if(!listSMS.isEmpty())
timeGMT = listSMS.get(listSMS.size()-1).timeGMT;
// error in DB
if(String.valueOf(timeGMT).contains("."))
{
try {
// remove the dot and the parse it to String
timeGMT = Long.parseLong(String.valueOf(timeGMT).split(".")[1]);
}
catch (Exception e) {
timeGMT = Long.parseLong(String.valueOf(timeGMT).replace(".",""));
}
}
parentTab.executeNetworkStuff(new String[] {OperationCodes.GetRecentSMSs + "", sc_id + "", timeGMT + ""});
//parent.getRecentSMSs(sc_id, timeGMT);
SM.Debug(" #### GetSMS4uni:" + sc_id);
}
}
// Request Last SMS from AppServer
public void GetLastSMS()
{
if(!AppParams.DEMO)
{
if(LASTMESSAGES)
parentTab.executeNetworkStuff(new String[] {OperationCodes.GetLastSMS + "", AppParams.USERID + ""});
//parent.getLastSMSs(AppParams.USERID);
else
{
ArrayList<SMS> listSMS = tableSMS.get(sc_id);
long timeGMT = 0;
if(listSMS!= null && !listSMS.isEmpty())
timeGMT = listSMS.get(listSMS.size()-1).timeGMT;
//parent.getRecentSMSs(sc_id, timeGMT);
parentTab.executeNetworkStuff(new String[] {OperationCodes.GetRecentSMSs + "", sc_id + "", timeGMT + ""});
}
}
else
updateResultsInUi();
}
private void SendSMS(long sc_id, String txt)
{
if(!AppParams.DEMO)
{
int timeGMT = (int) (System.currentTimeMillis() / 1000L);
String SendSMSSeqID = "1."+timeGMT;
// add mess to not ack list
seqIDSMSHash.put(SendSMSSeqID, sc_id);
// get sc_id conversation and add message
SMS sms = new SMS(0, 0, timeGMT, txt, sc_id, 0);
sms.seq_idx = SendSMSSeqID;
tableSMS.get(sc_id).add(sms);
//parent.sendSMS(SendSMSSeqID,sc_id, txt);
parentTab.executeNetworkStuff(new String[] {OperationCodes.SEND_TM + "", SendSMSSeqID, sc_id + "", txt});
updateResultsInUi();
}
else
{
int timeGMT = (int) (System.currentTimeMillis() / 1000L);
String SendSMSSeqID = "1."+timeGMT;
// add mess to not ack list
seqIDSMSHash.put(SendSMSSeqID, sc_id);
// get sc_id conversation and add message
ArrayList<SMS> crtSMSlist = tableSMS.get(sc_id);
SMS sms = new SMS(0, 0, timeGMT, txt, sc_id, 0);
sms.seq_idx = SendSMSSeqID;
crtSMSlist.add(sms);
// add message to listLast
boolean exists = false;
for (Msg msg : listLastMessages)
// if conversation exists in lastMessages
if(msg.from.sc_id == sc_id)
{
exists = true;
msg.message = txt;
msg.received = Calendar.getInstance().getTime();
}
// if last messages doesn't contain this conversation
if(!exists)
{
Vehicle sentVehicle = null;
for(Vehicle veh : allVehicle)
if(veh.sc_id == sc_id)
sentVehicle = veh;
listLastMessages.add(new Msg(sentVehicle, txt, Calendar.getInstance().getTime(), SendSMSSeqID));
}
SM.Debug("time: " + timeGMT + " | " + Calendar.getInstance().getTime().toString() );
LASTMESSAGES = false;
updateResultsInUi();
}
}
// Update Vehicles received from AppServer
public void UpdateVehs(ArrayList<Vehicle> list)
{
SM.Debug("## UpdateVehs: " + list.size());
allVehicle = list;
allVehicleNames = new ArrayList<String>();
for(Vehicle v: allVehicle)
allVehicleNames.add(v.name);
if(tableSMS.size() == 0)
{
for(Vehicle veh: allVehicle)
{
ArrayList<SMS> lista = new ArrayList<SMS>();
// populate conversation list if demo
if(AppParams.DEMO)
lista = getDemoConversation(veh.sc_id);
tableSMS.put(veh.sc_id, lista);
}
}
}
// gets DEMO conversations
private ArrayList<SMS> getDemoConversation(long sc_id)
{
ArrayList<SMS> lista = new ArrayList<SMS>();
if(sc_id == 101)
lista.add(new SMS(1, 2, 1324016412, "Only one left", 101, 0));
else if (sc_id == 102)
lista.add(new SMS(1, 2, 1328060100, "i'm at the train station", 0, 102));
else if (sc_id == 103) {
lista.add(new SMS(1, 2, 1121016637, "Where are you now?", 103, 0));
lista.add(new SMS(2, 2, 1121016693, "Near Elementary School 81", 0, 103));
lista.add(new SMS(3, 2, 1121016693, "We have a client on Belmont Ave", 103, 0));
lista.add(new SMS(4, 2, 1121016724, "It's only 4 blocks away", 103, 0));
lista.add(new SMS(5, 2, 1121016693, "Can you take him?", 103, 0));
lista.add(new SMS(6, 2, 1121016818, "I'll be right there", 0, 103));
}
else if (sc_id == 105)
lista.add(new SMS(1, 2, 1328061660, "Thanks", 0, 105));
return lista;
}
public void UpdateSMS(ArrayList<SMS> list)
{
SM.Debug("## UpdateSMS: " + list.size() + " [LASTMESSAGES:" + LASTMESSAGES + "]");
// populate listLastMessages
if(LASTMESSAGES)
{
listLastMessages = new ArrayList<Msg>();
for(SMS sms: list)
{
// get for sender
long id_sender = sms.sc_id_dest;
if (id_sender == 0)
id_sender = sms.sc_id_sour;
//SM.Debug(sms.toString());
// get vehicle with sender id
Vehicle messageVeh= null;
messageVeh = getVehicleById(id_sender);
listLastMessages.add(0,new Msg(messageVeh, sms.mess, new Date((long)sms.timeGMT * 1000), sms.seq_idx));
}
// update GridView
//SM.Debug(" ########### " + parentTab.allVehicle.size() + " ||| " + listLastMessages.size());
mAdapter = new MessagesGridViewAdapter(activity, listLastMessages, context);
//SM.Debug("list count : " + listLastMessages.size());
//gridView.setAdapter(mAdapter);
//mAdapter.notifyDataSetChanged();
}
else
{
// add new values to hashTable for key = sc_id
ArrayList<SMS> listScId = tableSMS.get(sc_id);
if(list.size() != 0)
for(SMS sms:list)
{
// compare last item in hashList with first elem in arrived list
// protect is listSc_Id size = 0
if ((listScId.size()>0)&&(sms.sc_id_dest == listScId.get(listScId.size()-1).sc_id_dest && sms.sc_id_sour == listScId.get(listScId.size()-1).sc_id_sour && sms.mess == listScId.get(listScId.size()-1).mess))
// drop element
;
else
listScId.add(sms);
}
}
// modify UI
ACTION = MSGUpdate;
myHandler.post(new Runnable() {
@Override
public void run() {
updateResultsInUi();
}
});
}
// Confirmation for sending message
public void ConfirmSMS(String data, final String seqID)
{
SM.Debug("ConfirmSMS");
if(data.equals("0"))
{
SM.Debug("Error on sending SMS");
showErrorDialog("Error on sending message.");
}
else
{
SM.Debug("ACK received for text message");
//get sc_id for crt message
long sc_id = seqIDSMSHash.get(seqID);
// get SMS list for crt sc_id
ArrayList<SMS> crtSMSList = tableSMS.get(sc_id);
for(SMS sms: crtSMSList)
{
if(sms.seq_idx.equals(seqID))
{
SM.Debug("######### AM SCHIMBAT STATUSUL pt: " + sms.mess + " | " + sc_id + " | " + seqID + " || " + sms.seq_idx);
// set ACK
sms.status = 2;
}
}
// remove message from seqIDSMS Hash = don't wait confirmation for it
seqIDSMSHash.remove(seqID);
// refresh MSG List
//GetSMS4unit(sc_id);
/*
// TODO -> this is a small bug fix, should talk with Bigu to change it
// remove message from list because it will be brought back by GetSMS4Unit, and it will have different time
ArrayList<SMS> listWithTextMessage = tableSMS.get(sc_id);
if(listWithTextMessage.size() > 0)
listWithTextMessage.remove(listWithTextMessage.size() - 1); // remove last message
*/
// store sms seqId to set to ACK in adapter
this.seqID = seqID;
myHandler.post(new Runnable() {
@Override
public void run() {
convAdapter.setACK(seqID);
convAdapter.changeView(seqID);
convAdapter.notifyDataSetChanged();
}
});
myHandler.post(new Runnable() {
@Override
public void run() {
// clear text
editTextMsg.setText("");
}
});
}
}
public void NewSMS(String imei, String message, final long time)
{
SM.Debug(" ## NewSMS: " + imei + " | " + message);
if(!LASTMESSAGES)
{
// if received message from current conversation
if(getVehicleByImei(imei).sc_id == sc_id)
GetSMS4UnitWithTime(sc_id, time); // refresh MSG List
//else
// parentTab.myHandler.post(parentTab.showPopUpRUN); // show PopUp
}
else
GetLastSMS(); // get last SMS
}
// Create runnable for posting
final Runnable enableButtonRUN = new Runnable() {
public void run() {
updateEnableButtonsUI();
}
};
// enable buttons in UI after 200ms from send
private void updateEnableButtonsUI()
{
// enable buttons
imageButtonSend.setEnabled(true);
editTextMsg.setEnabled(true);
editTextMsg.setText("");
}
private void updateResultsInUi()
{
if(allVehicle == null)
UpdateVehs(parentTab.getAllVehicle());
//SM.Debug("updateResultsInUi: " + ACTION);
if(ACTION == MSGUpdate)
{
if(LASTMESSAGES)
{
// show Header Layout
layoutHeader.setVisibility(View.VISIBLE);
// hide Conversation Header Layout
layoutHeaderConversation.setVisibility(View.GONE);
// hide Send Layout
layoutSend.setVisibility(View.GONE);
// change GridView adapter
gridView.setAdapter(mAdapter);
gridView.invalidate();
}
else
{
SM.Debug(" #### Modify adapter for SMS4unit");
// populate specific conversation
listSpecificConversation = new ArrayList<Msg>();
dispatcher_positions = new ArrayList<Boolean>();
ArrayList<Boolean> ackPosition = new ArrayList<Boolean>();
ArrayList<SMS> list;
list = tableSMS.get(sc_id);
for(SMS sms: list)
{
// get for sender
long id_sender = sms.sc_id_dest;
if (id_sender == 0)
id_sender = sms.sc_id_sour;
// get vehicle with sender id
Vehicle messageVeh= null;
messageVeh = getVehicleById(id_sender);
// flag dispatcher message when source is 0
dispatcher_positions.add(sms.sc_id_sour==0 ? true : false);
if(sms.status == 2)
ackPosition.add(true);
else
ackPosition.add(false);
listSpecificConversation.add(new Msg(messageVeh, sms.mess, new Date((long)sms.timeGMT * 1000), sms.seq_idx));
}
convAdapter = new ConversationGridViewAdapter(activity, listSpecificConversation, context, sc_id, unit_type, dispatcher_positions, ackPosition);
gridView.setAdapter(convAdapter);
if(listSpecificConversation.size() > 0)
gridView.setSelection(listSpecificConversation.size()-1);
// set unit name and image in Header Conversation
textViewSelectedContact.setText(getVehicleBySc_Id(sc_id).name);
imageViewSelectedContact.setImageResource(getVehicleBySc_Id(sc_id).getLargeIcon());
// clear editText
editTextMsg.setText("");
// change layouts visibility
layoutSend.setVisibility(View.VISIBLE);
layoutHeader.setVisibility(View.GONE);
layoutHeaderConversation.setVisibility(View.VISIBLE);
}
gridView.invalidate();
// hide dialog
try
{
//dialogLoading.cancel();
}
catch(Exception ex)
{
;
}
}
}
// show new message after layoutNewMessage Click
public void showSMS4unit(int sc_id)
{
// show dialog
//dialogLoading = ProgressDialog.show(activity, "", "Loading messages. Please wait...", true);
ACTION = MSGUpdate;
LASTMESSAGES = false;
GetSMS4unit(sc_id);
}
// gets Vehicle from id
public Vehicle getVehicleById(long id_vehicle)
{
for(Vehicle vehicle: allVehicle)
if(vehicle.sc_id == id_vehicle)
return vehicle;
return null;
}
// get Vehicle from imei
public Vehicle getVehicleByImei(String imei)
{
for(Vehicle vehicle: allVehicle)
if(vehicle.imei.equalsIgnoreCase(imei))
return vehicle;
return null;
}
public Vehicle getVehicleBySc_Id(long sc_id)
{
for(Vehicle vehicle: allVehicle)
if(vehicle.sc_id == sc_id)
return vehicle;
return null;
}
// show a dialog
public void showDialog()
{
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.template_simple_list_item, allVehicleNames);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(getString(R.string.selectVehicle));
builder.setAdapter(adapter , new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// get position
Vehicle item = allVehicle.get(which);
// get Specific Conversation
sc_id = item.sc_id;
SM.Debug("Selected sc_id: " + sc_id);
// set Conversation type
LASTMESSAGES = false;
// call get SMS
GetSMS4unit(sc_id);
// create crt_Vehicle
unit_type = (int) item.driver_id;
SM.Debug("AM SELECTAT: " + sc_id + " | " + item.name + " | " + unit_type + "\n\t " + item.toString());
selectedVehicle = new Msg(item, "", Calendar.getInstance().getTime(), "");
if(AppParams.DEMO)
updateResultsInUi();
}
});
AlertDialog alert = builder.create();
alert.show();
}
public void showErrorDialog(String errorMsg)
{
Dialog dialog = new Dialog(context);
dialog.setTitle(getString(R.string.sendingError));
dialog.setContentView(R.layout.dialog);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
TextView text = (TextView) dialog.findViewById(R.id.text);
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.error);
text.setText(errorMsg);
dialog.show();
}
}

View File

@ -0,0 +1,50 @@
package com.safemobile.lib;
import android.app.Activity;
import android.app.AlertDialog;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.TaskCompletionSource;
import com.safemobile.safedispatch.R;
import com.safemobile.interfaces.IDialogService;
public class DialogService implements IDialogService {
@Override
public Task<Boolean> showDialog(Activity activity, String title, String message, String cancel, String ok) {
TaskCompletionSource<Boolean> taskCompletionSource = new TaskCompletionSource<>();
AlertDialog.Builder builder = new AlertDialog.Builder(activity)
.setTitle(title)
.setMessage(message)
.setCancelable(false)
.setNegativeButton(cancel, (dialog, which) -> {
taskCompletionSource.trySetResult(false);
dialog.dismiss();
})
.setPositiveButton(ok, (dialog, which) -> taskCompletionSource.trySetResult(true));
AlertDialog dialog = builder.create();
dialog.show();
return taskCompletionSource.getTask();
}
@Override
public Task<Boolean> showPermissionRequestDialog(Activity activity, String message, String cancel) {
return showDialog(
activity,
activity.getString(R.string.permission_denied),
message,
cancel,
activity.getString(R.string.go_to_settings));
}
@Override
public void showError(Activity activity, String message) {
showDialog(
activity,
activity.getString(R.string.DialogService_Info_ErrorMessage),
message,
null,
activity.getString(R.string.ok));
}
}

View File

@ -0,0 +1,97 @@
package com.safemobile.lib;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.safemobile.enums.AuthorizationCode;
import com.safemobile.enums.AuthorizationStatus;
import com.safemobile.interfaces.IPermissionModule;
import java.security.InvalidParameterException;
public class PermissionModule implements IPermissionModule {
private static final String[] AUDIO_PERMISSIONS = {Manifest.permission.RECORD_AUDIO};
private static final String[] LOCATION_PERMISSIONS = {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
};
private static final String[] CAMERA_PERMISSIONS = {Manifest.permission.CAMERA};
private static final String[] READ_EXTERNAL_STORAGE_PERMISSIONS = {Manifest.permission.READ_EXTERNAL_STORAGE};
private static final String[] WRITE_EXTERNAL_STORAGE_PERMISSIONS = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
public static final int RECORD_AUDIO_PERMISSION_REQUEST_CODE = 13042022;
public static final int LOCATION_PERMISSION_REQUEST_CODE = 12021990;
public static final int CAMERA_PERMISSION_REQUEST_CODE = 16031989;
public static final int READ_STORAGE_PERMISSION_REQUEST_CODE = 30062018;
public static final int WRITE_STORAGE_PERMISSION_REQUEST_CODE = 13122012;
private boolean permissionPrompShowed;
@Override
public AuthorizationStatus getAuthorizationStatus(Activity activity, AuthorizationCode authorizationCode) {
switch (authorizationCode) {
case RECORD_AUDIO:
return getPermissionAuthorizationStatus(activity, Manifest.permission.RECORD_AUDIO);
case CAMERA:
return getPermissionAuthorizationStatus(activity, Manifest.permission.CAMERA);
case GEOLOCATION:
return getPermissionAuthorizationStatus(activity, Manifest.permission.ACCESS_COARSE_LOCATION);
case READ_EXTERNAL_STORAGE:
return getPermissionAuthorizationStatus(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
case WRITE_EXTERNAL_STORAGE:
return getPermissionAuthorizationStatus(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
case UNKNOWN:
throw new InvalidParameterException(authorizationCode.name());
default:
throw new IllegalArgumentException(authorizationCode.name());
}
}
@Override
public void requestAuthorization(Activity activity, AuthorizationCode authorizationCode) {
switch (authorizationCode) {
case RECORD_AUDIO:
ActivityCompat.requestPermissions(activity, AUDIO_PERMISSIONS, RECORD_AUDIO_PERMISSION_REQUEST_CODE);
break;
case CAMERA:
ActivityCompat.requestPermissions(activity, CAMERA_PERMISSIONS, CAMERA_PERMISSION_REQUEST_CODE);
break;
case GEOLOCATION:
ActivityCompat.requestPermissions(activity, LOCATION_PERMISSIONS, LOCATION_PERMISSION_REQUEST_CODE);
break;
case READ_EXTERNAL_STORAGE:
ActivityCompat.requestPermissions(activity, READ_EXTERNAL_STORAGE_PERMISSIONS, READ_STORAGE_PERMISSION_REQUEST_CODE);
break;
case WRITE_EXTERNAL_STORAGE:
ActivityCompat.requestPermissions(activity, WRITE_EXTERNAL_STORAGE_PERMISSIONS, WRITE_STORAGE_PERMISSION_REQUEST_CODE);
break;
case UNKNOWN:
throw new InvalidParameterException(authorizationCode.name());
default:
throw new IllegalArgumentException(authorizationCode.name());
}
permissionPrompShowed = true;
}
private AuthorizationStatus getPermissionAuthorizationStatus(Activity activity, String permission) {
int permissionState = ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission);
return authorizationStatus(activity, permissionState);
}
private AuthorizationStatus authorizationStatus(Activity activity, int permissionState) {
if (permissionState == PackageManager.PERMISSION_GRANTED)
return AuthorizationStatus.AUTHORIZE;
if (!permissionPrompShowed)
return AuthorizationStatus.NOT_DETERMINED;
boolean shouldShowPermissionPrompt = ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.ACCESS_COARSE_LOCATION);
return shouldShowPermissionPrompt ? AuthorizationStatus.NOT_DETERMINED : AuthorizationStatus.DENIED;
}
}

View File

@ -0,0 +1,239 @@
package com.safemobile.safedispatch;
import java.util.ArrayList;
import java.util.Locale;
import com.safemobile.adapters.AlertGridViewAdapter;
import com.safemobile.adapters.AlertGridViewAdapter.ViewHolder;
import com.safemobile.lib.Alarm;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.OperationCodes;
import com.safemobile.lib.SM;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
public class AlarmActivity extends Activity {
private Context context;
private TabLayoutActivity parentTab;
private ArrayList<Alarm> allAlarms = new ArrayList<>();
private ArrayList<Boolean> acknowledged = new ArrayList<>();
private AlertGridViewAdapter adapter;
/* Visual resources */
private GridView gridView;
private View convertViewAlarm;
private int ackPosition;
private Bundle savedInstanceState;
// Need handler for callbacks to the UI thread
private final Handler myHandler = new Handler(Looper.getMainLooper());
private static final String ALARM = "alarm";
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setSavedInstanceState(savedInstanceState);
// get parentTab
setParentTab((TabLayoutActivity) getParent());
Locale locale = new Locale(AppParams.LANGUAGETMP);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
context = this;
setContentView(R.layout.tabalarm);
gridView = findViewById(R.id.gridViewAlarms);
adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(onItemClickListener);
// change tab header fontFace
TextView textView1 = findViewById(R.id.textView1);
textView1.setTypeface(Typeface.createFromAsset(getAssets(), "Sketch_Block.ttf"));
textView1.setTextSize(24);
getParentTab().setAlarmActivity(this);
}
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.exit))
.setCancelable(false)
.setNeutralButton(getString(R.string.logout), (dialog, id) -> getParentTab().whenBackPressed(AppParams.ActivityResult.logout))
.setPositiveButton(getString(R.string.ext), (dialog, id) -> getParentTab().whenBackPressed(AppParams.ActivityResult.exit))
.setNegativeButton(getString(R.string.cancel), (dialog, id) -> dialog.cancel());
AlertDialog alert = builder.create();
alert.show();
}
@Override
public void onPause() {
super.onPause();
SM.Debug("onPause");
}
@Override
public void onResume() {
super.onResume();
if (!AppParams.DEMO)
getAlarms();
else {
for (int i = getAllAlarms().size() - 1; i >= 0; i--) {
Alarm alarm = getAllAlarms().get(i);
if (alarm.ack == 1)
getAllAlarms().remove(i);
}
acknowledged = new ArrayList<>();
for (int i = 0; i < getAllAlarms().size(); i++)
acknowledged.add(false);
updateResultsInUi(ALARM);
}
SM.Debug("onResume");
}
private final OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
SM.Debug(" ### CLICK Alarm : " + position);
setConvertViewAlarm(arg1);
// save position
ackPosition = position;
if (!AppParams.DEMO)
setACK(getAllAlarms().get(position).idx, getAllAlarms().get(position).type, getAllAlarms().get(position).unitName);
else {
getAllAlarms().get(position).ack = 1;
updateResultsInUi("else");
}
}
// send ACK to AppServer
private void setACK(int idx, int type, String unitName) {
getParentTab().executeNetworkStuff(new String[]{OperationCodes.SendAlarmAcknoledge + "", idx + "", type + "", unitName});
}
};
// Update Alarms received from AppServer
public void updateAlarms(ArrayList<Alarm> list) {
SM.Debug("## updateAlarms: " + list.size());
setAllAlarms(list);
acknowledged = new ArrayList<>();
// set acknowledged based on alarm.ack value
for (Alarm alarm : getAllAlarms()) {
acknowledged.add(alarm.ack == 1);
SM.Debug("ALARM", "SC_ID> " + alarm.sc_id + " | "
+ (getParentTab().getVehHashByScId().get(alarm.sc_id) == null ? "null" : getParentTab().getVehHashByScId().get(alarm.sc_id).name));
if (getParentTab().getVehHashByScId().get(alarm.sc_id) != null)
alarm.unitName = getParentTab().getVehHashByScId().get(alarm.sc_id).name;
}
myHandler.post(updateResultsRUN);
}
// Create runnable for posting
final Runnable updateResultsRUN = () -> updateResultsInUi(ALARM);
private void updateResultsInUi(String param) {
if (param.equals(ALARM)) {
// set adapter
adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged);
gridView.setAdapter(adapter);
} else {
adapter.changeACK(ackPosition);
SM.Debug("Set ACK: " + ackPosition + " | " + (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? "true" : "false"));
ViewHolder viewAlarm;
viewAlarm = (ViewHolder) getConvertViewAlarm().getTag();
switch (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? 1 : 0) {
case 1:
viewAlarm.imageViewAlert.setImageResource(R.drawable.alert_off);
break;
case 0:
viewAlarm.imageViewAlert.setImageResource(R.drawable.siren);
break;
default:
throw new IllegalStateException("Unexpected value: " + (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? 1 : 0));
}
}
}
// update ACK received from AppServer
public void updateACK() {
myHandler.post(updateAckRUN);
}
// Create runnable for posting
final Runnable updateAckRUN = () -> {
SM.Debug(" updateACK: ");
updateResultsInUi("adapter");
};
// send to AppServer
private void getAlarms() {
getParentTab().executeNetworkStuff(new String[]{OperationCodes.GetAlarms + "", AppParams.USERID + ""});
}
public TabLayoutActivity getParentTab() {
return parentTab;
}
public void setParentTab(TabLayoutActivity parentTab) {
this.parentTab = parentTab;
}
public ArrayList<Alarm> getAllAlarms() {
return allAlarms;
}
public void setAllAlarms(ArrayList<Alarm> allAlarms) {
this.allAlarms = allAlarms;
}
public View getConvertViewAlarm() {
return convertViewAlarm;
}
public void setConvertViewAlarm(View convertViewAlarm) {
this.convertViewAlarm = convertViewAlarm;
}
public Bundle getSavedInstanceState() {
return savedInstanceState;
}
public void setSavedInstanceState(Bundle savedInstanceState) {
this.savedInstanceState = savedInstanceState;
}
}

View File

@ -0,0 +1,128 @@
package com.safemobile.safedispatch;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.Marker;
import com.safemobile.lib.HistPos;
import com.safemobile.lib.SuperVehicle;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import java.util.Locale;
public class GoogleMapsInfoBubble implements GoogleMap.InfoWindowAdapter {
private final String TAG = GoogleMapsInfoBubble.class.getName();
private final View mWindow;
private Hashtable<Long, SuperVehicle> superVehHash;
private final Context context;
private ArrayList<HistPos> histPosList;
private boolean isLiveTab = true;
public GoogleMapsInfoBubble(LayoutInflater layoutInflater, Context context, Hashtable<Long, SuperVehicle> vehicles) {
this.context = context;
this.superVehHash = vehicles;
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
public View getInfoWindow(@NonNull Marker marker) {
render(marker, mWindow);
return mWindow;
}
@Override
public View getInfoContents(@NonNull Marker marker) {
render(marker, mWindow);
return mWindow;
}
private void render(Marker marker, View view) {
long key = 0;
int position = 0;
if (isLiveTab) {
try {
key = Long.parseLong(marker.getTitle());
} 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");
}
}
RelativeLayout rlMapInfoBubbleInfo = view.findViewById(R.id.rlMapInfoBubbleInfo);
TextView tvUnitName = view.findViewById(R.id.tvUnitName);
TextView tvGPSLocation = view.findViewById(R.id.tvGPSLocation);
TextView tvTimeAgo = view.findViewById(R.id.tvTimeAgo);
TextView tvSpeed = view.findViewById(R.id.tvSpeed);
TextView tvStreetView = view.findViewById(R.id.tvStreetView);
ImageView streetView = view.findViewById(R.id.streetView);
rlMapInfoBubbleInfo.setVisibility(View.VISIBLE);
boolean isMilitaryTime = false;
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
? "HH:mm:ss dd.MMM.yyyy"
: "hh:mm:ss a dd.MMM.yyy";
DateFormat format = new SimpleDateFormat(timeFormat, Locale.ENGLISH);
tvTimeAgo.setText(format.format(positionTime));
tvStreetView.setText(address);
streetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE);
tvStreetView.setVisibility(address.length() > 0 ? View.VISIBLE : View.GONE);
if (!isLiveTab)
tvUnitName.setVisibility(View.GONE);
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
* limitations under the License.
*/
package com.safemobile.dispatch;
package com.safemobile.safedispatch;
import java.util.ArrayList;
@ -42,10 +42,9 @@ public class IconContextMenu implements DialogInterface.OnCancelListener,
private static final int LIST_PREFERED_HEIGHT = 65;
private IconMenuAdapter menuAdapter = null;
private Activity parentActivity = null;
private int dialogId = 0;
private IconMenuAdapter menuAdapter;
private Activity parentActivity;
private IconContextMenuOnClickListener clickHandler = null;
/**
@ -55,8 +54,7 @@ public class IconContextMenu implements DialogInterface.OnCancelListener,
*/
public IconContextMenu(Activity parent, int id) {
this.parentActivity = parent;
this.dialogId = id;
menuAdapter = new IconMenuAdapter(parentActivity);
}
@ -89,19 +87,13 @@ public class IconContextMenu implements DialogInterface.OnCancelListener,
public Dialog createMenu(String menuItitle) {
final AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity);
builder.setTitle(menuItitle);
builder.setAdapter(menuAdapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialoginterface, int i) {
IconContextMenuItem item = (IconContextMenuItem) menuAdapter.getItem(i);
if (clickHandler != null) {
clickHandler.onClick(item.actionTag);
}
}
builder.setAdapter(menuAdapter, (dialoginterface, i) -> {
IconContextMenuItem item = (IconContextMenuItem) menuAdapter.getItem(i);
if (clickHandler != null)
clickHandler.onClick(item.actionTag);
});
builder.setInverseBackgroundForced(true);
AlertDialog dialog = builder.create();
dialog.setOnCancelListener(this);
dialog.setOnDismissListener(this);
@ -117,7 +109,7 @@ public class IconContextMenu implements DialogInterface.OnCancelListener,
}
private void cleanup() {
parentActivity.dismissDialog(dialogId);
// parentActivity.dismissDialog(dialogId);
}
/**
@ -131,7 +123,7 @@ public class IconContextMenu implements DialogInterface.OnCancelListener,
* Menu-like list adapter with icon
*/
protected class IconMenuAdapter extends BaseAdapter {
private Context context = null;
private Context context;
private ArrayList<IconContextMenuItem> mItems = new ArrayList<IconContextMenuItem>();
@ -193,6 +185,7 @@ public class IconContextMenu implements DialogInterface.OnCancelListener,
textView.setTag(item);
textView.setText(item.text);
textView.setCompoundDrawablesWithIntrinsicBounds(item.image, null, null, null);
textView.setTextColor(R.color.black);
return textView;
}

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch;
package com.safemobile.safedispatch;
import android.app.Activity;
import android.app.AlertDialog;
@ -9,13 +9,19 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageButton;
@ -26,11 +32,13 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
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.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.safemobile.activities.AbstractLiveActivity;
import com.safemobile.activities.AbstractSDParentActivity;
@ -94,6 +102,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
//value poll
private double latPoll = 0;
private double lngPoll = 0;
private ArrayList<Marker> markers = new ArrayList<>();
@Override
@ -103,7 +112,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
// get parentTab
setParentTab((AbstractSDParentActivity) getParent());
try {
((TabLayoutActivity) getParentTab()).liveActivity = this;
((TabLayoutActivity) getParentTab()).setLiveActivity(this);
} catch (Exception ignored) {
// ignored
}
@ -130,12 +139,11 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
mapFragment.getMapAsync(this);
}
// create on vehicle long click menu
createIconContextMenu();
// image View for changing map type satellite or map
ImageView changeMapTypeImageView = (ImageView) findViewById(R.id.changeMapType);
ImageView changeMapTypeImageView = findViewById(R.id.changeMapType);
changeMapTypeImageView.setOnClickListener(v -> {
if (googleMap.getMapType() == GoogleMap.MAP_TYPE_SATELLITE) {
changeMapTypeImageView.setImageResource(R.drawable.satellite);
@ -146,7 +154,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
}
});
ImageView changeTrafficImageView = (ImageView) findViewById(R.id.changeTraffic);
ImageView changeTrafficImageView = findViewById(R.id.changeTraffic);
changeTrafficImageView.setOnClickListener(v -> {
if (googleMap.isTrafficEnabled()) {
changeTrafficImageView.setImageResource(R.drawable.traffic_off);
@ -158,12 +166,12 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
});
// change tab header font
TextView textView1 = (TextView) findViewById(R.id.textView1);
TextView textView1 = findViewById(R.id.textView1);
textView1.setTypeface(Typeface.createFromAsset(getAssets(), "Sketch_Block.ttf"));
textView1.setTextSize(24);
// get grid view and set empty data adapter
gridVehicle = (GridView) findViewById(R.id.gridVehicle);
gridVehicle = findViewById(R.id.gridVehicle);
if (AppParams.DEMO) {
disabledVehicles = new ArrayList<>();
@ -185,14 +193,16 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
threadUI.start();
});
// get vehicle menu creation
gridVehicle.setOnItemLongClickListener(itemLongClickHandler);
gridVehicle.setOnItemLongClickListener((adapterView, view, i, l) -> {
contextMenuPosition = position;
iconContextMenu.createMenu(getString(R.string.options)).show();
return true;
});
LinearLayout slideLayout = (LinearLayout) findViewById(R.id.slidelayout);
ImageView slideLayoutImageView = (ImageView) findViewById(R.id.slideLayoutImage);
LinearLayout linearLayoutVehicles = (LinearLayout) findViewById(R.id.layoutBig);
LinearLayout slideLayout = findViewById(R.id.slidelayout);
ImageView slideLayoutImageView = findViewById(R.id.slideLayoutImage);
LinearLayout linearLayoutVehicles = findViewById(R.id.layoutBig);
slideLayout.setOnClickListener(v -> {
if (showVehicle) {
linearLayoutVehicles.setVisibility(View.GONE);
@ -205,7 +215,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
}
});
imageViewCheckAll = (ImageButton) findViewById(R.id.imageCheckAll);
imageViewCheckAll = findViewById(R.id.imageCheckAll);
imageViewCheckAll.setSelected(false);
imageViewCheckAll.setOnClickListener(arg0 -> {
for (int i = 0; i < displayedVehicles.size(); i++)
@ -223,7 +233,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
Enumeration<Long> keyList = getParentTab().getSuperVehHash().keys();
while (keyList.hasMoreElements()) {
(Objects.requireNonNull(getParentTab().getSuperVehHash().get((long) keyList.nextElement()))).needUpdate = true;
(Objects.requireNonNull(getParentTab().getSuperVehHash().get(keyList.nextElement()))).needUpdate = true;
}
// change button title
@ -247,7 +257,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
displayVehicle(true, LAT_OUTLIMIT, LNG_OUTLIMIT);
});
displayButton = (Button) findViewById(R.id.buttonDisplay);
displayButton = findViewById(R.id.buttonDisplay);
displayButton.setText(getString(R.string.displayAll));
@ -259,7 +269,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
Enumeration<Long> keyList = getParentTab().getSuperVehHash().keys();
while (keyList.hasMoreElements())
(Objects.requireNonNull(getParentTab().getSuperVehHash().get((long) keyList.nextElement()))).needUpdate = true;
(Objects.requireNonNull(getParentTab().getSuperVehHash().get(keyList.nextElement()))).needUpdate = true;
// change button title
if (displayButton.getText().toString().equals(getString(R.string.displayAll))) {
@ -297,11 +307,8 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
this.googleMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
this.googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
this.googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
GoogleMapsInfoBubble infoBubble = new GoogleMapsInfoBubble(getLayoutInflater(), this, getParentTab().getSuperVehHash());
this.googleMap.setInfoWindowAdapter(infoBubble);
}
@ -433,36 +440,101 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
});
}
/**
* create context menu
*/
@Override
public Dialog onCreateDialog(int id) {
if (id == 1) {
return iconContextMenu.createMenu(getString(R.string.options));
}
return super.onCreateDialog(id);
}
/* list item long click handler
* used to show the context menu
*/
private final AdapterView.OnItemLongClickListener itemLongClickHandler = ((parent, view, position, id) -> {
// save position
contextMenuPosition = position;
showDialog(1);
return true;
});
public void displayVehicle(boolean withZoom, double latZoom, double lngZoom) {
//TODO: add makers for vehicles
if (googleMap != null) {
String openWindow = "";
for (Marker marker : markers) {
if (marker.isInfoWindowShown()) {
openWindow = marker.getTitle();
}
}
googleMap.clear();
for (int i = 0; i < displayedVehicles.size(); i++) {
if (displayedVehicles.get(i)) {
SuperVehicle tmpSuper = getParentTab().getSuperVehHash().get(Long.valueOf(liveVehicle.get(i).imei));
if (tmpSuper != null) {
LatLng newLocation = new LatLng(tmpSuper.lat, tmpSuper.lng);
MarkerOptions markerOptions = new MarkerOptions().position(newLocation).title(liveVehicle.get(i).imei);
BitmapDescriptor markerIcon = getProperBitmap(tmpSuper.getLargeIcon(), tmpSuper.name);
markerOptions.icon(markerIcon);
Marker marker = this.googleMap.addMarker(markerOptions);
if (openWindow.equals(marker.getTitle()))
marker.showInfoWindow();
markers.add(marker);
}
}
}
}
}
public void showOpenedBalloon(boolean demo) {
//TODO: add show balloon
}
private BitmapDescriptor getProperBitmap(int largeIcon, String text) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), largeIcon);
Bitmap textBitmap = getTextAsDrawable(this, text);
Bitmap b3 = overlay(bitmap, textBitmap);
return BitmapDescriptorFactory.fromBitmap(b3);
}
public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
int maxWidth = Math.max(bmp1.getWidth(), bmp2.getWidth());
Bitmap bmOverlay = Bitmap.createBitmap(maxWidth, bmp1.getHeight() + bmp2.getHeight(), bmp1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1, new Matrix(), null);
canvas.drawBitmap(bmp2, 0, bmp1.getHeight(), null);
bmp1.recycle();
bmp2.recycle();
return bmOverlay;
}
public Bitmap getTextAsDrawable(Context context, String text) {
Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
paint.setTypeface(tf);
paint.setTextSize(convertToPixels(context, 16));
Rect textRect = new Rect();
paint.getTextBounds(text, 0, text.length(), textRect);
Bitmap bitmap = Bitmap.createBitmap(textRect.width(), textRect.height() + 5,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
paint.setColor(getResources().getColor(R.color.cardview_dark_background));
canvas.drawRect(0, 0, bitmap.getWidth(), bitmap.getHeight(), paint);
float scale = context.getResources().getDisplayMetrics().density;
// text color - #3D3D3D
paint.setColor(Color.rgb(255, 255, 255));
// text size in pixels
// draw text to the Canvas center
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
int x = (bitmap.getWidth() - bounds.width()) / 2;
int y = (bitmap.getHeight() + bounds.height()) / 2;
canvas.drawText(text, x, y, paint);
return bitmap;
}
public int convertToPixels(Context context, int nDP) {
final float conversionScale = context.getResources().getDisplayMetrics().density;
return (int) ((nDP * conversionScale) + 0.5f);
}
public void showLoadingDialog(String message) {
loadingDialog = new Dialog(context);
loadingDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
@ -470,9 +542,9 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
loadingDialog.setCancelable(true);
loadingDialog.setCanceledOnTouchOutside(false);
Button cancel = (Button) loadingDialog.findViewById(R.id.buttonCancel);
Button cancel = loadingDialog.findViewById(R.id.buttonCancel);
cancel.setVisibility(View.GONE);
TextView textView1 = (TextView) loadingDialog.findViewById(R.id.textView1);
TextView textView1 = loadingDialog.findViewById(R.id.textView1);
textView1.setText(message);
loadingDialog.show();
@ -501,8 +573,7 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
disabledVehicles.add(!veh.status);
// add vehicle to hash Table according to driver_id
if (tableHashOverlay.get((int) veh.driver_id) == null) // if doesn't exist
{
if (tableHashOverlay.get((int) veh.driver_id) == null) {
ArrayList<SuperVehicle> array = new ArrayList<>();
SuperVehicle superVehicle = new SuperVehicle(veh.sc_id, veh.imei, veh.lp, veh.name, veh.driver_id, veh.time_route, veh.GPS_reporting_interval, veh.is_stolen);
array.add(superVehicle);
@ -519,7 +590,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
}
// set adapter
adapter = new VehiclesGridViewAdapter(activity, context, list, disabledVehicles);
adapter.notifyDataSetChanged();
@ -538,7 +608,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
// show vehicles in gridView
private void updateResultsUI() {
gridVehicle.setAdapter(adapter);
try {
// hide loading dialog
loadingDialog.cancel();
@ -576,7 +645,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
pollReceived(position,lat,lng);
}
public void updatePosition(int pos) {
contextMenuPosition = pos;
}
@ -598,11 +666,9 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
final Runnable updateOptionsRUN = this::updateOptionsUI;
private void updateOptionsUI() {
SM.Debug("REFRESHDisableEnable" + (Boolean.TRUE.equals(disabledVehicles.get(contextMenuPosition)) ? "true" : "false"));
// change Enable/Disable in adapter
adapter.changeDisabled(contextMenuPosition, disabledVehicles.get(contextMenuPosition));
}
/**
@ -692,7 +758,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
// zone and channel change intent
IntentFilter intentFilter = new IntentFilter(OperationCodes.UNIT_STATUS_UPDATE + "");
this.registerReceiver(mReceiver, intentFilter);
}
//The BroadcastReceiver that listens for Notification broadcasts
@ -723,4 +788,9 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
}
}
};
@Override
public GoogleMap getMap() {
return googleMap;
}
}

View File

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

View File

@ -0,0 +1,699 @@
package com.safemobile.safedispatch;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.safemobile.adapters.ConversationGridViewAdapter;
import com.safemobile.adapters.MessagesGridViewAdapter;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.Msg;
import com.safemobile.lib.OperationCodes;
import com.safemobile.lib.SM;
import com.safemobile.lib.SMS;
import com.safemobile.lib.Vehicle;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Objects;
/**
* fix import
*/
public class MessagesActivity extends Activity {
/**
* Called when the activity is first created.
*/
private MessagesGridViewAdapter mAdapter;
private ConversationGridViewAdapter convAdapter;
private ArrayList<Msg> listLastMessages = new ArrayList<>();
private ArrayList<Msg> listSpecificConversation = new ArrayList<>();
private ArrayList<Boolean> dispatcherPositions = new ArrayList<>();
private GridView gridView;
private Context context;
private Activity activity;
private final Hashtable<Long, ArrayList<SMS>> tableSMS = new Hashtable<>();
private final Hashtable<String, Long> seqIDSMSHash = new Hashtable<>();
// Need handler for callbacks to the UI thread
private final Handler myHandler = new Handler(Looper.getMainLooper());
/* Visual resources */
private LinearLayout layoutSend;
private LinearLayout layoutHeader;
private LinearLayout layoutHeaderConversation;
private TextView textViewSelectedContact;
private ImageView imageViewSelectedContact;
private Button imageButtonSend;
private EditText editTextMsg;
private TabLayoutActivity parentTab;
/* Message args */
private int ACTION;
private static final int MSG_UPDATE = 0;
private ArrayList<String> allVehicleNames = new ArrayList<>();
private ArrayList<Vehicle> allVehicle = new ArrayList<>();
// tip of Messages and flag first load
public boolean LASTMESSAGES = true;
private boolean FIRST = true;
// store selected scId and selected unitType
private long scId = 0;
private int unitType = 0;
private Bundle savedInstanceState;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setSavedInstanceState(savedInstanceState);
// get parentTab
parentTab = (TabLayoutActivity) getParent();
context = this;
activity = this;
Locale locale = new Locale(AppParams.LANGUAGETMP);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.tabtext);
// get LayoutSend and hide
layoutSend = findViewById(R.id.layoutSendMsg);
layoutSend.setVisibility(View.GONE);
// get header layout
layoutHeader = findViewById(R.id.layoutHeader);
layoutHeaderConversation = findViewById(R.id.layoutHeaderConversation);
// show only header layout
layoutHeaderConversation.setVisibility(View.GONE);
// get SelectedContact TextView and ImageView
textViewSelectedContact = findViewById(R.id.textViewSelectedContact);
imageViewSelectedContact = findViewById(R.id.imageViewSelectedContact);
ImageView imageBarcode = findViewById(R.id.imageBarcode);
imageBarcode.setOnClickListener(v -> {
try {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
startActivityForResult(intent, 0);
} catch (Exception e) {
showErrorDialog(getResources().getString(R.string.barcodeError));
}
});
// change tab header fontFace
TextView textView1 = findViewById(R.id.textView1);
textView1.setTypeface(Typeface.createFromAsset(getAssets(), "Sketch_Block.ttf"));
textView1.setTextSize(24);
// prepared arraylist and passed it to the Adapter class
mAdapter = new MessagesGridViewAdapter(this, listLastMessages);
convAdapter = new ConversationGridViewAdapter(this, listSpecificConversation, dispatcherPositions, new ArrayList<>());
// Set custom adapter to gridview
gridView = findViewById(R.id.gridView1);
gridView.setAdapter(mAdapter);
// Implement On Item click listener
gridView.setOnItemClickListener((arg0, arg1, position, arg3) -> {
if (LASTMESSAGES) {
// get position
Msg item = mAdapter.getItem(position);
// get Specific Conversation
setScId(item.from.sc_id);
SM.Debug("Selected scId: " + getScId());
// set Conversation type
LASTMESSAGES = false;
// call get SMS
getSMS4unit(getScId());
// create crt_Vehicle
setUnitType((int) item.from.driver_id);
// save selected vehicle
}
if (AppParams.DEMO) {
// modify UI
ACTION = MSG_UPDATE;
updateResultsInUi();
}
});
/* Buttons and EditBoxes */
ImageButton imageButtonAdd = findViewById(R.id.imageButtonAdd);
imageButtonAdd.setOnClickListener(v -> showDialog());
// button send message
imageButtonSend = findViewById(R.id.imageButtonSend);
imageButtonSend.setOnClickListener(v -> {
sendSMS(getScId(), editTextMsg.getText().toString());
Toast.makeText(context, "Sending message...", Toast.LENGTH_SHORT).show();
// disable send button and editBox
editTextMsg.setEnabled(false);
imageButtonSend.setEnabled(false);
new Thread(() -> {
try {
Thread.sleep(500);
myHandler.post(enableButtonRUN);
if (AppParams.DEMO) {
Thread.sleep(5500);
myHandler.post(demoReceivedSMSRUN);
}
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
}).start();
});
// button back to conversations
ImageButton imageButtonBack = findViewById(R.id.imageButtonBack);
imageButtonBack.setOnClickListener(v -> {
// set LastMessage conversation type
LASTMESSAGES = true;
// refresh Grid
getLastSMS();
if (AppParams.DEMO)
updateResultsInUi();
});
// get Message editText
editTextMsg = findViewById(R.id.editTextMsg);
gridView.setId(1); // id needed for IconContextMenu
registerForContextMenu(gridView);
parentTab.setMessageActivity(this);
}
// Create runnable for posting
final Runnable demoReceivedSMSRUN = new Runnable() {
public void run() {
parentTab.setImei(getScId() + "");
parentTab.updateResultsInUi("realpha");
int timeGMT = (int) (System.currentTimeMillis() / 1000L);
String sendSMSSeqID = "1." + timeGMT;
// add mess to not ack list
seqIDSMSHash.put(sendSMSSeqID, getScId());
// get scId conversation and add message
ArrayList<SMS> crtSmsList = tableSMS.get(getScId());
SMS sms = new SMS(0, 0, timeGMT, "i got your sms", 0, getScId());
sms.seq_idx = sendSMSSeqID;
if (crtSmsList != null)
crtSmsList.add(sms);
// add message to listLast
boolean exists = false;
for (Msg msg : listLastMessages)
// if conversation exists in lastMessages
if (msg.from.sc_id == getScId()) {
exists = true;
msg.message = "i got your sms";
msg.received = Calendar.getInstance().getTime();
}
// if last messages doesn't contain this conversation
if (!exists) {
Vehicle sentVehicle = null;
for (Vehicle veh : getAllVehicle())
if (veh.sc_id == getScId())
sentVehicle = veh;
listLastMessages.add(new Msg(sentVehicle, "i got your sms", Calendar.getInstance().getTime(), sendSMSSeqID));
}
SM.Debug("time: " + timeGMT + " | " + Calendar.getInstance().getTime());
updateResultsInUi();
}
};
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.exit))
.setCancelable(false)
.setNeutralButton(getString(R.string.logout), (dialog, id) -> parentTab.whenBackPressed(AppParams.ActivityResult.logout))
.setPositiveButton(getString(R.string.ext), (dialog, id) -> parentTab.whenBackPressed(AppParams.ActivityResult.exit))
.setNegativeButton(getString(R.string.cancel), (dialog, id) -> dialog.cancel());
AlertDialog alert = builder.create();
alert.show();
}
@Override
public void onPause() {
super.onPause();
SM.Debug("onPause");
}
@Override
public void onResume() {
super.onResume();
if (parentTab.getTCPState() != null && FIRST) {
updateVehicles(parentTab.getAllVehicle());
FIRST = false;
if (LASTMESSAGES)
parentTab.executeNetworkStuff(new String[]{OperationCodes.GetLastSMS + "", AppParams.USERID + ""});
}
SM.Debug("onResume");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0 && resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
editTextMsg.setText(String.format("%s%s", editTextMsg.getText().toString(), contents));
// Handle successful scan
Toast.makeText(this, getResources().getString(R.string.barcodeContent) + ":" + contents + " with format:" + format, Toast.LENGTH_LONG).show();
}
}
// Request SMS 4 Unit from AppServer
private void getSMS4UnitWithTime(long scId, long time) {
if (!AppParams.DEMO) {
parentTab.executeNetworkStuff(new String[]{OperationCodes.GetRecentSMSs + "", scId + "", time + ""});
SM.Debug(" #### GetSMS4uni:" + scId);
}
}
private void getSMS4unit(long scId) {
if (!AppParams.DEMO) {
SM.Debug("getSMS4unit : " + scId);
ArrayList<SMS> listSMS = tableSMS.get(scId);
long timeGMT = 0;
if (listSMS != null && !listSMS.isEmpty())
timeGMT = listSMS.get(listSMS.size() - 1).timeGMT;
// error in DB
if (String.valueOf(timeGMT).contains(".")) {
try {
// remove the dot and the parse it to String
timeGMT = Long.parseLong(String.valueOf(timeGMT).split("\\.")[1]);
} catch (Exception e) {
timeGMT = Long.parseLong(String.valueOf(timeGMT).replace(".", ""));
}
}
parentTab.executeNetworkStuff(new String[]{OperationCodes.GetRecentSMSs + "", scId + "", timeGMT + ""});
SM.Debug(" #### GetSMS4uni:" + scId);
}
}
// Request Last SMS from AppServer
public void getLastSMS() {
if (!AppParams.DEMO) {
if (LASTMESSAGES)
parentTab.executeNetworkStuff(new String[]{OperationCodes.GetLastSMS + "", AppParams.USERID + ""});
else {
ArrayList<SMS> listSMS = tableSMS.get(getScId());
long timeGMT = 0;
if (listSMS != null && !listSMS.isEmpty())
timeGMT = listSMS.get(listSMS.size() - 1).timeGMT;
parentTab.executeNetworkStuff(new String[]{OperationCodes.GetRecentSMSs + "", getScId() + "", timeGMT + ""});
}
} else
updateResultsInUi();
}
private void sendSMS(long scIdd, String txt) {
if (!AppParams.DEMO) {
int timeGMT = (int) (System.currentTimeMillis() / 1000L);
String sendSMSSeqID = "1." + timeGMT;
// add mess to not ack list
seqIDSMSHash.put(sendSMSSeqID, scIdd);
// get scId conversation and add message
SMS sms = new SMS(0, 0, timeGMT, txt, scIdd, 0);
sms.seq_idx = sendSMSSeqID;
tableSMS.get(scIdd).add(sms);
parentTab.executeNetworkStuff(new String[]{OperationCodes.SEND_TM + "", sendSMSSeqID, scIdd + "", txt});
updateResultsInUi();
} else {
int timeGMT = (int) (System.currentTimeMillis() / 1000L);
String sendSMSSeqID = "1." + timeGMT;
// add mess to not ack list
seqIDSMSHash.put(sendSMSSeqID, scIdd);
// get scId conversation and add message
ArrayList<SMS> crtSmsList = tableSMS.get(scIdd);
SMS sms = new SMS(0, 0, timeGMT, txt, scIdd, 0);
sms.seq_idx = sendSMSSeqID;
crtSmsList.add(sms);
// add message to listLast
boolean exists = false;
for (Msg msg : listLastMessages)
// if conversation exists in lastMessages
if (msg.from.sc_id == scIdd) {
exists = true;
msg.message = txt;
msg.received = Calendar.getInstance().getTime();
}
// if last messages doesn't contain this conversation
if (!exists) {
Vehicle sentVehicle = null;
for (Vehicle veh : getAllVehicle())
if (veh.sc_id == scIdd)
sentVehicle = veh;
listLastMessages.add(new Msg(sentVehicle, txt, Calendar.getInstance().getTime(), sendSMSSeqID));
}
SM.Debug("time: " + timeGMT + " | " + Calendar.getInstance().getTime());
LASTMESSAGES = false;
updateResultsInUi();
}
}
// Update Vehicles received from AppServer
public void updateVehicles(ArrayList<Vehicle> list) {
SM.Debug("## updateVehicles: " + list.size());
setAllVehicle(list);
allVehicleNames = new ArrayList<>();
for (Vehicle v : getAllVehicle())
allVehicleNames.add(v.name);
if (tableSMS.size() == 0) {
for (Vehicle veh : getAllVehicle()) {
ArrayList<SMS> smsList = new ArrayList<>();
// populate conversation list if demo
if (AppParams.DEMO)
smsList = getDemoConversation(veh.sc_id);
tableSMS.put(veh.sc_id, smsList);
}
}
}
// gets DEMO conversations
private ArrayList<SMS> getDemoConversation(long scId) {
ArrayList<SMS> smsList = new ArrayList<>();
if (scId == 101)
smsList.add(new SMS(1, 2, 1324016412, "Only one left", 101, 0));
else if (scId == 102)
smsList.add(new SMS(1, 2, 1328060100, "i'm at the train station", 0, 102));
else if (scId == 103) {
smsList.add(new SMS(1, 2, 1121016637, "Where are you now?", 103, 0));
smsList.add(new SMS(2, 2, 1121016693, "Near Elementary School 81", 0, 103));
smsList.add(new SMS(3, 2, 1121016693, "We have a client on Belmont Ave", 103, 0));
smsList.add(new SMS(4, 2, 1121016724, "It's only 4 blocks away", 103, 0));
smsList.add(new SMS(5, 2, 1121016693, "Can you take him?", 103, 0));
smsList.add(new SMS(6, 2, 1121016818, "I'll be right there", 0, 103));
} else if (scId == 105)
smsList.add(new SMS(1, 2, 1328061660, "Thanks", 0, 105));
return smsList;
}
public void updateSMS(ArrayList<SMS> list) {
SM.Debug("## updateSMS: " + list.size() + " [LASTMESSAGES:" + LASTMESSAGES + "]");
// populate listLastMessages
if (LASTMESSAGES) {
listLastMessages = new ArrayList<>();
for (SMS sms : list) {
// get for sender
long senderId = sms.sc_id_dest;
if (senderId == 0)
senderId = sms.sc_id_sour;
// get vehicle with sender id
Vehicle messageVeh;
messageVeh = getVehicleById(senderId);
listLastMessages.add(0, new Msg(messageVeh, sms.mess, new Date((long) sms.timeGMT * 1000), sms.seq_idx));
}
// update GridView
mAdapter = new MessagesGridViewAdapter(activity, listLastMessages);
} else {
// add new values to hashTable for key = scId
ArrayList<SMS> listScId = tableSMS.get(getScId());
if (!list.isEmpty())
for (SMS sms : list) {
// compare last item in hashList with first elem in arrived list
// protect is listSc_Id size = 0
if (listScId != null && (listScId.isEmpty()
|| (sms.sc_id_dest != listScId.get(listScId.size() - 1).sc_id_dest
|| sms.sc_id_sour != listScId.get(listScId.size() - 1).sc_id_sour
|| !Objects.equals(sms.mess, listScId.get(listScId.size() - 1).mess))))
listScId.add(sms);
}
}
// modify UI
ACTION = MSG_UPDATE;
myHandler.post(this::updateResultsInUi);
}
// Confirmation for sending message
public void confirmSMS(String data, final String seqID) {
SM.Debug("confirmSMS");
if (data.equals("0")) {
SM.Debug("Error on sending SMS");
showErrorDialog("Error on sending message.");
} else {
SM.Debug("ACK received for text message");
//get scId for crt message
long scId = seqIDSMSHash.get(seqID);
// get SMS list for crt scId
ArrayList<SMS> crtSMSList = tableSMS.get(scId);
if (crtSMSList != null) {
for (SMS sms : crtSMSList) {
if (sms.seq_idx.equals(seqID)) {
SM.Debug("######### AM SCHIMBAT STATUSUL pt: " + sms.mess + " | " + scId + " | " + seqID + " || " + sms.seq_idx);
// set ACK
sms.status = 2;
}
}
}
// remove message from seqIDSMS Hash = don't wait confirmation for it
seqIDSMSHash.remove(seqID);
// store sms seqId to set to ACK in adapter
myHandler.post(() -> {
convAdapter.setACK(seqID);
convAdapter.changeView(seqID);
convAdapter.notifyDataSetChanged();
});
myHandler.post(() -> editTextMsg.setText(""));
}
}
public void newSMS(String imei, String message, final long time) {
SM.Debug(" ## newSMS: " + imei + " | " + message);
if (!LASTMESSAGES) {
// if received message from current conversation
if (getVehicleByImei(imei).sc_id == getScId())
getSMS4UnitWithTime(getScId(), time); // refresh MSG List
} else
getLastSMS(); // get last SMS
}
// Create runnable for posting
final Runnable enableButtonRUN = this::updateEnableButtonsUI;
// enable buttons in UI after 200ms from send
private void updateEnableButtonsUI() {
// enable buttons
imageButtonSend.setEnabled(true);
editTextMsg.setEnabled(true);
editTextMsg.setText("");
}
private void updateResultsInUi() {
if (getAllVehicle() == null)
updateVehicles(parentTab.getAllVehicle());
if (ACTION == MSG_UPDATE) {
if (LASTMESSAGES) {
// show Header Layout
layoutHeader.setVisibility(View.VISIBLE);
// hide Conversation Header Layout
layoutHeaderConversation.setVisibility(View.GONE);
// hide Send Layout
layoutSend.setVisibility(View.GONE);
// change GridView adapter
gridView.setAdapter(mAdapter);
gridView.invalidate();
} else {
SM.Debug(" #### Modify adapter for SMS4unit");
// populate specific conversation
listSpecificConversation = new ArrayList<>();
dispatcherPositions = new ArrayList<>();
ArrayList<Boolean> ackPosition = new ArrayList<>();
ArrayList<SMS> list;
list = tableSMS.get(getScId());
if (list != null) {
for (SMS sms : list) {
// get for sender
long senderId = sms.sc_id_dest;
if (senderId == 0)
senderId = sms.sc_id_sour;
// get vehicle with sender id
Vehicle messageVeh;
messageVeh = getVehicleById(senderId);
// flag dispatcher message when source is 0
dispatcherPositions.add(sms.sc_id_sour == 0);
ackPosition.add(sms.status == 2);
listSpecificConversation.add(new Msg(messageVeh, sms.mess, new Date((long) sms.timeGMT * 1000), sms.seq_idx));
}
}
convAdapter = new ConversationGridViewAdapter(activity, listSpecificConversation, dispatcherPositions, ackPosition);
gridView.setAdapter(convAdapter);
if (!listSpecificConversation.isEmpty())
gridView.setSelection(listSpecificConversation.size() - 1);
// set unit name and image in Header Conversation
textViewSelectedContact.setText(getVehicleByScId(getScId()).name);
imageViewSelectedContact.setImageResource(getVehicleByScId(getScId()).getLargeIcon());
// clear editText
editTextMsg.setText("");
// change layouts visibility
layoutSend.setVisibility(View.VISIBLE);
layoutHeader.setVisibility(View.GONE);
layoutHeaderConversation.setVisibility(View.VISIBLE);
}
gridView.invalidate();
}
}
// gets Vehicle from id
public Vehicle getVehicleById(long vehicleId) {
for (Vehicle vehicle : getAllVehicle())
if (vehicle.sc_id == vehicleId)
return vehicle;
return null;
}
// get Vehicle from imei
public Vehicle getVehicleByImei(String imei) {
for (Vehicle vehicle : getAllVehicle())
if (vehicle.imei.equalsIgnoreCase(imei))
return vehicle;
return null;
}
public Vehicle getVehicleByScId(long scId) {
for (Vehicle vehicle : getAllVehicle())
if (vehicle.sc_id == scId)
return vehicle;
return null;
}
// show a dialog
public void showDialog() {
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.template_simple_list_item, allVehicleNames);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(getString(R.string.selectVehicle));
builder.setAdapter(adapter, (dialog, which) -> {
// get position
Vehicle item = getAllVehicle().get(which);
// get Specific Conversation
setScId(item.sc_id);
SM.Debug("Selected scId: " + getScId());
// set Conversation type
LASTMESSAGES = false;
// call get SMS
getSMS4unit(getScId());
// create crt_Vehicle
setUnitType((int) item.driver_id);
SM.Debug("AM SELECTAT: " + getScId() + " | " + item.name + " | " + getUnitType() + "\n\t " + item);
if (AppParams.DEMO)
updateResultsInUi();
});
AlertDialog alert = builder.create();
alert.show();
}
public void showErrorDialog(String errorMsg) {
Dialog dialog = new Dialog(context);
dialog.setTitle(getString(R.string.sendingError));
dialog.setContentView(R.layout.dialog);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
TextView text = dialog.findViewById(R.id.text);
ImageView image = dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.error);
text.setText(errorMsg);
dialog.show();
}
public ArrayList<Vehicle> getAllVehicle() {
return allVehicle;
}
public void setAllVehicle(ArrayList<Vehicle> allVehicle) {
this.allVehicle = allVehicle;
}
public long getScId() {
return scId;
}
public void setScId(long scId) {
this.scId = scId;
}
public int getUnitType() {
return unitType;
}
public void setUnitType(int unitType) {
this.unitType = unitType;
}
public Bundle getSavedInstanceState() {
return savedInstanceState;
}
public void setSavedInstanceState(Bundle savedInstanceState) {
this.savedInstanceState = savedInstanceState;
}
}

View File

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

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch;
package com.safemobile.safedispatch;
import android.app.Activity;
import android.app.AlertDialog;
@ -236,7 +236,7 @@ public class RadioActivity extends Activity {
}
// send current activity to parrent
parentTab.radioActivity = this;
parentTab.setRadioActivity(this);
// register to be notified when an event is triggered
registerBroadcastIntents();
@ -315,10 +315,10 @@ public class RadioActivity extends Activity {
if(!pttONoff)
{
String chanMsg = "", statMsg = "";
if(parentTab.crtRadio!= null)
SendPTT(selectedCallType, selectedID,parentTab.crtRadio.GW_ID, parentTab.crtRadio.ID,AppParams.USERID);
if(parentTab.getCrtRadio() != null)
SendPTT(selectedCallType, selectedID, parentTab.getCrtRadio().GW_ID, parentTab.getCrtRadio().ID,AppParams.USERID);
// flag in Call
parentTab.inCall = true;
parentTab.setInCall(true);
pttONoff= true;
if(audioH!=null)
audioH.soundNeeded = true;
@ -381,7 +381,7 @@ public class RadioActivity extends Activity {
{
String chanMsg = "", statMsg = "";
if(!AppParams.DEMO)
SendPTT(selectedCallType+10, 1,parentTab.crtRadio.GW_ID, parentTab.crtRadio.ID,AppParams.USERID);
SendPTT(selectedCallType+10, 1, parentTab.getCrtRadio().GW_ID, parentTab.getCrtRadio().ID,AppParams.USERID);
pttONoff= false;
if(audioH!=null)
audioH.soundNeeded = false;
@ -417,7 +417,7 @@ public class RadioActivity extends Activity {
@Override
public void onClick(View v) {
if(parentTab.crtRadio!=null)
if(parentTab.getCrtRadio() !=null)
{
// display dialog with adapter
ArrayList<String> tmp = new ArrayList<String>();
@ -438,7 +438,7 @@ public class RadioActivity extends Activity {
//textViewChannel.setText(crtChannels.get(which).chName);
// send change to App
onZoneCHChange(parentTab.crtRadio.ID, parentTab.crtRadio.GW_ID, getNR4Zone(textViewZone.getText().toString()), getNR4CH(crtChannels.get(which).chName));
onZoneCHChange(parentTab.getCrtRadio().ID, parentTab.getCrtRadio().GW_ID, getNR4Zone(textViewZone.getText().toString()), getNR4CH(crtChannels.get(which).chName));
}
});
@ -492,7 +492,7 @@ public class RadioActivity extends Activity {
@Override
public void onClick(View v) {
if(parentTab.crtRadio!=null)
if(parentTab.getCrtRadio() !=null)
{
// display dialog with adapter
ArrayList<String> tmp = new ArrayList<String>();
@ -511,7 +511,7 @@ public class RadioActivity extends Activity {
// send change to App
//onZoneCHChange(parentTab.crtRadio.ID, parentTab.crtRadio.GW_ID, getNR4Zone(crtZones.get(which).ZoneName), getNR4CH(textViewChannel.getText().toString()));
onZoneCHChange(parentTab.crtRadio.ID, parentTab.crtRadio.GW_ID, getNR4Zone(crtZones.get(which).ZoneName), 1);
onZoneCHChange(parentTab.getCrtRadio().ID, parentTab.getCrtRadio().GW_ID, getNR4Zone(crtZones.get(which).ZoneName), 1);
}
});
@ -560,7 +560,7 @@ public class RadioActivity extends Activity {
@Override
public void onClick(View v) {
if(parentTab.crtRadio!=null)
if(parentTab.getCrtRadio() !=null)
{
// create spinner selected
AlertDialog.Builder builder = new AlertDialog.Builder(context);
@ -673,10 +673,10 @@ public class RadioActivity extends Activity {
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
TextView text = (TextView) dialog.findViewById(R.id.text);
ImageView image = (ImageView) dialog.findViewById(R.id.image);
TextView text = dialog.findViewById(R.id.text);
ImageView image = dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.ic_launcher);
image.setImageResource(R.mipmap.ic_launcher);
text.setText(errorMsg);
dialog.show();
}
@ -686,17 +686,17 @@ public class RadioActivity extends Activity {
{
// save radios
AppParams.listRadios = radios;
if(parentTab.crtRadio == null)
parentTab.crtRadio = AppParams.listRadios.get(0);
if(parentTab.getCrtRadio() == null)
parentTab.setCrtRadio(AppParams.listRadios.get(0));
// if crtRadio not exists anymore
if(!AppParams.listRadios.contains(parentTab.crtRadio))
parentTab.crtRadio = AppParams.listRadios.get(0);
if(!AppParams.listRadios.contains(parentTab.getCrtRadio()))
parentTab.setCrtRadio(AppParams.listRadios.get(0));
SM.Debug(parentTab.crtRadio.toString());
SM.Debug(parentTab.getCrtRadio().toString());
// get status for selected Radio
ReqRadioStatus(parentTab.crtRadio.ID, parentTab.crtRadio.GW_ID);
ReqRadioStatus(parentTab.getCrtRadio().ID, parentTab.getCrtRadio().GW_ID);
// get selected Zone and CH
onZoneCHChange(parentTab.crtRadio.ID, parentTab.crtRadio.GW_ID, 0,0);
onZoneCHChange(parentTab.getCrtRadio().ID, parentTab.getCrtRadio().GW_ID, 0,0);
myHandler.post(updateGatewaysRUN);
}
@ -716,7 +716,7 @@ public class RadioActivity extends Activity {
allGWsIP.clear();
for(RadioGW radio: AppParams.listRadios)
allGWsIP.add(radio.IP);
textViewGateway.setText(parentTab.crtRadio.IP);
textViewGateway.setText(parentTab.getCrtRadio().IP);
}
@ -743,20 +743,20 @@ public class RadioActivity extends Activity {
SM.Debug("am primit: " + _radioID + "," + _GWID + "," + _zoneNR + "," + _chNR);
if ((parentTab.crtRadio == null)||((parentTab.crtRadio.GW_ID == _GWID)&&(parentTab.crtRadio.ID == _radioID)))
if ((parentTab.getCrtRadio() == null)||((parentTab.getCrtRadio().GW_ID == _GWID)&&(parentTab.getCrtRadio().ID == _radioID)))
{
// update crtRadios, crtZones, and crtChannel
for(RadioGW radio: AppParams.listRadios)
if(radio.GW_ID == _GWID && radio.ID == _radioID)
{
parentTab.crtRadio = radio;
parentTab.setCrtRadio(radio);
crtZones = radio.zoneList;
cmdForMe = true;
}
}
if (cmdForMe)
{
for(Zone zone: parentTab.crtRadio.zoneList)
for(Zone zone: parentTab.getCrtRadio().zoneList)
if(zone.id == _zoneNR)
crtChannels = zone.channelList;
// update UI
@ -776,7 +776,7 @@ public class RadioActivity extends Activity {
if(AppParams.listRadios.size()>0)
{
textViewGateway.setText(parentTab.crtRadio.IP);
textViewGateway.setText(parentTab.getCrtRadio().IP);
// get all radio IP
allGWsIP.clear();
@ -784,13 +784,13 @@ public class RadioActivity extends Activity {
allGWsIP.add(radio.IP);
// set spinners and text
if(parentTab.crtRadio == null)
if(parentTab.getCrtRadio() == null)
{
parentTab.crtRadio = AppParams.listRadios.get(0);
parentTab.setCrtRadio(AppParams.listRadios.get(0));
textViewGateway.setText(allGWsIP.get(0));
// set zone
ArrayList<String> zones = new ArrayList<String>();
crtZones = parentTab.crtRadio.zoneList;
crtZones = parentTab.getCrtRadio().zoneList;
for(Zone zone: crtZones)
zones.add(zone.ZoneName);
@ -799,7 +799,7 @@ public class RadioActivity extends Activity {
//spinnerZone.setSelection(0);
// set channel
ArrayList<String> channel = new ArrayList<String>();
crtChannels = parentTab.crtRadio.zoneList.get(0).channelList;
crtChannels = parentTab.getCrtRadio().zoneList.get(0).channelList;
for(Channel ch: crtChannels)
channel.add(ch.chName);
textViewChannel.setText(channel.get(0).toString());
@ -811,10 +811,10 @@ public class RadioActivity extends Activity {
{
for(RadioGW radio: AppParams.listRadios)
if(radio.ID == radioID && radio.GW_ID == GWID)
parentTab.crtRadio = radio;
parentTab.setCrtRadio(radio);
// get zones for adapter
ArrayList<String> zones = new ArrayList<String>();
crtZones = parentTab.crtRadio.zoneList;
crtZones = parentTab.getCrtRadio().zoneList;
int position = 0;
// get selected Zone
for(int i=0; i< crtZones.size(); i++)
@ -828,7 +828,7 @@ public class RadioActivity extends Activity {
// set channel
ArrayList<String> channel = new ArrayList<String>();
crtChannels = parentTab.crtRadio.zoneList.get(position).channelList;
crtChannels = parentTab.getCrtRadio().zoneList.get(position).channelList;
position = 0;
// get current channel
for(int i=0; i< crtChannels.size(); i++)
@ -856,7 +856,7 @@ public class RadioActivity extends Activity {
{
UpdateEnableDisableButtons("offline");
onZoneCHChange(radio.ID, radio.GW_ID,0,0); // get zone and channel for crt radio
parentTab.crtRadio = radio;
parentTab.setCrtRadio(radio);
}
textViewGateway.setText(newIP);
@ -957,10 +957,10 @@ public class RadioActivity extends Activity {
buttonPTT.setEnabled(true);
buttonDKey.setEnabled(false);
}
if(parentTab.crtActivity == parentTab.RADIO && selectedCallType == calltype)
if(parentTab.getCrtActivity() == parentTab.RADIO_TAB_ID && selectedCallType == calltype)
parentTab.enableMenuButtons(false);
if(selectedCallType == calltype)
parentTab.inCall = true;
parentTab.setInCall(true);
}
else if (callstatus==3)
@ -986,7 +986,7 @@ public class RadioActivity extends Activity {
}
parentTab.enableMenuButtons(true);
parentTab.inCall = false;
parentTab.setInCall(false);
}
}
}
@ -1182,8 +1182,8 @@ public class RadioActivity extends Activity {
// send Dekey to AppServer
private void SendDekey()
{
if(parentTab.crtRadio != null)
parentTab.sendDekey(parentTab.crtRadio.GW_ID, parentTab.crtRadio.ID);
if(parentTab.getCrtRadio() != null)
parentTab.sendDekey(parentTab.getCrtRadio().GW_ID, parentTab.getCrtRadio().ID);
}
// send change Channel and Zone message to AppServer
@ -1215,8 +1215,8 @@ public class RadioActivity extends Activity {
//113 -grpcall stop
public void SendPTT(int callType, int id,int gwid, int rgwid,long userID)
{
SM.Debug("SendPTT callType:"+callType);
parentTab.SendPTT(callType, id,gwid,rgwid,userID);
SM.Debug("sendPTT callType:"+callType);
parentTab.sendPTT(callType, id,gwid,rgwid,userID);
}
@ -1241,13 +1241,13 @@ public class RadioActivity extends Activity {
UpdateZoneCH(zc.rgwID, zc.gwID, zc.zoneNr, zc.channelNr);
}
else if (action.equals(OperationCodes.RADIOID_CHANGED+"")) {
textViewGateway.setText(parentTab.crtRadio.IP);
textViewChannel.setText(parentTab.crtRadio.getChannelName());
textViewZone.setText(parentTab.crtRadio.getZoneName());
textViewGateway.setText(parentTab.getCrtRadio().IP);
textViewChannel.setText(parentTab.getCrtRadio().getChannelName());
textViewZone.setText(parentTab.getCrtRadio().getZoneName());
// update UI
myHandler.post(UpdateResultsZoneChannelRUN);
radioGWChanged(parentTab.crtRadio.IP);
radioGWChanged(parentTab.getCrtRadio().IP);
}
}
};

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch;
package com.safemobile.safedispatch;
import android.app.Activity;
import android.app.AlertDialog;
@ -127,7 +127,7 @@ public class RecordingsActivity extends Activity {
// change gateway
textViewGateway.setText(allGWsIP.get(which));
Toast.makeText(context, getString(R.string.loadingRecordings), Toast.LENGTH_SHORT).show();
GetRecordings(parentTab.allRadios.get(which).GW_ID, parentTab.allRadios.get(which).ID);
GetRecordings(parentTab.getAllRadios().get(which).GW_ID, parentTab.getAllRadios().get(which).ID);
}
});
AlertDialog alert = builder.create();
@ -137,7 +137,7 @@ public class RecordingsActivity extends Activity {
textViewGateway.setVisibility(View.INVISIBLE);
parentTab.recordingsActivity = this;
parentTab.setRecordingsActivity(this);
// register to receive broadcasts
registerBroadcastIntents();
@ -184,10 +184,10 @@ public class RecordingsActivity extends Activity {
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
TextView text = (TextView) dialog.findViewById(R.id.text);
ImageView image = (ImageView) dialog.findViewById(R.id.image);
TextView text = dialog.findViewById(R.id.text);
ImageView image = dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.ic_launcher);
image.setImageResource(R.mipmap.ic_launcher);
text.setText(errorMsg);
dialog.show();
}
@ -208,17 +208,17 @@ public class RecordingsActivity extends Activity {
Toast.makeText(context, getString(R.string.moreRecordings), Toast.LENGTH_SHORT).show();
if(parentTab.crtRadio != null)
textViewGateway.setText(parentTab.crtRadio.IP);
if(parentTab.getCrtRadio() != null)
textViewGateway.setText(parentTab.getCrtRadio().IP);
/*
if(parentTab.allRadios == null)
GetGWRadios();
*/
if(playingPosition < 0 && parentTab.crtRadio != null)
if(playingPosition < 0 && parentTab.getCrtRadio() != null)
{
SM.Debug("GetRecordings resume + crtRadio:"+parentTab.crtRadio.toString());
GetRecordings(parentTab.crtRadio.GW_ID, parentTab.crtRadio.ID);
SM.Debug("GetRecordings resume + crtRadio:"+ parentTab.getCrtRadio().toString());
GetRecordings(parentTab.getCrtRadio().GW_ID, parentTab.getCrtRadio().ID);
}
}
@ -402,8 +402,8 @@ public class RecordingsActivity extends Activity {
updateNumberOfRecordings();
}
else if (action.equals(OperationCodes.RADIOID_CHANGED+"")) {
textViewGateway.setText(parentTab.crtRadio.IP);
GetRecordings(parentTab.crtRadio.GW_ID, parentTab.crtRadio.ID);
textViewGateway.setText(parentTab.getCrtRadio().IP);
GetRecordings(parentTab.getCrtRadio().GW_ID, parentTab.getCrtRadio().ID);
}
}
};

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch;
package com.safemobile.safedispatch;
import android.app.Activity;
import android.app.AlertDialog;
@ -965,7 +965,7 @@ public class SDMobileActivity extends Activity {
}
@Override
public void alarmLiveRecv(TCPEvent event) {
public void alarmLiveReceived(TCPEvent event) {
}
@Override
@ -994,7 +994,7 @@ public class SDMobileActivity extends Activity {
}
@Override
public void onTCPConnectionDown(boolean previuosWasConnectionUp) {
public void onTCPConnectionDown(boolean previousWasConnectionUp) {
SM.Debug("TCP connection with:" + (tcp != null ? tcp.serverHostname : AppParams.RADIOIP) + ":"
+ (tcp != null ? tcp.getPort() : 0) + " is DOWN!!!");
// update ui only when a change happens with tcp connection
@ -1034,7 +1034,7 @@ public class SDMobileActivity extends Activity {
}
@Override
public void onTCPConnectionStatusReceived(boolean isConnectionUp, boolean previuosWasConnectionUp) {
public void onTCPConnectionStatusReceived(boolean isConnectionUp, boolean previousWasConnectionUp) {
}

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch;
package com.safemobile.safedispatch;
import java.util.ArrayList;
import java.util.List;
@ -1403,7 +1403,7 @@ public class SDMobileActivity_beforeMod extends Activity {
public void onAlarmAckReceived(TCPEvent event) { }
@Override
public void alarmLiveRecv(TCPEvent event) { }
public void alarmLiveReceived(TCPEvent event) { }
@Override
@ -1425,7 +1425,7 @@ public class SDMobileActivity_beforeMod extends Activity {
public void onRecordingsListReceived(TCPEvent event) { }
@Override
public void onTCPConnectionDown(boolean previousConnectionWasUP) {
public void onTCPConnectionDown(boolean previousWasConnectionUp) {
SM.Debug("TCP Connection Down");
// set connection is down
@ -1450,7 +1450,7 @@ public class SDMobileActivity_beforeMod extends Activity {
}
@Override
public void onTCPConnectionUp(boolean previousConnectionWasUP) {
public void onTCPConnectionUp(boolean previousWasConnectionUp) {
SM.Debug("TCP Connection UP");
// set connection is up
@ -1505,7 +1505,7 @@ public class SDMobileActivity_beforeMod extends Activity {
}
@Override
public void onTCPConnectionStatusReceived(final boolean isConnectionUp, boolean previuosWasConnectionUp) {
public void onTCPConnectionStatusReceived(final boolean isConnectionUp, boolean previousWasConnectionUp) {
//SM.Debug("TCP STATUS", "ConnectionUP: " + isConnectionUp + " | previous: " + previuosWasConnectionUp );
/*
if(!lastTCPstatus && isConnectionUp) {

View File

@ -1,4 +1,4 @@
package com.safemobile.dispatch;
package com.safemobile.safedispatch;
import java.util.Locale;
@ -199,7 +199,7 @@ public class SetupActivity extends Activity {
// get default com port
//COMPORT = prefs.getString("comport", "n/a");
// get Language
AppParams.LANGUAGE = AppParams.prefs.getString("language", parentTab.databaseLanguage);
AppParams.LANGUAGE = AppParams.prefs.getString("language", parentTab.DATABASE_LANGUAGE);
}
catch(Exception ex)
{
@ -245,7 +245,7 @@ public class SetupActivity extends Activity {
parentTab.stopTCPParser();
// recreate TCP with new settings
parentTab.loadSettings();
parentTab.TCPinit();
parentTab.tcpInit();
*/
// start thread to add listener
/*

File diff suppressed because it is too large Load Diff

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

@ -1,243 +1,244 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="1"
android:id="@+id/layoutMain"
style="?bg">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeader">
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="1"
android:id="@+id/layoutMain"
style="?bg">
<ImageView
android:id="@+id/imageViewMsg"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/message"
android:paddingLeft="0dp"
android:layout_margin="3dp"
android:layout_weight="0" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="@string/textMessaging"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeader">
<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/imageViewMsg"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/message"
android:paddingLeft="0dp"
android:layout_margin="3dp"
android:layout_weight="0" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="@string/textMessaging"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<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="invisible"
android:src="@drawable/arrow_menu_down" />
<ImageButton
android:id="@+id/imageButtonAdd2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:visibility="invisible"
android:background="@drawable/addmessage_selector"/>
<TextView
android:id="@+id/textViewNew"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="New"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"
android:paddingRight="5dp"
android:visibility="gone"/>
<ImageButton
android:id="@+id/imageButtonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/addmessage_selector"/>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeaderConversation">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical">
<ImageButton
android:id="@+id/imageButtonBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/messageback_selector"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:gravity="right|center_vertical"
android:orientation="horizontal"
android:paddingBottom="2dp"
android:paddingRight="15dp"
android:paddingTop="3dp" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0">
<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="invisible"
android:src="@drawable/arrow_menu_down" />
<ImageButton
android:id="@+id/imageButtonAdd2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:visibility="invisible"
android:background="@drawable/addmessage_selector"/>
<TextView
android:id="@+id/textViewNew"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="New"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"
android:paddingRight="5dp"
android:visibility="gone"/>
<ImageButton
android:id="@+id/imageButtonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/addmessage_selector"/>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeaderConversation">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical">
<ImageButton
android:id="@+id/imageButtonBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/messageback_selector"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:gravity="right|center_vertical"
android:orientation="horizontal"
android:paddingBottom="2dp"
android:paddingRight="15dp"
android:paddingTop="3dp" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0">
<ImageView
android:id="@+id/imageViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ambulance_large"
android:layout_margin="3dp" />
</LinearLayout>
<TextView
android:id="@+id/textViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Large Text"
android:gravity="center_vertical"
android:paddingLeft="3dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
</LinearLayout>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/layoutConversations"
android:layout_weight="1"
android:orientation="vertical">
android:id="@+id/imageViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ambulance_large"
android:layout_margin="3dp" />
</LinearLayout>
<TextView
android:id="@+id/textViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Large Text"
android:gravity="center_vertical"
android:paddingLeft="3dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#999999"
android:drawSelectorOnTop="false"
android:horizontalSpacing="0dp"
android:numColumns="1"
android:verticalSpacing="1dp" >
</GridView>
</LinearLayout>
<LinearLayout
android:id="@+id/layoutSendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header">
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="fill_parent">
<TextView
android:id="@+id/textViewSendMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/message"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<EditText
android:id="@+id/editTextMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:inputType="text" >
</EditText>
</LinearLayout>
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<ImageView
android:id="@+id/imageBarcode"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:src="@drawable/barcode"
android:paddingTop="2dp"
android:layout_margin="3dp" />
</LinearLayout>
<Button
android:id="@+id/imageButtonSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="@string/send"
android:layout_marginRight="5dp"
android:layout_gravity="center"
android:paddingLeft="6dp"
android:textColor="#000000"
style="?login"
/>
</LinearLayout>
</LinearLayout>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/layoutConversations"
android:layout_weight="1"
android:orientation="vertical">
<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#999999"
android:drawSelectorOnTop="false"
android:horizontalSpacing="0dp"
android:numColumns="1"
android:verticalSpacing="1dp" >
</GridView>
</LinearLayout>
<LinearLayout
android:id="@+id/layoutSendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header">
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="fill_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/message"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<EditText
android:id="@+id/editTextMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:inputType="text"
android:autofillHints="">
</EditText>
</LinearLayout>
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<ImageView
android:id="@+id/imageBarcode"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:src="@drawable/barcode"
android:paddingTop="2dp"
android:layout_margin="3dp" />
</LinearLayout>
<Button
android:id="@+id/imageButtonSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="@string/send"
android:layout_marginRight="5dp"
android:layout_gravity="center"
android:paddingLeft="6dp"
android:textColor="#000000"
style="?login"
/>
</LinearLayout>
</LinearLayout>

View File

@ -11,7 +11,7 @@
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_launcher"
android:src="@mipmap/ic_launcher"
/>
<LinearLayout
android:layout_width="wrap_content"
@ -24,14 +24,14 @@
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:textSize="18dp"
android:textColor="#FFFFFF"
android:textColor="@color/black"
/>
<TextView android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:textSize="18dp"
android:textColor="#FFFFFF"
android:textColor="@color/black"
/>
</LinearLayout>
</LinearLayout>

View File

@ -24,7 +24,7 @@
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_launcher"
android:src="@mipmap/ic_launcher"
android:contentDescription="image for dialog"
/>
<LinearLayout

View File

@ -7,7 +7,7 @@
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:src="@mipmap/ic_launcher"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"

View File

@ -1,341 +1,336 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:id="@+id/tab1Layout" android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tab1Layout"
android:orientation="horizontal"
style="?bg">
<RelativeLayout
android:id="@+id/relativeHeader"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
<RelativeLayout
android:id="@+id/relativeHeader"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeader">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeader">
<ImageView
android:id="@+id/imageViewMsg"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/calendar_48_red"
android:paddingLeft="0dp"
android:layout_margin="3dp"
android:layout_weight="0" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="@string/history"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<ImageView
android:id="@+id/imageViewMsg"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/calendar_48_red"
android:paddingLeft="0dp"
android:layout_margin="3dp"
android:layout_weight="0" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="@string/history"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<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/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="invisible"
android:src="@drawable/arrow_menu_down" />
<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="invisible"
android:src="@drawable/arrow_menu_down" />
<ImageButton
android:id="@+id/imageButtonAdd2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:visibility="invisible"
android:background="@drawable/addmessage_selector"/>
<ImageButton
android:id="@+id/imageButtonAdd2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:visibility="invisible"
android:background="@drawable/addmessage_selector"/>
<ImageView
android:id="@+id/changeTraffic"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="3dp"
android:layout_weight="0"
android:src="@drawable/traffic_off"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/changeTraffic"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="3dp"
android:layout_weight="0"
android:src="@drawable/traffic_off"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/changeMapTypeHeader"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="3dp"
android:layout_weight="0"
android:src="@drawable/satellite"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/changeMapTypeHeader"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="3dp"
android:layout_weight="0"
android:src="@drawable/satellite"
android:adjustViewBounds="true"/>
<TextView
android:id="@+id/textViewNew"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="New"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"
android:paddingRight="5dp"
android:visibility="gone"/>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/textViewNew"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="New"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"
android:paddingRight="5dp"
android:visibility="gone"/>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/relativeHeader">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/relativeHeader">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<LinearLayout
android:layout_width="200dp"
android:layout_height="fill_parent"
android:id="@+id/layoutBig"
android:orientation="vertical"
android:visibility="visible">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/liveVehicle"
android:background="#ffffff"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<LinearLayout
android:layout_width="200dp"
android:layout_height="fill_parent"
android:id="@+id/layoutBig"
android:orientation="vertical"
android:visibility="visible">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/liveVehicle"
android:background="#ffffff"
android:orientation="vertical">
<LinearLayout
android:id="@+id/LayoutSpinner"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingTop="10dp"
android:gravity="top"
android:layout_weight="1">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/vehicle"
android:textSize="20dp"
android:paddingLeft="5dp"
android:textColor="#000000"
android:gravity="left"
android:id="@+id/labelVehicle"/>
android:id="@+id/LayoutSpinner"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingTop="10dp"
android:gravity="top"
android:layout_weight="1">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/vehicle"
android:textSize="20dp"
android:paddingLeft="5dp"
android:textColor="#000000"
android:gravity="left"
android:id="@+id/labelVehicle"/>
<Spinner
android:id="@+id/spinnerVehicle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/arrayLanguages"
android:gravity="center_horizontal"
android:prompt="@string/selUsername"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/startDate"
android:textSize="22dp"
android:paddingLeft="5dp"
android:textColor="#000000"
android:gravity="left"
android:id="@+id/labelStartDate"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/layoutStartPicker"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_gravity="left"
android:gravity="right"
android:layout_marginLeft="2sp"
android:layout_marginRight="3sp"
android:orientation="horizontal"
android:background="@drawable/style_spinner">
<ImageView
android:id="@+id/imageViewStartDate"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:src="@drawable/calendar_48" />
<TextView
android:id="@+id/textViewStartDate"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="10:41, 12.12.2011"
android:textSize="18sp"
android:paddingLeft="1dp"
android:textColor="#000000"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/endDate"
android:textSize="22dp"
android:paddingLeft="5dp"
android:textColor="#000000"
android:gravity="left"
android:id="@+id/labelEndDate"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/layoutEndPicker"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_gravity="left"
android:gravity="right"
android:layout_marginTop="3sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="3sp"
android:orientation="horizontal"
android:background="@drawable/style_spinner">
<ImageView
android:id="@+id/imageViewEndDate"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:src="@drawable/calendar_48_red" />
<TextView
android:id="@+id/textViewEndDate"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="10:00, 13.12.2011"
android:textSize="18sp"
android:paddingLeft="1dp"
android:textColor="#000000" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom">
<TextView
android:id="@+id/textViewSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:text=""
android:textSize="16dp"
android:paddingLeft="5dp"
android:textColor="#000000"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="0"
style="?header"
android:gravity="center"
android:paddingTop="4dp">
<Spinner
android:id="@+id/spinnerVehicle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/arrayLanguages"
android:gravity="center_horizontal"
android:prompt="@string/selUsername"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/startDate"
android:textSize="22dp"
android:paddingLeft="5dp"
android:layout_marginTop="15sp"
android:textColor="#000000"
android:gravity="left"
android:id="@+id/labelStartDate"
/>
<LinearLayout
android:id="@+id/layoutStartPicker"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_gravity="left"
android:gravity="right"
android:layout_marginLeft="2sp"
android:layout_marginRight="3sp"
android:orientation="horizontal"
android:background="@drawable/style_spinner">
<ImageView
android:id="@+id/imageViewStartDate"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical"
android:src="@drawable/calendar_48" />
<TextView
android:id="@+id/textViewStartDate"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="10:41, 12.12.2011"
android:textSize="18sp"
android:paddingLeft="1dp"
android:textColor="#000000"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/endDate"
android:textSize="22dp"
android:paddingLeft="5dp"
android:textColor="#000000"
android:gravity="left"
android:id="@+id/labelEndDate"
/>
<LinearLayout
android:id="@+id/layoutEndPicker"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_gravity="left"
android:gravity="right"
android:layout_marginTop="3sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="3sp"
android:orientation="horizontal"
android:background="@drawable/style_spinner">
<ImageView
android:id="@+id/imageViewEndDate"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:src="@drawable/calendar_48_red" />
<TextView
android:id="@+id/textViewEndDate"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="10:00, 13.12.2011"
android:textSize="18sp"
android:paddingLeft="1dp"
android:textColor="#000000" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom">
<TextView
android:id="@+id/textViewSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:text=""
android:textSize="16dp"
android:paddingLeft="5dp"
android:textColor="#000000"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="0"
style="?header"
android:gravity="center"
android:paddingTop="4dp">
<Button
android:id="@+id/buttonDisplay"
style="?login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="0"
android:text="@string/display" />
<Button
android:id="@+id/buttonDisplay"
style="?login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="0"
android:text="@string/display" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="20dp"
android:layout_height="fill_parent"
android:id="@+id/slidelayout"
android:layout_toRightOf="@id/liveVehicle"
android:gravity="center_vertical"
android:orientation="vertical"
android:layout_weight="0">
<ImageView
android:id="@+id/slideLayoutImage"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:src="@drawable/arrow_left"
android:layout_weight="1"
style="?sliders" />
</LinearLayout>
<fragment
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/map"
android:layout_toRightOf="@id/slidelayout"
android:layout_weight="1"
tools:context=".HistoryActivity"
android:name="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="20dp"
android:layout_height="fill_parent"
android:id="@+id/slidelayout"
android:layout_toRightOf="@id/liveVehicle"
android:gravity="center_vertical"
android:orientation="vertical"
android:layout_weight="0">
<ImageView
android:id="@+id/slideLayoutImage"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:src="@drawable/arrow_left"
android:layout_weight="1"
style="?sliders" />
</LinearLayout>
<LinearLayout
android:id="@+id/layoutGoogleMaps"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_toRightOf="@id/slidelayout"
android:layout_weight="1"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/changeMapType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:padding="3dp"
android:src="@drawable/satellite"
android:visibility="gone"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="30dp"
android:layout_margin="3dp"
android:layout_alignLeft="@+id/changeMapType"
android:layout_below="@+id/changeMapType"
android:background="#fff"
android:orientation="horizontal"
android:id="@+id/layoutTraffic"
android:visibility="gone">
<ImageView
android:id="@+id/checkTraffic"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="1dp"
android:src="@drawable/checked"/>
<TextView
android:id="@+id/changeTraffic2"
android:text="Traffic"
android:textSize="16dp"
android:textColor="#000"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"/>
<ImageView
android:id="@+id/changeMapType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:padding="3dp"
android:src="@drawable/satellite"
android:visibility="gone"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="30dp"
android:layout_margin="3dp"
android:layout_alignLeft="@+id/changeMapType"
android:layout_below="@+id/changeMapType"
android:background="#fff"
android:orientation="horizontal"
android:id="@+id/layoutTraffic"
android:visibility="gone">
<ImageView
android:id="@+id/checkTraffic"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="1dp"
android:src="@drawable/checked"/>
<TextView
android:id="@+id/changeTraffic2"
android:text="Traffic"
android:textSize="16dp"
android:textColor="#000"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -5,90 +5,70 @@
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout1"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000">
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout2" android:orientation="vertical">
<!--
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout3">
<LinearLayout android:layout_width="80dp" android:id="@+id/linearLayout4" android:layout_height="wrap_content">
<Button android:layout_width="wrap_content" android:text="Create tabs" android:layout_height="wrap_content" android:id="@+id/button1"></Button>
</LinearLayout>
<LinearLayout android:layout_height="match_parent" android:id="@+id/linearLayout5" android:layout_width="match_parent">
<LinearLayout android:layout_width="100dp" android:layout_height="match_parent" android:id="@+id/linearLayout7" android:layout_weight="0.29" android:weightSum="1">
<Button android:text="Remove selected tab" android:layout_height="wrap_content" android:id="@+id/button3" android:layout_width="wrap_content"></Button>
</LinearLayout>
<EditText android:layout_width="wrap_content" android:id="@+id/editText1" android:layout_height="wrap_content" android:inputType="number" android:layout_weight="13.86">
<requestFocus></requestFocus>
</EditText>
<LinearLayout android:layout_width="80dp" android:layout_height="match_parent" android:id="@+id/linearLayout7" android:layout_weight="0.29" android:weightSum="1">
<Button android:layout_width="wrap_content" android:text="Add tab" android:layout_height="wrap_content" android:id="@+id/button2" android:layout_weight="0.25"></Button>
</LinearLayout>
</LinearLayout>
</LinearLayout>
-->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:id="@+id/linearLayout6"
android:orientation="horizontal"
android:layout_height="fill_parent">
<TabHost
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/tabhost"
android:layout_weight="1">
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0dp">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="390dp"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@android:id/tabs"/>
android:id="@+id/linearLayout1"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000">
</RelativeLayout>
</TabHost>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="0"
android:orientation="horizontal">
<LinearLayout
android:layout_width="20dp"
android:layout_height="fill_parent"
android:id="@+id/layoutSlideMenu"
android:gravity="center_vertical"
android:orientation="vertical"
android:layout_weight="0">
<ImageView
android:id="@+id/imageViewSlideMenu"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:src="@drawable/arrow_right"
android:layout_weight="1"
style="?sliders" />
</LinearLayout>
<include
android:id="@+id/layoutMenu"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
layout="@layout/menu" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:id="@+id/linearLayout6"
android:orientation="horizontal"
android:layout_height="fill_parent">
<TabHost
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/tabhost"
android:layout_weight="1">
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0dp">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="390dp"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@android:id/tabs"/>
</RelativeLayout>
</TabHost>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="0"
android:orientation="horizontal">
<LinearLayout
android:layout_width="20dp"
android:layout_height="fill_parent"
android:id="@+id/layoutSlideMenu"
android:gravity="center_vertical"
android:orientation="vertical"
android:layout_weight="0">
<ImageView
android:id="@+id/imageViewSlideMenu"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:src="@drawable/arrow_right"
android:layout_weight="1"
style="?sliders" />
</LinearLayout>
<include
android:id="@+id/layoutMenu"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
layout="@layout/menu" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/layoutNewMessage"
android:layout_width="250dp"
@ -100,20 +80,20 @@
android:layout_margin="2dp"
android:visibility="invisible"
android:background="@drawable/alert_message">
android:visibility="invisible"
android:background="@drawable/alert_message">
<ImageView
android:id="@+id/imageViewClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/balloon_overlay_close"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
<ImageView
android:id="@+id/imageViewClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/balloon_overlay_close"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="invisible"
android:background="@drawable/balloon_close_bg_selector" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_height="wrap_content"
android:padding="3dp">
<TextView
android:id="@+id/slideTabsText"
@ -127,15 +107,15 @@
android:gravity="center_vertical"
android:layout_above="@android:id/tabs"/>
<LinearLayout
android:layout_above="@android:id/tabs"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageViewPopUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageViewPopUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/message"
android:layout_gravity="center_vertical" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -162,7 +142,6 @@
android:layout_gravity="center_vertical"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -1,240 +1,241 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="1"
android:id="@+id/layoutMain"
style="?bg">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeader">
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="1"
android:id="@+id/layoutMain"
style="?bg">
<ImageView
android:id="@+id/imageViewMsg"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/message"
android:paddingLeft="5dp"
android:layout_margin="3dp"
android:layout_weight="0" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="@string/textMessaging"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeader">
<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/imageViewMsg"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/message"
android:paddingLeft="5dp"
android:layout_margin="3dp"
android:layout_weight="0" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="@string/textMessaging"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<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="invisible"
android:src="@drawable/arrow_menu_down" />
<ImageButton
android:id="@+id/imageButtonAdd2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:visibility="invisible"
android:background="@drawable/addmessage_selector"/>
<ImageButton
android:id="@+id/imageButtonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/addmessage_selector"/>
<TextView
android:id="@+id/textViewNew"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="New"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"
android:paddingRight="5dp"
android:visibility="gone"/>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeaderConversation">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical">
<ImageButton
android:id="@+id/imageButtonBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/messageback_selector"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:gravity="right|center_vertical"
android:orientation="horizontal"
android:paddingBottom="0dp"
android:paddingRight="15dp"
android:paddingTop="0dp" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0">
<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="invisible"
android:src="@drawable/arrow_menu_down" />
<ImageButton
android:id="@+id/imageButtonAdd2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:visibility="invisible"
android:background="@drawable/addmessage_selector"/>
<ImageButton
android:id="@+id/imageButtonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:scaleType="centerInside"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/addmessage_selector"/>
<TextView
android:id="@+id/textViewNew"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:text="New"
android:textStyle="bold"
android:paddingTop="7dp"
android:textColor="#FFFFFF"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"
android:paddingRight="5dp"
android:visibility="gone"/>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header"
android:id="@+id/layoutHeaderConversation">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical">
<ImageButton
android:id="@+id/imageButtonBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"
android:paddingLeft="2dp"
android:background="@drawable/messageback_selector"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:gravity="right|center_vertical"
android:orientation="horizontal"
android:paddingBottom="0dp"
android:paddingRight="15dp"
android:paddingTop="0dp" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0">
<ImageView
android:id="@+id/imageViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:src="@drawable/ambulance_large"
android:layout_margin="3dp" />
</LinearLayout>
<TextView
android:id="@+id/textViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Large Text"
android:gravity="center_vertical"
android:paddingLeft="3dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
</LinearLayout>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/layoutConversations"
android:layout_weight="1"
android:orientation="vertical">
android:id="@+id/imageViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:src="@drawable/ambulance_large"
android:layout_margin="3dp" />
</LinearLayout>
<TextView
android:id="@+id/textViewSelectedContact"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Large Text"
android:gravity="center_vertical"
android:paddingLeft="3dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_weight="0"/>
<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#999999"
android:drawSelectorOnTop="false"
android:horizontalSpacing="0dp"
android:numColumns="1"
android:verticalSpacing="1dp" >
</GridView>
</LinearLayout>
<LinearLayout
android:id="@+id/layoutSendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header">
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="fill_parent">
<TextView
android:id="@+id/textViewSendMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/message"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:textSize="18dp"
/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<EditText
android:id="@+id/editTextMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:inputType="text"
android:maxLength="255" >
</EditText>
</LinearLayout>
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<ImageView
android:id="@+id/imageBarcode"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:src="@drawable/barcode"
android:layout_margin="3dp" />
</LinearLayout>
<Button
android:id="@+id/imageButtonSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="@string/send"
android:layout_marginRight="5dp"
android:layout_gravity="center"
android:paddingLeft="6dp"
android:textColor="#000000"
style="?login"/>
</LinearLayout>
</LinearLayout>
<!-- android:background="@drawable/addmessage_selector" -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/layoutConversations"
android:layout_weight="1"
android:orientation="vertical">
<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#999999"
android:drawSelectorOnTop="false"
android:horizontalSpacing="0dp"
android:numColumns="1"
android:verticalSpacing="1dp" >
</GridView>
</LinearLayout>
<LinearLayout
android:id="@+id/layoutSendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_weight="0"
android:orientation="horizontal"
style="?header">
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="fill_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/message"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:textSize="18dp"
/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<EditText
android:id="@+id/editTextMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:inputType="text"
android:maxLength="255"
android:autofillHints="">
</EditText>
</LinearLayout>
<LinearLayout
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="4dp">
<ImageView
android:id="@+id/imageBarcode"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:src="@drawable/barcode"
android:layout_margin="3dp" />
</LinearLayout>
<Button
android:id="@+id/imageButtonSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="@string/send"
android:layout_marginRight="5dp"
android:layout_gravity="center"
android:paddingLeft="6dp"
android:textColor="#000000"
style="?login"/>
</LinearLayout>
</LinearLayout>

View File

@ -232,4 +232,7 @@
<item >German</item>
<item >Romanian</item>
</string-array>
<string name="speedMph">%1$d mph</string>
</resources>

View File

@ -236,4 +236,7 @@
<item >Spanish</item>
<item >Russian</item>
</string-array>
<string name="speedMph">%1$d mph</string>
</resources>

View File

@ -233,4 +233,7 @@
<item >Turca</item>
<item >Romana</item>
</string-array>
<string name="speedMph">%1$d mph</string>
</resources>

View File

@ -232,4 +232,7 @@
<item >German</item>
<item >Romanian</item>
</string-array>
<string name="speedMph">%1$d mph</string>
</resources>

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"?>
<resources>
<string name="app_name">SafeMobile Dispatch</string>
<string name="app_name_demo">SafeMobile Dispatch Demo</string>
<string name="app_name">SafeDispatch Mobile</string>
<string name="app_name_demo">SafeDispatch Mobile Demo</string>
<string name="app_name_radiopod">RadioPod</string>
<string name="app_name_radiopad">RadioPad</string>
<string name="app_name_radiopodd">RadioPod</string>
@ -254,4 +254,14 @@
</string-array>
<string name="title_activity_new_live">NewLiveActivity</string>
<string name="title_activity_google_maps">GoogleMapsActivity</string>
<string name="speedMph">%1$d mph</string>
<string name="DialogService_Info_ErrorMessage">Oops, something happened</string>
<string name="go_to_settings">Go to settings</string>
<string name="permission_denied">Permission Denied</string>
<string name="permissionBlocked">%1$s permission was not accepted. To be able to use the %2$s, please open application settings and grant the %3$s permission</string>
<string name="microphone">Microphone</string>
<string name="radio_tab">Radio Tab</string>
</resources>

View File

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