diff --git a/app/src/main/java/org/traccar/client/MainActivity.java b/app/src/main/java/org/traccar/client/MainActivity.java
index e07f50c..3f585db 100644
--- a/app/src/main/java/org/traccar/client/MainActivity.java
+++ b/app/src/main/java/org/traccar/client/MainActivity.java
@@ -39,8 +39,6 @@ import android.view.MenuItem;
import android.webkit.URLUtil;
import android.widget.Toast;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
@@ -73,7 +71,7 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen
}
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- migratePreferencesIfNecessary(sharedPreferences);
+ migrateLegacyPreferences(sharedPreferences);
addPreferencesFromResource(R.xml.preferences);
initPreferences();
@@ -304,17 +302,17 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen
preference.setSummary(R.string.settings_url_summary);
findPreference(KEY_STATUS).setEnabled(true);
} else {
- preference.setSummary(R.string.settings_invalid_url_summary);
+ preference.setSummary(R.string.error_invalid_url_summary);
findPreference(KEY_STATUS).setEnabled(false);
- Toast.makeText(MainActivity.this, R.string.msg_invalid_url, Toast.LENGTH_LONG).show();
+ Toast.makeText(MainActivity.this, R.string.error_msg_invalid_url, Toast.LENGTH_LONG).show();
}
return true;
}
- private void migratePreferencesIfNecessary(SharedPreferences preferences) {
+ private void migrateLegacyPreferences(SharedPreferences preferences) {
String port = preferences.getString("port", null);
if (port != null) {
- Log.d(TAG, "migratePreferencesIfNecessary: migrating to URL preference");
+ Log.d(TAG, "migrateLegacyPreferences: migrating to URL preference");
String host = preferences.getString("address", getString(R.string.settings_url_default_value));
String scheme = preferences.getBoolean("secure", false) ? "https" : "http";
@@ -327,11 +325,7 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen
editor.remove("port");
editor.remove("address");
editor.remove("secure");
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD) {
- editor.commit();
- } else {
- editor.apply();
- }
+ editor.commit();
}
}
}
diff --git a/app/src/main/java/org/traccar/client/ProtocolFormatter.java b/app/src/main/java/org/traccar/client/ProtocolFormatter.java
index aecf737..e307021 100644
--- a/app/src/main/java/org/traccar/client/ProtocolFormatter.java
+++ b/app/src/main/java/org/traccar/client/ProtocolFormatter.java
@@ -24,7 +24,8 @@ public class ProtocolFormatter {
}
public static String formatRequest(String url, Position position, String alarm) {
- Uri serverUrl = Uri.parse(url).buildUpon()
+ Uri serverUrl = Uri.parse(url);
+ Uri.Builder builder = serverUrl.buildUpon()
.appendQueryParameter("id", position.getDeviceId())
.appendQueryParameter("timestamp", String.valueOf(position.getTime().getTime() / 1000))
.appendQueryParameter("lat", String.valueOf(position.getLatitude()))
@@ -32,19 +33,16 @@ public class ProtocolFormatter {
.appendQueryParameter("speed", String.valueOf(position.getSpeed()))
.appendQueryParameter("bearing", String.valueOf(position.getCourse()))
.appendQueryParameter("altitude", String.valueOf(position.getAltitude()))
- .appendQueryParameter("batt", String.valueOf(position.getBattery()))
- .build();
+ .appendQueryParameter("batt", String.valueOf(position.getBattery()));
- if (alarm != null && alarm.trim().length() != 0) {
- serverUrl = serverUrl.buildUpon().appendQueryParameter("alarm", alarm).build();
+ if (alarm != null) {
+ builder.appendQueryParameter("alarm", alarm);
}
+
int port = serverUrl.getPort();
if (port < 0 || port > 65535) {
- port = 5055;
- String host = serverUrl.getHost();
- serverUrl = serverUrl.buildUpon().encodedAuthority(host + ":" + port).build();
+ builder.encodedAuthority(serverUrl.getHost() + ":" + 5055);
}
- return serverUrl.toString();
+ return builder.build().toString();
}
-
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f317354..5e22533 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -27,7 +27,6 @@
Mixed provider
Foreground service
Increase service priority
- Invalid server URL
Status
About
Add shortcuts
@@ -43,5 +42,6 @@
Connectivity change
Device Settings
The app has been hidden. To open it again please dial 8722227 (TRACCAR).
- Please enter a valid http:// or https:// URL
+ Please enter a valid http:// or https:// URL
+ Invalid server URL
diff --git a/app/src/test/java/org/traccar/client/ProtocolFormatterTest.java b/app/src/test/java/org/traccar/client/ProtocolFormatterTest.java
index cc6064c..6170f02 100644
--- a/app/src/test/java/org/traccar/client/ProtocolFormatterTest.java
+++ b/app/src/test/java/org/traccar/client/ProtocolFormatterTest.java
@@ -22,8 +22,18 @@ public class ProtocolFormatterTest {
Position position = new Position("123456789012345", new Location("gps"), 0);
position.setTime(new Date(0));
- String url = ProtocolFormatter.formatRequest("http://localhost:5055/path", position);
- assertEquals("http://localhost:5055/path?id=123456789012345×tamp=0&lat=0.0&lon=0.0&speed=0.0&bearing=0.0&altitude=0.0&batt=0.0", url);
+ String url = ProtocolFormatter.formatRequest("http://localhost", position);
+ assertEquals("http://localhost:5055?id=123456789012345×tamp=0&lat=0.0&lon=0.0&speed=0.0&bearing=0.0&altitude=0.0&batt=0.0", url);
+ }
+
+ @Test
+ public void testFormatPathPortRequest() throws Exception {
+
+ Position position = new Position("123456789012345", new Location("gps"), 0);
+ position.setTime(new Date(0));
+
+ String url = ProtocolFormatter.formatRequest("http://localhost:8888/path", position);
+ assertEquals("http://localhost:8888/path?id=123456789012345×tamp=0&lat=0.0&lon=0.0&speed=0.0&bearing=0.0&altitude=0.0&batt=0.0", url);
}
@Test