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