commit
918eeef059
29 changed files with 1252 additions and 323 deletions
|
@ -1,5 +1,9 @@
|
||||||
package net.osmand.data;
|
package net.osmand.data;
|
||||||
|
|
||||||
|
import net.osmand.Location;
|
||||||
|
import net.osmand.osm.PoiCategory;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -13,10 +17,6 @@ import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
import net.osmand.Location;
|
|
||||||
import net.osmand.osm.PoiCategory;
|
|
||||||
import net.osmand.util.Algorithms;
|
|
||||||
|
|
||||||
|
|
||||||
public class Amenity extends MapObject {
|
public class Amenity extends MapObject {
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ public class Amenity extends MapObject {
|
||||||
|
|
||||||
private static final long serialVersionUID = 132083949926339552L;
|
private static final long serialVersionUID = 132083949926339552L;
|
||||||
private String subType;
|
private String subType;
|
||||||
private PoiCategory type;
|
private transient PoiCategory type;
|
||||||
// duplicate for fast access
|
// duplicate for fast access
|
||||||
private String openingHours;
|
private String openingHours;
|
||||||
private Map<String, String> additionalInfo;
|
private Map<String, String> additionalInfo;
|
||||||
|
|
|
@ -2,6 +2,7 @@ package net.osmand.util;
|
||||||
/* Can be commented out in order to run the main function separately */
|
/* Can be commented out in order to run the main function separately */
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -199,7 +200,7 @@ public class OpeningHoursParser {
|
||||||
* This implementation only supports month, day of weeks and numeral times, or the value "off"
|
* This implementation only supports month, day of weeks and numeral times, or the value "off"
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static class BasicOpeningHourRule implements OpeningHoursRule {
|
public static class BasicOpeningHourRule implements OpeningHoursRule, Serializable {
|
||||||
/**
|
/**
|
||||||
* represents the list on which days it is open.
|
* represents the list on which days it is open.
|
||||||
* Day number 0 is MONDAY
|
* Day number 0 is MONDAY
|
||||||
|
|
BIN
OsmAnd/res/drawable-hdpi/ic_action_label.png
Executable file
BIN
OsmAnd/res/drawable-hdpi/ic_action_label.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
OsmAnd/res/drawable-mdpi/ic_action_label.png
Executable file
BIN
OsmAnd/res/drawable-mdpi/ic_action_label.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
OsmAnd/res/drawable-xhdpi/ic_action_label.png
Executable file
BIN
OsmAnd/res/drawable-xhdpi/ic_action_label.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
OsmAnd/res/drawable-xxhdpi/ic_action_label.png
Executable file
BIN
OsmAnd/res/drawable-xxhdpi/ic_action_label.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
|
@ -1,91 +1,142 @@
|
||||||
<android.support.design.widget.CoordinatorLayout
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/dashboard_background"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
tools:context="net.osmand.plus.osmedit.EditPoiFragment">
|
tools:context="net.osmand.plus.osmedit.EditPoiFragment">
|
||||||
|
|
||||||
<android.support.design.widget.AppBarLayout
|
<android.support.design.widget.CoordinatorLayout
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:theme="@style/OsmandLightTheme.DarkActionbar">
|
|
||||||
|
|
||||||
<!-- TODO change theme -->
|
|
||||||
<android.support.v7.widget.Toolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="@dimen/dashboard_map_toolbar"
|
|
||||||
app:contentInsetLeft="72dp"
|
|
||||||
app:contentInsetStart="72dp"
|
|
||||||
app:layout_scrollFlags="scroll"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_scrollFlags="scroll">
|
|
||||||
|
|
||||||
<android.support.design.widget.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginLeft="72dp"
|
|
||||||
android:layout_marginRight="16dp"
|
|
||||||
android:layout_marginTop="16dp">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:hint="Name"
|
|
||||||
android:text="@string/lorem_ipsum"/>
|
|
||||||
|
|
||||||
</android.support.design.widget.TextInputLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:layout_marginLeft="72dp"
|
|
||||||
app:layout_scrollFlags="scroll">
|
|
||||||
|
|
||||||
<android.support.design.widget.TextInputLayout
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
android:layout_weight="1">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:drawableRight="@drawable/ic_action_arrow_drop_down"
|
|
||||||
android:hint="POI Type"
|
|
||||||
android:text="@string/lorem_ipsum"/>
|
|
||||||
|
|
||||||
</android.support.design.widget.TextInputLayout>
|
|
||||||
|
|
||||||
<ImageButton
|
|
||||||
android:id="@+id/onlineDocumentationButton"
|
|
||||||
android:layout_width="48dp"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:layout_gravity="bottom"
|
|
||||||
android:background="@null"
|
|
||||||
android:src="@drawable/ic_action_help"/>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<android.support.design.widget.TabLayout
|
|
||||||
android:id="@+id/tab_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@color/color_white"
|
|
||||||
app:tabIndicatorColor="@color/osmand_orange"
|
|
||||||
app:tabSelectedTextColor="@color/osmand_orange"
|
|
||||||
app:tabTextColor="@android:color/darker_gray"/>
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
|
||||||
|
|
||||||
<android.support.v4.view.ViewPager
|
|
||||||
android:id="@+id/viewpager"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
android:layout_weight="1"
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:theme="@style/OsmandLightTheme.DarkActionbar">
|
||||||
|
|
||||||
|
<!-- TODO change theme -->
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="@dimen/dashboard_map_toolbar"
|
||||||
|
app:contentInsetLeft="72dp"
|
||||||
|
app:contentInsetStart="72dp"
|
||||||
|
app:layout_scrollFlags="scroll"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_scrollFlags="scroll">
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="72dp"
|
||||||
|
android:layout_marginRight="16dp"
|
||||||
|
android:layout_marginTop="16dp">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/poiNameEditText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="Name"
|
||||||
|
tools:text="@string/lorem_ipsum"/>
|
||||||
|
|
||||||
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
app:layout_scrollFlags="scroll">
|
||||||
|
<!--android:layout_marginLeft="72dp"-->
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/poiTypeButton"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:background="@null"
|
||||||
|
android:src="@drawable/ic_action_label"/>
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputLayout
|
||||||
|
android:id="@+id/poiTypeTextInputLayout"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginLeft="24dp"
|
||||||
|
android:layout_weight="1">
|
||||||
|
|
||||||
|
<AutoCompleteTextView
|
||||||
|
android:id="@+id/poiTypeEditText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:drawableRight="@drawable/ic_action_arrow_drop_down"
|
||||||
|
android:hint="POI Type"
|
||||||
|
android:completionThreshold="1"
|
||||||
|
tools:text="@string/lorem_ipsum"/>
|
||||||
|
|
||||||
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/onlineDocumentationButton"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:background="@null"
|
||||||
|
android:src="@drawable/ic_action_help"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<android.support.design.widget.TabLayout
|
||||||
|
android:id="@+id/tab_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/color_white"
|
||||||
|
app:tabIndicatorColor="@color/osmand_orange"
|
||||||
|
app:tabSelectedTextColor="@color/osmand_orange"
|
||||||
|
app:tabTextColor="@android:color/darker_gray"/>
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/viewpager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
||||||
|
|
||||||
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/buttonDivider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:gravity="right">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/cancelButton"
|
||||||
|
style="?android:attr/borderlessButtonStyle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/shared_string_cancel"
|
||||||
|
android:textColor="@color/dashboard_general_button_text_light"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/saveButton"
|
||||||
|
style="?android:attr/borderlessButtonStyle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@color/dashboard_general_button_text_light"
|
||||||
|
tools:text="Save"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
|
@ -3,13 +3,71 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@color/dashboard_background">
|
xmlns:card_view="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
<android.support.v7.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/color_white"
|
||||||
|
android:layout_marginLeft="16dp"
|
||||||
|
android:layout_marginRight="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
card_view:cardCornerRadius="2dp">
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="120dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="name"
|
||||||
|
android:layout_margin="16dp"/>
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/nameTextView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="16dp"/>
|
||||||
|
</LinearLayout>
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center">
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/amenityTagTextView"
|
||||||
|
android:layout_width="120dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="amenity"
|
||||||
|
android:layout_margin="16dp"/>
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/amenityTextView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="16dp"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</android.support.v7.widget.CardView>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/editTagsList"
|
android:id="@+id/editTagsList"
|
||||||
|
@ -26,24 +84,5 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Add tag"/>
|
android:text="Add tag"/>
|
||||||
|
|
||||||
<android.support.v7.widget.CardView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Added tags"/>
|
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
|
||||||
android:id="@+id/added_tags_recycler_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</android.support.v7.widget.CardView>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</android.support.v4.widget.NestedScrollView>
|
</android.support.v4.widget.NestedScrollView>
|
||||||
|
|
|
@ -3,26 +3,16 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:background="@color/dashboard_background">
|
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/openHoursTextView"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginLeft="16dp"
|
|
||||||
android:text="Open hours"
|
|
||||||
android:textColor="@color/color_black"/>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/contactInfoTextView"
|
android:id="@+id/contactInfoTextView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@id/openHoursTextView"
|
|
||||||
android:layout_marginLeft="16dp"
|
android:layout_marginLeft="16dp"
|
||||||
android:text="Contact info"
|
android:text="Contact info"
|
||||||
android:textColor="@color/color_black"/>
|
android:textColor="@color/color_black"/>
|
||||||
|
@ -93,32 +83,28 @@
|
||||||
android:hint="Description"
|
android:hint="Description"
|
||||||
android:inputType="textMultiLine"/>
|
android:inputType="textMultiLine"/>
|
||||||
|
|
||||||
<View
|
<TextView
|
||||||
android:id="@+id/buttonDivider"
|
android:id="@+id/openHoursTextView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="1dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@id/descriptionEditText"
|
android:layout_below="@id/descriptionEditText"
|
||||||
android:background="@color/divider_color"/>
|
android:layout_marginLeft="16dp"
|
||||||
|
android:text="Open hours"
|
||||||
|
android:textColor="@color/color_black"/>
|
||||||
|
|
||||||
<Button
|
<ImageView
|
||||||
android:id="@+id/saveButton"
|
android:id="@+id/openHoursImageView"
|
||||||
style="?android:attr/borderlessButtonStyle"
|
style="@style/edit_poi_imageview_style"
|
||||||
android:layout_width="wrap_content"
|
android:layout_below="@id/openHoursTextView"
|
||||||
android:layout_height="wrap_content"
|
tools:src="@drawable/ic_action_time"/>
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_below="@id/buttonDivider"
|
|
||||||
tools:text="Save"
|
|
||||||
android:textColor="@color/dashboard_general_button_text_light"/>
|
|
||||||
|
|
||||||
<Button
|
<EditText
|
||||||
android:id="@+id/cancelButton"
|
android:id="@+id/openHoursEditText"
|
||||||
style="?android:attr/borderlessButtonStyle"
|
style="@style/create_poi_text_field"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_below="@id/openHoursTextView"
|
||||||
android:layout_below="@id/buttonDivider"
|
android:hint="Mo-Su 08:00-20:00"
|
||||||
android:layout_toLeftOf="@id/saveButton"
|
android:inputType="textMultiLine"/>
|
||||||
android:text="Cancel"
|
|
||||||
android:textColor="@color/dashboard_general_button_text_light"/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
</android.support.v4.widget.NestedScrollView>
|
</android.support.v4.widget.NestedScrollView>
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_marginLeft="5dp"
|
android:layout_marginLeft="5dp"
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
android:text="@string/osb_comment_dialog_message" />
|
android:text="@string/osb_comment_dialog_message" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/BugMessage"
|
android:id="@+id/messageEditText"
|
||||||
android:minLines="1"
|
android:minLines="1"
|
||||||
android:layout_marginLeft="5dp"
|
android:layout_marginLeft="5dp"
|
||||||
android:layout_marginRight="5dp"
|
android:layout_marginRight="5dp"
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
android:text="@string/osb_comment_dialog_author" />
|
android:text="@string/osb_comment_dialog_author" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/AuthorName"
|
android:id="@+id/userNameEditText"
|
||||||
android:layout_marginLeft="5dp"
|
android:layout_marginLeft="5dp"
|
||||||
android:layout_marginRight="5dp"
|
android:layout_marginRight="5dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -42,12 +42,10 @@
|
||||||
android:text="@string/osb_author_dialog_password" />
|
android:text="@string/osb_author_dialog_password" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/Password"
|
android:id="@+id/passwordEditText"
|
||||||
android:layout_marginLeft="5dp"
|
android:layout_marginLeft="5dp"
|
||||||
android:layout_marginRight="5dp"
|
android:layout_marginRight="5dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:inputType="textPassword" />
|
android:inputType="textPassword" />
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
83
OsmAnd/res/layout/open_time_list_item.xml
Normal file
83
OsmAnd/res/layout/open_time_list_item.xml
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:src="@drawable/ic_action_time"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="24dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_weight="1">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:text="Mo-We"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="16dp"
|
||||||
|
android:layout_marginRight="16dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:text="08:00"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="16dp"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="16dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:text="20:00"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/divider_color"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/deleteItemImageButton"
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:src="@drawable/ic_action_close_dark"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
50
OsmAnd/res/layout/send_poi_dialog.xml
Normal file
50
OsmAnd/res/layout/send_poi_dialog.xml
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:text="@string/osb_comment_dialog_message" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/messageEditText"
|
||||||
|
android:minLines="1"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:inputType="textMultiLine" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:text="@string/user_name" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/userNameEditText"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="fill_parent" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:text="@string/user_password" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/passwordEditText"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:inputType="textPassword" />
|
||||||
|
</LinearLayout>
|
|
@ -2236,4 +2236,5 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A
|
||||||
<string name="shared_string_skip">Skip</string>
|
<string name="shared_string_skip">Skip</string>
|
||||||
<string name="app_name_osmand">OsmAnd</string>
|
<string name="app_name_osmand">OsmAnd</string>
|
||||||
<string name="offline_maps_and_navigation"><![CDATA[Offline Maps\n& Navigation]]></string>
|
<string name="offline_maps_and_navigation"><![CDATA[Offline Maps\n& Navigation]]></string>
|
||||||
|
<string name="commit_poi">Commit POI</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -3,9 +3,9 @@ package net.osmand.plus.osmedit;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.text.Editable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.text.TextWatcher;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -13,14 +13,24 @@ import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import net.osmand.osm.PoiType;
|
||||||
|
import net.osmand.osm.edit.OSMSettings;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.osmedit.EditPoiFragment.Tag;
|
import net.osmand.plus.osmedit.data.EditPoiData;
|
||||||
|
import net.osmand.plus.osmedit.data.Tag;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class AdvancedDataFragment extends Fragment {
|
public class AdvancedDataFragment extends Fragment {
|
||||||
private static final String TAG = "AdvancedDataFragment";
|
private static final String TAG = "AdvancedDataFragment";
|
||||||
|
|
||||||
private TagAdapterLinearLayoutHack mAdapter;
|
private TagAdapterLinearLayoutHack mAdapter;
|
||||||
|
private EditPoiData.TagsChangedListener mTagsChangedListener;
|
||||||
|
private boolean mIsUserInput = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||||
|
@ -46,11 +56,14 @@ public class AdvancedDataFragment extends Fragment {
|
||||||
valueEditText.clearFocus();
|
valueEditText.clearFocus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
TextView nameTextView = (TextView) view.findViewById(R.id.nameTextView);
|
||||||
|
TextView amenityTagTextView = (TextView) view.findViewById(R.id.amenityTagTextView);
|
||||||
|
TextView amenityTextView = (TextView) view.findViewById(R.id.amenityTextView);
|
||||||
LinearLayout editTagsLineaLayout =
|
LinearLayout editTagsLineaLayout =
|
||||||
(LinearLayout) view.findViewById(R.id.editTagsList);
|
(LinearLayout) view.findViewById(R.id.editTagsList);
|
||||||
Log.v(TAG, "arguments=" + savedInstanceState + "; ll=" + editTagsLineaLayout);
|
mAdapter = new TagAdapterLinearLayoutHack(editTagsLineaLayout, getData(),
|
||||||
Log.v(TAG, "not restored");
|
nameTextView, amenityTagTextView, amenityTextView,
|
||||||
mAdapter = new TagAdapterLinearLayoutHack(editTagsLineaLayout, getData());
|
((OsmandApplication) getActivity().getApplication()).getPoiTypes().getAllTranslatedNames());
|
||||||
// setListViewHeightBasedOnChildren(editTagsLineaLayout);
|
// setListViewHeightBasedOnChildren(editTagsLineaLayout);
|
||||||
Button addTagButton = (Button) view.findViewById(R.id.addTagButton);
|
Button addTagButton = (Button) view.findViewById(R.id.addTagButton);
|
||||||
addTagButton.setOnClickListener(new View.OnClickListener() {
|
addTagButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@ -76,76 +89,136 @@ public class AdvancedDataFragment extends Fragment {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
// TODO read more about lifecycle
|
// TODO read more about lifecycle
|
||||||
mAdapter.updateViews();
|
mAdapter.updateViews();
|
||||||
getEditPoiFragment().addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
mTagsChangedListener = new EditPoiData.TagsChangedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onPageScrolled(int i, float v, int i1) {
|
public void onTagsChanged() {
|
||||||
|
mIsUserInput = false;
|
||||||
|
mAdapter.updateViews();
|
||||||
|
mIsUserInput = true;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
getData().addListener(mTagsChangedListener);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPageSelected(int i) {
|
public void onPause() {
|
||||||
if (i == 1) mAdapter.updateViews();
|
super.onPause();
|
||||||
}
|
getData().deleteListener(mTagsChangedListener);
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPageScrollStateChanged(int i) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
Log.v(TAG, "onSaveInstanceState(" + "outState=" + outState + ")");
|
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TagAdapterLinearLayoutHack {
|
public class TagAdapterLinearLayoutHack {
|
||||||
private final LinearLayout linearLayout;
|
private final LinearLayout linearLayout;
|
||||||
private final EditPoiFragment.EditPoiData editPoiData;
|
private final EditPoiData editPoiData;
|
||||||
|
|
||||||
|
private final TextView nameTextView;
|
||||||
|
private final TextView amenityTagTextView;
|
||||||
|
private final TextView amenityTextView;
|
||||||
|
private final Map<String, PoiType> allTranslatedSubTypes;
|
||||||
|
|
||||||
public TagAdapterLinearLayoutHack(LinearLayout linearLayout,
|
public TagAdapterLinearLayoutHack(LinearLayout linearLayout,
|
||||||
EditPoiFragment.EditPoiData editPoiData) {
|
EditPoiData editPoiData,
|
||||||
|
TextView nameTextView,
|
||||||
|
TextView amenityTagTextView,
|
||||||
|
TextView amenityTextView,
|
||||||
|
Map<String, PoiType> allTranslatedSubTypes) {
|
||||||
this.linearLayout = linearLayout;
|
this.linearLayout = linearLayout;
|
||||||
this.editPoiData = editPoiData;
|
this.editPoiData = editPoiData;
|
||||||
|
this.nameTextView = nameTextView;
|
||||||
|
this.amenityTagTextView = amenityTagTextView;
|
||||||
|
this.amenityTextView = amenityTextView;
|
||||||
|
this.allTranslatedSubTypes = allTranslatedSubTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addTag(Tag tag) {
|
public void addTag(Tag tag) {
|
||||||
View view = getView(tag);
|
View view = getView(tag);
|
||||||
editPoiData.tags.add(tag);
|
editPoiData.tags.add(tag);
|
||||||
EditText valueEditText = (EditText) view.findViewById(R.id.valueEditText);
|
if (mIsUserInput)
|
||||||
Log.v(TAG, "valueEditText text=" + valueEditText.getText());
|
editPoiData.notifyDatasetChanged(mTagsChangedListener);
|
||||||
linearLayout.addView(view);
|
linearLayout.addView(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateViews() {
|
public void updateViews() {
|
||||||
linearLayout.removeAllViews();
|
linearLayout.removeAllViews();
|
||||||
Log.v(TAG, "editPoiData.tags=" + editPoiData.tags);
|
Iterator<Tag> iterator = editPoiData.tags.iterator();
|
||||||
for (Tag tag : editPoiData.tags) {
|
for (Tag tag : editPoiData.tags) {
|
||||||
Log.v(TAG, "tag=" + tag);
|
if (tag.tag.equals(OSMSettings.OSMTagKey.NAME.getValue())) {
|
||||||
View view = getView(tag);
|
nameTextView.setText(tag.value);
|
||||||
EditText valueEditText = (EditText) view.findViewById(R.id.valueEditText);
|
} else if (tag.tag.equals(EditPoiFragment.POI_TYPE_TAG)) {
|
||||||
Log.v(TAG, "valueEditText text=" + valueEditText.getText());
|
String subType = tag.value.trim().toLowerCase();
|
||||||
linearLayout.addView(view);
|
if (allTranslatedSubTypes.get(subType) != null) {
|
||||||
|
PoiType pt = allTranslatedSubTypes.get(subType);
|
||||||
|
amenityTagTextView.setText(pt.getOsmTag());
|
||||||
|
amenityTextView.setText(pt.getOsmValue());
|
||||||
|
} else {
|
||||||
|
amenityTagTextView.setText(editPoiData.amenity.getType().getDefaultTag());
|
||||||
|
amenityTextView.setText(subType);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
View view = getView(tag);
|
||||||
|
linearLayout.addView(view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private View getView(final Tag tag) {
|
private View getView(final Tag tag) {
|
||||||
Log.v(TAG, "getView(" + "tag=" + tag + ")");
|
|
||||||
final View convertView = LayoutInflater.from(linearLayout.getContext())
|
final View convertView = LayoutInflater.from(linearLayout.getContext())
|
||||||
.inflate(R.layout.poi_tag_list_item, null, false);
|
.inflate(R.layout.poi_tag_list_item, null, false);
|
||||||
EditText tagEditText = (EditText) convertView.findViewById(R.id.tagEditText);
|
final EditText tagEditText = (EditText) convertView.findViewById(R.id.tagEditText);
|
||||||
EditText valueEditText = (EditText) convertView.findViewById(R.id.valueEditText);
|
tagEditText.setText(tag.tag);
|
||||||
|
final EditText valueEditText = (EditText) convertView.findViewById(R.id.valueEditText);
|
||||||
ImageButton deleteItemImageButton =
|
ImageButton deleteItemImageButton =
|
||||||
(ImageButton) convertView.findViewById(R.id.deleteItemImageButton);
|
(ImageButton) convertView.findViewById(R.id.deleteItemImageButton);
|
||||||
tagEditText.setText(tag.tag);
|
|
||||||
valueEditText.setText(tag.value);
|
valueEditText.setText(tag.value);
|
||||||
deleteItemImageButton.setOnClickListener(new View.OnClickListener() {
|
deleteItemImageButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
linearLayout.removeView((View) v.getParent());
|
linearLayout.removeView((View) v.getParent());
|
||||||
editPoiData.tags.remove(tag);
|
editPoiData.tags.remove(tag);
|
||||||
|
if (mIsUserInput)
|
||||||
|
editPoiData.notifyDatasetChanged(mTagsChangedListener);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
tagEditText.addTextChangedListener(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
editPoiData.tags.remove(tag);
|
||||||
|
tag.tag = tagEditText.getText().toString();
|
||||||
|
editPoiData.tags.add(tag);
|
||||||
|
if (mIsUserInput)
|
||||||
|
editPoiData.notifyDatasetChanged(mTagsChangedListener);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
valueEditText.addTextChangedListener(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
editPoiData.tags.remove(tag);
|
||||||
|
tag.value = valueEditText.getText().toString();
|
||||||
|
editPoiData.tags.add(tag);
|
||||||
|
if (mIsUserInput)
|
||||||
|
editPoiData.notifyDatasetChanged(mTagsChangedListener);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Log.v(TAG, "convertView=" + convertView);
|
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,7 +227,7 @@ public class AdvancedDataFragment extends Fragment {
|
||||||
return (EditPoiFragment) getParentFragment();
|
return (EditPoiFragment) getParentFragment();
|
||||||
}
|
}
|
||||||
|
|
||||||
private EditPoiFragment.EditPoiData getData() {
|
private EditPoiData getData() {
|
||||||
return getEditPoiFragment().getEditPoiData();
|
return getEditPoiFragment().getEditPoiData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
package net.osmand.plus.osmedit;
|
package net.osmand.plus.osmedit;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.ProgressImplementation;
|
import net.osmand.plus.ProgressImplementation;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
@ -90,7 +95,12 @@ public class DashOsmEditsFragment extends DashBaseFragment {
|
||||||
send.setOnClickListener(new View.OnClickListener() {
|
send.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
uploadItem(point);
|
if (point.getGroup() == OsmPoint.Group.POI) {
|
||||||
|
SendPoiDialogFragment.createInstance((OpenstreetmapPoint) point)
|
||||||
|
.show(getChildFragmentManager(), "SendPoiDialogFragment");
|
||||||
|
} else {
|
||||||
|
uploadItem(point);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
view.findViewById(R.id.options).setVisibility(View.GONE);
|
view.findViewById(R.id.options).setVisibility(View.GONE);
|
||||||
|
@ -188,4 +198,44 @@ public class DashOsmEditsFragment extends DashBaseFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class SendPoiDialogFragment extends DialogFragment {
|
||||||
|
public static final String OPENSTREETMAP_POINT = "openstreetmap_point";
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
final OpenstreetmapPoint poi = (OpenstreetmapPoint) getArguments().getSerializable(OPENSTREETMAP_POINT);
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
View view = getActivity().getLayoutInflater().inflate(R.layout.send_poi_dialog, null);
|
||||||
|
final EditText messageEditText = (EditText) view.findViewById(R.id.messageEditText);
|
||||||
|
final EditText userNameEditText = (EditText) view.findViewById(R.id.userNameEditText);
|
||||||
|
final EditText passwordEditText = (EditText) view.findViewById(R.id.passwordEditText);
|
||||||
|
|
||||||
|
final OsmandSettings settings = ((MapActivity) getActivity()).getMyApplication().getSettings();
|
||||||
|
userNameEditText.setText(settings.USER_NAME.get());
|
||||||
|
passwordEditText.setText(settings.USER_PASSWORD.get());
|
||||||
|
builder.setTitle(R.string.commit_poi)
|
||||||
|
.setView(view)
|
||||||
|
.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
settings.USER_NAME.set(userNameEditText.getText().toString());
|
||||||
|
settings.USER_PASSWORD.set(passwordEditText.getText().toString());
|
||||||
|
poi.setComment(messageEditText.getText().toString());
|
||||||
|
((DashOsmEditsFragment) getParentFragment()).showProgressDialog(poi);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.shared_string_cancel, null);
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SendPoiDialogFragment createInstance(OpenstreetmapPoint poi) {
|
||||||
|
SendPoiDialogFragment fragment = new SendPoiDialogFragment();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putSerializable(OPENSTREETMAP_POINT, poi);
|
||||||
|
fragment.setArguments(bundle);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,28 +2,56 @@ package net.osmand.plus.osmedit;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.design.widget.TabLayout;
|
import android.support.design.widget.TabLayout;
|
||||||
|
import android.support.design.widget.TextInputLayout;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.app.FragmentPagerAdapter;
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
import android.support.v4.view.ViewCompat;
|
import android.support.v4.view.ViewCompat;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.TextWatcher;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.AutoCompleteTextView;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import net.osmand.access.AccessibleToast;
|
||||||
import net.osmand.data.Amenity;
|
import net.osmand.data.Amenity;
|
||||||
|
import net.osmand.osm.PoiType;
|
||||||
|
import net.osmand.osm.edit.EntityInfo;
|
||||||
import net.osmand.osm.edit.Node;
|
import net.osmand.osm.edit.Node;
|
||||||
|
import net.osmand.osm.edit.OSMSettings;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.OsmandPlugin;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.osmedit.data.EditPoiData;
|
||||||
|
import net.osmand.plus.osmedit.data.Tag;
|
||||||
|
import net.osmand.plus.osmedit.dialogs.PoiSubTypeDialogFragment;
|
||||||
|
import net.osmand.plus.osmedit.dialogs.PoiTypeDialogFragment;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.text.MessageFormat;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class EditPoiFragment extends Fragment {
|
public class EditPoiFragment extends Fragment {
|
||||||
public static final String TAG = "EditPoiFragment";
|
public static final String TAG = "EditPoiFragment";
|
||||||
|
@ -34,27 +62,42 @@ public class EditPoiFragment extends Fragment {
|
||||||
|
|
||||||
private final EditPoiData editPoiData = new EditPoiData();
|
private final EditPoiData editPoiData = new EditPoiData();
|
||||||
private ViewPager viewPager;
|
private ViewPager viewPager;
|
||||||
|
private boolean isLocalEdit;
|
||||||
|
private boolean mIsUserInput = true;
|
||||||
|
private EditText poiNameEditText;
|
||||||
|
private EditPoiData.TagsChangedListener mTagsChangedListener;
|
||||||
|
private AutoCompleteTextView poiTypeEditText;
|
||||||
|
private Node node;
|
||||||
|
private Map<String, PoiType> allTranslatedSubTypes;
|
||||||
|
public static final String POI_TYPE_TAG = "poi_type_tag";
|
||||||
|
private OpenstreetmapUtil openstreetmapUtil;
|
||||||
|
private TextInputLayout poiTypeTextInputLayout;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity) {
|
public void onAttach(Activity activity) {
|
||||||
super.onAttach(activity);
|
super.onAttach(activity);
|
||||||
// poiTypes = ((OsmandApplication) activity.getApplication()).getPoiTypes();
|
// poiTypes = ((OsmandApplication) activity.getApplication()).getPoiTypes();
|
||||||
// allTranslatedSubTypes = poiTypes.getAllTranslatedNames();
|
// allTranslatedSubTypes = poiTypes.getAllTranslatedNames();
|
||||||
// OsmandSettings settings = ((OsmandApplication) activity.getApplication()).getSettings();
|
OsmandSettings settings = ((OsmandApplication) activity.getApplication()).getSettings();
|
||||||
// editPoiData.isLocalEdit = true;
|
// editPoiData.isLocalEdit = true;
|
||||||
// if (settings.OFFLINE_EDITION.get() || !settings.isInternetConnectionAvailable(true)) {
|
OsmEditingPlugin plugin = (OsmEditingPlugin) OsmandPlugin.getPlugin(OsmEditingPlugin.class);
|
||||||
// openstreetmapUtil = new OpenstreetmapLocalUtil(plugin, activity);
|
if (settings.OFFLINE_EDITION.get() || !settings.isInternetConnectionAvailable(true)) {
|
||||||
|
openstreetmapUtil = new OpenstreetmapLocalUtil(plugin, activity);
|
||||||
// openstreetmapUtilToLoad = openstreetmapUtil;
|
// openstreetmapUtilToLoad = openstreetmapUtil;
|
||||||
// } else if(!settings.isInternetConnectionAvailable(true)) {
|
} else if (!settings.isInternetConnectionAvailable(true)) {
|
||||||
// openstreetmapUtil = new OpenstreetmapLocalUtil(plugin, activity);
|
openstreetmapUtil = new OpenstreetmapLocalUtil(plugin, activity);
|
||||||
// openstreetmapUtilToLoad = new OpenstreetmapRemoteUtil(activity);
|
// openstreetmapUtilToLoad = new OpenstreetmapRemoteUtil(activity);
|
||||||
// } else {
|
} else {
|
||||||
// editPoiData.isLocalEdit = false;
|
isLocalEdit = false;
|
||||||
// openstreetmapUtil = new OpenstreetmapRemoteUtil(activity);
|
openstreetmapUtil = new OpenstreetmapRemoteUtil(activity);
|
||||||
// openstreetmapUtilToLoad = openstreetmapUtil;
|
// openstreetmapUtilToLoad = openstreetmapUtil;
|
||||||
// }
|
}
|
||||||
|
|
||||||
// editPoiData.node = (Node) getArguments().getSerializable(KEY_AMENITY_NODE);
|
node = (Node) getArguments().getSerializable(KEY_AMENITY_NODE);
|
||||||
|
allTranslatedSubTypes = ((OsmandApplication) activity.getApplication()).getPoiTypes()
|
||||||
|
.getAllTranslatedNames();
|
||||||
|
// TODO implement normal name
|
||||||
|
editPoiData.amenity = (Amenity) getArguments().getSerializable(KEY_AMENITY);
|
||||||
// editPoiData.tags = new LinkedHashSet<>();
|
// editPoiData.tags = new LinkedHashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +157,144 @@ public class EditPoiFragment extends Fragment {
|
||||||
Uri.parse("https://wiki.openstreetmap.org/wiki/Map_Features")));
|
Uri.parse("https://wiki.openstreetmap.org/wiki/Map_Features")));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
ImageButton poiTypeButton = (ImageButton) view.findViewById(R.id.poiTypeButton);
|
||||||
|
poiTypeButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
DialogFragment fragment = PoiTypeDialogFragment.createInstance(editPoiData.amenity);
|
||||||
|
fragment.show(getChildFragmentManager(), "PoiTypeDialogFragment");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
poiNameEditText = (EditText) view.findViewById(R.id.poiNameEditText);
|
||||||
|
poiNameEditText.addTextChangedListener(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
final Tag tag = new Tag(OSMSettings.OSMTagKey.NAME.getValue(), s.toString());
|
||||||
|
if (mIsUserInput) {
|
||||||
|
getEditPoiData().tags.remove(tag);
|
||||||
|
getEditPoiData().tags.add(tag);
|
||||||
|
getEditPoiData().notifyDatasetChanged(mTagsChangedListener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
poiTypeTextInputLayout = (TextInputLayout) view.findViewById(R.id.poiTypeTextInputLayout);
|
||||||
|
poiTypeEditText = (AutoCompleteTextView) view.findViewById(R.id.poiTypeEditText);
|
||||||
|
poiTypeEditText.addTextChangedListener(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
final Tag tag = new Tag(POI_TYPE_TAG, s.toString());
|
||||||
|
if (mIsUserInput) {
|
||||||
|
getEditPoiData().tags.remove(tag);
|
||||||
|
getEditPoiData().tags.add(tag);
|
||||||
|
getEditPoiData().notifyDatasetChanged(mTagsChangedListener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
poiTypeEditText.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if(poiTypeEditText.getText().length() == 0 && editPoiData.amenity.getType() != null){
|
||||||
|
DialogFragment dialogFragment =
|
||||||
|
PoiSubTypeDialogFragment.createInstance(editPoiData.amenity);
|
||||||
|
dialogFragment.show(getChildFragmentManager(), "PoiSubTypeDialogFragment");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Button saveButton = (Button) view.findViewById(R.id.saveButton);
|
||||||
|
int saveButtonTextId = isLocalEdit ? R.string.shared_string_save :
|
||||||
|
R.string.default_buttons_commit;
|
||||||
|
saveButton.setText(saveButtonTextId);
|
||||||
|
saveButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
// TODO implement saving
|
||||||
|
OsmPoint.Action action = node.getId() == -1 ? OsmPoint.Action.CREATE : OsmPoint.Action.MODIFY;
|
||||||
|
String description = "";
|
||||||
|
Log.v(TAG, "tags=" + editPoiData.tags);
|
||||||
|
for (Tag tag : editPoiData.tags) {
|
||||||
|
if (tag.tag.equals(POI_TYPE_TAG)) {
|
||||||
|
if (allTranslatedSubTypes.get(tag.value) != null) {
|
||||||
|
PoiType pt = allTranslatedSubTypes.get(tag.value);
|
||||||
|
node.putTag(pt.getOsmTag(), pt.getOsmValue());
|
||||||
|
if (pt.getOsmTag2() != null) {
|
||||||
|
node.putTag(pt.getOsmTag2(), pt.getOsmValue2());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
node.putTag(editPoiData.amenity.getType().getDefaultTag(), tag.value);
|
||||||
|
}
|
||||||
|
// } else if (tag.tag.equals(OSMSettings.OSMTagKey.DESCRIPTION.getValue())) {
|
||||||
|
// description = tag.value;
|
||||||
|
} else {
|
||||||
|
if (tag.value.length() > 0) {
|
||||||
|
node.putTag(tag.tag, tag.value);
|
||||||
|
} else {
|
||||||
|
node.removeTag(tag.tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commitNode(action, node, openstreetmapUtil.getEntityInfo(),
|
||||||
|
"",
|
||||||
|
false,//closeChange.isSelected(),
|
||||||
|
new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isLocalEdit) {
|
||||||
|
AccessibleToast.makeText(
|
||||||
|
getActivity(),
|
||||||
|
R.string.osm_changes_added_to_local_edits,
|
||||||
|
Toast.LENGTH_LONG).show();
|
||||||
|
} else {
|
||||||
|
final String message = node.getId() == -1 ?
|
||||||
|
getResources().getString(R.string.poi_action_add)
|
||||||
|
: getResources().getString(R.string.poi_action_change);
|
||||||
|
|
||||||
|
AccessibleToast.makeText(
|
||||||
|
getActivity(),
|
||||||
|
MessageFormat.format(
|
||||||
|
getResources().getString(
|
||||||
|
R.string.poi_action_succeded_template), message),
|
||||||
|
Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
if (getActivity() instanceof MapActivity) {
|
||||||
|
((MapActivity) getActivity()).getMapView().refreshMap(true);
|
||||||
|
}
|
||||||
|
FragmentManager fragmentManager =
|
||||||
|
getActivity().getSupportFragmentManager();
|
||||||
|
fragmentManager.beginTransaction().remove(EditPoiFragment.this)
|
||||||
|
.commit();
|
||||||
|
fragmentManager.popBackStack();
|
||||||
|
}
|
||||||
|
}, getActivity());
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Button cancelButton = (Button) view.findViewById(R.id.cancelButton);
|
||||||
|
cancelButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
|
||||||
|
fragmentManager.beginTransaction().remove(EditPoiFragment.this).commit();
|
||||||
|
fragmentManager.popBackStack();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
@ -124,11 +305,18 @@ public class EditPoiFragment extends Fragment {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addOnPageChangeListener(ViewPager.OnPageChangeListener listener) {
|
public static EditPoiFragment createAddPoiInstance(double latitude, double longitude,
|
||||||
viewPager.addOnPageChangeListener(listener);
|
OsmandApplication application) {
|
||||||
|
Node node = new Node(latitude, longitude, -1);
|
||||||
|
Amenity amenity;
|
||||||
|
amenity = new Amenity();
|
||||||
|
amenity.setType(application.getPoiTypes().getOtherPoiCategory());
|
||||||
|
amenity.setSubType("");
|
||||||
|
amenity.setAdditionalInfo(OSMSettings.OSMTagKey.OPENING_HOURS.getValue(), "");
|
||||||
|
return createInstance(node, amenity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public EditPoiFragment createInstance(Node node, Amenity amenity) {
|
public static EditPoiFragment createInstance(Node node, Amenity amenity) {
|
||||||
EditPoiFragment editPoiFragment = new EditPoiFragment();
|
EditPoiFragment editPoiFragment = new EditPoiFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putSerializable(KEY_AMENITY_NODE, node);
|
args.putSerializable(KEY_AMENITY_NODE, node);
|
||||||
|
@ -141,8 +329,115 @@ public class EditPoiFragment extends Fragment {
|
||||||
return editPoiData;
|
return editPoiData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void send() {
|
public void setSubCategory(String subCategory) {
|
||||||
// TODO implement saving
|
poiTypeEditText.setText(subCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void commitNode(final OsmPoint.Action action,
|
||||||
|
final Node n,
|
||||||
|
final EntityInfo info,
|
||||||
|
final String comment,
|
||||||
|
final boolean closeChangeSet,
|
||||||
|
final Runnable successAction,
|
||||||
|
final Activity activity) {
|
||||||
|
if (info == null && OsmPoint.Action.CREATE != action) {
|
||||||
|
AccessibleToast.makeText(activity, activity.getResources().getString(R.string.poi_error_info_not_loaded), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
new AsyncTask<Void, Void, Node>() {
|
||||||
|
ProgressDialog progress;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
progress = ProgressDialog.show(activity, activity.getString(R.string.uploading), activity.getString(R.string.uploading_data));
|
||||||
|
super.onPreExecute();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Node doInBackground(Void... params) {
|
||||||
|
Node node = openstreetmapUtil.commitNodeImpl(action, n, info, comment, closeChangeSet);
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Node result) {
|
||||||
|
progress.dismiss();
|
||||||
|
if (result != null) {
|
||||||
|
successAction.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
;
|
||||||
|
}.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateType(Amenity amenity) {
|
||||||
|
// TODO implement
|
||||||
|
Log.v(TAG, "updateType(" + "amenity=" + amenity + ")");
|
||||||
|
mIsUserInput = false;
|
||||||
|
poiTypeEditText.setText(amenity.getSubType());
|
||||||
|
mIsUserInput = true;
|
||||||
|
poiTypeTextInputLayout.setHint(amenity.getType().getTranslation());
|
||||||
|
|
||||||
|
final Map<String, PoiType> subCategories = new LinkedHashMap<>();
|
||||||
|
for (Map.Entry<String, PoiType> s : allTranslatedSubTypes.entrySet()) {
|
||||||
|
if (!subCategories.containsKey(s.getKey())) {
|
||||||
|
subCategories.put(Algorithms.capitalizeFirstLetterAndLowercase(s.getKey()), s.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final ArrayAdapter<Object> adapter = new ArrayAdapter<>(getActivity(),
|
||||||
|
R.layout.list_textview, subCategories.keySet().toArray());
|
||||||
|
poiTypeEditText.setAdapter(adapter);
|
||||||
|
poiTypeEditText.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
Object item = parent.getAdapter().getItem(position);
|
||||||
|
if (subCategories.containsKey(item)) {
|
||||||
|
String keyName = subCategories.get(item).getKeyName();
|
||||||
|
poiTypeEditText.setText(keyName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNothingSelected(AdapterView<?> parent) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showEditInstance(final Amenity amenity, OsmandSettings settings,
|
||||||
|
final MapActivity mapActivity) {
|
||||||
|
final OpenstreetmapUtil openstreetmapUtilToLoad;
|
||||||
|
if (settings.OFFLINE_EDITION.get() || !settings.isInternetConnectionAvailable(true)) {
|
||||||
|
OsmEditingPlugin plugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class);
|
||||||
|
openstreetmapUtilToLoad = new OpenstreetmapLocalUtil(plugin, mapActivity);
|
||||||
|
} else if(!settings.isInternetConnectionAvailable(true)) {
|
||||||
|
openstreetmapUtilToLoad = new OpenstreetmapRemoteUtil(mapActivity);
|
||||||
|
} else {
|
||||||
|
openstreetmapUtilToLoad = new OpenstreetmapRemoteUtil(mapActivity);
|
||||||
|
}
|
||||||
|
new AsyncTask<Void, Void, Node>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Node doInBackground(Void... params) {
|
||||||
|
return openstreetmapUtilToLoad.loadNode((Amenity) amenity);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onPostExecute(Node n) {
|
||||||
|
if(n != null){
|
||||||
|
EditPoiFragment fragment =
|
||||||
|
EditPoiFragment.createInstance(n, (Amenity) amenity);
|
||||||
|
mapActivity.getSupportFragmentManager().beginTransaction()
|
||||||
|
.add(fragment, "EditPoiFragment").commit();
|
||||||
|
} else {
|
||||||
|
AccessibleToast.makeText(mapActivity,
|
||||||
|
mapActivity.getString(R.string.poi_error_poi_not_found),
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}.execute(new Void[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MyAdapter extends FragmentPagerAdapter {
|
public static class MyAdapter extends FragmentPagerAdapter {
|
||||||
|
@ -178,44 +473,4 @@ public class EditPoiFragment extends Fragment {
|
||||||
throw new IllegalArgumentException("Unexpected position");
|
throw new IllegalArgumentException("Unexpected position");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public static class EditPoiData {
|
|
||||||
// public boolean isLocalEdit;
|
|
||||||
// public Node node;
|
|
||||||
public LinkedHashSet<Tag> tags;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Tag implements Serializable {
|
|
||||||
public String tag;
|
|
||||||
public String value;
|
|
||||||
|
|
||||||
public Tag(String tag, String value) {
|
|
||||||
this.tag = tag;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
|
||||||
|
|
||||||
Tag tag1 = (Tag) o;
|
|
||||||
|
|
||||||
return tag.equals(tag1.tag);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return tag.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Tag{" +
|
|
||||||
"tag='" + tag + '\'' +
|
|
||||||
", value='" + value + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,22 +3,36 @@ package net.osmand.plus.osmedit;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.text.Editable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.text.TextWatcher;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
|
import net.osmand.osm.edit.OSMSettings;
|
||||||
import net.osmand.plus.IconsCache;
|
import net.osmand.plus.IconsCache;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.osmedit.EditPoiFragment.Tag;
|
import net.osmand.plus.osmedit.data.EditPoiData;
|
||||||
|
import net.osmand.plus.osmedit.data.Tag;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class NormalDataFragment extends Fragment {
|
public class NormalDataFragment extends Fragment {
|
||||||
|
private static final String TAG = "NormalDataFragment";
|
||||||
|
private EditText streetEditText;
|
||||||
|
private EditText houseNumberEditText;
|
||||||
|
private EditText phoneEditText;
|
||||||
|
private EditText webSiteEditText;
|
||||||
|
private EditText descriptionEditText;
|
||||||
|
private EditPoiData.TagsChangedListener mTagsChangedListener;
|
||||||
|
private boolean mIsUserInput = true;
|
||||||
|
private EditText openHoursEditText;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -35,66 +49,126 @@ public class NormalDataFragment extends Fragment {
|
||||||
webSiteImageView.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_world_globe_dark));
|
webSiteImageView.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_world_globe_dark));
|
||||||
ImageView descriptionImageView = (ImageView) view.findViewById(R.id.descriptionImageView);
|
ImageView descriptionImageView = (ImageView) view.findViewById(R.id.descriptionImageView);
|
||||||
descriptionImageView.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_action_description));
|
descriptionImageView.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_action_description));
|
||||||
|
ImageView openHoursImageView = (ImageView) view.findViewById(R.id.openHoursImageView);
|
||||||
|
openHoursImageView.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_action_time));
|
||||||
|
|
||||||
// TODO replace with constants
|
streetEditText = (EditText) view.findViewById(R.id.streetEditText);
|
||||||
final TextView streetEditText = (TextView) view.findViewById(R.id.streetEditText);
|
streetEditText.addTextChangedListener(new MyOnFocusChangeListener(getData(),
|
||||||
streetEditText.setOnFocusChangeListener(new MyOnFocusChangeListener(getData(), "addr:street"));
|
OSMSettings.OSMTagKey.ADDR_STREET.getValue()));
|
||||||
final TextView houseNumberEditText = (TextView) view.findViewById(R.id.houseNumberEditText);
|
houseNumberEditText = (EditText) view.findViewById(R.id.houseNumberEditText);
|
||||||
houseNumberEditText.setOnFocusChangeListener(new MyOnFocusChangeListener(getData(), "addr:housenumber"));
|
houseNumberEditText.addTextChangedListener(new MyOnFocusChangeListener(getData(),
|
||||||
final TextView phoneEditText = (TextView) view.findViewById(R.id.phoneEditText);
|
OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER.getValue()));
|
||||||
phoneEditText.setOnFocusChangeListener(new MyOnFocusChangeListener(getData(), "phone"));
|
phoneEditText = (EditText) view.findViewById(R.id.phoneEditText);
|
||||||
final TextView webSiteEditText = (TextView) view.findViewById(R.id.webSiteEditText);
|
phoneEditText.addTextChangedListener(new MyOnFocusChangeListener(getData(),
|
||||||
webSiteEditText.setOnFocusChangeListener(new MyOnFocusChangeListener(getData(), "website"));
|
OSMSettings.OSMTagKey.PHONE.getValue()));
|
||||||
final TextView descriptionEditText = (TextView) view.findViewById(R.id.descriptionEditText);
|
webSiteEditText = (EditText) view.findViewById(R.id.webSiteEditText);
|
||||||
descriptionEditText.setOnFocusChangeListener(new MyOnFocusChangeListener(getData(), "description"));
|
webSiteEditText.addTextChangedListener(new MyOnFocusChangeListener(getData(),
|
||||||
|
OSMSettings.OSMTagKey.WEBSITE.getValue()));
|
||||||
|
descriptionEditText = (EditText) view.findViewById(R.id.descriptionEditText);
|
||||||
|
descriptionEditText.addTextChangedListener(new MyOnFocusChangeListener(getData(),
|
||||||
|
OSMSettings.OSMTagKey.DESCRIPTION.getValue()));
|
||||||
|
openHoursEditText = (EditText) view.findViewById(R.id.openHoursEditText);
|
||||||
|
openHoursEditText.addTextChangedListener(new MyOnFocusChangeListener(getData(),
|
||||||
|
OSMSettings.OSMTagKey.OPENING_HOURS.getValue()));
|
||||||
|
|
||||||
Button saveButton = (Button) view.findViewById(R.id.saveButton);
|
|
||||||
int saveButtonTextId = //getData().isLocalEdit ? R.string.shared_string_save :
|
|
||||||
R.string.default_buttons_commit;
|
|
||||||
saveButton.setText(saveButtonTextId);
|
|
||||||
saveButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
getEditPoiFragment().send();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Button cancelButton = (Button) view.findViewById(R.id.cancelButton);
|
|
||||||
cancelButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
|
|
||||||
Fragment editPoiFragment = getParentFragment();
|
|
||||||
fragmentManager.beginTransaction().remove(editPoiFragment).commit();
|
|
||||||
fragmentManager.popBackStack();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
mTagsChangedListener = new EditPoiData.TagsChangedListener() {
|
||||||
|
@Override
|
||||||
|
public void onTagsChanged() {
|
||||||
|
TagMapProcessor tagMapProcessor = new TagMapProcessor();
|
||||||
|
tagMapProcessor.addFilter(OSMSettings.OSMTagKey.ADDR_STREET.getValue(),
|
||||||
|
streetEditText);
|
||||||
|
tagMapProcessor.addFilter(OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER.getValue(),
|
||||||
|
houseNumberEditText);
|
||||||
|
tagMapProcessor.addFilter(OSMSettings.OSMTagKey.PHONE.getValue(),
|
||||||
|
phoneEditText);
|
||||||
|
tagMapProcessor.addFilter(OSMSettings.OSMTagKey.WEBSITE.getValue(),
|
||||||
|
webSiteEditText);
|
||||||
|
tagMapProcessor.addFilter(OSMSettings.OSMTagKey.DESCRIPTION.getValue(),
|
||||||
|
descriptionEditText);
|
||||||
|
tagMapProcessor.addFilter(OSMSettings.OSMTagKey.OPENING_HOURS.getValue(),
|
||||||
|
openHoursEditText);
|
||||||
|
|
||||||
|
mIsUserInput = false;
|
||||||
|
for (Tag tag : getData().tags) {
|
||||||
|
tagMapProcessor.process(tag);
|
||||||
|
}
|
||||||
|
tagMapProcessor.clearEmptyFields();
|
||||||
|
mIsUserInput = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
getData().addListener(mTagsChangedListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
getData().deleteListener(mTagsChangedListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class TagMapProcessor {
|
||||||
|
private final Map<String, EditText> mFilters = new HashMap<>();
|
||||||
|
|
||||||
|
public void addFilter(String tag, EditText editText) {
|
||||||
|
mFilters.put(tag, editText);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void process(Tag tag) {
|
||||||
|
if (mFilters.containsKey(tag.tag)) {
|
||||||
|
final EditText editText = mFilters.get(tag.tag);
|
||||||
|
editText.setText(tag.value);
|
||||||
|
mFilters.remove(tag.tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearEmptyFields() {
|
||||||
|
for (String tag : mFilters.keySet()) {
|
||||||
|
mFilters.get(tag).setText(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private EditPoiFragment getEditPoiFragment() {
|
private EditPoiFragment getEditPoiFragment() {
|
||||||
return (EditPoiFragment) getParentFragment();
|
return (EditPoiFragment) getParentFragment();
|
||||||
}
|
}
|
||||||
|
|
||||||
private EditPoiFragment.EditPoiData getData() {
|
private EditPoiData getData() {
|
||||||
return getEditPoiFragment().getEditPoiData();
|
return getEditPoiFragment().getEditPoiData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class MyOnFocusChangeListener implements View.OnFocusChangeListener {
|
private class MyOnFocusChangeListener implements TextWatcher {
|
||||||
private EditPoiFragment.EditPoiData data;
|
private final EditPoiData data;
|
||||||
private String tagName;
|
private final String tagName;
|
||||||
|
|
||||||
public MyOnFocusChangeListener(EditPoiFragment.EditPoiData data, String tagName) {
|
public MyOnFocusChangeListener(EditPoiData data,
|
||||||
|
String tagName) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.tagName = tagName;
|
this.tagName = tagName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFocusChange(View v, boolean hasFocus) {
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
String string = ((EditText) v).getText().toString();
|
}
|
||||||
if (!TextUtils.isEmpty(string)) {
|
|
||||||
Tag tag = new Tag(tagName, string);
|
@Override
|
||||||
data.tags.remove(tag);
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
data.tags.add(tag);
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
if (mIsUserInput) {
|
||||||
|
String string = s.toString();
|
||||||
|
if (!TextUtils.isEmpty(string)) {
|
||||||
|
Tag tag = new Tag(tagName, string);
|
||||||
|
data.tags.remove(tag);
|
||||||
|
data.tags.add(tag);
|
||||||
|
data.notifyDatasetChanged(mTagsChangedListener);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import net.osmand.plus.Version;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
import org.xmlpull.v1.XmlSerializer;
|
import org.xmlpull.v1.XmlSerializer;
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,20 @@
|
||||||
package net.osmand.plus.osmedit;
|
package net.osmand.plus.osmedit;
|
||||||
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import android.app.AlertDialog;
|
||||||
import java.io.IOException;
|
import android.app.AlertDialog.Builder;
|
||||||
import java.io.InputStreamReader;
|
import android.app.Dialog;
|
||||||
import java.io.Serializable;
|
import android.content.DialogInterface;
|
||||||
import java.net.URLConnection;
|
import android.graphics.Canvas;
|
||||||
import java.util.ArrayList;
|
import android.graphics.Paint;
|
||||||
import java.util.List;
|
import android.graphics.PointF;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Xml;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
@ -33,20 +40,13 @@ import org.apache.commons.logging.Log;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import java.io.BufferedReader;
|
||||||
import android.app.AlertDialog.Builder;
|
import java.io.IOException;
|
||||||
import android.app.Dialog;
|
import java.io.InputStreamReader;
|
||||||
import android.content.DialogInterface;
|
import java.io.Serializable;
|
||||||
import android.graphics.Canvas;
|
import java.net.URLConnection;
|
||||||
import android.graphics.Paint;
|
import java.util.ArrayList;
|
||||||
import android.graphics.PointF;
|
import java.util.List;
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Xml;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider, DialogProvider {
|
public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider, DialogProvider {
|
||||||
|
|
||||||
|
@ -333,8 +333,8 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareOpenBugDialog(Dialog dlg, Bundle args) {
|
private void prepareOpenBugDialog(Dialog dlg, Bundle args) {
|
||||||
((EditText)dlg.findViewById(R.id.BugMessage)).setText(args.getString(KEY_MESSAGE));
|
((EditText)dlg.findViewById(R.id.messageEditText)).setText(args.getString(KEY_MESSAGE));
|
||||||
((EditText)dlg.findViewById(R.id.AuthorName)).setText(args.getString(KEY_AUTHOR));
|
((EditText)dlg.findViewById(R.id.userNameEditText)).setText(args.getString(KEY_AUTHOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dialog createOpenBugDialog(final Bundle args) {
|
private Dialog createOpenBugDialog(final Bundle args) {
|
||||||
|
@ -343,9 +343,9 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
builder.setTitle(R.string.osb_add_dialog_title);
|
builder.setTitle(R.string.osb_add_dialog_title);
|
||||||
builder.setView(openBug);
|
builder.setView(openBug);
|
||||||
builder.setNegativeButton(R.string.shared_string_cancel, null);
|
builder.setNegativeButton(R.string.shared_string_cancel, null);
|
||||||
((EditText)openBug.findViewById(R.id.Password)).setText(((OsmandApplication) activity.getApplication()).getSettings().USER_PASSWORD.get());
|
((EditText)openBug.findViewById(R.id.passwordEditText)).setText(((OsmandApplication) activity.getApplication()).getSettings().USER_PASSWORD.get());
|
||||||
((EditText)openBug.findViewById(R.id.AuthorName)).setText(getUserName());
|
((EditText)openBug.findViewById(R.id.userNameEditText)).setText(getUserName());
|
||||||
AndroidUtils.softKeyboardDelayed((EditText)openBug.findViewById(R.id.BugMessage));
|
AndroidUtils.softKeyboardDelayed((EditText)openBug.findViewById(R.id.messageEditText));
|
||||||
builder.setPositiveButton(R.string.shared_string_add, new DialogInterface.OnClickListener() {
|
builder.setPositiveButton(R.string.shared_string_add, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
@ -426,9 +426,9 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
builder.setTitle(R.string.osb_comment_dialog_title);
|
builder.setTitle(R.string.osb_comment_dialog_title);
|
||||||
final View view = activity.getLayoutInflater().inflate(R.layout.open_bug, null);
|
final View view = activity.getLayoutInflater().inflate(R.layout.open_bug, null);
|
||||||
builder.setView(view);
|
builder.setView(view);
|
||||||
((EditText)view.findViewById(R.id.AuthorName)).setText(getUserName());
|
((EditText)view.findViewById(R.id.userNameEditText)).setText(getUserName());
|
||||||
((EditText)view.findViewById(R.id.Password)).setText(((OsmandApplication) activity.getApplication()).getSettings().USER_PASSWORD.get());
|
((EditText)view.findViewById(R.id.passwordEditText)).setText(((OsmandApplication) activity.getApplication()).getSettings().USER_PASSWORD.get());
|
||||||
AndroidUtils.softKeyboardDelayed((EditText)view.findViewById(R.id.BugMessage));
|
AndroidUtils.softKeyboardDelayed((EditText)view.findViewById(R.id.messageEditText));
|
||||||
builder.setNegativeButton(R.string.shared_string_cancel, null);
|
builder.setNegativeButton(R.string.shared_string_cancel, null);
|
||||||
builder.setPositiveButton(R.string.osb_comment_dialog_add_button, new DialogInterface.OnClickListener() {
|
builder.setPositiveButton(R.string.osb_comment_dialog_add_button, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -446,9 +446,9 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getTextAndUpdateUserPwd(final View view) {
|
private String getTextAndUpdateUserPwd(final View view) {
|
||||||
String text = ((EditText)view.findViewById(R.id.BugMessage)).getText().toString();
|
String text = ((EditText)view.findViewById(R.id.messageEditText)).getText().toString();
|
||||||
String author = ((EditText)view.findViewById(R.id.AuthorName)).getText().toString();
|
String author = ((EditText)view.findViewById(R.id.userNameEditText)).getText().toString();
|
||||||
String pwd = ((EditText)view.findViewById(R.id.Password)).getText().toString();
|
String pwd = ((EditText)view.findViewById(R.id.passwordEditText)).getText().toString();
|
||||||
((OsmandApplication) OsmBugsLayer.this.activity.getApplication()).getSettings().USER_NAME.set(author);
|
((OsmandApplication) OsmBugsLayer.this.activity.getApplication()).getSettings().USER_NAME.set(author);
|
||||||
((OsmandApplication) OsmBugsLayer.this.activity.getApplication()).getSettings().USER_PASSWORD.set(pwd);
|
((OsmandApplication) OsmBugsLayer.this.activity.getApplication()).getSettings().USER_PASSWORD.set(pwd);
|
||||||
return text;
|
return text;
|
||||||
|
@ -583,7 +583,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
public void onPrepareDialog(int id, Dialog dialog) {
|
public void onPrepareDialog(int id, Dialog dialog) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case DIALOG_COMMENT_BUG:
|
case DIALOG_COMMENT_BUG:
|
||||||
((EditText)dialog.findViewById(R.id.BugMessage)).setText("");
|
((EditText)dialog.findViewById(R.id.messageEditText)).setText("");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,10 @@ public class OsmEditingPlugin extends OsmandPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerMapContextMenuActions(final MapActivity mapActivity, final double latitude, final double longitude, ContextMenuAdapter adapter,
|
public void registerMapContextMenuActions(final MapActivity mapActivity,
|
||||||
|
final double latitude,
|
||||||
|
final double longitude,
|
||||||
|
ContextMenuAdapter adapter,
|
||||||
final Object selectedObj) {
|
final Object selectedObj) {
|
||||||
OnContextMenuClick listener = new OnContextMenuClick() {
|
OnContextMenuClick listener = new OnContextMenuClick() {
|
||||||
@Override
|
@Override
|
||||||
|
|
31
OsmAnd/src/net/osmand/plus/osmedit/data/EditPoiData.java
Normal file
31
OsmAnd/src/net/osmand/plus/osmedit/data/EditPoiData.java
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package net.osmand.plus.osmedit.data;
|
||||||
|
|
||||||
|
import net.osmand.data.Amenity;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class EditPoiData {
|
||||||
|
private Set<TagsChangedListener> mListeners = new HashSet<>();
|
||||||
|
public LinkedHashSet<Tag> tags;
|
||||||
|
public Amenity amenity;
|
||||||
|
|
||||||
|
public void notifyDatasetChanged(TagsChangedListener listenerToSkip) {
|
||||||
|
for (TagsChangedListener listener : mListeners) {
|
||||||
|
if (listener != listenerToSkip) listener.onTagsChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addListener(TagsChangedListener listener) {
|
||||||
|
mListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteListener(TagsChangedListener listener) {
|
||||||
|
mListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface TagsChangedListener {
|
||||||
|
void onTagsChanged();
|
||||||
|
}
|
||||||
|
}
|
34
OsmAnd/src/net/osmand/plus/osmedit/data/Tag.java
Normal file
34
OsmAnd/src/net/osmand/plus/osmedit/data/Tag.java
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
package net.osmand.plus.osmedit.data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class Tag implements Serializable {
|
||||||
|
public String tag;
|
||||||
|
public String value;
|
||||||
|
|
||||||
|
public Tag(String tag, String value) {
|
||||||
|
this.tag = tag;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Tag tag1 = (Tag) o;
|
||||||
|
return tag.equals(tag1.tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return tag.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Tag{" +
|
||||||
|
"tag='" + tag + '\'' +
|
||||||
|
", value='" + value + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package net.osmand.plus.osmedit.dialogs;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
|
|
||||||
|
import net.osmand.data.Amenity;
|
||||||
|
import net.osmand.osm.MapPoiTypes;
|
||||||
|
import net.osmand.osm.PoiType;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.osmedit.EditPoiFragment;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class PoiSubTypeDialogFragment extends DialogFragment {
|
||||||
|
private static final String KEY_AMENITY = "amenity";
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
MapPoiTypes poiTypes = ((OsmandApplication) getActivity().getApplication()).getPoiTypes();
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
final Amenity a = (Amenity) getArguments().getSerializable(KEY_AMENITY);
|
||||||
|
final Map<String, PoiType> allTranslatedNames = poiTypes.getAllTranslatedNames(a.getType(), true);
|
||||||
|
// (=^.^=)
|
||||||
|
final String[] subCats = allTranslatedNames.keySet().toArray(new String[0]);
|
||||||
|
builder.setItems(subCats, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
((EditPoiFragment) getParentFragment()).setSubCategory(subCats[which]);
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PoiSubTypeDialogFragment createInstance(Amenity amenity) {
|
||||||
|
PoiSubTypeDialogFragment fragment = new PoiSubTypeDialogFragment();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putSerializable(KEY_AMENITY, amenity);
|
||||||
|
fragment.setArguments(args);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package net.osmand.plus.osmedit.dialogs;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
|
|
||||||
|
import net.osmand.data.Amenity;
|
||||||
|
import net.osmand.osm.MapPoiTypes;
|
||||||
|
import net.osmand.osm.PoiCategory;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.osmedit.EditPoiFragment;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PoiTypeDialogFragment extends DialogFragment {
|
||||||
|
private static final String KEY_AMENITY = "amenity";
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
MapPoiTypes poiTypes = ((OsmandApplication) getActivity().getApplication()).getPoiTypes();
|
||||||
|
final Amenity amenity = (Amenity) getArguments().getSerializable(KEY_AMENITY);
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
final List<PoiCategory> categories = poiTypes.getCategories(false);
|
||||||
|
String[] vals = new String[categories.size()];
|
||||||
|
for (int i = 0; i < vals.length; i++) {
|
||||||
|
vals[i] = categories.get(i).getTranslation();
|
||||||
|
}
|
||||||
|
builder.setItems(vals, new Dialog.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
PoiCategory aType = categories.get(which);
|
||||||
|
if (aType != amenity.getType()) {
|
||||||
|
amenity.setType(aType);
|
||||||
|
amenity.setSubType(""); //$NON-NLS-1$
|
||||||
|
((EditPoiFragment) getParentFragment()).updateType(amenity);
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PoiTypeDialogFragment createInstance(Amenity amenity) {
|
||||||
|
PoiTypeDialogFragment poiTypeDialogFragment = new PoiTypeDialogFragment();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putSerializable(KEY_AMENITY, amenity);
|
||||||
|
poiTypeDialogFragment.setArguments(args);
|
||||||
|
return poiTypeDialogFragment;
|
||||||
|
}
|
||||||
|
}
|
BIN
recyclerview/libs/android-support-v7-recyclerview.jar
Normal file
BIN
recyclerview/libs/android-support-v7-recyclerview.jar
Normal file
Binary file not shown.
19
recyclerview/src/main/AndroidManifest.xml
Normal file
19
recyclerview/src/main/AndroidManifest.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2013 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="android.support.v7.recyclerview">
|
||||||
|
<uses-sdk android:minSdkVersion="7"/>
|
||||||
|
</manifest>
|
40
recyclerview/src/main/res/values/attrs.xml
Normal file
40
recyclerview/src/main/res/values/attrs.xml
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2015 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<declare-styleable name="RecyclerView">
|
||||||
|
<!-- Class name of the Layout Manager to be used.
|
||||||
|
<p/>
|
||||||
|
The class must extend android.support.v7.widget.RecyclerView$LayoutManager
|
||||||
|
and have either a default constructor or constructor with the signature
|
||||||
|
(android.content.Context, android.util.AttributeSet, int, int).
|
||||||
|
<p/>
|
||||||
|
If the name starts with a '.', application package is prefixed.
|
||||||
|
Else, if the name contains a '.', the classname is assumed to be a full class name.
|
||||||
|
Else, the recycler view package name (android.support.v7.widget) is prefixed. -->
|
||||||
|
<attr name="layoutManager" format="string" />
|
||||||
|
|
||||||
|
<!-- ============================= -->
|
||||||
|
<!-- Attributes for Layout Manager -->
|
||||||
|
<!-- ============================= -->
|
||||||
|
<eat-comment />
|
||||||
|
|
||||||
|
<attr name="android:orientation" />
|
||||||
|
<attr name="spanCount" format="integer"/>
|
||||||
|
<attr name="reverseLayout" format="boolean" />
|
||||||
|
<attr name="stackFromEnd" format="boolean" />
|
||||||
|
</declare-styleable>
|
||||||
|
</resources>
|
22
recyclerview/src/main/res/values/dimens.xml
Normal file
22
recyclerview/src/main/res/values/dimens.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (C) 2015 The Android Open Source Project
|
||||||
|
~
|
||||||
|
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
~ you may not use this file except in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
~ See the License for the specific language governing permissions and
|
||||||
|
~ limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<!-- The max amount of scroll ItemTouchHelper will trigger if dragged view is out of
|
||||||
|
RecyclerView's bounds.-->
|
||||||
|
<dimen name="item_touch_helper_max_drag_scroll_per_frame">20dp</dimen>
|
||||||
|
</resources>
|
19
recyclerview/src/main/res/values/ids.xml
Normal file
19
recyclerview/src/main/res/values/ids.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2015 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<resources>
|
||||||
|
<!-- ItemTouchHelper uses this id to save a View's original elevation. -->
|
||||||
|
<item type="id" name="item_touch_helper_previous_elevation"/>
|
||||||
|
</resources>
|
Loading…
Reference in a new issue