Merge pull request 'feature/notifications' (#18) from feature/notifications into develop

Reviewed-on: #18
This commit is contained in:
CiufudeanDani 2022-04-01 07:03:54 +00:00
commit d9a031a46d
5 changed files with 246 additions and 306 deletions

View File

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

View File

@ -78,6 +78,4 @@ dependencies {
// add Gson // add Gson
implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.google.code.gson:gson:2.8.6'
//retrofit
} }

View File

@ -21,11 +21,16 @@ public class NotificationActivity extends Activity{
// broadcast intent // broadcast intent
Intent i = new Intent(); Intent i = new Intent();
switch(key) switch(key) {
{ case AppParams.messageNotif:
case AppParams.messageNotif: i.setAction(NOTIFICATION_MESSAGE_INTENT); break; i.setAction(NOTIFICATION_MESSAGE_INTENT);
case AppParams.alertNotif: i.setAction(NOTIFICATION_ALERT_INTENT); break; break;
case AppParams.pollNotif: i.setAction(NOTIFICATION_POLL_INTENT); break; case AppParams.alertNotif:
i.setAction(NOTIFICATION_ALERT_INTENT);
break;
case AppParams.pollNotif:
i.setAction(NOTIFICATION_POLL_INTENT);
break;
} }
getBaseContext().sendBroadcast(i); getBaseContext().sendBroadcast(i);
@ -35,6 +40,4 @@ public class NotificationActivity extends Activity{
/* Finish activity and return to parent activity */ /* Finish activity and return to parent activity */
finish(); finish();
} }
} }

View File

