|
|
|
@ -14,13 +14,11 @@ import java.util.Timer;
|
|
|
|
|
import java.util.TimerTask;
|
|
|
|
|
|
|
|
|
|
import com.google.android.gms.tasks.Task;
|
|
|
|
|
import com.google.android.gms.tasks.TaskCompletionSource;
|
|
|
|
|
import com.safemobile.activities.AbstractEmptyActivity;
|
|
|
|
|
import com.safemobile.activities.AbstractLiveActivity;
|
|
|
|
|
import com.safemobile.activities.AbstractMessagesActivity;
|
|
|
|
|
import com.safemobile.activities.AbstractRadioActivity;
|
|
|
|
|
import com.safemobile.activities.AbstractSDParentActivity;
|
|
|
|
|
import com.safemobile.safedispatch.R;
|
|
|
|
|
import com.safemobile.enums.AuthorizationCode;
|
|
|
|
|
import com.safemobile.enums.AuthorizationStatus;
|
|
|
|
|
import com.safemobile.enums.ProviderSettingsStatus;
|
|
|
|
@ -59,7 +57,7 @@ import com.safemobile.services.TCPService.TCPBinder;
|
|
|
|
|
import android.Manifest;
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
|
|
import android.app.Dialog;
|
|
|
|
|
import android.app.Notification;
|
|
|
|
|
import android.app.NotificationChannel;
|
|
|
|
|
import android.app.NotificationManager;
|
|
|
|
|
import android.app.PendingIntent;
|
|
|
|
|
import android.content.BroadcastReceiver;
|
|
|
|
@ -74,6 +72,7 @@ import android.content.res.Configuration;
|
|
|
|
|
import android.content.res.Resources;
|
|
|
|
|
import android.net.Uri;
|
|
|
|
|
import android.os.AsyncTask;
|
|
|
|
|
import android.os.Build;
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
import android.os.Handler;
|
|
|
|
|
import android.os.IBinder;
|
|
|
|
@ -94,6 +93,8 @@ import android.widget.Toast;
|
|
|
|
|
import android.widget.TabHost.TabSpec;
|
|
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
|
import androidx.core.app.NotificationCompat;
|
|
|
|
|
import androidx.core.app.NotificationManagerCompat;
|
|
|
|
|
|
|
|
|
|
public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
|
|
|
|
@ -1233,7 +1234,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
getMessageActivity().updateSMS(sms.smsList);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
SM.Debug("Error on smsReceived:" + ex.toString());
|
|
|
|
|
SM.Debug("Error on smsReceived:" + ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1426,7 +1427,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
|
|
|
|
|
SM.Debug("tmpHist seqID:" + tmpHist.seqID);
|
|
|
|
|
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 (Boolean.TRUE.equals(getFirstHistoryData())) {
|
|
|
|
|
try {
|
|
|
|
@ -1668,13 +1669,11 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
case 137:
|
|
|
|
|
setMess("zone " + tempArr[1]);
|
|
|
|
|
break;
|
|
|
|
|
case 138:
|
|
|
|
|
setMess("emergency");
|
|
|
|
|
break;
|
|
|
|
|
case 140:
|
|
|
|
|
setMess("telemetry " + tempArr[1]);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
// 138
|
|
|
|
|
setMess("emergency");
|
|
|
|
|
}
|
|
|
|
|
myHandler.post(updateResultsAlarm);
|
|
|
|
@ -1896,10 +1895,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
|
|
|
|
|
public void createNotification(int icon) {
|
|
|
|
|
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
|
|
|
|
String tickerText = "SafeMobile Dispatch: New Message from " + getImei();
|
|
|
|
|
String contentTitle = "New Message from " + getImei();
|
|
|
|
|
String contentText = "\"" + getMess() + "\"";
|
|
|
|
|
|
|
|
|
|
String contentTitle, contentText;
|
|
|
|
|
Vehicle veh = getVehicle4Imei(getImei());
|
|
|
|
|
|
|
|
|
|
int iconValue = icon;
|
|
|
|
@ -1912,7 +1908,6 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
case AppParams.pollNotif:
|
|
|
|
|
contentText = "\"" + getMess() + "\"";
|
|
|
|
|
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;
|
|
|
|
|
break;
|
|
|
|
|
case AppParams.alertNotif:
|
|
|
|
@ -1921,34 +1916,53 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
vehName = getString(R.string.from) + ": " + getVehicle4Imei(getImei()).name;
|
|
|
|
|
contentText = "\"" + getMess() + "\"";
|
|
|
|
|
contentTitle = getString(R.string.newAlarm) + vehName;
|
|
|
|
|
tickerText = "SafeMobile Dispatch: " + getString(R.string.newAlarm) + vehName;
|
|
|
|
|
icon = R.drawable.alert;
|
|
|
|
|
icon = R.drawable.arrow_down;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new IllegalStateException("Unexpected value: " + icon);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Notification notification = new Notification(icon, tickerText, System.currentTimeMillis());
|
|
|
|
|
|
|
|
|
|
// set intent to be opened on NotificationClick
|
|
|
|
|
/* Notification */
|
|
|
|
|
Intent notificationIntent = new Intent(this, NotificationActivity.class);
|
|
|
|
|
notificationIntent.putExtra("key", iconValue);
|
|
|
|
|
Intent intent = new Intent(this, NotificationActivity.class);
|
|
|
|
|
intent.putExtra("key", iconValue);
|
|
|
|
|
|
|
|
|
|
// cancel old notification
|
|
|
|
|
mNotificationManager.cancel(icon);
|
|
|
|
|
|
|
|
|
|
PendingIntent contentIntent = PendingIntent.getActivity(context, NOTIFICATION_ACTIVITY_RESULT, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
|
|
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
PendingIntent pendingIntent = PendingIntent.getActivity(context, NOTIFICATION_ACTIVITY_RESULT, intent, PendingIntent.FLAG_CANCEL_CURRENT);
|
|
|
|
|
createNotificationChannel(icon, contentTitle, contentText, pendingIntent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
private Vehicle getVehicle4Imei(String imei) {
|
|
|
|
|
Vehicle veh = null;
|
|
|
|
@ -2092,7 +2106,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
|
|
|
|
|
setVehicleStatus(Integer.parseInt(params[1]), Integer.parseInt(params[2]), Integer.parseInt(params[3]), Integer.parseInt(params[4]));
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
SM.Exception("Paramas -> setVehicleStatus", "EXCeption ex " + ex.toString());
|
|
|
|
|
SM.Exception("Paramas -> setVehicleStatus", "EXCeption ex " + ex);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
@ -2123,21 +2137,6 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
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*/
|
|
|
|
|
@Override
|
|
|
|
|
public void displayToast(final String msg) {
|
|
|
|
@ -2247,10 +2246,8 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
|
|
|
|
|
|
|
|
SM.Debug("onRequestPermissionsResult", "[requestCode] " + requestCode);
|
|
|
|
|
String permission = "";
|
|
|
|
|
switch (requestCode) {
|
|
|
|
|
case PermissionModule.RECORD_AUDIO_PERMISSION_REQUEST_CODE:
|
|
|
|
|
permission = Manifest.permission.RECORD_AUDIO;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new IllegalStateException("Unexpected value: " + requestCode);
|
|
|
|
@ -2301,10 +2298,9 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
|
|
|
|
|
|
|
|
|
|
private void waitForUserInput(Boolean result) {
|
|
|
|
|
if (result) {
|
|
|
|
|
final int requestCode = 1202;
|
|
|
|
|
//navigate to application's settings
|
|
|
|
|
String action = ProviderSettingsHelper.getAction(ProviderSettingsStatus.APPLICATION_DETAILS);
|
|
|
|
|
if (action == null || action == "")
|
|
|
|
|
if (action == null || action.equals(""))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
boolean isActionApplicationDetailsSettings = action.equals(ProviderSettingsHelper.ACTION_APPLICATION_DETAILS_SETTINGS);
|
|
|
|
|