diff --git a/OsmAnd/res/layout/profile_preference_toolbar_with_switch.xml b/OsmAnd/res/layout/profile_preference_toolbar_with_switch.xml index 33a93fc70e..c9ddd04254 100644 --- a/OsmAnd/res/layout/profile_preference_toolbar_with_switch.xml +++ b/OsmAnd/res/layout/profile_preference_toolbar_with_switch.xml @@ -5,10 +5,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="0dp" - osmand:contentInsetLeft="0dp" - osmand:contentInsetStart="0dp" - osmand:contentInsetRight="0dp" osmand:contentInsetEnd="0dp" + osmand:contentInsetLeft="0dp" + osmand:contentInsetRight="0dp" + osmand:contentInsetStart="0dp" osmand:theme="@style/ThemeOverlay.AppCompat.ActionBar"> + android:tint="?attr/default_icon_color" + osmand:srcCompat="@drawable/ic_arrow_back" /> + android:orientation="vertical" + android:paddingTop="@dimen/content_padding_half" + android:paddingBottom="@dimen/content_padding_half"> %1$s → … + Output + User points + Announce when exceeded + Exit number Update all maps added to %1$s? • OsmAnd Live updates moved to \"Downloads > Updates\"\n\n @@ -2477,7 +2481,7 @@ Traffic calming Speed camera Traffic warning - Favorites nearby + Nearby favorites Nearby POI Traffic warnings OsmAnd background service still running. Stop it, too? diff --git a/OsmAnd/res/xml/voice_announces.xml b/OsmAnd/res/xml/voice_announces.xml index a7dfad299b..51ce54c40b 100644 --- a/OsmAnd/res/xml/voice_announces.xml +++ b/OsmAnd/res/xml/voice_announces.xml @@ -11,11 +11,41 @@ android:title="@string/voice_announces_info" tools:icon="@drawable/ic_action_info_dark" /> + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + - - + android:title="@string/output" /> diff --git a/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java b/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java index b9032e26e4..290ff960c8 100644 --- a/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java +++ b/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java @@ -700,7 +700,7 @@ public class VoiceRouter { boolean isPlay = true; ExitInfo exitInfo = next.getExitInfo(); if (tParam != null) { - if (exitInfo != null && !Algorithms.isEmpty(exitInfo.getRef())) { + if (exitInfo != null && !Algorithms.isEmpty(exitInfo.getRef()) && settings.SPEAK_EXIT_NUMBER_NAMES.get()) { String stringRef = getSpeakableExitRef(exitInfo.getRef()); p.takeExit(tParam, dist, stringRef, getIntRef(exitInfo.getRef()), getSpeakableExitName(next, exitInfo, true)); } else { @@ -775,7 +775,7 @@ public class VoiceRouter { ExitInfo exitInfo = next.getExitInfo(); boolean isplay = true; if (tParam != null) { - if (exitInfo != null && !Algorithms.isEmpty(exitInfo.getRef())) { + if (exitInfo != null && !Algorithms.isEmpty(exitInfo.getRef()) && settings.SPEAK_EXIT_NUMBER_NAMES.get()) { String stringRef = getSpeakableExitRef(exitInfo.getRef()); p.takeExit(tParam, stringRef, getIntRef(exitInfo.getRef()), getSpeakableExitName(next, exitInfo, !suppressDest)); } else { diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index f227cb9b1e..501d84d608 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -1355,6 +1355,7 @@ public class OsmandSettings { public final OsmandPreference SPEAK_SPEED_LIMIT = new BooleanPreference(this, "speak_speed_limit", false).makeProfile().cache(); public final OsmandPreference SPEAK_SPEED_CAMERA = new BooleanPreference(this, "speak_cameras", false).makeProfile().cache(); public final OsmandPreference SPEAK_TUNNELS = new BooleanPreference(this, "speak_tunnels", false).makeProfile().cache(); + public final OsmandPreference SPEAK_EXIT_NUMBER_NAMES = new BooleanPreference(this, "exit_number_names", true).makeProfile().cache(); public final OsmandPreference SPEED_CAMERAS_UNINSTALLED = new BooleanPreference(this, "speed_cameras_uninstalled", false).makeGlobal().makeShared(); public final OsmandPreference SPEED_CAMERAS_ALERT_SHOWED = new BooleanPreference(this, "speed_cameras_alert_showed", false).makeGlobal().makeShared(); diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java index 6eeea74426..05c4c7e323 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java @@ -924,12 +924,6 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl } } - public void setupSpeedCamerasAlert() { - Preference speedCamerasAlert = findPreference(settings.SPEED_CAMERAS_UNINSTALLED.getId()); - speedCamerasAlert.setIcon(getContentIcon(R.drawable.ic_action_alert)); - speedCamerasAlert.setVisible(!settings.SPEED_CAMERAS_UNINSTALLED.get()); - } - public void setupPrefRoundedBg(PreferenceViewHolder holder) { View selectableView = holder.itemView.findViewById(R.id.selectable_list_item); if (selectableView != null) { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java index a312253aee..b10d149342 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java @@ -164,4 +164,10 @@ public class ScreenAlertsFragment extends BaseSettingsFragment implements OnPref showCameras.setIcon(getIcon(R.drawable.list_warnings_speed_camera)); showCameras.setVisible(!settings.SPEED_CAMERAS_UNINSTALLED.get()); } + + public void setupSpeedCamerasAlert() { + Preference speedCamerasAlert = findPreference(settings.SPEED_CAMERAS_UNINSTALLED.getId()); + speedCamerasAlert.setIcon(getContentIcon(R.drawable.ic_action_alert)); + speedCamerasAlert.setVisible(!settings.SPEED_CAMERAS_UNINSTALLED.get()); + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java index fb617ab01f..f041572b91 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.media.AudioManager; +import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; @@ -20,7 +21,6 @@ import androidx.preference.SwitchPreferenceCompat; import net.osmand.AndroidUtils; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; -import net.osmand.plus.Version; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.dialogs.SpeedCamerasBottomSheet; import net.osmand.plus.download.DownloadActivity; @@ -31,6 +31,8 @@ import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.settings.bottomsheets.AnnouncementTimeBottomSheet; import net.osmand.plus.settings.preferences.ListPreferenceEx; +import net.osmand.plus.settings.preferences.SwitchPreferenceEx; +import net.osmand.plus.wikipedia.WikipediaDialogFragment; import java.util.Set; @@ -43,6 +45,8 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr private static final String MORE_VALUE = "MORE_VALUE"; + private static final String OSMAND_VOICE_NAVIGATION_URL = "https://docs.osmand.net/en/main@latest/osmand/troubleshooting/navigation#voice-navigation"; + @Override protected void createToolbar(LayoutInflater inflater, View view) { super.createToolbar(inflater, view); @@ -64,6 +68,17 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr @Override protected void updateToolbar() { super.updateToolbar(); + View view = getView(); + ImageView profileIcon = view.findViewById(R.id.profile_icon); + profileIcon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_help_online, isNightMode() ? R.color.icon_color_default_dark : R.color.icon_color_default_light)); + profileIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getContext() != null) { + WikipediaDialogFragment.showFullArticle(getContext(), Uri.parse(OSMAND_VOICE_NAVIGATION_URL), isNightMode()); + } + } + }); updateToolbarSwitch(); } @@ -78,7 +93,7 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr View switchContainer = view.findViewById(R.id.toolbar_switch_container); AndroidUtils.setBackground(switchContainer, new ColorDrawable(color)); - SwitchCompat switchView = (SwitchCompat) switchContainer.findViewById(R.id.switchWidget); + SwitchCompat switchView = switchContainer.findViewById(R.id.switchWidget); switchView.setChecked(checked); UiUtilities.setupCompoundButton(switchView, isNightMode(), TOOLBAR); @@ -102,13 +117,13 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr enableDisablePreferences(!settings.VOICE_MUTE.getModeValue(getSelectedAppMode())); setupSpeakCamerasPref(); - setupSpeedCamerasAlert(); + setupTurnScreenOnNavigationInstructionsPref(); } private void setupSpeedLimitExceedPref() { //array size must be equal! - Float[] valuesKmh = new Float[] {-10f, -7f, -5f, 0f, 5f, 7f, 10f, 15f, 20f}; - Float[] valuesMph = new Float[] {-7f, -5f, -3f, 0f, 3f, 5f, 7f, 10f, 15f}; + Float[] valuesKmh = new Float[]{-10f, -7f, -5f, 0f, 5f, 7f, 10f, 15f, 20f}; + Float[] valuesMph = new Float[]{-7f, -5f, -3f, 0f, 3f, 5f, 7f, 10f, 15f}; String[] names; if (settings.METRIC_SYSTEM.getModeValue(getSelectedAppMode()) == MetricsConstants.KILOMETERS_AND_METERS) { names = new String[valuesKmh.length]; @@ -121,34 +136,34 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr names[i] = valuesMph[i].intValue() + " " + getString(R.string.mile_per_hour); } } - ListPreferenceEx voiceProvider = (ListPreferenceEx) findPreference(settings.SPEED_LIMIT_EXCEED_KMH.getId()); + ListPreferenceEx voiceProvider = findPreference(settings.SPEED_LIMIT_EXCEED_KMH.getId()); voiceProvider.setEntries(names); voiceProvider.setEntryValues(valuesKmh); } private void setupKeepInformingPref() { - Integer[] keepInformingValues = new Integer[] {0, 1, 2, 3, 5, 7, 10, 15, 20, 25, 30}; + Integer[] keepInformingValues = new Integer[]{0, 1, 2, 3, 5, 7, 10, 15, 20, 25, 30}; String[] keepInformingNames = new String[keepInformingValues.length]; keepInformingNames[0] = getString(R.string.keep_informing_never); for (int i = 1; i < keepInformingValues.length; i++) { keepInformingNames[i] = keepInformingValues[i] + " " + getString(R.string.int_min); } - ListPreferenceEx keepInforming = (ListPreferenceEx) findPreference(settings.KEEP_INFORMING.getId()); + ListPreferenceEx keepInforming = findPreference(settings.KEEP_INFORMING.getId()); keepInforming.setEntries(keepInformingNames); keepInforming.setEntryValues(keepInformingValues); } private void setupArrivalAnnouncementPref() { - Float[] arrivalValues = new Float[] {1.5f, 1f, 0.5f, 0.25f}; - String[] arrivalNames = new String[] { + Float[] arrivalValues = new Float[]{1.5f, 1f, 0.5f, 0.25f}; + String[] arrivalNames = new String[]{ getString(R.string.arrival_distance_factor_early), getString(R.string.arrival_distance_factor_normally), getString(R.string.arrival_distance_factor_late), getString(R.string.arrival_distance_factor_at_last) }; - ListPreferenceEx arrivalDistanceFactor = (ListPreferenceEx) findPreference(settings.ARRIVAL_DISTANCE_FACTOR.getId()); + ListPreferenceEx arrivalDistanceFactor = findPreference(settings.ARRIVAL_DISTANCE_FACTOR.getId()); arrivalDistanceFactor.setEntries(arrivalNames); arrivalDistanceFactor.setEntryValues(arrivalValues); } @@ -178,21 +193,21 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr Drawable enabled = getActiveIcon(R.drawable.ic_action_volume_up); Drawable icon = getPersistentPrefIcon(enabled, disabled); - ListPreferenceEx voiceProvider = (ListPreferenceEx) findPreference(settings.VOICE_PROVIDER.getId()); + ListPreferenceEx voiceProvider = findPreference(settings.VOICE_PROVIDER.getId()); voiceProvider.setEntries(entries); voiceProvider.setEntryValues(entryValues); voiceProvider.setIcon(icon); } private void setupAudioStreamGuidancePref() { - String[] streamTypes = new String[] { + String[] streamTypes = new String[]{ getString(R.string.voice_stream_music), getString(R.string.voice_stream_notification), getString(R.string.voice_stream_voice_call) }; //getString(R.string.shared_string_default)}; - Integer[] streamIntTypes = new Integer[] { + Integer[] streamIntTypes = new Integer[]{ AudioManager.STREAM_MUSIC, AudioManager.STREAM_NOTIFICATION, AudioManager.STREAM_VOICE_CALL @@ -208,6 +223,11 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr getPreferenceScreen().addPreference(interruptMusicPref); } + private void setupTurnScreenOnNavigationInstructionsPref() { + SwitchPreferenceEx turnScreenOnNavigationInstructions = findPreference(settings.TURN_SCREEN_ON_NAVIGATION_INSTRUCTIONS.getId()); + turnScreenOnNavigationInstructions.setDescription(R.string.turn_screen_on_navigation_instructions_descr); + } + private void updateMenu() { MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { @@ -319,12 +339,11 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr public void onPreferenceChanged(String prefId) { if (prefId.equals(settings.SPEED_CAMERAS_UNINSTALLED.getId())) { setupSpeakCamerasPref(); - setupSpeedCamerasAlert(); } } private void setupSpeakCamerasPref() { - SwitchPreferenceCompat showCameras = (SwitchPreferenceCompat) findPreference(settings.SPEAK_SPEED_CAMERA.getId()); + SwitchPreferenceCompat showCameras = findPreference(settings.SPEAK_SPEED_CAMERA.getId()); showCameras.setVisible(!settings.SPEED_CAMERAS_UNINSTALLED.get()); } } \ No newline at end of file