Rewritten working ContextMenu. GpxUiHelper, ConfigureMapMenu.

This commit is contained in:
GaidamakUA 2016-03-29 16:59:03 +03:00
parent c124ddf21b
commit 60073c4ff3
4 changed files with 42 additions and 63 deletions

View file

@ -40,26 +40,15 @@ public class ContextMenuAdapter {
R.layout.list_menu_item : R.layout.list_menu_item_native;
List<ContextMenuItem> items = new ArrayList<>();
private ConfigureMapMenu.OnClickListener changeAppModeListener = null;
//neded to detect whether user opened all modes or not
public int length() {
return items.size();
}
@Deprecated
public String getItemName(int position) {
return items.get(position).getTitle();
}
@Deprecated
public Boolean getSelection(int position) {
return items.get(position).getSelected();
}
@Deprecated
public Drawable getImage(OsmandApplication ctx, int position, boolean light) {
@DrawableRes
int lst = items.get(position).getIcon();
int lst = items.get(position).getLightIcon();
if (lst != -1) {
return ContextCompat.getDrawable(ctx, lst);
}
@ -71,21 +60,6 @@ public class ContextMenuAdapter {
return null;
}
@Deprecated
public void setItemName(int position, String str) {
items.get(position).setTitle(str);
}
@Deprecated
public void setItemDescription(int position, String str) {
items.get(position).setDescription(str);
}
@Deprecated
public void setSelection(int position, boolean s) {
items.get(position).setSelected(s);
}
// Adapter related
public String[] getItemNames() {
String[] itemNames = new String[items.size()];
@ -99,12 +73,12 @@ public class ContextMenuAdapter {
items.add(item);
}
public ContextMenuItem getItem(int pos) {
return items.get(pos);
public ContextMenuItem getItem(int position) {
return items.get(position);
}
public void removeItem(int pos) {
items.remove(pos);
public void removeItem(int position) {
items.remove(position);
}
public void setDefaultLayoutId(int defaultLayoutId) {
@ -298,7 +272,7 @@ public class ContextMenuAdapter {
public interface ItemClickListener {
//boolean return type needed to desribe if drawer needed to be close or not
boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked);
boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int position, boolean isChecked);
}
public interface OnIntegerValueChangedListener {
@ -308,13 +282,13 @@ public class ContextMenuAdapter {
public static abstract class OnRowItemClick implements ItemClickListener {
//boolean return type needed to describe if drawer needed to be close or not
public boolean onRowItemClick(ArrayAdapter<ContextMenuItem> adapter, View view, int itemId, int pos) {
public boolean onRowItemClick(ArrayAdapter<ContextMenuItem> adapter, View view, int itemId, int position) {
CompoundButton btn = (CompoundButton) view.findViewById(R.id.toggle_item);
if (btn != null && btn.getVisibility() == View.VISIBLE) {
btn.setChecked(!btn.isChecked());
return false;
} else {
return onContextMenuClick(adapter, itemId, pos, false);
return onContextMenuClick(adapter, itemId, position, false);
}
}
}

View file

@ -104,7 +104,7 @@ public class ConfigureMapMenu {
if (itemId == R.string.layer_poi) {
selectPOILayer(ma.getMyApplication().getSettings());
return false;
} else if (itemId == R.string.layer_gpx_layer && cm.getSelection(pos)) {
} else if (itemId == R.string.layer_gpx_layer && cm.getItem(pos).getSelected()) {
ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView());
return false;
} else {
@ -134,7 +134,7 @@ public class ConfigureMapMenu {
public void onDismiss(DialogInterface dialog) {
boolean areAnyGpxTracksVisible =
ma.getMyApplication().getSelectedGpxHelper().isShowingAnyGpxFiles();
cm.setSelection(pos, areAnyGpxTracksVisible);
cm.getItem(pos).setSelected(areAnyGpxTracksVisible);
adapter.notifyDataSetChanged();
}
});
@ -266,7 +266,7 @@ public class ConfigureMapMenu {
} else {
AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show();
}
adapter.setItemDescription(pos, getRenderDescr(activity));
adapter.getItem(pos).setDescription(getRenderDescr(activity));
activity.getDashboard().refreshContent(true);
dialog.dismiss();
}
@ -299,7 +299,7 @@ public class ConfigureMapMenu {
refreshMapComplete(activity);
dialog.dismiss();
activity.getDashboard().refreshContent(true);
//adapter.setItemDescription(pos, getDayNightDescr(activity));
//adapter.getItem(pos).setDescription(s, getDayNightDescr(activity));
//ad.notifyDataSetInvalidated();
}
});
@ -350,7 +350,7 @@ public class ConfigureMapMenu {
if (mapContext != null) {
mapContext.updateMapSettings();
}
adapter.setItemDescription(pos, String.format("%.0f", 100f * activity.getMyApplication().getSettings().MAP_DENSITY.get()) + " %");
adapter.getItem(pos).setDescription(String.format("%.0f", 100f * activity.getMyApplication().getSettings().MAP_DENSITY.get()) + " %");
ad.notifyDataSetInvalidated();
dialog.dismiss();
}
@ -385,7 +385,7 @@ public class ConfigureMapMenu {
public void onClick(DialogInterface dialog, int which) {
view.getSettings().TEXT_SCALE.set(txtValues[which]);
refreshMapComplete(activity);
adapter.setItemDescription(pos, getScale(activity));
adapter.getItem(pos).setDescription(getScale(activity));
ad.notifyDataSetInvalidated();
dialog.dismiss();
}
@ -418,7 +418,7 @@ public class ConfigureMapMenu {
public void onClick(DialogInterface dialog, int which) {
view.getSettings().MAP_PREFERRED_LOCALE.set(txtIds[which]);
refreshMapComplete(activity);
adapter.setItemDescription(pos, txtIds[which]);
adapter.getItem(pos).setDescription(txtIds[which]);
ad.notifyDataSetInvalidated();
dialog.dismiss();
}
@ -579,7 +579,7 @@ public class ConfigureMapMenu {
for (int i = 0; i < prefs.size(); i++) {
prefs.get(i).set(tempPrefs[i]);
}
adapter.setItemDescription(pos, getDescription(prefs));
adapter.getItem(pos).setDescription(getDescription(prefs));
a.notifyDataSetInvalidated();
refreshMapComplete(activity);
activity.getMapLayers().updateLayers(activity.getMapView());
@ -680,7 +680,7 @@ public class ConfigureMapMenu {
pref.set(p.getPossibleValues()[which - 1]);
}
refreshMapComplete(activity);
adapter.setItemDescription(pos, SettingsActivity.getStringPropertyValue(activity, pref.get()));
adapter.getItem(pos).setDescription(SettingsActivity.getStringPropertyValue(activity, pref.get()));
dialog.dismiss();
ad.notifyDataSetInvalidated();
}

View file

@ -5,6 +5,7 @@ import android.app.Application;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.util.TypedValue;
import android.view.View;
@ -68,11 +69,11 @@ public class GpxUiHelper {
public static String getDescription(OsmandApplication app, GPXTrackAnalysis analysis, boolean html) {
StringBuilder description = new StringBuilder();
String nl = html ? "<br/>" : "\n";
String timeSpanClr = Algorithms.colorToString(app.getResources().getColor(R.color.gpx_time_span_color));
String distanceClr = Algorithms.colorToString(app.getResources().getColor(R.color.gpx_distance_color));
String speedClr = Algorithms.colorToString(app.getResources().getColor(R.color.gpx_speed));
String ascClr = Algorithms.colorToString(app.getResources().getColor(R.color.gpx_altitude_asc));
String descClr = Algorithms.colorToString(app.getResources().getColor(R.color.gpx_altitude_desc));
String timeSpanClr = Algorithms.colorToString(ContextCompat.getColor(app, R.color.gpx_time_span_color));
String distanceClr = Algorithms.colorToString(ContextCompat.getColor(app, R.color.gpx_distance_color));
String speedClr = Algorithms.colorToString(ContextCompat.getColor(app, R.color.gpx_speed));
String ascClr = Algorithms.colorToString(ContextCompat.getColor(app, R.color.gpx_altitude_asc));
String descClr = Algorithms.colorToString(ContextCompat.getColor(app, R.color.gpx_altitude_desc));
// OUTPUT:
// 1. Total distance, Start time, End time
description.append(app.getString(R.string.gpx_info_distance, getColorValue(distanceClr,
@ -221,15 +222,16 @@ public class GpxUiHelper {
}
protected static void updateSelection(List<String> selectedGpxList, boolean showCurrentTrack,
final ContextMenuAdapter adapter, int i, String fileName) {
if (i == 0 && showCurrentTrack) {
final ContextMenuAdapter adapter, int position, String fileName) {
ContextMenuItem item = adapter.getItem(position);
if (position == 0 && showCurrentTrack) {
if (selectedGpxList.contains("")) {
adapter.setSelection(i, true);
item.setSelected(true);
}
} else {
for (String file : selectedGpxList) {
if (file.endsWith(fileName)) {
adapter.setSelection(i, true);
item.setSelected(true);
break;
}
}
@ -244,7 +246,8 @@ public class GpxUiHelper {
@Override
public boolean processResult(GPXFile[] result) {
cmAdapter.setItemName(position, cmAdapter.getItemName(position) + "\n" + getDescription((OsmandApplication) app, result[0], f, false));
ContextMenuItem item = cmAdapter.getItem(position);
item.setTitle(item.getTitle() + "\n" + getDescription((OsmandApplication) app, result[0], f, false));
adapter.notifyDataSetInvalidated();
return true;
}
@ -270,6 +273,7 @@ public class GpxUiHelper {
if (v == null) {
v = activity.getLayoutInflater().inflate(layout, null);
}
final ContextMenuItem item = adapter.getItem(position);
ImageView icon = (ImageView) v.findViewById(R.id.icon);
icon.setImageDrawable(adapter.getImage(app, position, light));
final ArrayAdapter<String> arrayAdapter = this;
@ -279,11 +283,11 @@ public class GpxUiHelper {
if (showCurrentGpx && position == 0) {
return;
}
int nline = adapter.getItemName(position).indexOf('\n');
int nline = item.getTitle().indexOf('\n');
if (nline == -1) {
setDescripionInDialog(arrayAdapter, adapter, activity, dir, list.get(position), position);
} else {
adapter.setItemName(position, adapter.getItemName(position).substring(0, nline));
item.setTitle(item.getTitle().substring(0, nline));
arrayAdapter.notifyDataSetInvalidated();
}
}
@ -295,7 +299,7 @@ public class GpxUiHelper {
icon.setVisibility(View.VISIBLE);
}
TextView tv = (TextView) v.findViewById(R.id.title);
tv.setText(adapter.getItemName(position));
tv.setText(item.getTitle());
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
// Put the image on the TextView
@ -304,15 +308,15 @@ public class GpxUiHelper {
// }
// tv.setCompoundDrawablePadding(padding);
final CheckBox ch = ((CheckBox) v.findViewById(R.id.toggle_item));
if (adapter.getSelection(position) == null) {
if (item.getSelected() == null) {
ch.setVisibility(View.INVISIBLE);
} else {
ch.setOnCheckedChangeListener(null);
ch.setChecked(adapter.getSelection(position));
ch.setChecked(item.getSelected());
ch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
adapter.setSelection(position, isChecked);
item.setSelected(isChecked);
}
});
}
@ -338,12 +342,12 @@ public class GpxUiHelper {
if (app != null && app.getSelectedGpxHelper() != null) {
app.getSelectedGpxHelper().clearAllGpxFileToShow();
}
if (showCurrentGpx && adapter.getSelection(0)) {
if (showCurrentGpx && adapter.getItem(0).getSelected()) {
currentGPX = app.getSavingTrackHelper().getCurrentGpx();
}
List<String> s = new ArrayList<>();
for (int i = (showCurrentGpx ? 1 : 0); i < adapter.length(); i++) {
if (adapter.getSelection(i)) {
if (adapter.getItem(i).getSelected()) {
s.add(list.get(i));
}
}
@ -361,7 +365,8 @@ public class GpxUiHelper {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (multipleChoice) {
adapter.setSelection(position, !adapter.getSelection(position));
ContextMenuItem item = adapter.getItem(position);
item.setSelected(!item.getSelected());
listAdapter.notifyDataSetInvalidated();
} else {
dlg.dismiss();

View file

@ -302,7 +302,7 @@ public class MapWidgetRegistry {
}
map.refreshMap();
dialog.dismiss();
cm.setItemDescription(pos, settings.MAP_MARKERS_MODE.get().toHumanString(map));
cm.getItem(pos).setDescription(settings.MAP_MARKERS_MODE.get().toHumanString(map));
ad.notifyDataSetChanged();
}
});