avoid roads, refactor, corrections
This commit is contained in:
parent
a685cf4637
commit
321aa96846
13 changed files with 173 additions and 53 deletions
|
@ -46,8 +46,7 @@
|
||||||
android:paddingBottom="@dimen/list_header_settings_top_margin"
|
android:paddingBottom="@dimen/list_header_settings_top_margin"
|
||||||
android:text="@string/select_data_to_import"
|
android:text="@string/select_data_to_import"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size" />
|
||||||
osmand:typeface="@string/font_roboto_medium" />
|
|
||||||
|
|
||||||
<include layout="@layout/card_bottom_divider" />
|
<include layout="@layout/card_bottom_divider" />
|
||||||
|
|
||||||
|
@ -62,7 +61,7 @@
|
||||||
android:groupIndicator="@android:color/transparent"
|
android:groupIndicator="@android:color/transparent"
|
||||||
android:listSelector="@android:color/transparent" />
|
android:listSelector="@android:color/transparent" />
|
||||||
|
|
||||||
<include layout="@layout/card_top_divider" />
|
<include layout="@layout/divider" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/buttons_container"
|
android:id="@+id/buttons_container"
|
||||||
|
|
|
@ -44,8 +44,7 @@
|
||||||
android:paddingBottom="@dimen/list_header_settings_top_margin"
|
android:paddingBottom="@dimen/list_header_settings_top_margin"
|
||||||
android:text="@string/import_duplicates_description"
|
android:text="@string/import_duplicates_description"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size" />
|
||||||
osmand:typeface="@string/font_roboto_medium" />
|
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/description_divider"
|
android:id="@+id/description_divider"
|
||||||
|
@ -57,8 +56,7 @@
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1" />
|
android:layout_weight="1" />
|
||||||
|
|
||||||
<include
|
<include layout="@layout/divider" />
|
||||||
layout="@layout/card_top_divider" />
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
|
android:minHeight="@dimen/setting_list_item_small_height"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/bg_color"
|
android:background="?attr/bg_color"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical">
|
||||||
android:minHeight="66dp">
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/icon"
|
android:id="@+id/icon"
|
||||||
|
@ -23,12 +23,16 @@
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical"
|
||||||
|
android:paddingTop="@dimen/content_padding_small"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size"
|
||||||
tools:text="OffRoad" />
|
tools:text="OffRoad" />
|
||||||
|
@ -37,6 +41,8 @@
|
||||||
android:id="@+id/sub_title"
|
android:id="@+id/sub_title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
android:textSize="@dimen/default_desc_text_size"
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
tools:text="Navigation type: Car" />
|
tools:text="Navigation type: Car" />
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
|
android:minHeight="@dimen/setting_list_item_small_height"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
@ -15,8 +16,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical">
|
||||||
android:minHeight="66dp">
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/icon"
|
android:id="@+id/icon"
|
||||||
|
@ -30,12 +30,16 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical"
|
||||||
|
android:paddingTop="@dimen/content_padding_small"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/title_tv"
|
android:id="@+id/title_tv"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size"
|
||||||
tools:text="Quick actions" />
|
tools:text="Quick actions" />
|
||||||
|
@ -44,6 +48,8 @@
|
||||||
android:id="@+id/sub_title_tv"
|
android:id="@+id/sub_title_tv"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
android:textSize="@dimen/default_desc_text_size"
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
|
|
@ -353,5 +353,6 @@
|
||||||
<dimen name="setting_profile_item_switch_margin">18dp</dimen>
|
<dimen name="setting_profile_item_switch_margin">18dp</dimen>
|
||||||
<dimen name="settings_divider_margin_start">72dp</dimen>
|
<dimen name="settings_divider_margin_start">72dp</dimen>
|
||||||
<dimen name="setting_list_item_large_height">72dp</dimen>
|
<dimen name="setting_list_item_large_height">72dp</dimen>
|
||||||
|
<dimen name="setting_list_item_small_height">42dp</dimen>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -72,7 +72,7 @@
|
||||||
<string name="sunset_at">Sunset at %1$s</string>
|
<string name="sunset_at">Sunset at %1$s</string>
|
||||||
<string name="sunrise_at">Sunrise at %1$s</string>
|
<string name="sunrise_at">Sunrise at %1$s</string>
|
||||||
<string name="shared_string_routing">Routing</string>
|
<string name="shared_string_routing">Routing</string>
|
||||||
<string name="shared_string_custom_rendering_style">Custom rendering style</string>
|
<string name="shared_string_custom_rendering_style">Rendering styles</string>
|
||||||
<string name="shared_string_include_data">Include additional data</string>
|
<string name="shared_string_include_data">Include additional data</string>
|
||||||
<string name="import_profile_dialog_description">The imported profile contains additional data. Click Import to import only profile data or select additional data to import.</string>
|
<string name="import_profile_dialog_description">The imported profile contains additional data. Click Import to import only profile data or select additional data to import.</string>
|
||||||
<string name="export_profile_dialog_description">You can select additional data to export along with the profile.</string>
|
<string name="export_profile_dialog_description">You can select additional data to export along with the profile.</string>
|
||||||
|
|
|
@ -805,7 +805,7 @@ public class SettingsHelper {
|
||||||
@Override
|
@Override
|
||||||
public void readFromStream(@NonNull InputStream inputStream) throws IOException, IllegalArgumentException {
|
public void readFromStream(@NonNull InputStream inputStream) throws IOException, IllegalArgumentException {
|
||||||
OutputStream output;
|
OutputStream output;
|
||||||
if (shouldReplace || !file.exists()) {
|
if (!file.exists() || file.exists() && shouldReplace) {
|
||||||
output = new FileOutputStream(file);
|
output = new FileOutputStream(file);
|
||||||
} else {
|
} else {
|
||||||
output = new FileOutputStream(renameFile(file));
|
output = new FileOutputStream(renameFile(file));
|
||||||
|
@ -847,6 +847,7 @@ public class SettingsHelper {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
actionRegistry = app.getQuickActionRegistry();
|
actionRegistry = app.getQuickActionRegistry();
|
||||||
existingItems = actionRegistry.getQuickActions();
|
existingItems = actionRegistry.getQuickActions();
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
QuickActionSettingsItem(@NonNull OsmandApplication app,
|
QuickActionSettingsItem(@NonNull OsmandApplication app,
|
||||||
|
@ -855,6 +856,7 @@ public class SettingsHelper {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
actionRegistry = app.getQuickActionRegistry();
|
actionRegistry = app.getQuickActionRegistry();
|
||||||
existingItems = actionRegistry.getQuickActions();
|
existingItems = actionRegistry.getQuickActions();
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -871,7 +873,6 @@ public class SettingsHelper {
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public List<QuickAction> excludeDuplicateItems() {
|
public List<QuickAction> excludeDuplicateItems() {
|
||||||
duplicateItems = new ArrayList<>();
|
|
||||||
for (QuickAction item : items) {
|
for (QuickAction item : items) {
|
||||||
if (isDuplicate(item)) {
|
if (isDuplicate(item)) {
|
||||||
duplicateItems.add(item);
|
duplicateItems.add(item);
|
||||||
|
@ -1026,12 +1027,14 @@ public class SettingsHelper {
|
||||||
super(SettingsItemType.POI_UI_FILTERS, items);
|
super(SettingsItemType.POI_UI_FILTERS, items);
|
||||||
this.app = app;
|
this.app = app;
|
||||||
existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false);
|
existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false);
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
PoiUiFilterSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
PoiUiFilterSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
||||||
super(SettingsItemType.POI_UI_FILTERS, json);
|
super(SettingsItemType.POI_UI_FILTERS, json);
|
||||||
this.app = app;
|
this.app = app;
|
||||||
existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false);
|
existingItems = app.getPoiFilters().getUserDefinedPoiFilters(false);
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1061,7 +1064,6 @@ public class SettingsHelper {
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public List<PoiUIFilter> excludeDuplicateItems() {
|
public List<PoiUIFilter> excludeDuplicateItems() {
|
||||||
duplicateItems = new ArrayList<>();
|
|
||||||
if (!items.isEmpty()) {
|
if (!items.isEmpty()) {
|
||||||
for (PoiUIFilter item : items) {
|
for (PoiUIFilter item : items) {
|
||||||
if (isDuplicate(item)) {
|
if (isDuplicate(item)) {
|
||||||
|
@ -1212,6 +1214,7 @@ public class SettingsHelper {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
Collection values = new LinkedHashMap<>(app.getSettings().getTileSourceEntries(true)).values();
|
Collection values = new LinkedHashMap<>(app.getSettings().getTileSourceEntries(true)).values();
|
||||||
existingItemsNames = new ArrayList(values);
|
existingItemsNames = new ArrayList(values);
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
MapSourcesSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
MapSourcesSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
||||||
|
@ -1219,6 +1222,7 @@ public class SettingsHelper {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
Collection values = new LinkedHashMap<>(app.getSettings().getTileSourceEntries(true)).values();
|
Collection values = new LinkedHashMap<>(app.getSettings().getTileSourceEntries(true)).values();
|
||||||
existingItemsNames = new ArrayList(values);
|
existingItemsNames = new ArrayList(values);
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1261,7 +1265,6 @@ public class SettingsHelper {
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public List<ITileSource> excludeDuplicateItems() {
|
public List<ITileSource> excludeDuplicateItems() {
|
||||||
duplicateItems = new ArrayList<>();
|
|
||||||
for (String name : existingItemsNames) {
|
for (String name : existingItemsNames) {
|
||||||
for (ITileSource tileSource : items) {
|
for (ITileSource tileSource : items) {
|
||||||
if (name.equals(tileSource.getName())) {
|
if (name.equals(tileSource.getName())) {
|
||||||
|
@ -1456,6 +1459,7 @@ public class SettingsHelper {
|
||||||
settings = app.getSettings();
|
settings = app.getSettings();
|
||||||
specificRoads = app.getAvoidSpecificRoads();
|
specificRoads = app.getAvoidSpecificRoads();
|
||||||
existingItems = new ArrayList<>(specificRoads.getImpassableRoads().values());
|
existingItems = new ArrayList<>(specificRoads.getImpassableRoads().values());
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
AvoidRoadsSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
AvoidRoadsSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
||||||
|
@ -1464,6 +1468,7 @@ public class SettingsHelper {
|
||||||
settings = app.getSettings();
|
settings = app.getSettings();
|
||||||
specificRoads = app.getAvoidSpecificRoads();
|
specificRoads = app.getAvoidSpecificRoads();
|
||||||
existingItems = new ArrayList<>(specificRoads.getImpassableRoads().values());
|
existingItems = new ArrayList<>(specificRoads.getImpassableRoads().values());
|
||||||
|
duplicateItems = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@ -1486,27 +1491,28 @@ public class SettingsHelper {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void apply() {
|
public void apply() {
|
||||||
for (AvoidRoadInfo duplicate : duplicateItems) {
|
if (!items.isEmpty() || !duplicateItems.isEmpty()) {
|
||||||
if (shouldReplace) {
|
for (AvoidRoadInfo duplicate : duplicateItems) {
|
||||||
LatLon latLon = new LatLon(duplicate.latitude, duplicate.longitude);
|
if (shouldReplace) {
|
||||||
if (settings.removeImpassableRoad(latLon)) {
|
LatLon latLon = new LatLon(duplicate.latitude, duplicate.longitude);
|
||||||
settings.addImpassableRoad(duplicate);
|
if (settings.removeImpassableRoad(latLon)) {
|
||||||
|
settings.addImpassableRoad(duplicate);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
settings.addImpassableRoad(renameItem(duplicate));
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
settings.addImpassableRoad(duplicate);
|
|
||||||
}
|
}
|
||||||
|
for (AvoidRoadInfo avoidRoad : items) {
|
||||||
|
settings.addImpassableRoad(avoidRoad);
|
||||||
|
}
|
||||||
|
specificRoads.loadImpassableRoads();
|
||||||
|
specificRoads.initRouteObjects(true);
|
||||||
}
|
}
|
||||||
for (AvoidRoadInfo avoidRoad : items) {
|
|
||||||
settings.addImpassableRoad(avoidRoad);
|
|
||||||
}
|
|
||||||
specificRoads.loadImpassableRoads();
|
|
||||||
specificRoads.initRouteObjects(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public List<AvoidRoadInfo> excludeDuplicateItems() {
|
public List<AvoidRoadInfo> excludeDuplicateItems() {
|
||||||
duplicateItems = new ArrayList<>();
|
|
||||||
for (AvoidRoadInfo item : items) {
|
for (AvoidRoadInfo item : items) {
|
||||||
if (isDuplicate(item)) {
|
if (isDuplicate(item)) {
|
||||||
duplicateItems.add(item);
|
duplicateItems.add(item);
|
||||||
|
@ -1517,9 +1523,11 @@ public class SettingsHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDuplicate(AvoidRoadInfo item) {
|
public boolean isDuplicate(@NonNull AvoidRoadInfo item) {
|
||||||
for (AvoidRoadInfo existingItem : existingItems) {
|
for (AvoidRoadInfo existingItem : existingItems) {
|
||||||
if (item.latitude == existingItem.latitude && item.longitude == existingItem.longitude) {
|
if (item.latitude == existingItem.latitude
|
||||||
|
&& item.longitude == existingItem.longitude
|
||||||
|
&& item.name.equals(existingItem.name)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1537,9 +1545,13 @@ public class SettingsHelper {
|
||||||
int number = 0;
|
int number = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
number++;
|
number++;
|
||||||
AvoidRoadInfo renamedItem = item;
|
AvoidRoadInfo renamedItem = new AvoidRoadInfo();
|
||||||
renamedItem.name = renamedItem.name + "_" + number;
|
renamedItem.name = item.name + "_" + number;
|
||||||
if (!isDuplicate(renamedItem)) {
|
if (!isDuplicate(renamedItem)) {
|
||||||
|
renamedItem.id = item.id;
|
||||||
|
renamedItem.latitude = item.latitude;
|
||||||
|
renamedItem.longitude = item.longitude;
|
||||||
|
renamedItem.appModeKey = item.appModeKey;
|
||||||
return renamedItem;
|
return renamedItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1581,7 +1593,11 @@ public class SettingsHelper {
|
||||||
roadInfo.latitude = latitude;
|
roadInfo.latitude = latitude;
|
||||||
roadInfo.longitude = longitude;
|
roadInfo.longitude = longitude;
|
||||||
roadInfo.name = name;
|
roadInfo.name = name;
|
||||||
roadInfo.appModeKey = appModeKey;
|
if (ApplicationMode.valueOfStringKey(appModeKey, null) != null) {
|
||||||
|
roadInfo.appModeKey = appModeKey;
|
||||||
|
} else {
|
||||||
|
roadInfo.appModeKey = app.getRoutingHelper().getAppMode().getStringKey();
|
||||||
|
}
|
||||||
items.add(roadInfo);
|
items.add(roadInfo);
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
@ -1814,7 +1830,12 @@ public class SettingsHelper {
|
||||||
if (item != null && collecting && item.shouldReadOnCollecting()
|
if (item != null && collecting && item.shouldReadOnCollecting()
|
||||||
|| item != null && !collecting && !item.shouldReadOnCollecting()) {
|
|| item != null && !collecting && !item.shouldReadOnCollecting()) {
|
||||||
try {
|
try {
|
||||||
item.getReader().readFromStream(ois);
|
for (SettingsItem settingsItem : items) {
|
||||||
|
if (item.getFileName().equals(settingsItem.getFileName())) {
|
||||||
|
item.setShouldReplace(settingsItem.shouldReplace);
|
||||||
|
item.getReader().readFromStream(ois);
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
LOG.error("Error reading item data: " + item.getName(), e);
|
LOG.error("Error reading item data: " + item.getName(), e);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
@ -782,7 +782,7 @@ public class ImportHelper {
|
||||||
if (fragmentManager != null) {
|
if (fragmentManager != null) {
|
||||||
ImportSettingsFragment.showInstance(fragmentManager, items, file);
|
ImportSettingsFragment.showInstance(fragmentManager, items, file);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (empty) {
|
||||||
app.showShortToastMessage(app.getString(R.string.file_import_error, name, app.getString(R.string.shared_string_unexpected_error)));
|
app.showShortToastMessage(app.getString(R.string.file_import_error, name, app.getString(R.string.shared_string_unexpected_error)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -239,9 +239,20 @@ public class RendererRegistry {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initRenderers(IProgress progress) {
|
public void initRenderers(IProgress progress) {
|
||||||
|
updateExternalRenderers();
|
||||||
|
String r = app.getSettings().RENDERER.get();
|
||||||
|
if(r != null){
|
||||||
|
RenderingRulesStorage obj = getRenderer(r);
|
||||||
|
if(obj != null){
|
||||||
|
setCurrentSelectedRender(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateExternalRenderers() {
|
||||||
File file = app.getAppPath(IndexConstants.RENDERERS_DIR);
|
File file = app.getAppPath(IndexConstants.RENDERERS_DIR);
|
||||||
file.mkdirs();
|
file.mkdirs();
|
||||||
Map<String, File> externalRenderers = new LinkedHashMap<String, File>();
|
Map<String, File> externalRenderers = new LinkedHashMap<String, File>();
|
||||||
if (file.exists() && file.canRead()) {
|
if (file.exists() && file.canRead()) {
|
||||||
File[] lf = file.listFiles();
|
File[] lf = file.listFiles();
|
||||||
if (lf != null) {
|
if (lf != null) {
|
||||||
|
@ -256,13 +267,6 @@ public class RendererRegistry {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.externalRenderers = externalRenderers;
|
this.externalRenderers = externalRenderers;
|
||||||
String r = app.getSettings().RENDERER.get();
|
|
||||||
if(r != null){
|
|
||||||
RenderingRulesStorage obj = getRenderer(r);
|
|
||||||
if(obj != null){
|
|
||||||
setCurrentSelectedRender(obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<String> getRendererNames(){
|
public Collection<String> getRendererNames(){
|
||||||
|
|
|
@ -121,7 +121,7 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView
|
||||||
itemHolder.subTitle.setVisibility(View.GONE);
|
itemHolder.subTitle.setVisibility(View.GONE);
|
||||||
} else if (currentItem instanceof AvoidRoadInfo) {
|
} else if (currentItem instanceof AvoidRoadInfo) {
|
||||||
itemHolder.title.setText(((AvoidRoadInfo) currentItem).name);
|
itemHolder.title.setText(((AvoidRoadInfo) currentItem).name);
|
||||||
itemHolder.icon.setImageResource(R.drawable.map_pin_avoid_road);
|
itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_alert, nightMode));
|
||||||
itemHolder.subTitle.setVisibility(View.GONE);
|
itemHolder.subTitle.setVisibility(View.GONE);
|
||||||
itemHolder.icon.setVisibility(View.VISIBLE);
|
itemHolder.icon.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,7 +217,7 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
case AVOID_ROADS:
|
case AVOID_ROADS:
|
||||||
AvoidRoadInfo avoidRoadInfo = (AvoidRoadInfo) currentItem;
|
AvoidRoadInfo avoidRoadInfo = (AvoidRoadInfo) currentItem;
|
||||||
title.setText(avoidRoadInfo.name);
|
title.setText(avoidRoadInfo.name);
|
||||||
icon.setImageResource(R.drawable.map_pin_avoid_road);
|
icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_alert, nightMode));
|
||||||
icon.setVisibility(View.VISIBLE);
|
icon.setVisibility(View.VISIBLE);
|
||||||
subText.setVisibility(View.GONE);
|
subText.setVisibility(View.GONE);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package net.osmand.plus.settings;
|
package net.osmand.plus.settings;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
@ -12,6 +13,7 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import net.osmand.map.ITileSource;
|
import net.osmand.map.ITileSource;
|
||||||
|
import net.osmand.plus.AppInitializer;
|
||||||
import net.osmand.plus.ApplicationMode;
|
import net.osmand.plus.ApplicationMode;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
@ -28,6 +30,8 @@ import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.plus.settings.ImportSettingsFragment.getDuplicatesData;
|
||||||
|
|
||||||
|
|
||||||
public class ImportDuplicatesFragment extends BaseOsmAndDialogFragment implements View.OnClickListener {
|
public class ImportDuplicatesFragment extends BaseOsmAndDialogFragment implements View.OnClickListener {
|
||||||
|
|
||||||
|
@ -46,7 +50,6 @@ public class ImportDuplicatesFragment extends BaseOsmAndDialogFragment implement
|
||||||
fragment.setDuplicatesList(duplicatesList);
|
fragment.setDuplicatesList(duplicatesList);
|
||||||
fragment.setSettingsItems(settingsItems);
|
fragment.setSettingsItems(settingsItems);
|
||||||
fragment.setFile(file);
|
fragment.setFile(file);
|
||||||
fragment.setRetainInstance(true);
|
|
||||||
fragment.show(fm, TAG);
|
fragment.show(fm, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +58,20 @@ public class ImportDuplicatesFragment extends BaseOsmAndDialogFragment implement
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
app = getMyApplication();
|
app = getMyApplication();
|
||||||
nightMode = !getSettings().isLightContent();
|
nightMode = !getSettings().isLightContent();
|
||||||
|
if (settingsItems == null) {
|
||||||
|
settingsItems = app.getSettingsHelper().getSettingsItems();
|
||||||
|
if (settingsItems != null) {
|
||||||
|
duplicatesList = getDuplicatesData(settingsItems);
|
||||||
|
} else {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (file == null) {
|
||||||
|
file = app.getSettingsHelper().getSettingsFile();
|
||||||
|
if (file == null) {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -82,6 +99,21 @@ public class ImportDuplicatesFragment extends BaseOsmAndDialogFragment implement
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
return new Dialog(requireActivity(), getTheme()) {
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
FragmentManager fm = getFragmentManager();
|
||||||
|
if (fm != null) {
|
||||||
|
ImportSettingsFragment.showInstance(fm, null, file);
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
@ -174,6 +206,12 @@ public class ImportDuplicatesFragment extends BaseOsmAndDialogFragment implement
|
||||||
public void onSettingsImportFinished(boolean succeed, boolean empty, @NonNull List<SettingsHelper.SettingsItem> items) {
|
public void onSettingsImportFinished(boolean succeed, boolean empty, @NonNull List<SettingsHelper.SettingsItem> items) {
|
||||||
if (succeed) {
|
if (succeed) {
|
||||||
app.showShortToastMessage(app.getString(R.string.file_imported_successfully, file.getName()));
|
app.showShortToastMessage(app.getString(R.string.file_imported_successfully, file.getName()));
|
||||||
|
app.getRendererRegistry().updateExternalRenderers();
|
||||||
|
AppInitializer.loadRoutingFiles(app, new AppInitializer.LoadRoutingFilesCallback() {
|
||||||
|
@Override
|
||||||
|
public void onRoutingFilesLoaded() {
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (empty) {
|
} else if (empty) {
|
||||||
app.showShortToastMessage(app.getString(R.string.file_import_error, file.getName(), app.getString(R.string.shared_string_unexpected_error)));
|
app.showShortToastMessage(app.getString(R.string.file_import_error, file.getName(), app.getString(R.string.shared_string_unexpected_error)));
|
||||||
}
|
}
|
||||||
|
@ -191,6 +229,10 @@ public class ImportDuplicatesFragment extends BaseOsmAndDialogFragment implement
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
FragmentManager fm = getFragmentManager();
|
||||||
|
if (fm != null) {
|
||||||
|
ImportSettingsFragment.showInstance(fm, null, file);
|
||||||
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
package net.osmand.plus.settings;
|
package net.osmand.plus.settings;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -12,6 +16,7 @@ import android.widget.ExpandableListView;
|
||||||
|
|
||||||
import net.osmand.map.ITileSource;
|
import net.osmand.map.ITileSource;
|
||||||
import net.osmand.map.TileSourceManager;
|
import net.osmand.map.TileSourceManager;
|
||||||
|
import net.osmand.plus.AppInitializer;
|
||||||
import net.osmand.plus.ApplicationMode;
|
import net.osmand.plus.ApplicationMode;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
@ -43,7 +48,7 @@ public class ImportSettingsFragment extends BaseOsmAndDialogFragment
|
||||||
private boolean allSelected;
|
private boolean allSelected;
|
||||||
private boolean nightMode;
|
private boolean nightMode;
|
||||||
|
|
||||||
public static void showInstance(@NonNull FragmentManager fm, @NonNull List<SettingsItem> settingsItems, @NonNull File file) {
|
public static void showInstance(@NonNull FragmentManager fm, List<SettingsItem> settingsItems, @NonNull File file) {
|
||||||
ImportSettingsFragment fragment = new ImportSettingsFragment();
|
ImportSettingsFragment fragment = new ImportSettingsFragment();
|
||||||
fragment.setSettingsItems(settingsItems);
|
fragment.setSettingsItems(settingsItems);
|
||||||
fragment.setFile(file);
|
fragment.setFile(file);
|
||||||
|
@ -57,9 +62,15 @@ public class ImportSettingsFragment extends BaseOsmAndDialogFragment
|
||||||
nightMode = !getSettings().isLightContent();
|
nightMode = !getSettings().isLightContent();
|
||||||
if (settingsItems == null) {
|
if (settingsItems == null) {
|
||||||
settingsItems = app.getSettingsHelper().getSettingsItems();
|
settingsItems = app.getSettingsHelper().getSettingsItems();
|
||||||
|
if (settingsItems == null) {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
file = app.getSettingsHelper().getSettingsFile();
|
file = app.getSettingsHelper().getSettingsFile();
|
||||||
|
if (file == null) {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +95,17 @@ public class ImportSettingsFragment extends BaseOsmAndDialogFragment
|
||||||
expandableList.setAdapter(adapter);
|
expandableList.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
return new Dialog(requireActivity(), getTheme()) {
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
showExitDialog();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
switch (view.getId()) {
|
switch (view.getId()) {
|
||||||
|
@ -113,6 +135,12 @@ public class ImportSettingsFragment extends BaseOsmAndDialogFragment
|
||||||
public void onSettingsImportFinished(boolean succeed, boolean empty, @NonNull List<SettingsHelper.SettingsItem> items) {
|
public void onSettingsImportFinished(boolean succeed, boolean empty, @NonNull List<SettingsHelper.SettingsItem> items) {
|
||||||
if (succeed) {
|
if (succeed) {
|
||||||
app.showShortToastMessage(app.getString(R.string.file_imported_successfully, file.getName()));
|
app.showShortToastMessage(app.getString(R.string.file_imported_successfully, file.getName()));
|
||||||
|
app.getRendererRegistry().updateExternalRenderers();
|
||||||
|
AppInitializer.loadRoutingFiles(app, new AppInitializer.LoadRoutingFilesCallback() {
|
||||||
|
@Override
|
||||||
|
public void onRoutingFilesLoaded() {
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (empty) {
|
} else if (empty) {
|
||||||
app.showShortToastMessage(app.getString(R.string.file_import_error, file.getName(), app.getString(R.string.shared_string_unexpected_error)));
|
app.showShortToastMessage(app.getString(R.string.file_import_error, file.getName(), app.getString(R.string.shared_string_unexpected_error)));
|
||||||
}
|
}
|
||||||
|
@ -125,7 +153,7 @@ public class ImportSettingsFragment extends BaseOsmAndDialogFragment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Object> getDuplicatesData(List<SettingsItem> items) {
|
public static List<Object> getDuplicatesData(List<SettingsItem> items) {
|
||||||
List<Object> duplicateItems = new ArrayList<>();
|
List<Object> duplicateItems = new ArrayList<>();
|
||||||
for (SettingsItem item : items) {
|
for (SettingsItem item : items) {
|
||||||
if (item instanceof SettingsHelper.ProfileSettingsItem) {
|
if (item instanceof SettingsHelper.ProfileSettingsItem) {
|
||||||
|
@ -275,15 +303,30 @@ public class ImportSettingsFragment extends BaseOsmAndDialogFragment
|
||||||
return settingsToOperate;
|
return settingsToOperate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void showExitDialog() {
|
||||||
|
Context themedContext = UiUtilities.getThemedContext(getActivity(), nightMode);
|
||||||
|
AlertDialog.Builder dismissDialog = new AlertDialog.Builder(themedContext);
|
||||||
|
dismissDialog.setTitle(getString(R.string.shared_string_dismiss));
|
||||||
|
dismissDialog.setMessage(getString(R.string.exit_without_saving));
|
||||||
|
dismissDialog.setNegativeButton(R.string.shared_string_cancel, null);
|
||||||
|
dismissDialog.setPositiveButton(R.string.shared_string_exit, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dismissDialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
private void setupToolbar(Toolbar toolbar) {
|
private void setupToolbar(Toolbar toolbar) {
|
||||||
toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.headline_close_button, nightMode
|
toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.ic_action_close, nightMode
|
||||||
? getResources().getColor(R.color.active_buttons_and_links_text_dark)
|
? getResources().getColor(R.color.active_buttons_and_links_text_dark)
|
||||||
: getResources().getColor(R.color.active_buttons_and_links_text_light)));
|
: getResources().getColor(R.color.active_buttons_and_links_text_light)));
|
||||||
toolbar.setNavigationContentDescription(R.string.shared_string_close);
|
toolbar.setNavigationContentDescription(R.string.shared_string_close);
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
dismiss();
|
showExitDialog();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue