872 lines
26 KiB
Java
872 lines
26 KiB
Java
|
/*
|
||
|
* Author : ErVaLt / techwavedev.com
|
||
|
* Description : TabLayout Andorid App
|
||
|
*/
|
||
|
package com.safemobile.dispatch_demo;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.Calendar;
|
||
|
import java.util.Date;
|
||
|
import java.util.Hashtable;
|
||
|
import java.util.Locale;
|
||
|
|
||
|
/** fix import */
|
||
|
import com.safemobile.dispatch.*;
|
||
|
import com.safemobile.dispatch_demo.*;
|
||
|
|
||
|
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 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.ArrayAdapter;
|
||
|
import android.widget.Button;
|
||
|
import android.widget.EditText;
|
||
|
import android.widget.ImageButton;
|
||
|
import android.widget.ImageView;
|
||
|
import android.widget.LinearLayout;
|
||
|
import android.widget.TextView;
|
||
|
import android.widget.AdapterView.OnItemClickListener;
|
||
|
import android.widget.GridView;
|
||
|
import android.widget.Toast;
|
||
|
|
||
|
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.imei = 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.allVehicle);
|
||
|
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.allVehicle);
|
||
|
|
||
|
//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();
|
||
|
}
|
||
|
}
|