diff --git a/android/app/src/main/cpp/app/organicmaps/util/Config.cpp b/android/app/src/main/cpp/app/organicmaps/util/Config.cpp index 3794f7434..c934152b6 100644 --- a/android/app/src/main/cpp/app/organicmaps/util/Config.cpp +++ b/android/app/src/main/cpp/app/organicmaps/util/Config.cpp @@ -123,4 +123,33 @@ extern "C" frm()->SaveTransliteration(value); frm()->AllowTransliteration(value); } + + JNIEXPORT jboolean JNICALL + Java_app_organicmaps_util_Config_nativeGetTrafficHttpEnabled(JNIEnv * env, jclass thiz) + { + return frm()->LoadTrafficHttpEnabled(); + } + + JNIEXPORT void JNICALL + Java_app_organicmaps_util_Config_nativeSetTrafficHttpEnabled(JNIEnv * env, jclass thiz, + jboolean value) + { + frm()->SaveTrafficHttpEnabled(value); + frm()->SetTrafficHttpEnabled(value); + } + + JNIEXPORT jstring JNICALL + Java_app_organicmaps_util_Config_nativeGetTrafficHttpUrl(JNIEnv * env, jclass thiz) + { + std::string value = frm()->LoadTrafficHttpUrl(); + return jni::ToJavaString(env, value); + } + + JNIEXPORT void JNICALL + Java_app_organicmaps_util_Config_nativeSetTrafficHttpUrl(JNIEnv * env, jclass thiz, + jstring value) + { + frm()->SaveTrafficHttpUrl(jni::ToNativeString(env, value)); + frm()->SetTrafficHttpUrl(jni::ToNativeString(env, value)); + } } // extern "C" diff --git a/android/app/src/main/java/app/organicmaps/maplayer/LayersUtils.java b/android/app/src/main/java/app/organicmaps/maplayer/LayersUtils.java index ad022fd86..21aca4c7f 100644 --- a/android/app/src/main/java/app/organicmaps/maplayer/LayersUtils.java +++ b/android/app/src/main/java/app/organicmaps/maplayer/LayersUtils.java @@ -11,6 +11,7 @@ public class LayersUtils availableLayers.add(Mode.OUTDOORS); availableLayers.add(Mode.ISOLINES); availableLayers.add(Mode.SUBWAY); + availableLayers.add(Mode.TRAFFIC); return availableLayers; } } diff --git a/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java b/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java index 5286c26d1..edb1a5eff 100644 --- a/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java +++ b/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java @@ -9,6 +9,7 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.preference.EditTextPreference; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; @@ -57,6 +58,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La initAutoDownloadPrefsCallbacks(); initLargeFontSizePrefsCallbacks(); initTransliterationPrefsCallbacks(); + initTrafficHttpEnabledPrefsCallbacks(); + initTrafficHttpUrlPrefsCallbacks(); init3dModePrefsCallbacks(); initPerspectivePrefsCallbacks(); initAutoZoomPrefsCallbacks(); @@ -84,6 +87,16 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La pref.setSummary(locale.getDisplayLanguage()); } + private void updateTrafficHttpUrlSummary() + { + final Preference pref = getPreference(getString(R.string.pref_traffic_http_url)); + String summary = Config.getTrafficHttpUrl(); + if (summary.length() == 0) + pref.setSummary(R.string.traffic_http_url_not_set); + else + pref.setSummary(summary); + } + private void updateRoutingSettingsPrefsSummary() { final Preference pref = getPreference(getString(R.string.prefs_routing)); @@ -111,6 +124,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La updateVoiceInstructionsPrefsSummary(); updateRoutingSettingsPrefsSummary(); updateMapLanguageCodeSummary(); + updateTrafficHttpUrlSummary(); } @Override @@ -170,6 +184,36 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La }); } + private void initTrafficHttpEnabledPrefsCallbacks() + { + final Preference pref = getPreference(getString(R.string.pref_traffic_http_enabled)); + + ((TwoStatePreference)pref).setChecked(Config.getTrafficHttpEnabled()); + pref.setOnPreferenceChangeListener((preference, newValue) -> { + final boolean oldVal = Config.getTrafficHttpEnabled(); + final boolean newVal = (Boolean) newValue; + if (oldVal != newVal) + Config.setTrafficHttpEnabled(newVal); + + return true; + }); + } + + private void initTrafficHttpUrlPrefsCallbacks() + { + final Preference pref = getPreference(getString(R.string.pref_traffic_http_url)); + + ((EditTextPreference)pref).setText(Config.getTrafficHttpUrl()); + pref.setOnPreferenceChangeListener((preference, newValue) -> { + final String oldVal = Config.getTrafficHttpUrl(); + final String newVal = (String) newValue; + if (!oldVal.equals(newVal)) + Config.setTrafficHttpUrl(newVal); + + return true; + }); + } + private void initUseMobileDataPrefsCallbacks() { final ListPreference mobilePref = getPreference(getString(R.string.pref_use_mobile_data)); diff --git a/android/app/src/main/java/app/organicmaps/util/Config.java b/android/app/src/main/java/app/organicmaps/util/Config.java index 2f9cdbf88..908ecc7e8 100644 --- a/android/app/src/main/java/app/organicmaps/util/Config.java +++ b/android/app/src/main/java/app/organicmaps/util/Config.java @@ -354,6 +354,26 @@ public final class Config nativeSetTransliteration(value); } + public static boolean getTrafficHttpEnabled() + { + return nativeGetTrafficHttpEnabled(); + } + + public static void setTrafficHttpEnabled(boolean value) + { + nativeSetTrafficHttpEnabled(value); + } + + public static String getTrafficHttpUrl() + { + return nativeGetTrafficHttpUrl(); + } + + public static void setTrafficHttpUrl(String value) + { + nativeSetTrafficHttpUrl(value); + } + public static boolean isNY() { return getBool("NY"); @@ -507,4 +527,8 @@ public final class Config private static native void nativeSetLargeFontsSize(boolean value); private static native boolean nativeGetTransliteration(); private static native void nativeSetTransliteration(boolean value); + private static native boolean nativeGetTrafficHttpEnabled(); + private static native void nativeSetTrafficHttpEnabled(boolean value); + private static native String nativeGetTrafficHttpUrl(); + private static native void nativeSetTrafficHttpUrl(String value); } diff --git a/android/app/src/main/res/values/donottranslate.xml b/android/app/src/main/res/values/donottranslate.xml index 976c1ecd7..ca0b7d69d 100644 --- a/android/app/src/main/res/values/donottranslate.xml +++ b/android/app/src/main/res/values/donottranslate.xml @@ -36,6 +36,8 @@ GeneralSettings Navigation Information + TrafficHttpEnabled + TrafficHttpUrl Transliteration PowerManagment KeepScreenOn diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 36eb21197..b4da42ecc 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -833,6 +833,14 @@ When enabled, the app will work on the lockscreen even when the device is locked. Map language + + Enable live traffic data + + When enabled, the app will periodically retrieve traffic information from the configured URL. + + Traffic service URL + + Not set Map data from OpenStreetMap diff --git a/android/app/src/main/res/xml/prefs_main.xml b/android/app/src/main/res/xml/prefs_main.xml index 3ce113a9f..507e2f078 100644 --- a/android/app/src/main/res/xml/prefs_main.xml +++ b/android/app/src/main/res/xml/prefs_main.xml @@ -106,6 +106,18 @@ app:singleLineTitle="false" android:persistent="false" android:order="18"/> + +