diff --git a/OsmAnd/res/layout/list_item_icon_and_menu.xml b/OsmAnd/res/layout/list_item_icon_and_menu.xml index db85fa9101..43503f07db 100644 --- a/OsmAnd/res/layout/list_item_icon_and_menu.xml +++ b/OsmAnd/res/layout/list_item_icon_and_menu.xml @@ -19,14 +19,28 @@ android:layout_marginTop="16dp" tools:src="@drawable/ic_action_gabout_dark"/> - + android:orientation="vertical"> + + + + + + left = new TreeSet<>(); - private Set right = new TreeSet<>(); - private Map> visibleElementsFromSettings = new LinkedHashMap>(); + private Set leftWidgetSet = new TreeSet<>(); + private Set rightWidgetSet = new TreeSet<>(); + private Map> visibleElementsFromSettings = new LinkedHashMap<>(); private final OsmandSettings settings; @@ -56,7 +57,7 @@ public class MapWidgetRegistry { if (mpf.equals(SHOW_PREFIX)) { visibleElementsFromSettings.put(ms, null); } else { - LinkedHashSet set = new LinkedHashSet(); + LinkedHashSet set = new LinkedHashSet<>(); visibleElementsFromSettings.put(ms, set); Collections.addAll(set, mpf.split(SETTINGS_SEPARATOR)); } @@ -65,7 +66,7 @@ public class MapWidgetRegistry { public void populateStackControl(LinearLayout stack, ApplicationMode mode, boolean left, boolean expanded) { - Set s = left ? this.left : this.right; + Set s = left ? this.leftWidgetSet : this.rightWidgetSet; for (MapWidgetRegInfo r : s) { if (r.visible(mode) || r.widget.isExplicitlyVisible()) { stack.addView(r.widget.getView()); @@ -82,12 +83,12 @@ public class MapWidgetRegistry { } public boolean hasCollapsibles(ApplicationMode mode) { - for (MapWidgetRegInfo r : left) { + for (MapWidgetRegInfo r : leftWidgetSet) { if (r.visibleCollapsed(mode)) { return true; } } - for (MapWidgetRegInfo r : right) { + for (MapWidgetRegInfo r : rightWidgetSet) { if (r.visibleCollapsed(mode)) { return true; } @@ -97,8 +98,8 @@ public class MapWidgetRegistry { public void updateInfo(ApplicationMode mode, DrawSettings drawSettings, boolean expanded) { - update(mode, drawSettings, expanded, left); - update(mode, drawSettings, expanded, right); + update(mode, drawSettings, expanded, leftWidgetSet); + update(mode, drawSettings, expanded, rightWidgetSet); } private void update(ApplicationMode mode, DrawSettings drawSettings, boolean expanded, Set l) { @@ -111,13 +112,13 @@ public class MapWidgetRegistry { public void removeSideWidgetInternal(TextInfoWidget widget) { - Iterator it = left.iterator(); + Iterator it = leftWidgetSet.iterator(); while (it.hasNext()) { if (it.next().widget == widget) { it.remove(); } } - it = right.iterator(); + it = rightWidgetSet.iterator(); while (it.hasNext()) { if (it.next().widget == widget) { it.remove(); @@ -126,12 +127,12 @@ public class MapWidgetRegistry { } public T getSideWidget(Class cl) { - for (MapWidgetRegInfo ri : left) { + for (MapWidgetRegInfo ri : leftWidgetSet) { if (cl.isInstance(ri)) { return (T) ri.widget; } } - for (MapWidgetRegInfo ri : right) { + for (MapWidgetRegInfo ri : rightWidgetSet) { if (cl.isInstance(ri)) { return (T) ri.widget; } @@ -171,9 +172,9 @@ public class MapWidgetRegistry { widget.setContentTitle(messageId); } if (left) { - this.left.add(ii); + this.leftWidgetSet.add(ii); } else { - this.right.add(ii); + this.rightWidgetSet.add(ii); } return ii; } @@ -219,9 +220,9 @@ public class MapWidgetRegistry { private void defineDefaultSettingsElement(ApplicationMode mode) { if (this.visibleElementsFromSettings.get(mode) == null) { - LinkedHashSet set = new LinkedHashSet(); - restoreModes(set, left, mode); - restoreModes(set, right, mode); + LinkedHashSet set = new LinkedHashSet<>(); + restoreModes(set, leftWidgetSet, mode); + restoreModes(set, rightWidgetSet, mode); this.visibleElementsFromSettings.put(mode, set); } } @@ -251,8 +252,8 @@ public class MapWidgetRegistry { public void resetToDefault() { ApplicationMode appMode = settings.getApplicationMode(); - resetDefault(appMode, left); - resetDefault(appMode, right); + resetDefault(appMode, leftWidgetSet); + resetDefault(appMode, rightWidgetSet); resetDefaultAppearance(appMode); this.visibleElementsFromSettings.put(appMode, null); settings.MAP_INFO_CONTROLS.set(SHOW_PREFIX); @@ -293,7 +294,7 @@ public class MapWidgetRegistry { @Override public void onClick(DialogInterface dialog, int which) { settings.MAP_MARKERS_MODE.set(MapMarkersMode.values()[which]); - for (MapWidgetRegInfo info : right) { + for (MapWidgetRegInfo info : rightWidgetSet) { if ("map_marker_1st".equals(info.key) || "map_marker_2nd".equals(info.key)) { setVisibility(info, settings.MAP_MARKERS_MODE.get().isWidgets(), false); } @@ -322,46 +323,19 @@ public class MapWidgetRegistry { .setListener(new ApearanceItemClickListener(pref, map)).createItem()); } - class ApearanceItemClickListener implements ContextMenuAdapter.ItemClickListener { - - private MapActivity map; - private OsmandPreference pref; - - public ApearanceItemClickListener(OsmandPreference pref, MapActivity map) { - this.pref = pref; - this.map = map; - } - - @Override - public boolean onContextMenuClick(ArrayAdapter a, - int itemId, int pos, boolean isChecked) { - pref.set(!pref.get()); - map.updateApplicationModeSettings(); - a.notifyDataSetChanged(); - ; - return false; - } - } - - ; - - public static boolean distChanged(int oldDist, int dist) { - if (oldDist != 0 && oldDist - dist < 100 && Math.abs(((float) dist - oldDist) / oldDist) < 0.01) { - return false; - } - return true; + return !(oldDist != 0 && oldDist - dist < 100 && Math.abs(((float) dist - oldDist) / oldDist) < 0.01); } public void addControls(MapActivity map, ContextMenuAdapter cm, ApplicationMode mode) { cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_right, map) .setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem()); - addControls(map, cm, right, mode); + addControls(map, cm, rightWidgetSet, mode); if (mode != ApplicationMode.DEFAULT) { cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_left, map) .setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem()); - addControls(map, cm, left, mode); + addControls(map, cm, leftWidgetSet, mode); } cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_appearance_rem, map) .setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem()); @@ -372,18 +346,18 @@ public class MapWidgetRegistry { return (r.visibleCollapsed(mode) ? " + " : " ") + ctx.getString(r.messageId); } - public Set getRight() { - return right; + public Set getRightWidgetSet() { + return rightWidgetSet; } - public Set getLeft() { - return left; + public Set getLeftWidgetSet() { + return leftWidgetSet; } private void addControls(final MapActivity mapActivity, final ContextMenuAdapter contextMenuAdapter, - Set top, final ApplicationMode mode) { + Set groupTitle, final ApplicationMode mode) { @ColorRes final int defaultColor = IconsCache.getDefaultColorRes(mapActivity); - for (final MapWidgetRegInfo r : top) { + for (final MapWidgetRegInfo r : groupTitle) { if (mode == ApplicationMode.DEFAULT) { if ("intermediate_distance".equals(r.key) || "distance".equals(r.key) || "time".equals(r.key)) { continue; @@ -448,7 +422,9 @@ public class MapWidgetRegistry { } ContextMenuItem item = adapter.getItem(position); item.setSelected(visible); - item.setColorRes(visible || collapsed ? R.color.osmand_orange : defaultColor); + item.setColorRes(visible ? R.color.osmand_orange : defaultColor); + String desc = mapActivity.getString(R.string.shared_string_collapse); + item.setDescription(visible && collapsed ? desc : null); adapter.notifyDataSetChanged(); } }).createItem()); @@ -465,8 +441,8 @@ public class MapWidgetRegistry { public final String key; public final boolean left; public final int priorityOrder; - private final Set visibleCollapsible = new LinkedHashSet(); - private final Set visibleModes = new LinkedHashSet(); + private final Set visibleCollapsible = new LinkedHashSet<>(); + private final Set visibleModes = new LinkedHashSet<>(); private Runnable stateChangeListener = null; public MapWidgetRegInfo(String key, TextInfoWidget widget, @DrawableRes int drawableMenu, @@ -504,20 +480,19 @@ public class MapWidgetRegistry { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } else if (obj == null) { return false; - if (getClass() != obj.getClass()) + } else if (getClass() != obj.getClass()) { return false; + } MapWidgetRegInfo other = (MapWidgetRegInfo) obj; - if (messageId != other.messageId) - return false; - return true; + return messageId == other.messageId; } @Override - public int compareTo(MapWidgetRegInfo another) { + public int compareTo(@NonNull MapWidgetRegInfo another) { if (messageId == another.messageId) { return 0; } @@ -545,4 +520,22 @@ public class MapWidgetRegistry { return cm; } + class ApearanceItemClickListener implements ContextMenuAdapter.ItemClickListener { + private MapActivity map; + private OsmandPreference pref; + + public ApearanceItemClickListener(OsmandPreference pref, MapActivity map) { + this.pref = pref; + this.map = map; + } + + @Override + public boolean onContextMenuClick(ArrayAdapter a, + int itemId, int pos, boolean isChecked) { + pref.set(!pref.get()); + map.updateApplicationModeSettings(); + a.notifyDataSetChanged(); + return false; + } + } }