@ -59,7 +59,7 @@ import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.Notification; import android.app.NotificationChannel;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
@ -74,6 +74,7 @@ import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
@ -94,6 +95,8 @@ import android.widget.Toast;
import android.widget.TabHost.TabSpec; import android.widget.TabHost.TabSpec;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
public class TabLayoutActivity extends AbstractSDParentActivity { public class TabLayoutActivity extends AbstractSDParentActivity {
@ -1231,7 +1234,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
getMessageActivity().updateSMS(sms.smsList); getMessageActivity().updateSMS(sms.smsList);
} }
} catch (Exception ex) { } catch (Exception ex) {
SM.Debug("Error on smsReceived:" + ex.toString()); SM.Debug("Error on smsReceived:" + ex);
} }
} }
@ -1462,7 +1465,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
SM.Debug("tmpHist seqID:" + tmpHist.seqID); SM.Debug("tmpHist seqID:" + tmpHist.seqID);
int pos = Integer.parseInt(tmpHist.seqID.substring(0, tmpHist.seqID.indexOf('.'))); int pos = Integer.parseInt(tmpHist.seqID.substring(0, tmpHist.seqID.indexOf('.')));
int all = Integer.parseInt(tmpHist.seqID.substring(tmpHist.seqID.indexOf('.') + 1, tmpHist.seqID.length())); int all = Integer.parseInt(tmpHist.seqID.substring(tmpHist.seqID.indexOf('.') + 1));
if (all != 0) { if (all != 0) {
if (Boolean.TRUE.equals(getFirstHistoryData())) { if (Boolean.TRUE.equals(getFirstHistoryData())) {
try { try {
@ -1704,13 +1707,11 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
case 137: case 137:
setMess("zone " + tempArr[1]); setMess("zone " + tempArr[1]);
break; break;
case 138:
setMess("emergency");
break;
case 140: case 140:
setMess("telemetry " + tempArr[1]); setMess("telemetry " + tempArr[1]);
break; break;
default: default:
// 138
setMess("emergency"); setMess("emergency");
} }
myHandler.post(updateResultsAlarm); myHandler.post(updateResultsAlarm);
@ -1989,10 +1990,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
public void createNotification(int icon) { public void createNotification(int icon) {
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String tickerText = "SafeMobile Dispatch: New Message from " + getImei(); String contentTitle, contentText;
String contentTitle = "New Message from " + getImei();
String contentText = "\"" + getMess() + "\"";
Vehicle veh = getVehicle4Imei(getImei()); Vehicle veh = getVehicle4Imei(getImei());
int iconValue = icon; int iconValue = icon;
@ -2005,7 +2003,6 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
case AppParams.pollNotif: case AppParams.pollNotif:
contentText = "\"" + getMess() + "\""; contentText = "\"" + getMess() + "\"";
contentTitle = "Poll Reply from " + (veh != null ? getVehicle4Imei(getImei()).name : getImei()); contentTitle = "Poll Reply from " + (veh != null ? getVehicle4Imei(getImei()).name : getImei());
tickerText = "SafeMobile Dispatch: Poll Reply from " + (veh != null ? getVehicle4Imei(getImei()).name : getImei());
icon = R.drawable.poll; icon = R.drawable.poll;
break; break;
case AppParams.alertNotif: case AppParams.alertNotif:
@ -2014,34 +2011,53 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
vehName = getString(R.string.from) + ": " + getVehicle4Imei(getImei()).name; vehName = getString(R.string.from) + ": " + getVehicle4Imei(getImei()).name;
contentText = "\"" + getMess() + "\""; contentText = "\"" + getMess() + "\"";
contentTitle = getString(R.string.newAlarm) + vehName; contentTitle = getString(R.string.newAlarm) + vehName;
tickerText = "SafeMobile Dispatch: " + getString(R.string.newAlarm) + vehName; icon = R.drawable.arrow_down;
icon = R.drawable.alert;
break; break;
default: default:
throw new IllegalStateException("Unexpected value: " + icon); throw new IllegalStateException("Unexpected value: " + icon);
} }
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
// set intent to be opened on NotificationClick // set intent to be opened on NotificationClick
/* Notification */ /* Notification */
Intent notificationIntent = new Intent(this, NotificationActivity.class); Intent intent = new Intent(this, NotificationActivity.class);
notificationIntent.putExtra("key", iconValue); intent.putExtra("key", iconValue);
// cancel old notification // cancel old notification
mNotificationManager.cancel(icon); mNotificationManager.cancel(icon);
PendingIntent contentIntent = PendingIntent.getActivity(context, NOTIFICATION_ACTIVITY_RESULT, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); PendingIntent pendingIntent = PendingIntent.getActivity(context, NOTIFICATION_ACTIVITY_RESULT, intent, PendingIntent.FLAG_CANCEL_CURRENT);
createNotificationChannel(icon, contentTitle, contentText, pendingIntent);
// flag that the notification will be closed when clicked
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.number = 1; // the same notification will be shown;
notification.tickerText = tickerText; // notification text when arrives
notification.sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.new_sms);
// add notification to the manager
mNotificationManager.notify(icon, notification);
} }
private void createNotificationChannel(int icon, String title, String text, PendingIntent pendingIntent) {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
String notificationChannelID = String.valueOf(icon);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "Notification Channel";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(notificationChannelID, name, importance);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, notificationChannelID)
.setSmallIcon(icon)
.setContentTitle(title)
.setContentText(text)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
Log.v("test111", "test");
NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context);
managerCompat.notify(icon, builder.build());
}
// return vehicle according to imei // return vehicle according to imei
private Vehicle getVehicle4Imei(String imei) { private Vehicle getVehicle4Imei(String imei) {
Vehicle veh = null; Vehicle veh = null;
@ -2185,7 +2201,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
setVehicleStatus(Integer.parseInt(params[1]), Integer.parseInt(params[2]), Integer.parseInt(params[3]), Integer.parseInt(params[4])); setVehicleStatus(Integer.parseInt(params[1]), Integer.parseInt(params[2]), Integer.parseInt(params[3]), Integer.parseInt(params[4]));
} catch (Exception ex) { } catch (Exception ex) {
SM.Exception("Paramas -> setVehicleStatus", "EXCeption ex " + ex.toString()); SM.Exception("Paramas -> setVehicleStatus", "EXCeption ex " + ex);
} }
break; break;
@ -2216,21 +2232,6 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
new ConnectTask().execute(params); new ConnectTask().execute(params);
} }
public class ConnectParserTask extends AsyncTask<String, Void, TCPhandler> {
@Override
protected TCPhandler doInBackground(String... params) {
if (myService != null)
tcpParser = myService.getTCPmsgParser();
// add TCPParserListener
if (tcpParser != null) {
SM.Debug("## tcpParser != null ", "#### call tcpParserListener(");
tcpParserListener();
}
return null;
}
}
/* Display Toast messages*/ /* Display Toast messages*/
@Override @Override
public void displayToast(final String msg) { public void displayToast(final String msg) {
@ -2340,10 +2341,8 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);
SM.Debug("onRequestPermissionsResult", "[requestCode] " + requestCode); SM.Debug("onRequestPermissionsResult", "[requestCode] " + requestCode);
String permission = "";
switch (requestCode) { switch (requestCode) {
case PermissionModule.RECORD_AUDIO_PERMISSION_REQUEST_CODE: case PermissionModule.RECORD_AUDIO_PERMISSION_REQUEST_CODE:
permission = Manifest.permission.RECORD_AUDIO;
break; break;
default: default:
throw new IllegalStateException("Unexpected value: " + requestCode); throw new IllegalStateException("Unexpected value: " + requestCode);
@ -2394,10 +2393,9 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
private void waitForUserInput(Boolean result) { private void waitForUserInput(Boolean result) {
if (result) { if (result) {
final int requestCode = 1202;
//navigate to application's settings //navigate to application's settings
String action = ProviderSettingsHelper.getAction(ProviderSettingsStatus.APPLICATION_DETAILS); String action = ProviderSettingsHelper.getAction(ProviderSettingsStatus.APPLICATION_DETAILS);
if (action == null || action == "") if (action == null || action.equals(""))
return; return;
boolean isActionApplicationDetailsSettings = action.equals(ProviderSettingsHelper.ACTION_APPLICATION_DETAILS_SETTINGS); boolean isActionApplicationDetailsSettings = action.equals(ProviderSettingsHelper.ACTION_APPLICATION_DETAILS_SETTINGS);

View File

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