Minor fixes

This commit is contained in:
Vitaliy 2021-01-17 01:25:22 +02:00
parent f18ff499a4
commit 56d869389f
7 changed files with 299 additions and 332 deletions

View file

@ -3,63 +3,62 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:osmand="http://schemas.android.com/apk/res-auto" xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/bottom_sheet_exit_button_margin"> android:paddingBottom="@dimen/bottom_sheet_exit_button_margin">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/announcement_time_title" android:layout_marginStart="@dimen/content_padding"
android:gravity="center_vertical"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
android:textStyle="bold"
osmand:typeface="@string/font_roboto_medium"
android:layout_marginLeft="@dimen/content_padding" android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/content_padding_small" android:layout_marginTop="@dimen/content_padding_small"
android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding" android:layout_marginRight="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding" android:gravity="center_vertical"
android:layout_marginEnd="@dimen/content_padding"/> android:text="@string/announcement_time_title"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_medium" />
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/announcement_time_descr"
android:textSize="@dimen/default_desc_text_size"
android:textColor="?android:textColorSecondary"
android:lineSpacingMultiplier="1.1"
osmand:typeface="@string/font_roboto_regular"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding" android:layout_marginStart="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding"/> android:layout_marginLeft="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:lineSpacingMultiplier="1.1"
android:text="@string/announcement_time_descr"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_regular" />
<ImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_illustration" android:id="@+id/iv_illustration"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:adjustViewBounds="true" android:layout_marginStart="@dimen/content_padding"
android:layout_marginLeft="@dimen/content_padding" android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/content_padding_small" android:layout_marginTop="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding" android:layout_marginEnd="@dimen/content_padding"
tools:srcCompat="@drawable/img_help_announcement_time_day"/> android:layout_marginRight="@dimen/content_padding"
android:adjustViewBounds="true"
osmand:srcCompat="?attr/image_help_announcement_time" />
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@+id/tv_seek_bar_label" android:id="@+id/tv_seek_bar_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="@dimen/default_list_text_size" android:layout_marginStart="@dimen/content_padding"
android:textColor="@color/active_color_primary_light"
osmand:typeface="@string/font_roboto_medium"
android:layout_marginLeft="@dimen/content_padding" android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/content_padding_small" android:layout_marginTop="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding" android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:textColor="?attr/active_color_basic"
android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_medium"
tools:text="Normal" /> tools:text="Normal" />
<SeekBar <SeekBar
@ -67,14 +66,14 @@
style="@style/Widget.AppCompat.SeekBar.Discrete" style="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:max="3" android:layout_marginTop="@dimen/pages_item_margin"
android:maxHeight="2dp" android:maxHeight="2dp"
android:paddingTop="11dp"
android:paddingBottom="11dp"
android:progressDrawable="@drawable/seekbar_progress_announcement_time" android:progressDrawable="@drawable/seekbar_progress_announcement_time"
android:thumb="@drawable/seekbar_thumb_announcement_time" android:thumb="@drawable/seekbar_thumb_announcement_time"
osmand:tickMark="@drawable/seekbar_tickmark_announcement_time" osmand:tickMark="@drawable/seekbar_tickmark_announcement_time"
android:paddingTop="11dp" tools:max="3"
android:paddingBottom="11dp"
android:layout_marginTop="@dimen/pages_item_margin"
tools:progress="1" /> tools:progress="1" />
<View <View
@ -82,48 +81,51 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:layout_marginTop="@dimen/content_padding_small" android:layout_marginTop="@dimen/content_padding_small"
tools:background="@color/divider_color" /> android:background="?attr/divider_color_basic" />
<FrameLayout <LinearLayout
android:id="@+id/description_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/content_padding" android:background="?attr/selectableItemBackground"
android:layout_marginTop="@dimen/content_padding_small" android:orientation="horizontal"
android:layout_marginRight="@dimen/content_padding" android:paddingStart="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding" android:paddingLeft="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding"> android:paddingTop="@dimen/content_padding_small"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/content_padding_small">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/announcement_time_intervals" android:text="@string/announcement_time_intervals"
android:textSize="@dimen/default_list_text_size"
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_regular" /> osmand:typeface="@string/font_roboto_regular" />
<ImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_arrow" android:id="@+id/iv_arrow"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end" android:tint="?attr/default_icon_color"
app:srcCompat="@drawable/ic_action_arrow_down" app:srcCompat="@drawable/ic_action_arrow_down" />
app:tint="@color/icon_color_default_dark" />
</FrameLayout> </LinearLayout>
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@+id/tv_interval_descr" android:id="@+id/tv_interval_descr"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"
android:textSize="@dimen/default_list_text_size"
android:lineSpacingMultiplier="1.2"
osmand:typeface="@string/font_roboto_regular"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginTop="@dimen/content_padding_small"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding" android:layout_marginStart="@dimen/content_padding"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginEnd="@dimen/content_padding" android:layout_marginEnd="@dimen/content_padding"
tools:visibility="visible" android:layout_marginRight="@dimen/content_padding"
android:lineSpacingMultiplier="@dimen/line_spacing_multiplier_description"
android:textSize="@dimen/default_list_text_size"
android:visibility="gone"
osmand:typeface="@string/font_roboto_regular"
tools:text="Turn tools:text="Turn
\n • Prepare: 315 - 320 m, 110 sec. \n • Prepare: 315 - 320 m, 110 sec.
\n • Approach: 60 - 65 m, 20 sec. \n • Approach: 60 - 65 m, 20 sec.
@ -135,6 +137,7 @@
\n • Passing: 15 - 20 m, 4 sec. \n • Passing: 15 - 20 m, 4 sec.
\nWaypoint / Favourite / POI \nWaypoint / Favourite / POI
\n • Approach: 80 - 85 m, 25 sec \n • Approach: 80 - 85 m, 25 sec
\n • Passing: 20 - 25 m, 7 sec. "/> \n • Passing: 20 - 25 m, 7 sec. "
tools:visibility="visible" />
</LinearLayout> </LinearLayout>

View file

@ -140,6 +140,7 @@
<attr name="btn_radio_button_center" format="reference"/> <attr name="btn_radio_button_center" format="reference"/>
<attr name="bg_dash_line" format="reference"/> <attr name="bg_dash_line" format="reference"/>
<attr name="text_input_background" format="reference"/> <attr name="text_input_background" format="reference"/>
<attr name="image_help_announcement_time" format="reference"/>
</declare-styleable> </declare-styleable>
<declare-styleable name="PagerSlidingTabStrip"> <declare-styleable name="PagerSlidingTabStrip">

View file

@ -15,11 +15,11 @@
<string name="announcement_time_title">Announcement time</string> <string name="announcement_time_title">Announcement time</string>
<string name="announcement_time_descr">Announcement time of different voice prompts depends on prompt type, current navigation speed and default navigation speed.</string> <string name="announcement_time_descr">Announcement time of different voice prompts depends on prompt type, current navigation speed and default navigation speed.</string>
<string name="announcement_time_intervals">Time and distance intervals</string> <string name="announcement_time_intervals">Time and distance intervals</string>
<string name="announcement_time_turn">Turn</string> <string name="shared_string_turn">Turn</string>
<string name="announcement_time_arrive">Arrive at destination</string> <string name="announcement_time_arrive">Arrive at destination</string>
<string name="announcement_time_off_route">Off route</string> <string name="announcement_time_off_route">Off route</string>
<string name="announcement_time_prepare">Prepare</string> <string name="announcement_time_prepare">Prepare</string>
<string name="announcement_time_prepare_long">Long Prepare</string> <string name="announcement_time_prepare_long">Long prepare</string>
<string name="announcement_time_approach">Approach</string> <string name="announcement_time_approach">Approach</string>
<string name="announcement_time_passing">Passing</string> <string name="announcement_time_passing">Passing</string>
<string name="shared_string_sec">sec</string> <string name="shared_string_sec">sec</string>

View file

@ -247,6 +247,7 @@
<item name="checkboxStyle">@style/CheckboxStyle</item> <item name="checkboxStyle">@style/CheckboxStyle</item>
<item name="radioButtonStyle">@style/RadioButtonStyle</item> <item name="radioButtonStyle">@style/RadioButtonStyle</item>
<item name="text_input_background">@color/text_input_background_light</item> <item name="text_input_background">@color/text_input_background_light</item>
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_day</item>
</style> </style>
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar"> <style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
@ -543,6 +544,7 @@
<item name="checkboxStyle">@style/CheckboxStyle</item> <item name="checkboxStyle">@style/CheckboxStyle</item>
<item name="radioButtonStyle">@style/RadioButtonStyle</item> <item name="radioButtonStyle">@style/RadioButtonStyle</item>
<item name="text_input_background">@color/text_input_background_dark</item> <item name="text_input_background">@color/text_input_background_dark</item>
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_night</item>
</style> </style>
<style name="FreeVersionBanner" parent="OsmandDarkTheme"> <style name="FreeVersionBanner" parent="OsmandDarkTheme">

