Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2018-02-03 09:23:24 +01:00
commit 63a643dd44
10 changed files with 524 additions and 65 deletions

View file

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:background="?attr/bg_color">
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/bottom_sheet_content_padding_small">
<net.osmand.plus.widgets.TextViewEx
android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_title_height"
android:gravity="center_vertical"
android:paddingEnd="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingStart="@dimen/content_padding"
android:text="@string/new_destination_point_dialog"
android:textAppearance="@style/TextAppearance.ListItemTitle"
osmand:typeface="@string/font_roboto_medium"/>
<LinearLayout
android:id="@+id/replace_dest_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:minHeight="@dimen/bottom_sheet_list_item_height"
android:paddingEnd="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingStart="@dimen/content_padding">
<ImageView
android:id="@+id/current_dest_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
tools:src="@drawable/ic_action_point_destination"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/replace_destination_point"
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
<TextView
android:id="@+id/current_dest_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/searchbar_text_hint_light"
android:textSize="@dimen/default_desc_text_size"
tools:text="Current: Some street 46"/>
</LinearLayout>
</LinearLayout>
<View
android:id="@+id/current_dest_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="@dimen/bottom_sheet_content_padding_small"
android:layout_marginLeft="@dimen/bottom_sheet_divider_margin_start"
android:layout_marginStart="@dimen/bottom_sheet_divider_margin_start"
android:layout_marginTop="@dimen/bottom_sheet_content_padding_small"
android:background="?attr/dashboard_divider"/>
<LinearLayout
android:id="@+id/subsequent_dest_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:minHeight="@dimen/bottom_sheet_list_item_height"
android:paddingEnd="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingStart="@dimen/content_padding">
<ImageView
android:id="@+id/subsequent_dest_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
tools:foreground="@drawable/ic_action_route_subsequent_destination"
tools:src="@drawable/ic_action_route_subsequent_destination_point"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/keep_and_add_destination_point"
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="@string/subsequent_dest_description"
android:textColor="@color/searchbar_text_hint_light"
android:textSize="@dimen/default_desc_text_size"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/first_intermediate_dest_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:minHeight="@dimen/bottom_sheet_list_item_height"
android:paddingEnd="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingStart="@dimen/content_padding">
<ImageView
android:id="@+id/first_interm_dest_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
tools:foreground="@drawable/ic_action_route_first_intermediate"
tools:src="@drawable/ic_action_route_first_intermediate_point"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/add_as_first_destination_point"
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="@string/first_intermediate_dest_description"
android:textColor="@color/searchbar_text_hint_light"
android:textSize="@dimen/default_desc_text_size"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/last_intermediate_dest_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:minHeight="@dimen/bottom_sheet_list_item_height"
android:paddingEnd="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingStart="@dimen/content_padding">
<ImageView
android:id="@+id/last_interm_dest_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
tools:foreground="@drawable/ic_action_route_last_intermediate"
tools:src="@drawable/ic_action_route_last_intermediate_point"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/add_as_last_destination_point"
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="@string/last_intermediate_dest_description"
android:textColor="@color/searchbar_text_hint_light"
android:textSize="@dimen/default_desc_text_size"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
<View
android:id="@+id/cancel_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/dashboard_divider"/>
<FrameLayout
android:id="@+id/cancel_row"
android:layout_width="match_parent"
android:layout_height="@dimen/bottom_sheet_cancel_button_height"
android:background="?attr/selectableItemBackground">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/shared_string_cancel"
android:textAllCaps="true"
android:textColor="?attr/color_dialog_buttons"
android:textSize="@dimen/default_desc_text_size"
android:textStyle="bold"/>
</FrameLayout>
</LinearLayout>

View file

@ -91,7 +91,7 @@
android:layout_height= "wrap_content" android:layout_height= "wrap_content"
android:layout_marginBottom="@dimen/context_menu_direction_margin" android:layout_marginBottom="@dimen/context_menu_direction_margin"
android:layout_marginTop="@dimen/context_menu_padding_margin_tiny" android:layout_marginTop="@dimen/context_menu_padding_margin_tiny"
android:gravity="center_vertical" android:gravity="top"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingTop="3dp" android:paddingTop="3dp"
android:paddingBottom="3dp" android:paddingBottom="3dp"
@ -615,7 +615,7 @@
android:layout_height="@dimen/dashboard_map_toolbar" android:layout_height="@dimen/dashboard_map_toolbar"
android:layout_marginLeft="4dp" android:layout_marginLeft="4dp"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:alpha="1"> android:alpha="0">
<LinearLayout <LinearLayout
android:layout_width="@dimen/list_item_height" android:layout_width="@dimen/list_item_height"

