Put waypoints/ configure map/screen in the list

This commit is contained in:
Victor Shcherb 2015-03-25 18:42:07 +01:00
parent 53f0a7fba3
commit 111ad576eb
10 changed files with 290 additions and 436 deletions

View file

@ -48,6 +48,35 @@
android:src="@drawable/ic_action_settings_dark" />
<ImageView
android:id="@+id/toolbar_ok"
android:layout_width="@dimen/dashListItemHeight"
android:layout_height="@dimen/dashListItemHeight"
android:layout_gravity="right"
android:background="@drawable/dashboard_button_light"
android:scaleType="center"
android:src="@drawable/ic_action_ok_dark" />
<ImageView
android:id="@+id/toolbar_sort"
android:layout_width="@dimen/dashListItemHeight"
android:layout_height="@dimen/dashListItemHeight"
android:layout_gravity="right"
android:background="@drawable/dashboard_button_light"
android:scaleType="center"
android:src="@drawable/ic_sort_waypoint_dark" />
<ImageView
android:id="@+id/toolbar_flat"
android:layout_width="@dimen/dashListItemHeight"
android:layout_height="@dimen/dashListItemHeight"
android:layout_gravity="right"
android:background="@drawable/dashboard_button_light"
android:scaleType="center"
android:visibility="gone"
android:src="@drawable/ic_flat_list_dark" />
<ImageView
android:id="@+id/toolbar_edit"
android:layout_width="@dimen/dashListItemHeight"
@ -55,6 +84,7 @@
android:layout_gravity="right"
android:background="@drawable/dashboard_button_light"
android:scaleType="center"
android:visibility="gone"
android:src="@drawable/ic_action_edit_dark" />

View file