View file

@ -48,10 +48,6 @@ public class AnnounceTimeDistances {
private int LONG_ALARM_ANNOUNCE_RADIUS; private int LONG_ALARM_ANNOUNCE_RADIUS;
private int SHORT_ALARM_ANNOUNCE_RADIUS; private int SHORT_ALARM_ANNOUNCE_RADIUS;
private String format;
private String meter;
private String second;
public AnnounceTimeDistances(ApplicationMode appMode, OsmandSettings settings) { public AnnounceTimeDistances(ApplicationMode appMode, OsmandSettings settings) {
if (appMode.isDerivedRoutingFrom(ApplicationMode.CAR)) { if (appMode.isDerivedRoutingFrom(ApplicationMode.CAR)) {
// keep it as minimum 30 km/h for voice announcement // keep it as minimum 30 km/h for voice announcement
@ -61,7 +57,6 @@ public class AnnounceTimeDistances {
DEFAULT_SPEED = (float) Math.max(0.3, appMode.getDefaultSpeed()); DEFAULT_SPEED = (float) Math.max(0.3, appMode.getDefaultSpeed());
} }
// 300 s: car 3750 m (113 s @ 120 km/h) // 300 s: car 3750 m (113 s @ 120 km/h)
PREPARE_LONG_DISTANCE = (int) (DEFAULT_SPEED * 300); PREPARE_LONG_DISTANCE = (int) (DEFAULT_SPEED * 300);
// 250 s: car 3125 m (94 s @ 120 km/h) // 250 s: car 3125 m (94 s @ 120 km/h)
@ -89,8 +84,7 @@ public class AnnounceTimeDistances {
PREPARE_DISTANCE_END = PREPARE_DISTANCE * 2; PREPARE_DISTANCE_END = PREPARE_DISTANCE * 2;
} }
float ARRIVAL_DISTANCE_FACTOR = Math.max(settings.ARRIVAL_DISTANCE_FACTOR.getModeValue(appMode), 0.1f); setArrivalDistances(settings.ARRIVAL_DISTANCE_FACTOR.getModeValue(appMode));
setArrivalDistances(ARRIVAL_DISTANCE_FACTOR);
// Trigger close prompts earlier to allow BT SCO link being established, or when VOICE_PROMPT_DELAY is set >0 for the other stream types // Trigger close prompts earlier to allow BT SCO link being established, or when VOICE_PROMPT_DELAY is set >0 for the other stream types
int ams = settings.AUDIO_MANAGER_STREAM.getModeValue(appMode); int ams = settings.AUDIO_MANAGER_STREAM.getModeValue(appMode);
@ -214,12 +208,24 @@ public class AnnounceTimeDistances {
return (int) (dist - voicePromptDelayTimeSec * speed); return (int) (dist - voicePromptDelayTimeSec * speed);
} }
public Spannable getIntervalsDescription(OsmandApplication app) { private void appendTurnDesc(SpannableStringBuilder builder, String name, int dist, String meter, String second) {
format = "\n%s: %d - %d %s, %d %s."; appendTurnDesc(builder, name, dist, DEFAULT_SPEED, meter, second);
meter = app.getString(R.string.m); }
second = app.getString(R.string.shared_string_sec);
String turn = app.getString(R.string.announcement_time_turn); private void appendTurnDesc(SpannableStringBuilder builder, String name, int dist, float speed, String meter, String second) {
int minDist = (dist / 5) * 5;
int time = (int) (dist / speed);
if (time > 15) {
// round to 5
time = (time / 5) * 5;
}
builder.append(String.format("\n%s: %d - %d %s, %d %s.", name, minDist, minDist + 5, meter, time, second));
}
public Spannable getIntervalsDescription(OsmandApplication app) {
String meter = app.getString(R.string.m);
String second = app.getString(R.string.shared_string_sec);
String turn = app.getString(R.string.shared_string_turn);
String arrive = app.getString(R.string.announcement_time_arrive); String arrive = app.getString(R.string.announcement_time_arrive);
String offRoute = app.getString(R.string.announcement_time_off_route); String offRoute = app.getString(R.string.announcement_time_off_route);
String traffic = "\n" + app.getString(R.string.way_alarms); String traffic = "\n" + app.getString(R.string.way_alarms);
@ -239,53 +245,39 @@ public class AnnounceTimeDistances {
builder.append(turn); builder.append(turn);
makeBold(builder, turn); makeBold(builder, turn);
if (PREPARE_DISTANCE_END <= PREPARE_DISTANCE) { if (PREPARE_DISTANCE_END <= PREPARE_DISTANCE) {
appendDescr(builder, prepare, PREPARE_DISTANCE);; appendTurnDesc(builder, prepare, PREPARE_DISTANCE, meter, second);
} }
if (PREPARE_LONG_DISTANCE_END <= PREPARE_LONG_DISTANCE) { if (PREPARE_LONG_DISTANCE_END <= PREPARE_LONG_DISTANCE) {
appendDescr(builder, longPrepare, PREPARE_LONG_DISTANCE); appendTurnDesc(builder, longPrepare, PREPARE_LONG_DISTANCE, meter, second);
} }
appendDescr(builder, approach, TURN_IN_DISTANCE); appendTurnDesc(builder, approach, TURN_IN_DISTANCE, meter, second);
appendDescr(builder, passing, TURN_NOW_DISTANCE, TURN_NOW_SPEED); appendTurnDesc(builder, passing, TURN_NOW_DISTANCE, TURN_NOW_SPEED, meter, second);
// Arrive at destination // Arrive at destination
appendDescr(builder, arrive, (int) (getArrivalDistance())); appendTurnDesc(builder, arrive, (int) (getArrivalDistance()), meter, second);
makeBoldFormatted(builder, arrive); makeBoldFormatted(builder, arrive);
// Off-route // Off-route
if (getOffRouteDistance() > 0) { if (getOffRouteDistance() > 0) {
appendDescr(builder, offRoute, (int) getOffRouteDistance()); appendTurnDesc(builder, offRoute, (int) getOffRouteDistance(), meter, second);
makeBoldFormatted(builder, offRoute); makeBoldFormatted(builder, offRoute);
} }
// Traffic warnings // Traffic warnings
builder.append(traffic); builder.append(traffic);
makeBold(builder, traffic); makeBold(builder, traffic);
appendDescr(builder, approach, LONG_ALARM_ANNOUNCE_RADIUS); appendTurnDesc(builder, approach, LONG_ALARM_ANNOUNCE_RADIUS, meter, second);
appendDescr(builder, passing, SHORT_ALARM_ANNOUNCE_RADIUS); appendTurnDesc(builder, passing, SHORT_ALARM_ANNOUNCE_RADIUS, meter, second);
// Waypoint / Favorite / POI // Waypoint / Favorite / POI
builder.append(point); builder.append(point);
makeBold(builder, point); makeBold(builder, point);
appendDescr(builder, approach, LONG_PNT_ANNOUNCE_RADIUS); appendTurnDesc(builder, approach, LONG_PNT_ANNOUNCE_RADIUS, meter, second);
appendDescr(builder, passing, SHORT_PNT_ANNOUNCE_RADIUS); appendTurnDesc(builder, passing, SHORT_PNT_ANNOUNCE_RADIUS, meter, second);
return builder; return builder;
} }
private void appendDescr(SpannableStringBuilder b, String word, int dist) {
appendDescr(b, word, dist, DEFAULT_SPEED);
}
private void appendDescr(SpannableStringBuilder b, String word, int dist, float speed) {
int minDist = (dist / 5) * 5;
int time = (int) (dist / speed);
if(time > 15) {
// round to 5
time = (time / 5) * 5;
}
b.append(String.format(format, word, minDist, minDist + 5, meter, time, second));
}
private void makeBold(SpannableStringBuilder b, String word) { private void makeBold(SpannableStringBuilder b, String word) {
int end = b.length(); int end = b.length();
int start = end - word.length(); int start = end - word.length();
@ -299,5 +291,4 @@ public class AnnounceTimeDistances {
b.setSpan(new StyleSpan(Typeface.BOLD), start, end, b.setSpan(new StyleSpan(Typeface.BOLD), start, end,
SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE); SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
} }
} }

View file

@ -5,11 +5,17 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.SeekBar; import android.widget.SeekBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.UiUtilities; import net.osmand.plus.UiUtilities;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.routing.data.AnnounceTimeDistances; import net.osmand.plus.routing.data.AnnounceTimeDistances;
import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.fragments.OnPreferenceChanged; import net.osmand.plus.settings.fragments.OnPreferenceChanged;
@ -18,50 +24,38 @@ import net.osmand.plus.widgets.TextViewEx;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import androidx.annotation.NonNull; import static net.osmand.plus.settings.bottomsheets.SingleSelectPreferenceBottomSheet.SELECTED_ENTRY_INDEX_KEY;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
implements SeekBar.OnSeekBarChangeListener { implements SeekBar.OnSeekBarChangeListener {
public static final String SELECTED_ENTRY_INDEX_KEY = "selected_entry_index_key";
public static final String TAG = AnnouncementTimeBottomSheet.class.getSimpleName(); public static final String TAG = AnnouncementTimeBottomSheet.class.getSimpleName();
private static final Log LOG = PlatformUtil.getLog(AnnouncementTimeBottomSheet.class); private static final Log LOG = PlatformUtil.getLog(AnnouncementTimeBottomSheet.class);
private OsmandApplication app; private OsmandApplication app;
private AnnounceTimeDistances announceTimeDistances; private AnnounceTimeDistances announceTimeDistances;
private ListPreferenceEx listPreference; private ListPreferenceEx listPreference;
private int selectedEntryIndex = -1; private int selectedEntryIndex = -1;
private View rootView;
private TextViewEx tvSeekBarLabel; private TextViewEx tvSeekBarLabel;
private SeekBar seekBarArrival; private SeekBar seekBarArrival;
private ImageView ivArrow; private ImageView ivArrow;
private TextViewEx tvIntervalsDescr; private TextViewEx tvIntervalsDescr;
private boolean collapsed = false; private boolean collapsed = true;
@Override @Override
public void createMenuItems(Bundle savedInstanceState) { public void createMenuItems(Bundle savedInstanceState) {
app = getMyApplication(); app = requiredMyApplication();
if (app == null) {
return;
}
announceTimeDistances = new AnnounceTimeDistances(getAppMode(), app.getSettings()); announceTimeDistances = new AnnounceTimeDistances(getAppMode(), app.getSettings());
listPreference = getListPreference(); listPreference = getListPreference();
if (listPreference == null || listPreference.getEntries() == null || if (listPreference == null || listPreference.getEntries() == null ||
listPreference.getEntryValues() == null) { listPreference.getEntryValues() == null) {
return; return;
} }
if (savedInstanceState != null) { if (savedInstanceState != null) {
selectedEntryIndex = savedInstanceState.getInt(SELECTED_ENTRY_INDEX_KEY); selectedEntryIndex = savedInstanceState.getInt(SELECTED_ENTRY_INDEX_KEY);
} else { } else {
@ -131,7 +125,7 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
} }
private BaseBottomSheetItem createBottomSheetItem() { private BaseBottomSheetItem createBottomSheetItem() {
rootView = UiUtilities.getInflater(getContext(), nightMode) View rootView = UiUtilities.getInflater(getContext(), nightMode)
.inflate(R.layout.bottom_sheet_announcement_time, null); .inflate(R.layout.bottom_sheet_announcement_time, null);
tvSeekBarLabel = rootView.findViewById(R.id.tv_seek_bar_label); tvSeekBarLabel = rootView.findViewById(R.id.tv_seek_bar_label);
@ -140,35 +134,19 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
tvIntervalsDescr = rootView.findViewById(R.id.tv_interval_descr); tvIntervalsDescr = rootView.findViewById(R.id.tv_interval_descr);
seekBarArrival.setOnSeekBarChangeListener(this); seekBarArrival.setOnSeekBarChangeListener(this);
ivArrow.setOnClickListener(new View.OnClickListener() { seekBarArrival.setMax(listPreference.getEntries().length - 1);
rootView.findViewById(R.id.description_container).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
toggleViews(); toggleDescriptionVisibility();
} }
}); });
setupIvIllustration();
setDividerColor();
return new BaseBottomSheetItem.Builder() return new BaseBottomSheetItem.Builder()
.setCustomView(rootView) .setCustomView(rootView)
.create(); .create();
} }
private void setupIvIllustration() {
int drawableId = nightMode ? R.drawable.img_help_announcement_time_night
: R.drawable.img_help_announcement_time_day;
ImageView ivIllustration = rootView.findViewById(R.id.iv_illustration);
ivIllustration.setImageResource(drawableId);
}
private void setDividerColor() {
int colorId = nightMode ? R.color.divider_color_dark : R.color.divider_color_light;
View divider = rootView.findViewById(R.id.divider);
divider.setBackgroundColor(getResources().getColor(colorId));
}
private void updateViews() { private void updateViews() {
seekBarArrival.setProgress(selectedEntryIndex); seekBarArrival.setProgress(selectedEntryIndex);
tvSeekBarLabel.setText(listPreference.getEntries()[selectedEntryIndex]); tvSeekBarLabel.setText(listPreference.getEntries()[selectedEntryIndex]);
@ -178,20 +156,14 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
tvIntervalsDescr.setText(announceTimeDistances.getIntervalsDescription(app)); tvIntervalsDescr.setText(announceTimeDistances.getIntervalsDescription(app));
} }
private void toggleViews() { private void toggleDescriptionVisibility() {
int drawableId = collapsed ? R.drawable.ic_action_arrow_down : R.drawable.ic_action_arrow_up;
collapsed = !collapsed; collapsed = !collapsed;
ivArrow.setImageResource(drawableId); ivArrow.setImageResource(collapsed ? R.drawable.ic_action_arrow_down : R.drawable.ic_action_arrow_up);
AndroidUiHelper.updateVisibility(tvIntervalsDescr, !collapsed);
if (tvIntervalsDescr.getVisibility() == View.VISIBLE) {
tvIntervalsDescr.setVisibility(View.GONE);
} else {
tvIntervalsDescr.setVisibility(View.VISIBLE);
}
} }
public static void showInstance(@NonNull FragmentManager fm, String prefKey, Fragment target, public static void showInstance(@NonNull FragmentManager fm, String prefKey, Fragment target,
@Nullable ApplicationMode appMode) { @Nullable ApplicationMode appMode, boolean usedOnMap) {
try { try {
if (!fm.isStateSaved()) { if (!fm.isStateSaved()) {
Bundle args = new Bundle(); Bundle args = new Bundle();
@ -199,6 +171,7 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
AnnouncementTimeBottomSheet fragment = new AnnouncementTimeBottomSheet(); AnnouncementTimeBottomSheet fragment = new AnnouncementTimeBottomSheet();
fragment.setArguments(args); fragment.setArguments(args);
fragment.setAppMode(appMode); fragment.setAppMode(appMode);
fragment.setUsedOnMap(usedOnMap);
fragment.setTargetFragment(target, 0); fragment.setTargetFragment(target, 0);
fragment.show(fm, TAG); fragment.show(fm, TAG);
} }

View file

@ -42,23 +42,6 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr
public static final String TAG = VoiceAnnouncesFragment.class.getSimpleName(); public static final String TAG = VoiceAnnouncesFragment.class.getSimpleName();
private static final String MORE_VALUE = "MORE_VALUE"; private static final String MORE_VALUE = "MORE_VALUE";
private static final String ARRIVAL_DISTANCE_FACTOR = "arrival_distance_factor";
@Override
public void onDisplayPreferenceDialog(Preference preference) {
String prefId = preference.getKey();
if (prefId.equals(ARRIVAL_DISTANCE_FACTOR)) {
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager != null) {
AnnouncementTimeBottomSheet.showInstance(
fragmentManager, preference.getKey(), this, getSelectedAppMode()
);
}
} else {
super.onDisplayPreferenceDialog(preference);
}
}
@Override @Override
protected void createToolbar(LayoutInflater inflater, View view) { protected void createToolbar(LayoutInflater inflater, View view) {
@ -319,6 +302,20 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr
return super.onPreferenceClick(preference); return super.onPreferenceClick(preference);
} }
@Override
public void onDisplayPreferenceDialog(Preference preference) {
String prefId = preference.getKey();
if (settings.ARRIVAL_DISTANCE_FACTOR.getId().equals(prefId)) {
FragmentManager fragmentManager = getFragmentManager();
if (fragmentManager != null) {
AnnouncementTimeBottomSheet.showInstance(fragmentManager, preference.getKey(), this, getSelectedAppMode(), false);
}
} else {
super.onDisplayPreferenceDialog(preference);
}
}
@Override @Override
public void onPreferenceChanged(String prefId) { public void onPreferenceChanged(String prefId) {
if (prefId.equals(settings.SPEED_CAMERAS_UNINSTALLED.getId())) { if (prefId.equals(settings.SPEED_CAMERAS_UNINSTALLED.getId())) {