View file

@ -9,6 +9,10 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
--> -->
<string name="shared_string_current">Current</string>
<string name="last_intermediate_dest_description">Adds the last stop along the route</string>
<string name="first_intermediate_dest_description">Adds the first stop on the route</string>
<string name="subsequent_dest_description">Move destination up, and create destination</string>
<string name="show_closed_notes">Show closed notes</string> <string name="show_closed_notes">Show closed notes</string>
<string name="switch_osm_notes_visibility_desc">Show/Hide OSM Notes on the map.</string> <string name="switch_osm_notes_visibility_desc">Show/Hide OSM Notes on the map.</string>
<string name="gpx_file_desc">GPX - suitable for export to JOSM or other OSM editors.</string> <string name="gpx_file_desc">GPX - suitable for export to JOSM or other OSM editors.</string>

View file

@ -36,7 +36,7 @@ public class LockableScrollView extends ScrollView {
return super.onTouchEvent(ev); return super.onTouchEvent(ev);
} }
// only continue to handle the touch event if scrolling enabled // only continue to handle the touch event if scrolling enabled
return mScrollable; return false;
default: default:
return super.onTouchEvent(ev); return super.onTouchEvent(ev);
} }

View file

@ -90,7 +90,6 @@ public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity
private static final Log log = PlatformUtil.getLog(SearchByNameAbstractActivity.class); private static final Log log = PlatformUtil.getLog(SearchByNameAbstractActivity.class);
private static final int NAVIGATE_TO = 3; private static final int NAVIGATE_TO = 3;
private static final int ADD_WAYPOINT = 4;
private static final int SHOW_ON_MAP = 5; private static final int SHOW_ON_MAP = 5;
private static final int ADD_TO_FAVORITE = 6; private static final int ADD_TO_FAVORITE = 6;
@ -571,9 +570,6 @@ public abstract class SearchByNameAbstractActivity<T> extends OsmandListActivity
} else if (mode == NAVIGATE_TO) { } else if (mode == NAVIGATE_TO) {
DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(), DirectionsDialogs.directionsToDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(),
searchPoint.getLongitude(), ai.getHistoryName()); searchPoint.getLongitude(), ai.getHistoryName());
} else if (mode == ADD_WAYPOINT) {
DirectionsDialogs.addWaypointDialogAndLaunchMap(getActivity(), searchPoint.getLatitude(),
searchPoint.getLongitude(), ai.getHistoryName());
} else if (mode == SHOW_ON_MAP) { } else if (mode == SHOW_ON_MAP) {
showOnMap(searchPoint, ai); showOnMap(searchPoint, ai);
} }

View file