@ -84,13 +84,10 @@ public class MapActivityActions implements DialogProvider {
private OsmandSettings settings;
private RoutingHelper routingHelper;
private WaypointDialogHelper waypointDialogHelper;
public MapActivityActions(MapActivity mapActivity){
this.mapActivity = mapActivity;
settings = mapActivity.getMyApplication().getSettings();
routingHelper = mapActivity.getMyApplication().getRoutingHelper();
waypointDialogHelper = new WaypointDialogHelper(mapActivity);
}
@ -546,7 +543,7 @@ public class MapActivityActions implements DialogProvider {
}
private ContextMenuAdapter createMainOptionsMenu() {
public ContextMenuAdapter createMainOptionsMenu() {
final OsmandMapTileView mapView = mapActivity.getMapView();
final OsmandApplication app = mapActivity.getMyApplication();
ContextMenuAdapter optionsMenuHelper = new ContextMenuAdapter(app);
@ -631,7 +628,7 @@ public class MapActivityActions implements DialogProvider {
.listen(new OnContextMenuClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
showWaypointsInDrawer(false);
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.WAYPOINTS);
return false;
}
}).reg();
@ -692,8 +689,7 @@ public class MapActivityActions implements DialogProvider {
.listen(new OnContextMenuClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
mapActivity.getDashboard().setListAdapter(new ConfigureMapMenu().createListAdapter(mapActivity),
DashboardType.CONFIGURE_MAP);
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.CONFIGURE_MAP);
return false;
}
}).reg();
@ -702,8 +698,7 @@ public class MapActivityActions implements DialogProvider {
.listen(new OnContextMenuClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
ContextMenuAdapter cm = mapActivity.getMapLayers().getMapInfoLayer().getViewConfigureMenuAdapter();
mapActivity.getDashboard().setListAdapter(cm, DashboardType.CONFIGURE_SCREEN);
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.CONFIGURE_SCREEN);
return false;
}
}).reg();
@ -767,24 +762,9 @@ public class MapActivityActions implements DialogProvider {
return optionsMenuHelper;
}
public void showWaypointsInDrawer(boolean flat) {
final int[] running = new int[] { -1 };
ArrayAdapter<Object> listAdapter = waypointDialogHelper.getWaypointsDrawerAdapter(mapActivity, running, flat);
OnItemClickListener listener = waypointDialogHelper.getDrawerItemClickListener(mapActivity, running,
listAdapter, null);
mapActivity.getDashboard().setListAdapter(listAdapter, listener, DashboardType.WAYPOINTS);
}
public void showWaypointsDialog(boolean flat) {
if(flat) {
waypointDialogHelper.showWaypointsDialogFlat(mapActivity, false);
} else {
waypointDialogHelper.showWaypointsDialog(mapActivity, false);
}
}
public void openIntermediatePointsDialog(){
waypointDialogHelper.showWaypointsDialog(mapActivity, false);
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.WAYPOINTS);
}
private TargetPointsHelper getTargets() {

View file

@ -168,7 +168,8 @@ public class SearchPOIActivity extends OsmandListActivity implements OsmAndCompa
showOnMapItem = menu.add(0, SHOW_ON_MAP, 0, R.string.shared_string_show_on_map);
MenuItemCompat.setShowAsAction(showOnMapItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
showOnMapItem = showOnMapItem.setIcon(R.drawable.ic_action_marker2_dark);
showOnMapItem = showOnMapItem.setIcon(getMyApplication().getIconsCache().getActionBarIcon(
R.drawable.ic_action_map_marker_dark));
showOnMapItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {

View file

@ -168,7 +168,7 @@ public class SearchPoiFilterFragment extends ListFragment implements SearchActiv
}
}
ImageView editIcon = (ImageView) row.findViewById(R.id.folder_edit_icon);
editIcon.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_action_filter_dark));
editIcon.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_action_edit_dark));
if (model.isStandardFilter()) {
editIcon.setVisibility(View.GONE);
} else {

View file

@ -1,6 +1,7 @@
package net.osmand.plus.dashboard;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@ -13,12 +14,16 @@ import net.osmand.plus.IconsCache;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.IntermediatePointsDialog;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.audionotes.DashAudioVideoNotesFragment;
import net.osmand.plus.development.DashSimulateFragment;
import net.osmand.plus.development.OsmandDevelopmentPlugin;
import net.osmand.plus.dialogs.ConfigureMapMenu;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.helpers.ScreenOrientationHelper;
import net.osmand.plus.helpers.WaypointDialogHelper;
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
import net.osmand.plus.monitoring.DashTrackFragment;
import net.osmand.plus.osmedit.DashOsmEditsFragment;
import net.osmand.plus.osmo.DashOsMoFragment;
@ -77,6 +82,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
private boolean visible = false;
private DashboardType visibleType;
private DashboardType previousVisibleType;
private boolean landscape;
private List<WeakReference<DashBaseFragment>> fragList = new LinkedList<WeakReference<DashBaseFragment>>();
private net.osmand.Location myLocation;
@ -91,10 +97,15 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
private View paddingView;
private int mFlexibleSpaceImageHeight;
private WaypointDialogHelper waypointDialogHelper;
private final int[] running = new int[] { -1 };
private List<LocationPointWrapper> deletedPoints = new ArrayList<LocationPointWrapper>();
public enum DashboardType {
WAYPOINTS,
WAYPOINTS_FLAT,
WAYPOINTS_EDIT,
WAYPOINTS_SORT,
CONFIGURE_SCREEN,
CONFIGURE_MAP,
LIST_MENU,
@ -108,6 +119,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
public void createDashboardView() {
waypointDialogHelper = new WaypointDialogHelper(mapActivity);
landscape = !ScreenOrientationHelper.isOrientationPortrait(mapActivity);
dashboardView = (FrameLayout) mapActivity.findViewById(R.id.dashboard);
View.OnClickListener listener = new View.OnClickListener() {
@ -137,20 +149,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
paddingView.setClickable(true);
paddingView.setOnClickListener(listener);
listView.addHeaderView(paddingView);
listBackgroundView = mapActivity.findViewById(R.id.dash_list_background);
final View contentView = mapActivity.getWindow().getDecorView().findViewById(android.R.id.content);
contentView.post(new Runnable() {
@Override
public void run() {
// mListBackgroundView's should fill its parent vertically
// but the height of the content view is 0 on 'onCreate'.
// So we should get it with post().
if(listBackgroundView != null) {
listBackgroundView.getLayoutParams().height = contentView.getHeight();
}
}
});
}
dashboardView.findViewById(R.id.animateContent).setOnClickListener(listener);
dashboardView.findViewById(R.id.map_part_dashboard).setOnClickListener(listener);
@ -160,49 +159,129 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
private void initToolbarActions() {
private void updateListBackgroundHeight() {
final View contentView = mapActivity.getWindow().getDecorView().findViewById(android.R.id.content);
if(contentView.getHeight() > 0) {
if(listBackgroundView != null) {
listBackgroundView.getLayoutParams().height = contentView.getHeight();
}
} else {
contentView.post(new Runnable() {
@Override
public void run() {
// mListBackgroundView's should fill its parent vertically
// but the height of the content view is 0 on 'onCreate'.
// So we should get it with post().
if (listBackgroundView != null) {
listBackgroundView.getLayoutParams().height = contentView.getHeight();
}
}
});
}
}
private void updateToolbarActions() {
TextView tv = (TextView) dashboardView.findViewById(R.id.toolbar_text);
tv.setText("");
boolean waypointsVisible = visibleType == DashboardType.WAYPOINTS || visibleType == DashboardType.WAYPOINTS_FLAT;
boolean waypointsEdit = visibleType == DashboardType.WAYPOINTS_EDIT;
if (waypointsVisible || waypointsEdit){
tv.setText(R.string.waypoints);
} else if(visibleType == DashboardType.CONFIGURE_MAP){
tv.setText(R.string.configure_map);
} else if(visibleType == DashboardType.CONFIGURE_SCREEN){
tv.setText(R.string.layer_map_appearance);
}
ImageView edit = (ImageView) dashboardView.findViewById(R.id.toolbar_edit);
edit.setVisibility(View.GONE);
ImageView sort = (ImageView) dashboardView.findViewById(R.id.toolbar_sort);
sort.setVisibility(View.GONE);
ImageView ok = (ImageView) dashboardView.findViewById(R.id.toolbar_ok);
ok.setVisibility(View.GONE);
ImageView flat = (ImageView) dashboardView.findViewById(R.id.toolbar_flat);
flat.setVisibility(View.GONE);
ImageView settings = (ImageView) dashboardView.findViewById(R.id.toolbar_settings);
settings.setVisibility(View.GONE);
IconsCache iconsCache = mapActivity.getMyApplication().getIconsCache();
ImageView lst = (ImageView) dashboardView.findViewById(R.id.toolbar_list);
lst.setVisibility(View.GONE);
ImageView back = (ImageView) dashboardView.findViewById(R.id.toolbar_back);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideDashboard();
backPressed();
}
});
ImageView edit = (ImageView) dashboardView.findViewById(R.id.toolbar_edit);
edit.setVisibility(View.GONE);
if (waypointsVisible) {
edit.setVisibility(View.VISIBLE);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setDashboardVisibility(true, DashboardType.WAYPOINTS_EDIT);
}
});
ImageView settings = (ImageView) dashboardView.findViewById(R.id.toolbar_settings);
// TODO conditional
flat.setVisibility(View.VISIBLE);
final boolean flatNow = visibleType == DashboardType.WAYPOINTS_FLAT;
flat.setImageDrawable(iconsCache.getActionBarIcon(flatNow ?
R.drawable.ic_tree_list_dark : R.drawable.ic_flat_list_dark));
flat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setDashboardVisibility(true, flatNow ? DashboardType.WAYPOINTS :
DashboardType.WAYPOINTS_FLAT);
}
});
}
if(waypointsEdit) {
ok.setVisibility(View.VISIBLE);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mapActivity.getMyApplication().getWaypointHelper().removeVisibleLocationPoint(deletedPoints);
hideDashboard();
}
});
if (mapActivity.getMyApplication().getTargetPointsHelper().getIntermediatePoints().size() > 0) {
sort.setVisibility(View.VISIBLE);
sort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideDashboard();
IntermediatePointsDialog.openIntermediatePointsDialog(mapActivity, getMyApplication(), true);
}
});
}
}
if (visibleType == DashboardType.DASHBOARD || visibleType == DashboardType.LIST_MENU) {
settings.setVisibility(View.VISIBLE);
settings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Class<? extends Activity> sta = mapActivity.getMyApplication().getAppCustomization().getSettingsActivity();
Class<? extends Activity> sta = mapActivity.getMyApplication().getAppCustomization()
.getSettingsActivity();
visible = false;
mapActivity.startActivity(new Intent(mapActivity, sta));
}
});
IconsCache iconsCache = mapActivity.getMyApplication().getIconsCache();
ImageView lst = (ImageView) dashboardView.findViewById(R.id.toolbar_list);
lst.setVisibility(View.VISIBLE);
if(visibleType == DashboardType.DASHBOARD) {
lst.setImageDrawable(iconsCache.getActionBarIcon(R.drawable.ic_navigation_drawer));
} else if(visibleType == DashboardType.LIST_MENU) {
if (visibleType == DashboardType.DASHBOARD) {
lst.setImageDrawable(iconsCache.getActionBarIcon(R.drawable.ic_navigation_drawer_dark));
} else if (visibleType == DashboardType.LIST_MENU) {
lst.setImageDrawable(iconsCache.getActionBarIcon(R.drawable.ic_dashboard_dark));
} else {
lst.setVisibility(View.GONE);
}
lst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(visibleType == DashboardType.DASHBOARD) {
if (visibleType == DashboardType.DASHBOARD) {
setDashboardVisibility(true, DashboardType.LIST_MENU);
} else {
setDashboardVisibility(true, DashboardType.DASHBOARD);
@ -210,6 +289,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
});
}
}
private void initActionButton() {
@ -276,14 +356,16 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
public void hideDashboard() {
setDashboardVisibility(false, DashboardType.DASHBOARD);
setDashboardVisibility(false, visibleType);
}
public void setDashboardVisibility(boolean visible, DashboardType type) {
if(visible == this.visible && type == visibleType) {
return;
}
this.previousVisibleType = this.visible ? null : visibleType;
this.visible = visible;
boolean refresh = this.visibleType == type;
this.visibleType = type;
DashboardOnMap.staticVisible = visible;
DashboardOnMap.staticVisibleType = type;
@ -304,10 +386,16 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
} else {
scrollView.setVisibility(View.GONE);
listViewLayout.setVisibility(View.VISIBLE);
if(refresh) {
refreshContent();
} else {
updateListAdapter();
updateListBackgroundHeight();
}
}
mapActivity.findViewById(R.id.MapHudButtonsOverlay).setVisibility(View.INVISIBLE);
initToolbarActions();
updateToolbarActions();
//fabButton.showFloatingActionButton();
open(dashboardView.findViewById(R.id.animateContent));
updateLocation(true, true, false);
@ -326,6 +414,48 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
}
private void updateListAdapter() {
ContextMenuAdapter cm = null;
if (DashboardType.WAYPOINTS == visibleType || DashboardType.WAYPOINTS_FLAT == visibleType) {
ArrayAdapter<Object> listAdapter = waypointDialogHelper.getWaypointsDrawerAdapter(false, deletedPoints, mapActivity, running,
DashboardType.WAYPOINTS_FLAT == visibleType);
OnItemClickListener listener = waypointDialogHelper.getDrawerItemClickListener(mapActivity, running,
listAdapter, null);
updateListAdapter(listAdapter, listener);
} else if (DashboardType.WAYPOINTS_EDIT == visibleType) {
deletedPoints.clear();
ArrayAdapter<Object> listAdapter = waypointDialogHelper.getWaypointsDrawerAdapter(true, deletedPoints, mapActivity, running,
DashboardType.WAYPOINTS_FLAT == visibleType);
OnItemClickListener listener = waypointDialogHelper.getDrawerItemClickListener(mapActivity, running,
listAdapter, null);
updateListAdapter(listAdapter, listener);
} else {
if (DashboardType.CONFIGURE_SCREEN == visibleType) {
cm = mapActivity.getMapLayers().getMapInfoLayer().getViewConfigureMenuAdapter();
} else if(DashboardType.CONFIGURE_MAP == visibleType) {
cm = new ConfigureMapMenu().createListAdapter(mapActivity);
} else if(DashboardType.LIST_MENU == visibleType) {
cm = mapActivity.getMapActions().createMainOptionsMenu();
}
if (cm != null) {
updateListAdapter(cm);
}
}
}
public void updateListAdapter(ContextMenuAdapter cm) {
final ArrayAdapter<?> listAdapter = cm.createListAdapter(mapActivity, getMyApplication().getSettings()
.isLightContent());
OnItemClickListener listener = getOptionsMenuOnClickListener(cm, listAdapter);
updateListAdapter(listAdapter, listener);
}
public void refreshContent() {
listAdapter.notifyDataSetChanged();
}
private OnItemClickListener getOptionsMenuOnClickListener(final ContextMenuAdapter cm,
final ArrayAdapter<?> listAdapter) {
return new AdapterView.OnItemClickListener() {
@ -571,13 +701,23 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
public boolean onBackPressed() {
if (isVisible()) {
hideDashboard();
backPressed();
return true;
}
return false;
}
private void backPressed() {
if(previousVisibleType != visibleType && previousVisibleType != null) {
visibleType = null;
setDashboardVisibility(true, previousVisibleType);
} else {
hideDashboard();
}
}
@Override
public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) {
// Translate list background
@ -605,7 +745,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
}
public void setListAdapter(ArrayAdapter<?> listAdapter, OnItemClickListener listener, DashboardType type) {
private void updateListAdapter(ArrayAdapter<?> listAdapter, OnItemClickListener listener) {
this.listAdapter = listAdapter;
this.listAdapterOnClickListener = listener;
if(this.listView != null) {
@ -624,18 +764,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
listView.setOnItemClickListener(null);
}
}
setDashboardVisibility(true, type);
}
public void setListAdapter(ContextMenuAdapter cm, DashboardType type) {
final ArrayAdapter<?> listAdapter = cm.createListAdapter(mapActivity, getMyApplication().getSettings()
.isLightContent());
OnItemClickListener listener = getOptionsMenuOnClickListener(cm, listAdapter);
setListAdapter(listAdapter, listener, type);
}
@SuppressLint("NewApi")
private void setTranslationY(View v, int y) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
@ -669,12 +799,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks {
}
public void refreshContent() {
// TODO Auto-generated method stub
// ?? This method might not be needed
}
}

