diff --git a/libSafeMobile/src/main/java/com/safemobile/activities/AbstractLiveActivity.java b/libSafeMobile/src/main/java/com/safemobile/activities/AbstractLiveActivity.java
index 236b078..6ce3a62 100644
--- a/libSafeMobile/src/main/java/com/safemobile/activities/AbstractLiveActivity.java
+++ b/libSafeMobile/src/main/java/com/safemobile/activities/AbstractLiveActivity.java
@@ -25,6 +25,7 @@ public abstract class AbstractLiveActivity extends AppCompatActivity {
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
+ public abstract void setLanguage();
/** Misc */
public AbstractSDParentActivity getParentTab() {
diff --git a/libSafeMobile/src/main/java/com/safemobile/services/TCPhandler.java b/libSafeMobile/src/main/java/com/safemobile/services/TCPhandler.java
index 072dd7a..2d1e678 100644
--- a/libSafeMobile/src/main/java/com/safemobile/services/TCPhandler.java
+++ b/libSafeMobile/src/main/java/com/safemobile/services/TCPhandler.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
+import android.util.Log;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.SM;
@@ -24,6 +25,7 @@ import java.util.TimerTask;
public class TCPhandler implements Runnable {
+ private final String TAG = "TCPhandler";
private boolean alive = true;
public String serverHostname;
@@ -56,18 +58,22 @@ public class TCPhandler implements Runnable {
// create timer to check socket status
Timer timer = new Timer();
- timer.scheduleAtFixedRate(new TimerTask() {
- @Override
- public void run() {
- try {
- previousConnectionWasUP = isConnectionUP;
- // try to send something
- TCPmsgParser._fireonTCPConnectionStatusEvent(isConnectionUP, previousConnectionWasUP);
- } catch (Exception e) {
- SM.Exception("TIMERException", e.toString());
+ try {
+ timer.scheduleAtFixedRate(new TimerTask() {
+ @Override
+ public void run() {
+ try {
+ previousConnectionWasUP = isConnectionUP;
+ // try to send something
+ TCPmsgParser._fireonTCPConnectionStatusEvent(isConnectionUP, previousConnectionWasUP);
+ } catch (Exception e) {
+ SM.Exception("TIMERException", e.toString());
+ }
}
- }
- }, 0, 3000);
+ }, 0, 3000);
+ } catch(Exception e) {
+ Log.v("Exception", e.getMessage());
+ }
// get WiFi state
isWiFiOn = isNetworkConnected();
@@ -104,6 +110,8 @@ public class TCPhandler implements Runnable {
SM.Debug("IllegalArgumentException", "TCPhandler break:"+ e);
} catch (IOException e) {
SM.Debug("IOException", "TCPhandler break:"+ e);
+ } catch (Exception e) {
+ Log.v("Exception", e.getMessage());
}
while (alive) {
@@ -111,6 +119,8 @@ public class TCPhandler implements Runnable {
Thread.sleep(3000);
} catch (InterruptedException e) {
SM.Debug("TCPhandler Crash1 on sleep:"+ e);
+ } catch (Exception e) {
+ Log.v("Exception", e.getMessage());
}
while (Boolean.TRUE.equals(isConnectionUP)) {
@@ -242,6 +252,8 @@ public class TCPhandler implements Runnable {
Thread.sleep(1000);
} catch (InterruptedException e) {
SM.Debug("TCPhandler Crash2 on sleep:"+ e);
+ } catch (Exception e) {
+ Log.v("Exception", e.getMessage());
}
//try to restart connection
if (alive && isWiFiOn)
@@ -350,6 +362,7 @@ public class TCPhandler implements Runnable {
if (soc != null)
soc.close();
} catch (IOException e1) {
+ Log.v("IOException", e1.getMessage());
e1.printStackTrace();
}
@@ -371,14 +384,15 @@ public class TCPhandler implements Runnable {
private void restartTCP() {
try {
+ Log.v(TAG, "restartTCP");
isConnectionUP = false;
previousConnectionWasUP = false;
SM.Debug("Restarting TCP...ip:" + serverHostname + ":" + port);
soc = new Socket();
- soc.connect(new InetSocketAddress(serverHostname, port), 5000);
-
+ soc.connect(new InetSocketAddress(serverHostname, port), 50000);
input = new DataInputStream(soc.getInputStream());
+
//output stream
output = new DataOutputStream(soc.getOutputStream());
@@ -386,17 +400,11 @@ public class TCPhandler implements Runnable {
isConnectionUP = true;
}
- } catch (UnknownHostException e) {
- SM.Exception("restartTCP break:" + e.toString());
+ } catch (NullPointerException | IOException e) {
+ SM.Exception("restartTCP break:" + e);
isConnectionUP = false;
} catch (IllegalArgumentException e) {
- SM.Debug("IllegalArgumentException", "restartTCP break:" + e.toString());
- } catch (IOException e) {
- SM.Exception("restartTCP break:" + e.toString());
- isConnectionUP = false;
- } catch (NullPointerException e) {
- SM.Exception("restartTCP break:" + e.toString());
- isConnectionUP = false;
+ SM.Debug("IllegalArgumentException", "restartTCP break:" + e);
}
triggerTCPConnectionStateEvent();
}
@@ -410,6 +418,7 @@ public class TCPhandler implements Runnable {
soc.close();
soc = null;
} catch (IOException e) {
+ Log.v("IOException", e.getMessage());
e.printStackTrace();
}
}
diff --git a/safeDispatch/src/main/AndroidManifest.xml b/safeDispatch/src/main/AndroidManifest.xml
index 23f0048..d91b7ed 100644
--- a/safeDispatch/src/main/AndroidManifest.xml
+++ b/safeDispatch/src/main/AndroidManifest.xml
@@ -7,6 +7,7 @@
android:glEsVersion="0x00020000"
android:required="true" />
+
diff --git a/safeDispatch/src/main/java/com/safemobile/lib/sound/TcpAudioClient.java b/safeDispatch/src/main/java/com/safemobile/lib/sound/TcpAudioClient.java
index 81d09f0..8344c36 100644
--- a/safeDispatch/src/main/java/com/safemobile/lib/sound/TcpAudioClient.java
+++ b/safeDispatch/src/main/java/com/safemobile/lib/sound/TcpAudioClient.java
@@ -107,7 +107,6 @@ public class TcpAudioClient implements Runnable {
recv = soc.getInputStream();
writer = soc.getOutputStream();
setConnOK(true);
-
} catch (IOException e) {
SM.Debug("break:" + e);
}
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/AlarmActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/AlarmActivity.java
index 4585b00..b40f29f 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/AlarmActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/AlarmActivity.java
@@ -66,6 +66,7 @@ public class AlarmActivity extends Activity {
setContentView(R.layout.tabalarm);
gridView = findViewById(R.id.gridViewAlarms);
+ gridView.setNestedScrollingEnabled(true);
adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged);
gridView.setAdapter(adapter);
@@ -171,7 +172,10 @@ public class AlarmActivity extends Activity {
if (param.equals(ALARM)) {
// set adapter
adapter = new AlertGridViewAdapter(this, getAllAlarms(), context, acknowledged);
+ int position = gridView.getFirstVisiblePosition();
+
gridView.setAdapter(adapter);
+ gridView.setSelection(position);
} else {
adapter.changeACK(ackPosition);
SM.Debug("Set ACK: " + ackPosition + " | " + (Boolean.TRUE.equals(acknowledged.get(ackPosition)) ? "true" : "false"));
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/HistoryActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/HistoryActivity.java
index e3b786a..c78c949 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/HistoryActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/HistoryActivity.java
@@ -132,6 +132,17 @@ public class HistoryActivity extends AppCompatActivity implements OnMapReadyCall
setDate();
}
+ public void setLanguage() {
+ TextView labelVehicle = findViewById(R.id.labelVehicle);
+ TextView labelStartDate = findViewById(R.id.labelStartDate);
+ TextView labelEndDate = findViewById(R.id.labelEndDate);
+
+ labelVehicle.setText(R.string.vehicle);
+ labelStartDate.setText(R.string.startDate);
+ labelEndDate.setText(R.string.endDate);
+ displayButton.setText(R.string.display);
+ }
+
private void displayHistory(ArrayList positions) {
LatLng latLng = null;
PolylineOptions polylineOptions = new PolylineOptions();
@@ -168,8 +179,9 @@ public class HistoryActivity extends AppCompatActivity implements OnMapReadyCall
private void setDate() {
Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.DATE, 1);
endDate = calendar.getTime();
- calendar.add(Calendar.DATE, -1);
+ calendar.add(Calendar.DATE, -2);
startDate = calendar.getTime();
TextView textViewStartDate = findViewById(R.id.textViewStartDate);
@@ -279,6 +291,5 @@ public class HistoryActivity extends AppCompatActivity implements OnMapReadyCall
this.googleMap.getUiSettings().setMapToolbarEnabled(false);
parentTab.demoPositionsList();
- displayButton.performClick();
}
}
\ No newline at end of file
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/LiveActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/LiveActivity.java
index 0daa7c7..111066a 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/LiveActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/LiveActivity.java
@@ -296,6 +296,11 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
registerBroadcastIntents();
}
+ public void setLanguage() {
+ TextView textView = findViewById(R.id.unit_name);
+ textView.setText(R.string.unitName);
+ }
+
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
@@ -444,12 +449,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
public void displayVehicle(double latZoom, double lngZoom) {
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++) {
@@ -464,7 +463,8 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
markerOptions.icon(markerIcon);
Marker marker = this.googleMap.addMarker(markerOptions);
- if (openWindow.equals(marker.getTitle()) || i == lastItemClicked) {
+
+ if (i == lastItemClicked) {
marker.showInfoWindow();
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newLocation, 14));
}
@@ -474,7 +474,6 @@ public class LiveActivity extends AbstractLiveActivity implements OnMapReadyCall
}
}
}
- lastItemClicked = 0;
}
private BitmapDescriptor getProperBitmap(int largeIcon, String text) {
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/MessagesActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/MessagesActivity.java
index 952c7e6..b4331b3 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/MessagesActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/MessagesActivity.java
@@ -10,6 +10,7 @@ import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
+import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
@@ -45,6 +46,7 @@ public class MessagesActivity extends Activity {
/**
* Called when the activity is first created.
*/
+ private final String TAG = "MessagesActivity";
private MessagesGridViewAdapter mAdapter;
private ConversationGridViewAdapter convAdapter;
@@ -138,6 +140,7 @@ public class MessagesActivity extends Activity {
// Implement On Item click listener
gridView.setOnItemClickListener((arg0, arg1, position, arg3) -> {
+ Log.v(TAG, "onItemClick " + LASTMESSAGES);
if (LASTMESSAGES) {
// get position
Msg item = mAdapter.getItem(position);
@@ -196,6 +199,7 @@ public class MessagesActivity extends Activity {
imageButtonBack.setOnClickListener(v -> {
// set LastMessage conversation type
LASTMESSAGES = true;
+ Log.v(TAG, "lastmessages: true");
// refresh Grid
getLastSMS();
if (AppParams.DEMO)
@@ -388,6 +392,7 @@ public class MessagesActivity extends Activity {
listLastMessages.add(new Msg(sentVehicle, txt, Calendar.getInstance().getTime(), sendSMSSeqID));
}
SM.Debug("time: " + timeGMT + " | " + Calendar.getInstance().getTime());
+ Log.v(TAG, "lastmessages: false");
LASTMESSAGES = false;
updateResultsInUi();
@@ -627,6 +632,7 @@ public class MessagesActivity extends Activity {
setScId(item.sc_id);
SM.Debug("Selected scId: " + getScId());
// set Conversation type
+ Log.v(TAG, "lastmessages: false");
LASTMESSAGES = false;
// call get SMS
getSMS4unit(getScId());
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/RecordingsActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/RecordingsActivity.java
index acdc9ca..65b86ca 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/RecordingsActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/RecordingsActivity.java
@@ -26,6 +26,7 @@ import com.safemobile.lib.AppParams;
import com.safemobile.lib.OperationCodes;
import com.safemobile.lib.Recording;
import com.safemobile.lib.SM;
+import com.safemobile.lib.Vehicle;
import com.safemobile.lib.radio.RadioGW;
import com.safemobile.lib.sound.RecordingHandle;
@@ -295,9 +296,27 @@ public class RecordingsActivity extends Activity {
private void updateResultsInUi() {
// clear played items
playingPositions = new ArrayList<>();
+
+ ArrayList recordings = getAllRecordings();
+ ArrayList filteredList = new ArrayList<>();
+ ArrayList vehicles = getParentTab().getAllVehicle();
+ for (Recording recording : recordings) {
+ if (recording.callType == 0 || recording.callType == 4) {
+ for (Vehicle vehicle : vehicles)
+ if (vehicle.imei.equals(String.valueOf(recording.subID))) {
+ filteredList.add(recording);
+ break;
+ }
+ } else {
+ filteredList.add(recording);
+ }
+ }
+
+ setAllRecordings(filteredList);
+
for (int i = 0; i < getAllRecordings().size(); i++)
playingPositions.add(true);
- // set adapter - where playingPositions stores exists values
+
adapter = new RecordingsGridViewAdapter(activity, getAllRecordings(), playingPositions);
// playing positions need to be false because no recording is played
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/SDMobileActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/SDMobileActivity.java
index 478f8da..d941432 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/SDMobileActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/SDMobileActivity.java
@@ -10,13 +10,19 @@ import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Color;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.text.Editable;
import android.text.InputType;
+import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
@@ -114,6 +120,17 @@ public class SDMobileActivity extends Activity {
super.onCreate(savedInstanceState);
SM.Debug("##### onCREATE ##### with LANGUAGE " + AppParams.LANGUAGETMP);
+ ConnectivityManager connectivityManager =
+ (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+ connectivityManager.registerDefaultNetworkCallback(networkCallback);
+ else {
+ NetworkRequest request = new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build();
+ connectivityManager.registerNetworkCallback(request, networkCallback);
+ }
+
AppParams.theme = AppParams.Theme.SAFEDISPATCH;
if (AppParams.theme == AppParams.Theme.SAFENET)
this.setTheme(R.style.Theme_Safenet);
@@ -532,6 +549,21 @@ public class SDMobileActivity extends Activity {
SM.Debug("##### onRESUME #####");
}
+ private final ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
+ @Override
+ public void onAvailable(Network network) {
+ // network available
+ Log.v("NetworkAvailability", "available");
+ if (tcp != null && !tcp.isConnectionUP)
+ saveIPandRestartTCP(AppParams.IP, AppParams.PORT);
+ }
+
+ @Override
+ public void onLost(Network network) {
+ // network unavailable
+ Log.v("NetworkAvailability", "unavailable");
+ }
+ };
private void startTabActivity(long userID) {
// good login - load activity
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/SetupActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/SetupActivity.java
index 6be79a5..1a9c92b 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/SetupActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/SetupActivity.java
@@ -2,16 +2,13 @@ package com.safemobile.safedispatch;
import java.util.Locale;
-/** fix import */
import com.safemobile.adapters.LanguageSpinnerAdapter;
import com.safemobile.lib.AppParams;
import com.safemobile.lib.SM;
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.Dialog;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
@@ -73,52 +70,49 @@ public class SetupActivity extends Activity {
setContentView(R.layout.tabsetup);
- layoutSpinnerLanguage = (LinearLayout) findViewById(R.id.layoutSpinnerLanguage);
+ layoutSpinnerLanguage = findViewById(R.id.layoutSpinnerLanguage);
layoutSpinnerLanguage.setOnClickListener(LanguageListener);
- imageLanguage = (ImageView) findViewById(R.id.imageLanguage);
- textViewSpinnerLanguage = (TextView) findViewById(R.id.textViewSpinnerLanguage);
+ imageLanguage = findViewById(R.id.imageLanguage);
+ textViewSpinnerLanguage = findViewById(R.id.textViewSpinnerLanguage);
// change spinner icon and selected language according to tmpLanguage
- if (AppParams.LANGUAGETMP.equals("en")){
- imageLanguage.setImageResource(R.drawable.en);
- textViewSpinnerLanguage.setText(getString(R.string.en));
- }
- else if (AppParams.LANGUAGETMP.equals("de")){
- imageLanguage.setImageResource(R.drawable.de);
- textViewSpinnerLanguage.setText(getString(R.string.de));
- }
- else if (AppParams.LANGUAGETMP.equals("tr")){
- imageLanguage.setImageResource(R.drawable.tr);
- textViewSpinnerLanguage.setText(getString(R.string.tr));
- }
- else if (AppParams.LANGUAGETMP.equals("ro")){
- imageLanguage.setImageResource(R.drawable.ro);
- textViewSpinnerLanguage.setText(getString(R.string.ro));
- }
- else if(AppParams.LANGUAGETMP.equals("es")){
- imageLanguage.setImageResource(R.drawable.es);
- textViewSpinnerLanguage.setText(getString(R.string.es));
- }
- else if(AppParams.LANGUAGETMP.equals("ru")){
- imageLanguage.setImageResource(R.drawable.ru);
- textViewSpinnerLanguage.setText(getString(R.string.ru));
+ switch (AppParams.LANGUAGETMP) {
+ case "en":
+ imageLanguage.setImageResource(R.drawable.en);
+ textViewSpinnerLanguage.setText(getString(R.string.en));
+ break;
+ case "de":
+ imageLanguage.setImageResource(R.drawable.de);
+ textViewSpinnerLanguage.setText(getString(R.string.de));
+ break;
+ case "tr":
+ imageLanguage.setImageResource(R.drawable.tr);
+ textViewSpinnerLanguage.setText(getString(R.string.tr));
+ break;
+ case "ro":
+ imageLanguage.setImageResource(R.drawable.ro);
+ textViewSpinnerLanguage.setText(getString(R.string.ro));
+ break;
+ case "es":
+ imageLanguage.setImageResource(R.drawable.es);
+ textViewSpinnerLanguage.setText(getString(R.string.es));
+ break;
+ case "ru":
+ imageLanguage.setImageResource(R.drawable.ru);
+ textViewSpinnerLanguage.setText(getString(R.string.ru));
+ break;
}
// get visual elements
- appServerIP = (EditText) findViewById(R.id.appServerIP);
- appServerPort = (EditText) findViewById(R.id.appServerPort);
+ appServerIP = findViewById(R.id.appServerIP);
+ appServerPort = findViewById(R.id.appServerPort);
// hide path layout used only on Pad/Pod
- layoutPath = (LinearLayout) findViewById(R.id.layoutPath);
+ layoutPath = findViewById(R.id.layoutPath);
layoutPath.setVisibility(View.GONE);
- btn_save = (Button) findViewById(R.id.btn_save);
+ btn_save = findViewById(R.id.btn_save);
- btn_save.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- saveSettings();
- }
- });
+ btn_save.setOnClickListener(v -> saveSettings());
// set values
if(!AppParams.IP.equals("n/a"))
@@ -134,46 +128,31 @@ public class SetupActivity extends Activity {
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();
- }
- });
+ .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();
}
// listener when select language pressed
- private OnClickListener LanguageListener = new OnClickListener() {
+ private final OnClickListener LanguageListener = new OnClickListener() {
@Override
public void onClick(View v) {
final LanguageSpinnerAdapter adapter = new LanguageSpinnerAdapter(context, android.R.layout.simple_spinner_item, Languages, getLayoutInflater());
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(getString(R.string.selLanguage));
- builder.setAdapter(adapter , new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- textViewSpinnerLanguage.setText(adapter.getItem(which));
- switch(which)
- {
- case 0: imageLanguage.setImageResource(R.drawable.en); AppParams.LANGUAGETMP = "en"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
- case 1: imageLanguage.setImageResource(R.drawable.de); AppParams.LANGUAGETMP = "de"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
- case 2: imageLanguage.setImageResource(R.drawable.tr); AppParams.LANGUAGETMP = "tr"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
- case 3: imageLanguage.setImageResource(R.drawable.ro); AppParams.LANGUAGETMP = "ro"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
- case 4: imageLanguage.setImageResource(R.drawable.ru); AppParams.LANGUAGETMP = "ru"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
- case 5: imageLanguage.setImageResource(R.drawable.es); AppParams.LANGUAGETMP = "es"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
- }
+ builder.setAdapter(adapter , (dialog, which) -> {
+ textViewSpinnerLanguage.setText(adapter.getItem(which));
+ switch(which)
+ {
+ case 0: imageLanguage.setImageResource(R.drawable.en); AppParams.LANGUAGETMP = "en"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
+ case 1: imageLanguage.setImageResource(R.drawable.de); AppParams.LANGUAGETMP = "de"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
+ case 2: imageLanguage.setImageResource(R.drawable.tr); AppParams.LANGUAGETMP = "tr"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
+ case 3: imageLanguage.setImageResource(R.drawable.ro); AppParams.LANGUAGETMP = "ro"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
+ case 4: imageLanguage.setImageResource(R.drawable.ru); AppParams.LANGUAGETMP = "ru"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
+ case 5: imageLanguage.setImageResource(R.drawable.es); AppParams.LANGUAGETMP = "es"; onCreate(savedInstanceState); parentTab.changeLanguage(); break;
}
});
@@ -215,12 +194,12 @@ public class SetupActivity extends Activity {
String oldIP = AppParams.IP;
String oldPort = AppParams.PORT;
- editor.putString("ip", appServerIP.getText().toString());
- editor.putString("port", appServerPort.getText().toString());
- editor.putString("language", AppParams.LANGUAGETMP);
- Boolean result = editor.commit();
+ editor.putString("ip", appServerIP.getText().toString());
+ editor.putString("port", appServerPort.getText().toString());
+ editor.putString("language", AppParams.LANGUAGETMP);
+ boolean result = editor.commit();
// saved completed
- if(result)
+ if (result)
Toast.makeText(context, "Settings saved successfully.", Toast.LENGTH_LONG).show();
else
Toast.makeText(context, "Settings failed to complete!", Toast.LENGTH_LONG).show();
@@ -265,31 +244,4 @@ public class SetupActivity extends Activity {
//showDialog(result);
}
- public void showDialog(Boolean result)
- {
- Dialog dialog = new Dialog(context);
- if(result)
- dialog.setTitle("Save Completed");
- else
- dialog.setTitle("Save Failed");
- 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);
- if(result)
- {
- image.setImageResource(R.drawable.error);
- text.setText("Settings saved successfully.");
- }
- else
- {
- image.setImageResource(R.drawable.error);
- text.setText("Settings failed to complete!");
- }
-
- dialog.show();
- }
-
}
diff --git a/safeDispatch/src/main/java/com/safemobile/safedispatch/TabLayoutActivity.java b/safeDispatch/src/main/java/com/safemobile/safedispatch/TabLayoutActivity.java
index 6686bee..0737249 100644
--- a/safeDispatch/src/main/java/com/safemobile/safedispatch/TabLayoutActivity.java
+++ b/safeDispatch/src/main/java/com/safemobile/safedispatch/TabLayoutActivity.java
@@ -73,6 +73,7 @@ import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
@@ -101,6 +102,7 @@ import androidx.core.app.NotificationManagerCompat;
public class TabLayoutActivity extends AbstractSDParentActivity {
+ private final String TAG = "TabLayoutActivity";
/* Misc */
private Resources res;
private Context context;
@@ -179,6 +181,9 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
private static final String SETTINGS = "Setup";
private static final String ABOUT = "SafeMobile";
+ private final Handler uiHandler = new Handler(Looper.getMainLooper());
+
+
// default app language
public static final String DATABASE_LANGUAGE = "en"; // database language : en, de, tr, ro or empty
@@ -602,6 +607,7 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
Vehicle vehicle = getVehicle4Imei(getImei());
if (vehicle != null)
getMessageActivity().setScId(vehicle.sc_id);
+ Log.v(TAG, "lastmessages: false");
getMessageActivity().LASTMESSAGES = false;
getMessageActivity().getLastSMS();
@@ -694,13 +700,26 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
@Override
public void whenBackPressed(AppParams.ActivityResult result) {
+ try {
+ prepareForLogOut(result);
+
+ finish();
+ android.os.Process.killProcess(android.os.Process.myPid());
+ System.exit(0);
+ } catch (Exception e) {
+ Log.v(TAG, e.getMessage());
+ }
+ }
+
+ private void prepareForLogOut(AppParams.ActivityResult result) {
+ Log.v(TAG, "prepareForLogOut");
if (tcpTimer != null) {
tcpTimer.cancel();
tcpTimer.purge();
tcpTimer = null;
}
- if (getRadioActivity().audioThread != null) {
+ if (getRadioActivity() != null && getRadioActivity().audioThread != null) {
Thread moribund = getRadioActivity().audioThread;
getRadioActivity().audioThread = null;
moribund.interrupt();
@@ -721,10 +740,6 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
getIntent().putExtra("result", result);
setResult(RESULT_OK, getIntent()); //-> used for exit
-
- finish();
- android.os.Process.killProcess(android.os.Process.myPid());
- System.exit(0);
}
@Override
@@ -732,14 +747,13 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
// recreate UI
Locale locale = new Locale(AppParams.LANGUAGETMP);
Locale.setDefault(locale);
- android.content.res.Configuration configuration = new android.content.res.Configuration();
- configuration.locale = locale;
- getBaseContext().getResources().updateConfiguration(configuration,
- getBaseContext().getResources().getDisplayMetrics());
+ setLocale(getLiveActivity(), locale);
- if (getHistoryActivity() != null)
- getHistoryActivity().onCreate(getHistoryActivity().savedInstanceState);
// change UI for RadioActivity and MessageActivity
+ if (getLiveActivity() != null)
+ getLiveActivity().setLanguage();
+ if (getHistoryActivity() != null)
+ getHistoryActivity().setLanguage();
if (getRadioActivity() != null)
getRadioActivity().onCreate(getRadioActivity().savedInstanceState);
if (getMessageActivity() != null)
@@ -750,6 +764,13 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
getAlarmActivity().onCreate(getAlarmActivity().getSavedInstanceState());
}
+ public static void setLocale(Activity activity, Locale locale) {
+ Resources resources = activity.getResources();
+ Configuration config = resources.getConfiguration();
+ config.setLocale(locale);
+ resources.updateConfiguration(config, resources.getDisplayMetrics());
+ }
+
//timer stuff
private void timerMethod() {
if (!AppParams.DEMO)
@@ -2031,8 +2052,50 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
@Override
public void onTCPConnectionDown(boolean previousWasConnectionUp) {
+ Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean isNetworkConnected = isNetworkConnected();
+ Log.v(TAG, "isNetworkConnected: " + isNetworkConnected);
+ if (isNetworkConnected) {
+ if (tcp != null && !tcp.isConnectionUP) {
+ tcp.Stop();
+// if (tcpParser != null)
+// tcpParser.clearMsgList();
+ tcp = null;
+
+ uiHandler.post(() -> {
+ if (myService != null) {
+ myService.stopTCPConnection();
+
+
+ myService.recreateTCPConnection();
+
+ getApplicationContext().bindService(new Intent(context, TCPService.class), serviceConnection, Context.BIND_AUTO_CREATE);
+ if (getRadioActivity() != null)
+ getRadioActivity().onCreate(getRadioActivity().savedInstanceState);
+ if (getMessageActivity() != null)
+ getMessageActivity().onCreate(getMessageActivity().getSavedInstanceState());
+ if (getRecordingsActivity() != null)
+ getRecordingsActivity().onCreate(getRecordingsActivity().getSavedInstanceState());
+ if (getAlarmActivity() != null)
+ getAlarmActivity().onCreate(getAlarmActivity().getSavedInstanceState());
+
+ uiHandler.post(initTCPRUN);
+ }
+ SM.Debug("RECREATE TCP", "IP: " + AppParams.IP + " | Port: " + AppParams.PORT);
+ });
+ }
+
+ this.cancel();
+ }
+ }
+ }, 0, 100);
+
+ prepareForLogOut(AppParams.ActivityResult.tcpDown);
// execute logout
- whenBackPressed(AppParams.ActivityResult.tcpDown);
+// whenBackPressed(AppParams.ActivityResult.tcpDown);
// send a broadcast
notifyBroadcast(OperationCodes.TCP_CONNECTION_DOWN + "");
@@ -2056,6 +2119,19 @@ public class TabLayoutActivity extends AbstractSDParentActivity {
});
}
+ // Create runnable for posting
+ final Runnable initTCPRUN = () -> {
+ // start thread to add listener
+ SM.Debug("##### initTCPRUN");
+ if (!AppParams.DEMO)
+ tcpInit();
+ };
+
+ private boolean isNetworkConnected() {
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
+ }
+
// Create runnable for posting
final Runnable updateResultsAlarm = () -> updateResultsAlarmInUi("realpha");
diff --git a/safeDispatch/src/main/res/layout/style_header_units.xml b/safeDispatch/src/main/res/layout/style_header_units.xml
index 9620ef3..7636db1 100644
--- a/safeDispatch/src/main/res/layout/style_header_units.xml
+++ b/safeDispatch/src/main/res/layout/style_header_units.xml
@@ -10,6 +10,7 @@
android:gravity="center_vertical" >