Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
cc88a52924
8 changed files with 789 additions and 48 deletions
|
@ -0,0 +1,195 @@
|
|||
<?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:background="?attr/bg_color"
|
||||
android:orientation="vertical">
|
||||
|
||||
<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:id="@+id/title_text_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_title_height"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:maxLines="1"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:text="@string/shared_string_export"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
osmand:typeface="@string/font_roboto_medium"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_descr_height"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:text="@string/osm_edits_export_desc"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/poi_row"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_list_item_height"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/poi_icon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
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_info_dark"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:text="@string/poi"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/poi_count_text_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="13"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/osm_notes_row"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_list_item_height"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/osm_notes_icon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
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_bug_dark"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:text="@string/osm_notes"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/osm_notes_count_text_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="5"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/all_data_row"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_list_item_height"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/all_data_icon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
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_folder"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:text="@string/all_data"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/all_data_count_text_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="18"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<View
|
||||
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:id="@+id/cancel_row_text"
|
||||
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>
|
164
OsmAnd/res/layout/fragment_osm_file_type_bottom_sheet_dialog.xml
Normal file
164
OsmAnd/res/layout/fragment_osm_file_type_bottom_sheet_dialog.xml
Normal file
|
@ -0,0 +1,164 @@
|
|||
<?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:background="?attr/bg_color"
|
||||
android:orientation="vertical">
|
||||
|
||||
<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:id="@+id/title_text_view"
|
||||
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/choose_file_type"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
osmand:typeface="@string/font_roboto_medium"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/osc_file_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/osc_file_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_type_file"/>
|
||||
|
||||
<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/osc_file"
|
||||
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/osc_file_desc"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
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/gpx_file_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/gpx_file_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_type_file"/>
|
||||
|
||||
<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/gpx_file"
|
||||
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/gpx_file_desc"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<View
|
||||
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_close"
|
||||
android:textAllCaps="true"
|
||||
android:textColor="?attr/color_dialog_buttons"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
android:textStyle="bold"/>
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -3728,4 +3728,10 @@
|
|||
|
||||
<string name="poi_shop_fireplace">Магазин каминов</string>
|
||||
|
||||
<string name="poi_mountain_area">Горный массив</string>
|
||||
<string name="poi_couloir">Ущелье</string>
|
||||
<string name="poi_gorge">Теснина</string>
|
||||
|
||||
<string name="poi_shop_boat">Магазин лодок</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -3704,4 +3704,9 @@
|
|||
|
||||
<string name="poi_shop_fireplace">Fireplace store</string>
|
||||
|
||||
<string name="poi_shop_boat">Boat store</string>
|
||||
|
||||
<string name="poi_cannabis">Cannabis store</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -9,6 +9,14 @@
|
|||
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
|
||||
-->
|
||||
<string name="gpx_file_desc">GPX - suitable for export to JOSM or other OSM editors.</string>
|
||||
<string name="osc_file_desc">OSC - suitable for export to OpenStreetMap.</string>
|
||||
<string name="gpx_file">GPX file</string>
|
||||
<string name="osc_file">OSC file</string>
|
||||
<string name="choose_file_type">Choose file type</string>
|
||||
<string name="osm_edits_export_desc">Select the export type: OSM notes, POI, or both.</string>
|
||||
<string name="all_data">All data</string>
|
||||
<string name="osm_notes">OSM Notes</string>
|
||||
<string name="will_open_tomorrow_at">Will open tomorrow at</string>
|
||||
<string name="rendering_attr_hidePOILabels_name">POI labels</string>
|
||||
<string name="shared_string_without_name">Without name</string>
|
||||
|
@ -338,9 +346,6 @@
|
|||
\u2022 OsmAnd Live: bug fixes, fresh data on the server every 30 minutes, updates implemented into the navigation\n\n
|
||||
</string>
|
||||
<string name="release_2_9">
|
||||
\u2022 Detection of stop signs now considers driving direction\n\n
|
||||
\u2022 New algorithm providing meaningful ascent/descent values for GPX tracks\n\n
|
||||
\u2022 Terrain (ascent) aware hiking time (Naismith\'s rule)\n\n
|
||||
\u2022 Updated the context menu: show when the POI opens / closes\n\n
|
||||
\u2022 Transport menu: all available routes are now at the top\n\n
|
||||
\u2022 Wikipedia: added the button to open the original article, updated the appearance of articles\n\n
|
||||
|
@ -348,6 +353,9 @@
|
|||
\u2022 Notes: added sorting by type and date\n\n
|
||||
\u2022 OSM edits: show an icon and a name of the POI category, display completed actions\n\n
|
||||
\u2022 New quick coordinate input screen for quick markers creation\n\n
|
||||
\u2022 Detection of stop signs now considers driving direction\n\n
|
||||
\u2022 New algorithm providing meaningful ascent/descent values for GPX tracks\n\n
|
||||
\u2022 Terrain (ascent) aware hiking time (Naismith\'s rule)\n\n
|
||||
</string>
|
||||
<string name="auto_split_recording_title">Auto-split recordings after gap</string>
|
||||
<string name="auto_split_recording_descr">Start new segment after gap of 6 min, new track after gap of 2 h, or new file after a longer gap if the date has changed.</string>
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
package net.osmand.plus.osmedit;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
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.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.osmedit.OsmEditsFragment.ExportTypesDef;
|
||||
import net.osmand.plus.widgets.TextViewEx;
|
||||
|
||||
public class ExportOptionsBottomSheetDialogFragment extends MenuBottomSheetDialogFragment {
|
||||
|
||||
public static final String TAG = "ExportOptionsBottomSheetDialogFragment";
|
||||
public static final String POI_COUNT_KEY = "poi_count";
|
||||
public static final String NOTES_COUNT_KEY = "notes_count";
|
||||
|
||||
private ExportOptionsFragmentListener listener;
|
||||
|
||||
private int poiCount;
|
||||
private int osmNotesCount;
|
||||
|
||||
public void setListener(ExportOptionsFragmentListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
|
||||
final View mainView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
||||
R.layout.fragment_osm_export_options_bottom_sheet_dialog, container);
|
||||
|
||||
Bundle args = getArguments();
|
||||
if (args != null) {
|
||||
poiCount = args.getInt(POI_COUNT_KEY);
|
||||
osmNotesCount = args.getInt(NOTES_COUNT_KEY);
|
||||
}
|
||||
|
||||
if (nightMode) {
|
||||
((TextViewEx) mainView.findViewById(R.id.title_text_view)).setTextColor(getResources().getColor(R.color.ctx_menu_info_text_dark));
|
||||
}
|
||||
|
||||
((ImageView) mainView.findViewById(R.id.poi_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_info_dark));
|
||||
((ImageView) mainView.findViewById(R.id.osm_notes_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_bug_dark));
|
||||
((ImageView) mainView.findViewById(R.id.all_data_icon)).setImageDrawable(getContentIcon(R.drawable.ic_action_folder));
|
||||
|
||||
((TextView) mainView.findViewById(R.id.poi_count_text_view)).setText(String.valueOf(poiCount));
|
||||
((TextView) mainView.findViewById(R.id.osm_notes_count_text_view)).setText(String.valueOf(osmNotesCount));
|
||||
((TextView) mainView.findViewById(R.id.all_data_count_text_view)).setText(String.valueOf(poiCount + osmNotesCount));
|
||||
|
||||
View poiRow = mainView.findViewById(R.id.poi_row);
|
||||
if (poiCount > 0) {
|
||||
poiRow.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener != null) {
|
||||
listener.onClick(OsmEditsFragment.EXPORT_TYPE_POI);
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
disable(poiRow);
|
||||
}
|
||||
|
||||
View osmNotesRow = mainView.findViewById(R.id.osm_notes_row);
|
||||
if (osmNotesCount > 0) {
|
||||
osmNotesRow.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener != null) {
|
||||
listener.onClick(OsmEditsFragment.EXPORT_TYPE_NOTES);
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
disable(osmNotesRow);
|
||||
}
|
||||
|
||||
View allDataRow = mainView.findViewById(R.id.all_data_row);
|
||||
if ((poiCount + osmNotesCount) > 0) {
|
||||
allDataRow.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener != null) {
|
||||
listener.onClick(OsmEditsFragment.EXPORT_TYPE_ALL);
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
disable(allDataRow);
|
||||
}
|
||||
|
||||
mainView.findViewById(R.id.cancel_row).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
setupHeightAndBackground(mainView, R.id.scroll_view);
|
||||
|
||||
return mainView;
|
||||
}
|
||||
|
||||
private void disable(View view) {
|
||||
view.setEnabled(false);
|
||||
view.setAlpha(.5f);
|
||||
}
|
||||
|
||||
public interface ExportOptionsFragmentListener {
|
||||
|
||||
void onClick(@ExportTypesDef int type);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package net.osmand.plus.osmedit;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.osmedit.OsmEditsFragment.FileTypesDef;
|
||||
import net.osmand.plus.widgets.TextViewEx;
|
||||
|
||||
public class FileTypeBottomSheetDialogFragment extends MenuBottomSheetDialogFragment {
|
||||
|
||||
public static final String TAG = "FileTypeBottomSheetDialogFragment";
|
||||
|
||||
private FileTypeFragmentListener listener;
|
||||
|
||||
public void setListener(FileTypeFragmentListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
|
||||
final View mainView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
||||
R.layout.fragment_osm_file_type_bottom_sheet_dialog, container);
|
||||
|
||||
if (nightMode) {
|
||||
((TextViewEx) mainView.findViewById(R.id.title_text_view)).setTextColor(getResources().getColor(R.color.ctx_menu_info_text_dark));
|
||||
}
|
||||
|
||||
Drawable fileIcon = getContentIcon(R.drawable.ic_type_file);
|
||||
((ImageView) mainView.findViewById(R.id.osc_file_icon)).setImageDrawable(fileIcon);
|
||||
((ImageView) mainView.findViewById(R.id.gpx_file_icon)).setImageDrawable(fileIcon);
|
||||
|
||||
mainView.findViewById(R.id.osc_file_row).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener != null) {
|
||||
listener.onClick(OsmEditsFragment.FILE_TYPE_OSC);
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
mainView.findViewById(R.id.gpx_file_row).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener != null) {
|
||||
listener.onClick(OsmEditsFragment.FILE_TYPE_GPX);
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
mainView.findViewById(R.id.cancel_row).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
setupHeightAndBackground(mainView, R.id.scroll_view);
|
||||
|
||||
return mainView;
|
||||
}
|
||||
|
||||
public interface FileTypeFragmentListener {
|
||||
|
||||
void onClick(@FileTypesDef int type);
|
||||
}
|
||||
}
|
|
@ -7,9 +7,11 @@ import android.content.Intent;
|
|||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.IntDef;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.view.ActionMode;
|
||||
import android.util.Xml;
|
||||
|
@ -29,6 +31,9 @@ import android.widget.Toast;
|
|||
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.osm.edit.Node;
|
||||
import net.osmand.plus.GPXUtilities;
|
||||
import net.osmand.plus.GPXUtilities.GPXFile;
|
||||
import net.osmand.plus.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
|
@ -40,9 +45,12 @@ import net.osmand.plus.base.OsmAndListFragment;
|
|||
import net.osmand.plus.dialogs.ProgressDialogFragment;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.myplaces.FavoritesActivity;
|
||||
import net.osmand.plus.osmedit.ExportOptionsBottomSheetDialogFragment.ExportOptionsFragmentListener;
|
||||
import net.osmand.plus.osmedit.FileTypeBottomSheetDialogFragment.FileTypeFragmentListener;
|
||||
import net.osmand.plus.osmedit.OsmEditOptionsBottomSheetDialogFragment.OsmEditOptionsFragmentListener;
|
||||
import net.osmand.plus.osmedit.OsmPoint.Group;
|
||||
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment;
|
||||
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.PoiUploaderType;
|
||||
import net.osmand.plus.osmedit.OsmEditOptionsBottomSheetDialogFragment.OsmEditOptionsFragmentListener;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.xmlpull.v1.XmlSerializer;
|
||||
|
@ -50,6 +58,8 @@ import org.xmlpull.v1.XmlSerializer;
|
|||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
@ -57,6 +67,25 @@ import java.util.Map;
|
|||
|
||||
public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialogFragment.ProgressDialogPoiUploader, OpenstreetmapLocalUtil.OnNodeCommittedListener {
|
||||
|
||||
public static final int EXPORT_TYPE_ALL = 0;
|
||||
public static final int EXPORT_TYPE_POI = 1;
|
||||
public static final int EXPORT_TYPE_NOTES = 2;
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({EXPORT_TYPE_ALL, EXPORT_TYPE_POI, EXPORT_TYPE_NOTES})
|
||||
@interface ExportTypesDef {
|
||||
}
|
||||
|
||||
public static final int FILE_TYPE_OSC = 0;
|
||||
public static final int FILE_TYPE_GPX = 1;
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({FILE_TYPE_OSC, FILE_TYPE_GPX})
|
||||
@interface FileTypesDef {
|
||||
}
|
||||
|
||||
private static final String EXPORT_TYPE_KEY = "export_type";
|
||||
|
||||
private final static int MODE_DELETE = 100;
|
||||
private final static int MODE_UPLOAD = 101;
|
||||
|
||||
|
@ -72,14 +101,16 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
private ActionMode actionMode;
|
||||
private long refreshId;
|
||||
|
||||
private int exportType;
|
||||
|
||||
public static void getOsmEditView(View v, OsmPoint child, OsmandApplication app) {
|
||||
TextView viewName = ((TextView) v.findViewById(R.id.name));
|
||||
ImageView icon = (ImageView) v.findViewById(R.id.icon);
|
||||
String name = OsmEditingPlugin.getEditName(child);
|
||||
viewName.setText(name);
|
||||
if (child.getGroup() == OsmPoint.Group.POI) {
|
||||
if (child.getGroup() == Group.POI) {
|
||||
icon.setImageDrawable(app.getIconsCache().getIcon(R.drawable.ic_type_info, R.color.color_distance));
|
||||
} else if (child.getGroup() == OsmPoint.Group.BUG) {
|
||||
} else if (child.getGroup() == Group.BUG) {
|
||||
icon.setImageDrawable(app.getIconsCache().getIcon(R.drawable.ic_type_bug, R.color.color_distance));
|
||||
}
|
||||
|
||||
|
@ -97,6 +128,10 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
if (savedInstanceState != null) {
|
||||
exportType = savedInstanceState.getInt(EXPORT_TYPE_KEY);
|
||||
}
|
||||
|
||||
setHasOptionsMenu(true);
|
||||
plugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class);
|
||||
|
||||
|
@ -111,15 +146,30 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
emptyView.setBackgroundColor(getResources().getColor(getMyApplication().getSettings()
|
||||
.isLightContent() ? R.color.ctx_menu_info_view_bg_light : R.color.ctx_menu_info_view_bg_dark));
|
||||
|
||||
Fragment optionsFragment = getChildFragmentManager().findFragmentByTag(OsmEditOptionsBottomSheetDialogFragment.TAG);
|
||||
FragmentManager fm = getChildFragmentManager();
|
||||
Fragment optionsFragment = fm.findFragmentByTag(OsmEditOptionsBottomSheetDialogFragment.TAG);
|
||||
if (optionsFragment != null) {
|
||||
((OsmEditOptionsBottomSheetDialogFragment) optionsFragment).setListener(createOsmEditOptionsFragmentListener());
|
||||
}
|
||||
Fragment exportOptFragment = fm.findFragmentByTag(ExportOptionsBottomSheetDialogFragment.TAG);
|
||||
if (exportOptFragment != null) {
|
||||
((ExportOptionsBottomSheetDialogFragment) exportOptFragment).setListener(createExportOptionsFragmentListener());
|
||||
}
|
||||
Fragment fileTypeFragment = fm.findFragmentByTag(FileTypeBottomSheetDialogFragment.TAG);
|
||||
if (fileTypeFragment != null) {
|
||||
((FileTypeBottomSheetDialogFragment) fileTypeFragment).setListener(createFileTypeFragmentListener());
|
||||
}
|
||||
|
||||
plugin.getPoiModificationLocalUtil().addNodeCommittedListener(this);
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putInt(EXPORT_TYPE_KEY, exportType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
plugin.getPoiModificationLocalUtil().removeNodeCommittedListener(this);
|
||||
|
@ -152,6 +202,16 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
listAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private List<OsmPoint> getOsmEditsByGroup(Group group) {
|
||||
List<OsmPoint> res = new ArrayList<>();
|
||||
for (OsmPoint point : osmEdits) {
|
||||
if (point.getGroup() == group) {
|
||||
res.add(point);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
menu.clear();
|
||||
|
@ -173,13 +233,19 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
});
|
||||
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
|
||||
item = menu.add(R.string.local_osm_changes_backup).setIcon(R.drawable.ic_action_gshare_dark);
|
||||
item = menu.add(R.string.shared_string_export).setIcon(R.drawable.ic_action_gshare_dark);
|
||||
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
new BackupOpenstreetmapPointAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
|
||||
osmEdits.toArray(new OsmPoint[osmEdits.size()]));
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ExportOptionsBottomSheetDialogFragment.POI_COUNT_KEY, getOsmEditsByGroup(Group.POI).size());
|
||||
args.putInt(ExportOptionsBottomSheetDialogFragment.NOTES_COUNT_KEY, getOsmEditsByGroup(Group.BUG).size());
|
||||
ExportOptionsBottomSheetDialogFragment fragment = new ExportOptionsBottomSheetDialogFragment();
|
||||
fragment.setArguments(args);
|
||||
fragment.setUsedOnMap(false);
|
||||
fragment.setListener(createExportOptionsFragmentListener());
|
||||
fragment.show(getChildFragmentManager(), ExportOptionsBottomSheetDialogFragment.TAG);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
@ -485,6 +551,43 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
};
|
||||
}
|
||||
|
||||
private ExportOptionsFragmentListener createExportOptionsFragmentListener() {
|
||||
return new ExportOptionsFragmentListener() {
|
||||
@Override
|
||||
public void onClick(int type) {
|
||||
exportType = type;
|
||||
openFileTypeMenu();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private FileTypeFragmentListener createFileTypeFragmentListener() {
|
||||
return new FileTypeFragmentListener() {
|
||||
@Override
|
||||
public void onClick(int type) {
|
||||
List<OsmPoint> points = getPointsToExport();
|
||||
new BackupOpenstreetmapPointAsyncTask(type, exportType).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
|
||||
points.toArray(new OsmPoint[points.size()]));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void openFileTypeMenu() {
|
||||
FileTypeBottomSheetDialogFragment fragment = new FileTypeBottomSheetDialogFragment();
|
||||
fragment.setUsedOnMap(false);
|
||||
fragment.setListener(createFileTypeFragmentListener());
|
||||
fragment.show(getChildFragmentManager(), FileTypeBottomSheetDialogFragment.TAG);
|
||||
}
|
||||
|
||||
private List<OsmPoint> getPointsToExport() {
|
||||
if (exportType == EXPORT_TYPE_POI) {
|
||||
return getOsmEditsByGroup(Group.POI);
|
||||
} else if (exportType == EXPORT_TYPE_NOTES) {
|
||||
return getOsmEditsByGroup(Group.BUG);
|
||||
}
|
||||
return osmEdits;
|
||||
}
|
||||
|
||||
protected OsmPoint getPointAfterModify(OsmPoint info) {
|
||||
if (info instanceof OpenstreetmapPoint && info.getId() == refreshId) {
|
||||
for (OpenstreetmapPoint p : plugin.getDBPOI().getOpenstreetmapPoints()) {
|
||||
|
@ -533,7 +636,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
|
||||
private void showOnMap(OsmPoint osmPoint) {
|
||||
boolean isOsmPoint = osmPoint instanceof OpenstreetmapPoint;
|
||||
String type = osmPoint.getGroup() == OsmPoint.Group.POI ? PointDescription.POINT_TYPE_POI : PointDescription.POINT_TYPE_OSM_BUG;
|
||||
String type = osmPoint.getGroup() == Group.POI ? PointDescription.POINT_TYPE_POI : PointDescription.POINT_TYPE_OSM_BUG;
|
||||
String name = (isOsmPoint ? ((OpenstreetmapPoint) osmPoint).getName() : ((OsmNotesPoint) osmPoint).getText());
|
||||
getMyApplication().getSettings().setMapLocationToShow(osmPoint.getLatitude(), osmPoint.getLongitude(), 15,
|
||||
new PointDescription(type, name), true, osmPoint); //$NON-NLS-1$
|
||||
|
@ -580,9 +683,9 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
while (it.hasNext()) {
|
||||
OsmPoint osmPoint = it.next();
|
||||
assert plugin != null;
|
||||
if (osmPoint.getGroup() == OsmPoint.Group.POI) {
|
||||
if (osmPoint.getGroup() == Group.POI) {
|
||||
plugin.getDBPOI().deletePOI((OpenstreetmapPoint) osmPoint);
|
||||
} else if (osmPoint.getGroup() == OsmPoint.Group.BUG) {
|
||||
} else if (osmPoint.getGroup() == Group.BUG) {
|
||||
plugin.getDBBug().deleteAllBugModifications((OsmNotesPoint) osmPoint);
|
||||
}
|
||||
it.remove();
|
||||
|
@ -600,54 +703,113 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
public class BackupOpenstreetmapPointAsyncTask extends AsyncTask<OsmPoint, OsmPoint, String> {
|
||||
|
||||
private File osmchange;
|
||||
private boolean oscFile;
|
||||
|
||||
public BackupOpenstreetmapPointAsyncTask() {
|
||||
public BackupOpenstreetmapPointAsyncTask(int fileType, int exportType) {
|
||||
OsmandApplication app = (OsmandApplication) getActivity().getApplication();
|
||||
osmchange = app.getAppPath("poi_modification.osc");
|
||||
oscFile = fileType == FILE_TYPE_OSC;
|
||||
osmchange = app.getAppPath(getFileName(exportType));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected String doInBackground(OsmPoint... points) {
|
||||
FileOutputStream out = null;
|
||||
try {
|
||||
out = new FileOutputStream(osmchange);
|
||||
XmlSerializer sz = Xml.newSerializer();
|
||||
|
||||
sz.setOutput(out, "UTF-8");
|
||||
sz.startDocument("UTF-8", true);
|
||||
sz.startTag("", "osmChange");
|
||||
sz.attribute("", "generator", "OsmAnd");
|
||||
sz.attribute("", "version", "0.6");
|
||||
sz.startTag("", "create");
|
||||
writeContent(sz, points, OsmPoint.Action.CREATE);
|
||||
sz.endTag("", "create");
|
||||
sz.startTag("", "modify");
|
||||
writeContent(sz, points, OsmPoint.Action.MODIFY);
|
||||
writeContent(sz, points, OsmPoint.Action.REOPEN);
|
||||
|
||||
sz.endTag("", "modify");
|
||||
sz.startTag("", "delete");
|
||||
writeContent(sz, points, OsmPoint.Action.DELETE);
|
||||
sz.endTag("", "delete");
|
||||
sz.endTag("", "osmChange");
|
||||
sz.endDocument();
|
||||
} catch (Exception e) {
|
||||
return e.getMessage();
|
||||
} finally {
|
||||
if (oscFile) {
|
||||
FileOutputStream out = null;
|
||||
try {
|
||||
if (out != null) out.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
out = new FileOutputStream(osmchange);
|
||||
XmlSerializer sz = Xml.newSerializer();
|
||||
|
||||
sz.setOutput(out, "UTF-8");
|
||||
sz.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
|
||||
sz.startDocument("UTF-8", true);
|
||||
sz.startTag("", "osmChange");
|
||||
sz.attribute("", "generator", "OsmAnd");
|
||||
sz.attribute("", "version", "0.6");
|
||||
sz.startTag("", "create");
|
||||
writeContent(sz, points, OsmPoint.Action.CREATE);
|
||||
sz.endTag("", "create");
|
||||
sz.startTag("", "modify");
|
||||
writeContent(sz, points, OsmPoint.Action.MODIFY);
|
||||
writeContent(sz, points, OsmPoint.Action.REOPEN);
|
||||
|
||||
sz.endTag("", "modify");
|
||||
sz.startTag("", "delete");
|
||||
writeContent(sz, points, OsmPoint.Action.DELETE);
|
||||
sz.endTag("", "delete");
|
||||
sz.endTag("", "osmChange");
|
||||
sz.endDocument();
|
||||
} catch (Exception e) {
|
||||
return e.getMessage();
|
||||
} finally {
|
||||
try {
|
||||
if (out != null) out.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
GPXFile gpx = new GPXFile();
|
||||
for (OsmPoint point : points) {
|
||||
if (point.getGroup() == Group.POI) {
|
||||
OpenstreetmapPoint p = (OpenstreetmapPoint) point;
|
||||
WptPt wpt = new WptPt();
|
||||
wpt.name = "node" + " " + OsmPoint.stringAction.get(p.getAction());
|
||||
wpt.lat = p.getLatitude();
|
||||
wpt.lon = p.getLongitude();
|
||||
wpt.desc = "id: " + String.valueOf(p.getId());
|
||||
wpt.comment = getTagsString(p);
|
||||
gpx.addPoint(wpt);
|
||||
} else if (point.getGroup() == Group.BUG) {
|
||||
OsmNotesPoint p = (OsmNotesPoint) point;
|
||||
WptPt wpt = new WptPt();
|
||||
wpt.name = "note" + " " + OsmPoint.stringAction.get(p.getAction());
|
||||
wpt.lat = p.getLatitude();
|
||||
wpt.lon = p.getLongitude();
|
||||
wpt.desc = "id: " + String.valueOf(p.getId());
|
||||
wpt.comment = p.getText();
|
||||
gpx.addPoint(wpt);
|
||||
}
|
||||
}
|
||||
GPXUtilities.writeGpxFile(osmchange, gpx, getMyApplication());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getFileName(int exportType) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (exportType == EXPORT_TYPE_POI) {
|
||||
sb.append("osm_edits_modification");
|
||||
} else if (exportType == EXPORT_TYPE_NOTES) {
|
||||
sb.append("osm_notes_modification");
|
||||
} else {
|
||||
sb.append("osm_modification");
|
||||
}
|
||||
sb.append(oscFile ? ".osc" : ".gpx");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String getTagsString(OpenstreetmapPoint point) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (String tag : point.getEntity().getTagKeySet()) {
|
||||
String val = point.getEntity().getTag(tag);
|
||||
if (isNotValid(tag, val)) {
|
||||
continue;
|
||||
}
|
||||
sb.append(tag).append(" : ");
|
||||
sb.append(val).append("; ");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private boolean isNotValid(String tag, String val) {
|
||||
return val == null || val.length() == 0 || tag.length() == 0
|
||||
|| tag.startsWith(EditPoiData.REMOVE_TAG_PREFIX) || tag.equals("poi_type_tag");
|
||||
}
|
||||
|
||||
private void writeContent(XmlSerializer sz, OsmPoint[] points, OsmPoint.Action a) throws IllegalArgumentException, IllegalStateException, IOException {
|
||||
for (OsmPoint point : points) {
|
||||
if (point.getGroup() == OsmPoint.Group.POI) {
|
||||
if (point.getGroup() == Group.POI) {
|
||||
OpenstreetmapPoint p = (OpenstreetmapPoint) point;
|
||||
if (p.getAction() == a) {
|
||||
sz.startTag("", "node");
|
||||
|
@ -657,7 +819,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
sz.attribute("", "version", "1");
|
||||
for (String tag : p.getEntity().getTagKeySet()) {
|
||||
String val = p.getEntity().getTag(tag);
|
||||
if (val == null || val.length() == 0 || tag.length() == 0 || "poi_type_tag".equals(tag)) {
|
||||
if (isNotValid(tag, val)) {
|
||||
continue;
|
||||
}
|
||||
sz.startTag("", "tag");
|
||||
|
@ -667,7 +829,7 @@ public class OsmEditsFragment extends OsmAndListFragment implements SendPoiDialo
|
|||
}
|
||||
sz.endTag("", "node");
|
||||
}
|
||||
} else if (point.getGroup() == OsmPoint.Group.BUG) {
|
||||
} else if (point.getGroup() == Group.BUG) {
|
||||
OsmNotesPoint p = (OsmNotesPoint) point;
|
||||
if (p.getAction() == a) {
|
||||
sz.startTag("", "note");
|
||||
|
|
Loading…
Reference in a new issue