View file

@ -19,7 +19,6 @@ import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.SettingsActivity;
import net.osmand.plus.activities.TransportRouteHelper;
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
import net.osmand.plus.poi.PoiLegacyFilter;
import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.render.RenderingRuleProperty;
@ -45,20 +44,12 @@ public class ConfigureMapMenu {
public ContextMenuAdapter createListAdapter(final MapActivity ma) {
ContextMenuAdapter adapter = new ContextMenuAdapter(ma, allModes);
adapter.setDefaultLayoutId(R.layout.drawer_list_item);
adapter.item(R.string.configure_map).iconColor(R.drawable.ic_back_drawer_dark)
.listen(new OnContextMenuClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
return true;
}
}).reg();
adapter.item(R.string.app_modes_choose).layout(R.layout.mode_toggles).reg();
adapter.setChangeAppModeListener(new OnClickListener() {
@Override
public void onClick(boolean result) {
allModes = true;
ma.getDashboard().setListAdapter(createListAdapter(ma), DashboardType.CONFIGURE_MAP);
ma.getDashboard().updateListAdapter(createListAdapter(ma));
}
});
createLayersItems(adapter, ma);

View file

@ -1,26 +1,7 @@
package net.osmand.plus.helpers;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnDismissListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import net.osmand.data.LatLon;
import net.osmand.data.LocationPoint;
@ -35,9 +16,24 @@ import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
import net.osmand.plus.poi.PoiLegacyFilter;
import net.osmand.plus.views.AnimateDraggingMapThread;
import net.osmand.util.MapUtils;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnDismissListener;
import android.os.AsyncTask;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
/**
*/
@ -62,7 +58,7 @@ public class WaypointDialogHelper {
}
public static void updatePointInfoView(final OsmandApplication app, final MapActivity activity,
public static void updatePointInfoView(final OsmandApplication app, final Activity activity,
View localView, final LocationPointWrapper ps, final DialogFragment dialog) {
WaypointHelper wh = app.getWaypointHelper();
final LocationPoint point = ps.getPoint();
@ -105,29 +101,13 @@ public class WaypointDialogHelper {
return params;
}
public void showWaypointsDialogFlat(FragmentActivity fragmentActivity, boolean edit) {
Bundle args = new Bundle();
args.putBoolean(WaypointDialogFragment.FLAT_ARG, true);
args.putBoolean(WaypointDialogFragment.EDIT_ARG, edit);
WaypointDialogFragment wdf = new WaypointDialogFragment();
wdf.setArguments(args);
fragmentActivity.getSupportFragmentManager().beginTransaction().add(wdf, "tag").commit();
}
public void showWaypointsDialog(FragmentActivity fragmentActivity, boolean edit) {
Bundle args = new Bundle();
WaypointDialogFragment wdf = new WaypointDialogFragment();
args.putBoolean(WaypointDialogFragment.EDIT_ARG, edit);
wdf.setArguments(args);
fragmentActivity.getSupportFragmentManager().beginTransaction().add(wdf, "tag").commit();
}
public ArrayAdapter<Object> getWaypointsDrawerAdapter(final MapActivity ctx, final int[] running, final boolean flat) {
public ArrayAdapter<Object> getWaypointsDrawerAdapter(
final boolean edit, final List<LocationPointWrapper> deletedPoints,
final MapActivity ctx, final int[] running, final boolean flat) {
final List<Object> points;
if(flat) {
points = new ArrayList<Object>(waypointHelper.getAllPoints());
points.add(0, new LocationPointWrapper());
} else {
points = getPoints();
}
@ -140,20 +120,14 @@ public class WaypointDialogHelper {
View v = convertView;
final ArrayAdapter<Object> thisAdapter = this;
boolean labelView = (getItem(position) instanceof Integer);
if (position == 0) {
v = createDialogHeader(ctx, false, flat, null);
} else if (getItem(position) instanceof RadiusItem) {
if (getItem(position) instanceof RadiusItem) {
final int type = ((RadiusItem) getItem(position)).type;
v = createItemForRadiusProximity(ctx, type, running, position, thisAdapter);
} else if (labelView) {
v = createItemForCategory(ctx, (Integer) getItem(position), running, position, thisAdapter);
} else {
if (v == null || v.findViewById(R.id.info_close) == null) {
v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null);
}
updatePointInfoView(app, ctx, v, (LocationPointWrapper) getItem(position), null);
View remove = v.findViewById(R.id.info_close);
remove.setVisibility(View.GONE);
LocationPointWrapper point = (LocationPointWrapper) getItem(position);
v = updateWaypointItemView(edit, deletedPoints, ctx, null, v, point, this);
}
return v;
}
@ -162,31 +136,15 @@ public class WaypointDialogHelper {
};
}
public ArrayAdapter<Object> getWaypointsAdapter(final boolean edit, final List<LocationPointWrapper> deletedPoints,
final MapActivity ctx, final int[] running,
final AlertDialog[] srcDialog, final DialogFragment dialogFragment) {
final List<Object> points = getPoints();
return new ArrayAdapter<Object>(ctx,
R.layout.waypoint_reached, R.id.title, points) {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// User super class to create the View
View v = convertView;
final ArrayAdapter<Object> thisAdapter = this;
boolean labelView = (getItem(position) instanceof Integer);
if (position == 0) {
v = createDialogHeader(ctx, edit, false, srcDialog[0]);
} else if (getItem(position) instanceof RadiusItem) {
final int type = ((RadiusItem) getItem(position)).type;
v = createItemForRadiusProximity(ctx, type, running, position, thisAdapter);
} else if (labelView) {
v = createItemForCategory(ctx, (Integer) getItem(position), running, position, thisAdapter);
} else {
private View updateWaypointItemView(final boolean edit, final List<LocationPointWrapper> deletedPoints,
final Activity ctx, final DialogFragment dialogFragment, View v, final LocationPointWrapper point,
final ArrayAdapter adapter) {
if (v == null || v.findViewById(R.id.info_close) == null) {
v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null);
}
updatePointInfoView(app, ctx, v, (LocationPointWrapper) getItem(position), dialogFragment);
updatePointInfoView(app, ctx, v, point, dialogFragment);
View remove = v.findViewById(R.id.info_close);
if (!edit) {
remove.setVisibility(View.GONE);
@ -197,104 +155,18 @@ public class WaypointDialogHelper {
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LocationPointWrapper point = (LocationPointWrapper) points.get(position);
remove(point);
adapter.remove(point);
deletedPoints.add(point);
notifyDataSetChanged();
}
});
}
}
return v;
}
};
}
protected View createDialogHeader(final FragmentActivity a, final boolean editF, final boolean flat, final AlertDialog dlg) {
View v;
IconsCache iconsCache = app.getIconsCache();
v = a.getLayoutInflater().inflate(R.layout.waypoint_title, null);
ImageView iBack = (ImageView) v.findViewById(R.id.back);
if(dlg != null) {
iBack.setVisibility(View.GONE);
} else {
iBack.setVisibility(View.VISIBLE);
iBack.setImageResource(app.getSettings().isLightContent() ? R.drawable.ic_back_drawer_white
: R.drawable.ic_back_drawer_dark);
}
ImageButton edit = (ImageButton) v.findViewById(R.id.edit);
ImageButton sort = (ImageButton) v.findViewById(R.id.sort);
ImageButton all = (ImageButton) v.findViewById(R.id.all);
edit.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_action_gedit_dark));
edit.setVisibility(editF ? View.GONE : View.VISIBLE);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flat) {
showWaypointsDialogFlat(a, true);
} else {
showWaypointsDialog(a, true);
}
if (dlg != null) {
dlg.dismiss();
} else if(a instanceof MapActivity){
((MapActivity) a).onBackPressed();
}
}
});
if (app.getTargetPointsHelper().getIntermediatePoints().size() > 0) {
sort.setVisibility(View.VISIBLE);
sort.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_sort_waypoint_dark));
sort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntermediatePointsDialog.openIntermediatePointsDialog(a, app, true);
if (dlg != null) {
dlg.dismiss();
} else if(a instanceof MapActivity){
// to close drawer
((MapActivity) a).onBackPressed();
}
}
});
} else {
sort.setVisibility(View.GONE);
}
if (!waypointHelper.isRouteCalculated()) {
all.setVisibility(View.GONE);
} else {
all.setVisibility(View.VISIBLE);
if(flat) {
all.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_tree_list_dark));
} else {
all.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_flat_list_dark));
}
all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (dlg != null) {
if (flat) {
showWaypointsDialog(a, editF);
} else {
showWaypointsDialogFlat(a, editF);
}
dlg.dismiss();
} else if(a instanceof MapActivity){
((MapActivity) a).getMapActions().showWaypointsInDrawer(!flat);
}
adapter.notifyDataSetChanged();
}
});
}
return v;
}
protected View createItemForRadiusProximity(final FragmentActivity ctx, final int type, final int[] running,
final int position, final ArrayAdapter<Object> thisAdapter) {
View v;
@ -518,7 +390,6 @@ public class WaypointDialogHelper {
protected List<Object> getPoints() {
final List<Object> points = new ArrayList<Object>();
boolean rc = waypointHelper.isRouteCalculated();
points.add("");
for (int i = 0; i < WaypointHelper.MAX; i++) {
List<LocationPointWrapper> tp = waypointHelper.getWaypoints(i);
if (!rc && i != WaypointHelper.WAYPOINTS && i != WaypointHelper.TARGETS) {
@ -573,138 +444,4 @@ public class WaypointDialogHelper {
}
}
public class WaypointDialogFragment extends DialogFragment {
WaypointHelper waypointHelper;
private OsmandApplication app;
public static final String FLAT_ARG = "FLAT_ARG";
public static final String EDIT_ARG = "EDIT_ARG";
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
app = (OsmandApplication) activity.getApplication();
waypointHelper = app.getWaypointHelper();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (getArguments() != null && getArguments().getBoolean(FLAT_ARG)) {
return createWaypointsDialogFlat(waypointHelper.getAllPoints(), getArguments().getBoolean(EDIT_ARG));
}
return createWaypointsDialog(getArguments().getBoolean(EDIT_ARG));
}
public AlertDialog createWaypointsDialogFlat(final List<LocationPointWrapper> points, final boolean edit) {
final List<LocationPointWrapper> deletedPoints = new ArrayList<WaypointHelper.LocationPointWrapper>();
final FragmentActivity ctx = getActivity();
final AlertDialog[] srcDialog = new AlertDialog[1];
points.add(0, new LocationPointWrapper());
final ArrayAdapter<LocationPointWrapper> listAdapter = new ArrayAdapter<LocationPointWrapper>(ctx, R.layout.waypoint_reached, R.id.title,
points) {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// User super class to create the View
View v = convertView;
if (position == 0) {
return createDialogHeader(ctx, edit, true, srcDialog[0]);
}
if (v == null || v.findViewById(R.id.waypoint_icon) == null) {
v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null);
}
updatePointInfoView(app, (MapActivity) ctx, v, getItem(position), WaypointDialogFragment.this);
View remove = v.findViewById(R.id.info_close);
if (!edit) {
remove.setVisibility(View.GONE);
} else {
remove.setVisibility(View.VISIBLE);
((ImageButton) remove).setImageDrawable(
app.getIconsCache().getContentIcon(R.drawable.ic_action_gremove_dark));
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LocationPointWrapper point = points.get(position);
remove(point);
deletedPoints.add(point);
notifyDataSetChanged();
}
});
}
return v;
}
};
ListView listView = new ListView(ctx);
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
LocationPointWrapper ps = listAdapter.getItem(i);
showOnMap(app, ctx, ps.getPoint(), WaypointDialogFragment.this);
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setView(listView);
builder.setPositiveButton(R.string.shared_string_ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
waypointHelper.removeVisibleLocationPoint(deletedPoints);
}
});
if (edit) {
builder.setNegativeButton(ctx.getString(R.string.shared_string_cancel), null);
}
AlertDialog dlg = builder.create();
srcDialog[0] = dlg;
return dlg;
}
public AlertDialog createWaypointsDialog(final boolean edit) {
final List<LocationPointWrapper> deletedPoints = new ArrayList<WaypointHelper.LocationPointWrapper>();
final FragmentActivity ctx = getActivity();
final ListView listView = new ListView(ctx);
final int[] running = new int[]{-1};
final AlertDialog[] srcDialog = new AlertDialog[1];
final ArrayAdapter<Object> listAdapter = getWaypointsAdapter(edit, deletedPoints, (MapActivity) ctx,
running, srcDialog, WaypointDialogFragment.this);
listView.setAdapter(listAdapter);
listView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int item, long l) {
if (listAdapter.getItem(item) instanceof LocationPointWrapper) {
LocationPointWrapper ps = (LocationPointWrapper) listAdapter.getItem(item);
showOnMap(app, ctx, ps.getPoint(), WaypointDialogFragment.this);
} else if (new Integer(WaypointHelper.TARGETS).equals(listAdapter.getItem(item))) {
IntermediatePointsDialog.openIntermediatePointsDialog(ctx, app, true);
if (srcDialog[0] != null) {
srcDialog[0].dismiss();
}
} else if (listAdapter.getItem(item) instanceof RadiusItem) {
selectDifferentRadius(((RadiusItem) listAdapter.getItem(item)).type, running, item, listAdapter, ctx);
}
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setView(listView);
builder.setPositiveButton(R.string.shared_string_ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
waypointHelper.removeVisibleLocationPoint(deletedPoints);
}
});
if (edit) {
builder.setNegativeButton(ctx.getString(R.string.shared_string_cancel), null);
}
AlertDialog dlg = builder.create();
srcDialog[0] = dlg;
return dlg;
}
}
}