@ -80,14 +80,12 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
} }
if (AndroidUiHelper.isOrientationPortrait(activity)) { if (AndroidUiHelper.isOrientationPortrait(activity)) {
AndroidUtils.setBackground(activity, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark); mainView.setBackgroundResource(getPortraitBgResId());
} else { } else {
if (screenHeight - statusBarHeight - mainView.getHeight() >= getResources().getDimension(R.dimen.bottom_sheet_content_padding_small)) { if (screenHeight - statusBarHeight - mainView.getHeight() >= getResources().getDimension(R.dimen.bottom_sheet_content_padding_small)) {
AndroidUtils.setBackground(activity, mainView, nightMode, mainView.setBackgroundResource(getLandscapeTopsidesBgResId());
R.drawable.bg_bottom_sheet_topsides_landscape_light, R.drawable.bg_bottom_sheet_topsides_landscape_dark);
} else { } else {
AndroidUtils.setBackground(activity, mainView, nightMode, mainView.setBackgroundResource(getLandscapeSidesBgResId());
R.drawable.bg_bottom_sheet_sides_landscape_light, R.drawable.bg_bottom_sheet_sides_landscape_dark);
} }
} }
@ -101,6 +99,21 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
}); });
} }
@DrawableRes
protected int getPortraitBgResId() {
return nightMode ? R.drawable.bg_bottom_menu_dark : R.drawable.bg_bottom_menu_light;
}
@DrawableRes
protected int getLandscapeTopsidesBgResId() {
return nightMode ? R.drawable.bg_bottom_sheet_topsides_landscape_dark : R.drawable.bg_bottom_sheet_topsides_landscape_light;
}
@DrawableRes
protected int getLandscapeSidesBgResId() {
return nightMode ? R.drawable.bg_bottom_sheet_sides_landscape_dark : R.drawable.bg_bottom_sheet_sides_landscape_light;
}
protected boolean isNightMode() { protected boolean isNightMode() {
if (usedOnMap) { if (usedOnMap) {
return getMyApplication().getDaynightHelper().isNightModeForMapControls(); return getMyApplication().getDaynightHelper().isNightModeForMapControls();

View file

@ -0,0 +1,160 @@
package net.osmand.plus.dialogs;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import android.support.annotation.DrawableRes;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
public class AddWaypointBottomSheetDialogFragment extends MenuBottomSheetDialogFragment {
public static final String TAG = "AddWaypointBottomSheetDialogFragment";
public static final String LAT_KEY = "latitude";
public static final String LON_KEY = "longitude";
public static final String POINT_DESCRIPTION_KEY = "point_description";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle args = getArguments();
final LatLon latLon = new LatLon(args.getDouble(LAT_KEY), args.getDouble(LON_KEY));
final PointDescription name = PointDescription.deserializeFromString(args.getString(POINT_DESCRIPTION_KEY), latLon);
final TargetPointsHelper targetPointsHelper = getMyApplication().getTargetPointsHelper();
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
final View mainView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
R.layout.fragment_add_waypoint_bottom_sheet_dialog, container);
((TextView) mainView.findViewById(R.id.current_dest_text_view))
.setText(getCurrentDestinationName(targetPointsHelper.getPointToNavigate()));
((ImageView) mainView.findViewById(R.id.current_dest_icon))
.setImageDrawable(getBackgroundIcon(R.drawable.ic_action_point_destination));
((ImageView) mainView.findViewById(R.id.subsequent_dest_icon)).setImageDrawable(getSubsequentDestIcon());
((ImageView) mainView.findViewById(R.id.first_interm_dest_icon)).setImageDrawable(getFirstIntermDestIcon());
((ImageView) mainView.findViewById(R.id.last_interm_dest_icon)).setImageDrawable(getLastIntermDistIcon());
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.replace_dest_row) {
targetPointsHelper.navigateToPoint(latLon, true, -1, name);
} else if (id == R.id.subsequent_dest_row) {
targetPointsHelper.navigateToPoint(latLon, true,
targetPointsHelper.getIntermediatePoints().size() + 1, name);
} else if (id == R.id.first_intermediate_dest_row) {
targetPointsHelper.navigateToPoint(latLon, true, 0, name);
} else if (id == R.id.last_intermediate_dest_row) {
targetPointsHelper.navigateToPoint(latLon, true, targetPointsHelper.getIntermediatePoints().size(), name);
}
dismiss();
}
};
mainView.findViewById(R.id.replace_dest_row).setOnClickListener(onClickListener);
mainView.findViewById(R.id.subsequent_dest_row).setOnClickListener(onClickListener);
mainView.findViewById(R.id.first_intermediate_dest_row).setOnClickListener(onClickListener);
mainView.findViewById(R.id.last_intermediate_dest_row).setOnClickListener(onClickListener);
mainView.findViewById(R.id.cancel_row).setOnClickListener(onClickListener);
if (nightMode) {
int dividerColor = ContextCompat.getColor(getContext(), R.color.route_info_bottom_view_bg_dark);
mainView.findViewById(R.id.current_dest_divider).setBackgroundColor(dividerColor);
mainView.findViewById(R.id.cancel_divider).setBackgroundColor(dividerColor);
}
setupHeightAndBackground(mainView, R.id.scroll_view);
return mainView;
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
closeContextMenu();
}
@Override
protected Drawable getActiveIcon(@DrawableRes int id) {
return getIcon(id, nightMode ? R.color.ctx_menu_direction_color_dark : R.color.map_widget_blue);
}
@Override
protected int getPortraitBgResId() {
return nightMode ? R.drawable.bg_additional_menu_dark : R.drawable.bg_bottom_menu_light;
}
@Override
protected int getLandscapeTopsidesBgResId() {
return nightMode ? R.drawable.bg_additional_menu_topsides_dark : R.drawable.bg_bottom_sheet_topsides_landscape_light;
}
@Override
protected int getLandscapeSidesBgResId() {
return nightMode ? R.drawable.bg_additional_menu_sides_dark : R.drawable.bg_bottom_sheet_sides_landscape_light;
}
private Drawable getBackgroundIcon(@DrawableRes int resId) {
return getIcon(resId, R.color.searchbar_text_hint_light);
}
private LayerDrawable getLayerDrawable(@DrawableRes int bgIdRes, @DrawableRes int icIdRes) {
return new LayerDrawable(new Drawable[]{getBackgroundIcon(bgIdRes), getActiveIcon(icIdRes)});
}
private LayerDrawable getSubsequentDestIcon() {
return getLayerDrawable(R.drawable.ic_action_route_subsequent_destination,
R.drawable.ic_action_route_subsequent_destination_point);
}
private LayerDrawable getFirstIntermDestIcon() {
return getLayerDrawable(R.drawable.ic_action_route_first_intermediate,
R.drawable.ic_action_route_first_intermediate_point);
}
private LayerDrawable getLastIntermDistIcon() {
return getLayerDrawable(R.drawable.ic_action_route_last_intermediate,
R.drawable.ic_action_route_last_intermediate_point);
}
private String getCurrentDestinationName(@Nullable TargetPointsHelper.TargetPoint finish) {
Context ctx = getContext();
StringBuilder builder = new StringBuilder(ctx.getString(R.string.shared_string_current));
builder.append(": ");
if (finish != null) {
if (finish.getOnlyName().length() > 0) {
builder.append(finish.getOnlyName());
} else {
builder.append(ctx.getString(R.string.route_descr_map_location));
builder.append(" ");
builder.append(ctx.getString(R.string.route_descr_lat_lon, finish.getLatitude(), finish.getLongitude()));
}
}
return builder.toString();
}
private void closeContextMenu() {
Activity activity = getActivity();
if (activity instanceof MapActivity) {
((MapActivity) activity).getContextMenu().close();
}
}
}

