Fix #9623
This commit is contained in:
parent
46b6834652
commit
a577b26e7f
6 changed files with 119 additions and 12 deletions
|
@ -65,6 +65,7 @@ public class ContextMenuAdapter {
|
|||
@LayoutRes
|
||||
private int DEFAULT_LAYOUT_ID = R.layout.list_menu_item_native;
|
||||
List<ContextMenuItem> items = new ArrayList<>();
|
||||
private ArrayAdapter<ContextMenuItem> arrayAdapter;
|
||||
private boolean profileDependent = false;
|
||||
private boolean nightMode;
|
||||
private ConfigureMapMenu.OnClickListener changeAppModeListener = null;
|
||||
|
@ -100,6 +101,15 @@ public class ContextMenuAdapter {
|
|||
return items.get(position);
|
||||
}
|
||||
|
||||
public ContextMenuItem getItemById(@NonNull String id) {
|
||||
for (ContextMenuItem item : items) {
|
||||
if (id.equals(item.getId())) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<ContextMenuItem> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
@ -192,8 +202,9 @@ public class ContextMenuAdapter {
|
|||
}
|
||||
}
|
||||
items.removeAll(itemsToRemove);
|
||||
return new ContextMenuArrayAdapter(activity, layoutId, R.id.title,
|
||||
this.arrayAdapter = new ContextMenuArrayAdapter(activity, layoutId, R.id.title,
|
||||
items.toArray(new ContextMenuItem[items.size()]), app, lightTheme, changeAppModeListener);
|
||||
return this.arrayAdapter;
|
||||
}
|
||||
|
||||
public class ContextMenuArrayAdapter extends ArrayAdapter<ContextMenuItem> {
|
||||
|
@ -616,6 +627,12 @@ public class ContextMenuAdapter {
|
|||
return visible;
|
||||
}
|
||||
|
||||
public void notifyDataSetChanged() {
|
||||
if (this.arrayAdapter != null) {
|
||||
this.arrayAdapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public static OnItemDeleteAction makeDeleteAction(final OsmandPreference... prefs) {
|
||||
return new OnItemDeleteAction() {
|
||||
@Override
|
||||
|
|
|
@ -130,6 +130,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
|||
|
||||
private ArrayAdapter<?> listAdapter;
|
||||
private OnItemClickListener listAdapterOnClickListener;
|
||||
private DashboardStateListener dashboardStateListener;
|
||||
|
||||
private boolean visible = false;
|
||||
private DashboardType visibleType;
|
||||
|
@ -567,7 +568,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
|||
boolean appModeChanged = currentAppMode != previousAppMode;
|
||||
|
||||
boolean refresh = this.visibleType == type && !appModeChanged;
|
||||
previousAppMode = currentAppMode;
|
||||
this.previousAppMode = currentAppMode;
|
||||
this.visibleType = type;
|
||||
DashboardOnMap.staticVisible = visible;
|
||||
DashboardOnMap.staticVisibleType = type;
|
||||
|
@ -657,9 +658,21 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
|||
settings.MAPILLARY_FIRST_DIALOG_SHOWN.set(true);
|
||||
}
|
||||
}
|
||||
notifyDashboardVisibilityStateListener(visible);
|
||||
mapActivity.updateStatusBarColor();
|
||||
}
|
||||
|
||||
private void notifyDashboardVisibilityStateListener(boolean visible) {
|
||||
if (dashboardStateListener != null) {
|
||||
if (visible) {
|
||||
dashboardStateListener.onShowDashboard();
|
||||
} else {
|
||||
dashboardStateListener.onHideDashboard();
|
||||
dashboardStateListener = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateDashboard() {
|
||||
if (visibleType == DashboardType.ROUTE_PREFERENCES) {
|
||||
refreshContent(false);
|
||||
|
@ -705,7 +718,9 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
|||
if (visibleType == DashboardType.CONFIGURE_SCREEN) {
|
||||
cm = mapActivity.getMapLayers().getMapWidgetRegistry().getViewConfigureMenuAdapter(mapActivity);
|
||||
} else if (visibleType == DashboardType.CONFIGURE_MAP) {
|
||||
cm = new ConfigureMapMenu().createListAdapter(mapActivity);
|
||||
ConfigureMapMenu configureMapMenu = new ConfigureMapMenu(mapActivity);
|
||||
dashboardStateListener = configureMapMenu;
|
||||
cm = configureMapMenu.createListAdapter(mapActivity);
|
||||
} else if (visibleType == DashboardType.LIST_MENU) {
|
||||
cm = mapActivity.getMapActions().createMainOptionsMenu();
|
||||
} else if (visibleType == DashboardType.ROUTE_PREFERENCES) {
|
||||
|
@ -1315,4 +1330,12 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
|||
@Override
|
||||
public void routeWasFinished() {
|
||||
}
|
||||
|
||||
public interface DashboardStateListener {
|
||||
|
||||
void onShowDashboard();
|
||||
|
||||
void onHideDashboard();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,9 +37,11 @@ import net.osmand.plus.R;
|
|||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.SettingsActivity;
|
||||
import net.osmand.plus.dashboard.DashboardOnMap;
|
||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.render.RendererRegistry;
|
||||
import net.osmand.plus.render.RendererRegistry.OnChangeRenderingRuleListener;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings.ListStringPreference;
|
||||
|
@ -98,8 +100,9 @@ import static net.osmand.render.RenderingRuleStorageProperties.UI_CATEGORY_DETAI
|
|||
import static net.osmand.render.RenderingRuleStorageProperties.UI_CATEGORY_HIDE;
|
||||
import static net.osmand.render.RenderingRuleStorageProperties.UI_CATEGORY_ROUTES;
|
||||
|
||||
public class ConfigureMapMenu {
|
||||
public class ConfigureMapMenu implements DashboardOnMap.DashboardStateListener {
|
||||
private static final Log LOG = PlatformUtil.getLog(ConfigureMapMenu.class);
|
||||
public static final String TAG = ConfigureMapMenu.class.getName();
|
||||
public static final String HIKING_ROUTES_OSMC_ATTR = "hikingRoutesOSMC";
|
||||
public static final String CURRENT_TRACK_COLOR_ATTR = "currentTrackColor";
|
||||
public static final String CURRENT_TRACK_WIDTH_ATTR = "currentTrackWidth";
|
||||
|
@ -110,10 +113,17 @@ public class ConfigureMapMenu {
|
|||
private int selectedLanguageIndex;
|
||||
private boolean transliterateNames;
|
||||
|
||||
private MapActivity mapActivity;
|
||||
private ContextMenuAdapter contextMenuAdapter;
|
||||
|
||||
public interface OnClickListener {
|
||||
void onClick();
|
||||
}
|
||||
|
||||
public ConfigureMapMenu(MapActivity mapActivity) {
|
||||
this.mapActivity = mapActivity;
|
||||
}
|
||||
|
||||
public ContextMenuAdapter createListAdapter(final MapActivity ma) {
|
||||
OsmandApplication app = ma.getMyApplication();
|
||||
boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
|
||||
|
@ -136,6 +146,7 @@ public class ConfigureMapMenu {
|
|||
adapter.setNightMode(nightMode);
|
||||
createLayersItems(customRules, adapter, ma, themeRes, nightMode);
|
||||
createRenderingAttributeItems(customRules, adapter, ma, themeRes, nightMode);
|
||||
this.contextMenuAdapter = adapter;
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
@ -273,13 +284,17 @@ public class ConfigureMapMenu {
|
|||
final OsmandSettings settings = app.getSettings();
|
||||
final int selectedProfileColorRes = settings.APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode);
|
||||
final int selectedProfileColor = ContextCompat.getColor(app, selectedProfileColorRes);
|
||||
RendererRegistry rr = app.getRendererRegistry();
|
||||
RenderingRulesStorage storage = rr.getCurrentSelectedRenderer();
|
||||
String renderDescr = getRenderDescr(activity, storage);
|
||||
|
||||
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_map_rendering, activity)
|
||||
.setId(MAP_RENDERING_CATEGORY_ID)
|
||||
.setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem());
|
||||
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_renderer, activity)
|
||||
.setId(MAP_STYLE_ID)
|
||||
.setDescription(getRenderDescr(activity)).setLayout(R.layout.list_item_single_line_descrition_narrow)
|
||||
.setDescription(renderDescr)
|
||||
.setLayout(R.layout.list_item_single_line_descrition_narrow)
|
||||
.setIcon(R.drawable.ic_map).setListener(new ContextMenuAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public boolean onContextMenuClick(final ArrayAdapter<ContextMenuItem> ad, int itemId,
|
||||
|
@ -942,13 +957,11 @@ public class ConfigureMapMenu {
|
|||
dialog.show();
|
||||
}
|
||||
|
||||
protected String getRenderDescr(final MapActivity activity) {
|
||||
RendererRegistry rr = activity.getMyApplication().getRendererRegistry();
|
||||
RenderingRulesStorage storage = rr.getCurrentSelectedRenderer();
|
||||
protected String getRenderDescr(Context ctx, RenderingRulesStorage storage) {
|
||||
if (storage == null) {
|
||||
return "";
|
||||
}
|
||||
String translation = RendererRegistry.getTranslatedRendererName(activity, storage.getName());
|
||||
String translation = RendererRegistry.getTranslatedRendererName(ctx, storage.getName());
|
||||
return translation == null ? storage.getName() : translation;
|
||||
}
|
||||
|
||||
|
@ -1109,6 +1122,31 @@ public class ConfigureMapMenu {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowDashboard() {
|
||||
getMyApplication().getRendererRegistry()
|
||||
.addOnChangeRenderingRuleListener(TAG, new OnChangeRenderingRuleListener() {
|
||||
@Override
|
||||
public void onRenderingRuleChanged(RenderingRulesStorage currentSelectedRender) {
|
||||
if (contextMenuAdapter != null) {
|
||||
ContextMenuItem item = contextMenuAdapter.getItemById(MAP_STYLE_ID);
|
||||
String renderDescr = getRenderDescr(mapActivity, currentSelectedRender);
|
||||
item.setDescription(renderDescr);
|
||||
contextMenuAdapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHideDashboard() {
|
||||
getMyApplication().getRendererRegistry().removeOnChangeRenderingRuleListener(TAG);
|
||||
}
|
||||
|
||||
private OsmandApplication getMyApplication() {
|
||||
return mapActivity.getMyApplication();
|
||||
}
|
||||
|
||||
private static class StringSpinnerArrayAdapter extends ArrayAdapter<String> {
|
||||
|
||||
private boolean nightMode;
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.io.FileNotFoundException;
|
|||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
@ -49,6 +50,7 @@ public class RendererRegistry {
|
|||
|
||||
private RenderingRulesStorage defaultRender = null;
|
||||
private RenderingRulesStorage currentSelectedRender = null;
|
||||
private Map<String, OnChangeRenderingRuleListener> onChangeRenderingRuleListeners = new HashMap<>();
|
||||
|
||||
private Map<String, File> externalRenderers = new LinkedHashMap<String, File>();
|
||||
private Map<String, String> internalRenderers = new LinkedHashMap<String, String>();
|
||||
|
@ -334,8 +336,22 @@ public class RendererRegistry {
|
|||
return currentSelectedRender;
|
||||
}
|
||||
|
||||
public void setCurrentSelectedRender(RenderingRulesStorage currentSelectedRender) {
|
||||
public void setCurrentSelectedRender(final RenderingRulesStorage currentSelectedRender) {
|
||||
this.currentSelectedRender = currentSelectedRender;
|
||||
notifyChangeRenderRuleListeners();
|
||||
}
|
||||
|
||||
public void notifyChangeRenderRuleListeners() {
|
||||
app.runInUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (OnChangeRenderingRuleListener listener : onChangeRenderingRuleListeners.values()) {
|
||||
if (listener != null) {
|
||||
listener.onRenderingRuleChanged(currentSelectedRender);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setRendererLoadedEventListener(IRendererLoadedEventListener listener) {
|
||||
|
@ -361,4 +377,17 @@ public class RendererRegistry {
|
|||
public Map<String, File> getExternalRenderers() {
|
||||
return externalRenderers;
|
||||
}
|
||||
|
||||
public void addOnChangeRenderingRuleListener(@NonNull String key,
|
||||
@NonNull OnChangeRenderingRuleListener listener) {
|
||||
onChangeRenderingRuleListeners.put(key, listener);
|
||||
}
|
||||
|
||||
public void removeOnChangeRenderingRuleListener(@NonNull String key) {
|
||||
onChangeRenderingRuleListeners.remove(key);
|
||||
}
|
||||
|
||||
public interface OnChangeRenderingRuleListener {
|
||||
void onRenderingRuleChanged(RenderingRulesStorage currentSelectedRender);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -197,7 +197,7 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
|
|||
contextMenuAdapter = ((MapActivity) activity).getMapActions().createMainOptionsMenu();
|
||||
break;
|
||||
case CONFIGURE_MAP:
|
||||
ConfigureMapMenu configureMapMenu = new ConfigureMapMenu();
|
||||
ConfigureMapMenu configureMapMenu = new ConfigureMapMenu((MapActivity)activity);
|
||||
contextMenuAdapter = configureMapMenu.createListAdapter((MapActivity) activity);
|
||||
break;
|
||||
case CONTEXT_MENU_ACTIONS:
|
||||
|
|
|
@ -285,7 +285,7 @@ public class ConfigureMenuRootFragment extends BaseOsmAndFragment {
|
|||
contextMenuAdapter = mapActivityActions.createMainOptionsMenu();
|
||||
break;
|
||||
case CONFIGURE_MAP:
|
||||
ConfigureMapMenu configureMapMenu = new ConfigureMapMenu();
|
||||
ConfigureMapMenu configureMapMenu = new ConfigureMapMenu((MapActivity) activity);
|
||||
contextMenuAdapter = configureMapMenu.createListAdapter((MapActivity) activity);
|
||||
break;
|
||||
case CONTEXT_MENU_ACTIONS:
|
||||
|
|
Loading…
Reference in a new issue