View file

@ -176,8 +176,7 @@ public class MapControlsLayer extends OsmandMapLayer {
@Override
public void onClick(View v) {
notifyClicked();
mapActivity.getDashboard().setListAdapter(new ConfigureMapMenu().createListAdapter(mapActivity),
DashboardType.CONFIGURE_MAP);
mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.CONFIGURE_MAP);
}
});

View file

@ -11,7 +11,6 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
import net.osmand.plus.dialogs.ConfigureMapMenu;
import net.osmand.plus.helpers.ScreenOrientationHelper;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
@ -307,20 +306,12 @@ public class MapInfoLayer extends OsmandMapLayer {
public ContextMenuAdapter getViewConfigureMenuAdapter() {
ContextMenuAdapter cm = new ContextMenuAdapter(view.getContext());
cm.setDefaultLayoutId(R.layout.drawer_list_item);
cm.item(R.string.layer_map_appearance).iconColor(R.drawable.ic_back_drawer_dark)
.listen(new OnContextMenuClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos, boolean isChecked) {
return true;
}
}).reg();
cm.item(R.string.app_modes_choose).layout(R.layout.mode_toggles).reg();
cm.setChangeAppModeListener(new ConfigureMapMenu.OnClickListener() {
@Override
public void onClick(boolean allModes) {
map.getDashboard().setListAdapter(getViewConfigureMenuAdapter(), DashboardType.CONFIGURE_MAP);
map.getDashboard().updateListAdapter(getViewConfigureMenuAdapter());
}
});
cm.item(R.string.map_widget_reset)

View file

@ -14,6 +14,7 @@ import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.actions.StartGPSStatus;
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
import net.osmand.plus.helpers.WaypointDialogHelper;
import net.osmand.plus.helpers.WaypointHelper;
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
@ -407,7 +408,7 @@ public class MapInfoWidgetsFactory {
all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
map.getMapActions().showWaypointsDialog(false);
map.getDashboard().setDashboardVisibility(true, DashboardType.WAYPOINTS);
}
});
btnN.setOnClickListener(new View.OnClickListener() {