View file

@ -2,7 +2,9 @@ package net.osmand.plus.dialogs;
import android.app.Activity; import android.app.Activity;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.PopupMenu; import android.support.v7.widget.PopupMenu;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
@ -46,37 +48,16 @@ public class DirectionsDialogs {
} }
} }
public static void addWaypointDialogAndLaunchMap(final Activity act, final double lat, final double lon, final PointDescription name) { public static void addWaypointDialogAndLaunchMap(final AppCompatActivity act, final double lat, final double lon, final PointDescription name) {
final OsmandApplication ctx = (OsmandApplication) act.getApplication(); final TargetPointsHelper targetPointsHelper = ((OsmandApplication) act.getApplication()).getTargetPointsHelper();
final TargetPointsHelper targetPointsHelper = ctx.getTargetPointsHelper();
if (targetPointsHelper.getPointToNavigate() != null) { if (targetPointsHelper.getPointToNavigate() != null) {
AlertDialog.Builder builder = new AlertDialog.Builder(act); Bundle args = new Bundle();
builder.setTitle(R.string.new_destination_point_dialog); args.putDouble(AddWaypointBottomSheetDialogFragment.LAT_KEY, lat);
builder.setItems( args.putDouble(AddWaypointBottomSheetDialogFragment.LON_KEY, lon);
new String[] { act.getString(R.string.replace_destination_point), args.putString(AddWaypointBottomSheetDialogFragment.POINT_DESCRIPTION_KEY, PointDescription.serializeToString(name));
act.getString(R.string.keep_and_add_destination_point), AddWaypointBottomSheetDialogFragment fragment = new AddWaypointBottomSheetDialogFragment();
act.getString(R.string.add_as_first_destination_point), act.getString(R.string.add_as_last_destination_point) }, fragment.setArguments(args);
new DialogInterface.OnClickListener() { fragment.show(act.getSupportFragmentManager(), AddWaypointBottomSheetDialogFragment.TAG);
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, -1, name);
closeContextMenu(act);
} else if (which == 1) {
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true,
targetPointsHelper.getIntermediatePoints().size() + 1, name);
closeContextMenu(act);
} else if (which == 2) {
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, 0, name);
closeContextMenu(act);
} else {
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, targetPointsHelper.getIntermediatePoints().size(), name);
closeContextMenu(act);
}
MapActivity.launchMapActivityMoveToTop(act);
}
});
builder.show();
} else { } else {
targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, -1, name); targetPointsHelper.navigateToPoint(new LatLon(lat, lon), true, -1, name);
closeContextMenu(act); closeContextMenu(act);

View file

@ -20,6 +20,7 @@ import android.view.MotionEvent;
import android.view.VelocityTracker; import android.view.VelocityTracker;
import android.view.View; import android.view.View;
import android.view.View.OnLayoutChangeListener; import android.view.View.OnLayoutChangeListener;
import android.view.ViewConfiguration;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewParent; import android.view.ViewParent;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
@ -29,6 +30,7 @@ import android.widget.GridView;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.OverScroller;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
@ -82,6 +84,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
private View toolbarBackButton; private View toolbarBackButton;
private TextView toolbarTextView; private TextView toolbarTextView;
private View topButtonContainer; private View topButtonContainer;
private LockableScrollView menuScrollView;
private View zoomButtonsView; private View zoomButtonsView;
private ImageButton zoomInButtonView; private ImageButton zoomInButtonView;
@ -292,13 +295,24 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
private float dy; private float dy;
private float dyMain; private float dyMain;
private float mDownY; private float mDownY;
private int minimumVelocity;
private int maximumVelocity;
private VelocityTracker velocityTracker; private VelocityTracker velocityTracker;
private OverScroller scroller;
private boolean slidingUp; private boolean slidingUp;
private boolean slidingDown; private boolean slidingDown;
private float maxVelocityY;
private boolean hasMoved; private boolean hasMoved;
{
scroller = new OverScroller(getContext());
final ViewConfiguration configuration = ViewConfiguration.get(getContext());
minimumVelocity = configuration.getScaledMinimumFlingVelocity();
maximumVelocity = configuration.getScaledMaximumFlingVelocity();
}
@Override @Override
public boolean onTouch(View v, MotionEvent event) { public boolean onTouch(View v, MotionEvent event) {
@ -330,7 +344,6 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
dy = event.getY(); dy = event.getY();
dyMain = getViewY(); dyMain = getViewY();
maxVelocityY = 0;
initOrResetVelocityTracker(); initOrResetVelocityTracker();
velocityTracker.addMovement(event); velocityTracker.addMovement(event);
break; break;
@ -354,14 +367,12 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
mainView.setLayoutParams(lp); mainView.setLayoutParams(lp);
mainView.requestLayout(); mainView.requestLayout();
if (velocityTracker != null) { float newEventY = newY - (dyMain - dy);
velocityTracker.addMovement(event); MotionEvent ev = MotionEvent.obtain(event.getDownTime(), event.getEventTime(), event.getAction(),
velocityTracker.computeCurrentVelocity(1000); event.getX(), newEventY, event.getMetaState());
float velocityY = Math.abs(velocityTracker.getYVelocity());
if (velocityY > maxVelocityY) { initVelocityTrackerIfNotExists();
maxVelocityY = velocityY; velocityTracker.addMovement(ev);
}
}
updateToolbar(); updateToolbar();
updateTopButton(); updateTopButton();
@ -374,10 +385,28 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
moving = false; moving = false;
int currentY = getViewY(); int currentY = getViewY();
slidingUp = Math.abs(maxVelocityY) > 500 && (currentY - dyMain) < -50; final VelocityTracker velocityTracker = this.velocityTracker;
slidingDown = Math.abs(maxVelocityY) > 500 && (currentY - dyMain) > 50; velocityTracker.computeCurrentVelocity(1000, maximumVelocity);
int initialVelocity = (int) velocityTracker.getYVelocity();
boolean skipScreenState = Math.abs(currentY - dyMain) > skipScreenStateLimit; if ((Math.abs(initialVelocity) > minimumVelocity)) {
scroller.abortAnimation();
scroller.fling(0, currentY, 0, initialVelocity, 0, 0,
viewHeight - menuFullHeightMax,
minHalfY,
0, 0);
currentY = scroller.getFinalY();
scroller.abortAnimation();
slidingUp = initialVelocity < -2000;
slidingDown = initialVelocity > 2000;
} else {
slidingUp = false;
slidingDown = false;
}
boolean skipScreenState = Math.abs(getViewY() - dyMain) > skipScreenStateLimit;
changeMenuState(currentY, skipScreenState, slidingUp, slidingDown); changeMenuState(currentY, skipScreenState, slidingUp, slidingDown);
} }
recycleVelocityTracker(); recycleVelocityTracker();
@ -399,6 +428,13 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
} }
} }
private void initVelocityTrackerIfNotExists() {
if (velocityTracker == null) {
velocityTracker = VelocityTracker.obtain();
velocityTracker.clear();
}
}
private void recycleVelocityTracker() { private void recycleVelocityTracker() {
if (velocityTracker != null) { if (velocityTracker != null) {
velocityTracker.recycle(); velocityTracker.recycle();
@ -732,8 +768,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
int oldMenuState = menu.getCurrentMenuState(); int oldMenuState = menu.getCurrentMenuState();
if (!menu.isLandscapeLayout()) { if (!menu.isLandscapeLayout()) {
if (slidingDown && !skipScreenState && oldMenuState == MenuState.FULL_SCREEN if (slidingDown && oldMenuState == MenuState.FULL_SCREEN && getViewY() < getFullScreenTopPosY()) {
&& currentY < (-menuTitleHeight + menuButtonsHeight)) {
slidingDown = false; slidingDown = false;
} }
if (menuBottomViewHeight > 0 && slidingUp) { if (menuBottomViewHeight > 0 && slidingUp) {
@ -798,9 +833,9 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
private void applyPosY(final int currentY, final boolean needCloseMenu, boolean needMapAdjust, private void applyPosY(final int currentY, final boolean needCloseMenu, boolean needMapAdjust,
final int previousMenuState, final int newMenuState, int dZoom) { final int previousMenuState, final int newMenuState, int dZoom) {
final int posY = getPosY(currentY, needCloseMenu); final int posY = getPosY(currentY, needCloseMenu, previousMenuState);
if (currentY != posY || dZoom != 0) { if (getViewY() != posY || dZoom != 0) {
if (posY < currentY) { if (posY < getViewY()) {
updateMainViewLayout(posY); updateMainViewLayout(posY);
} }
@ -1428,12 +1463,19 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
return viewHeight - menuTitleHeight; return viewHeight - menuTitleHeight;
} }
private int getFullScreenTopPosY() {
return -menuTitleHeight + menuButtonsHeight + bottomToolbarPosY;
}
private int getPosY() { private int getPosY() {
return getPosY(CURRENT_Y_UNDEFINED, false); return getPosY(CURRENT_Y_UNDEFINED, false);
} }
private int getPosY(final int currentY, boolean needCloseMenu) { private int getPosY(final int currentY, boolean needCloseMenu) {
return getPosY(currentY, needCloseMenu, 0);
}
private int getPosY(final int currentY, boolean needCloseMenu, int previousState) {
if (needCloseMenu) { if (needCloseMenu) {
return screenHeight; return screenHeight;
} }
@ -1462,12 +1504,12 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
if (menu.isLandscapeLayout()) { if (menu.isLandscapeLayout()) {
minPosY = topScreenPosY; minPosY = topScreenPosY;
} else { } else {
minPosY = -menuTitleHeight + menuButtonsHeight + bottomToolbarPosY; minPosY = getFullScreenTopPosY();
} }
if (maxPosY > minPosY) { if (maxPosY > minPosY) {
maxPosY = minPosY; maxPosY = minPosY;
} }
if (currentY > minPosY) { if (currentY > minPosY || previousState != MenuState.FULL_SCREEN) {
posY = minPosY; posY = minPosY;
} else if (currentY < maxPosY) { } else if (currentY < maxPosY) {
posY = maxPosY; posY = maxPosY;
@ -1478,7 +1520,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
if (menu.isLandscapeLayout()) { if (menu.isLandscapeLayout()) {
posY = topScreenPosY; posY = topScreenPosY;
} else { } else {
posY = -menuTitleHeight + menuButtonsHeight + bottomToolbarPosY; posY = getFullScreenTopPosY();
} }
} }
break; break;

View file

@ -162,7 +162,7 @@ public abstract class MenuController extends BaseMenuController implements Colla
@Override @Override
public void onCollapseExpand(boolean collapsed) { public void onCollapseExpand(boolean collapsed) {
if (mapContextMenu != null) { if (mapContextMenu != null) {
mapContextMenu.updateMenuUI(); mapContextMenu.updateLayout();
} }
} }