Merge remote-tracking branch 'origin/r3.7' into r3.7

This commit is contained in:
Dima-1 2020-06-09 17:25:46 +03:00
commit 5b97a0b4aa
23 changed files with 6257 additions and 189 deletions

View file

@ -843,6 +843,7 @@ public class CommonWords {
addCommon("van");
addCommon("road");
addCommon("street");
addCommon("sector");
addCommon("drive");
addCommon("avenue");
addCommon("rue");

View file

@ -25,6 +25,26 @@ public class PoiFilter extends AbstractPoiType {
return map.get(kn);
}
public void addExtraPoiTypes(Map<String, PoiType> poiTypesToAdd) {
List<PoiType> npoiTypes = null;
Map<String, PoiType> nmap = null;
for (PoiType poiType : poiTypesToAdd.values()) {
if (!map.containsKey(poiType.getKeyName())) {
if (npoiTypes == null) {
npoiTypes = new ArrayList<PoiType>(this.poiTypes);
nmap = new LinkedHashMap<>(map);
}
npoiTypes.add(poiType);
nmap.put(poiType.getKeyName(), poiType);
}
}
if (npoiTypes != null) {
poiTypes = npoiTypes;
map = nmap;
}
}
public void addPoiType(PoiType type) {
if (!map.containsKey(type.getKeyName())) {
poiTypes.add(type);
@ -70,4 +90,5 @@ public class PoiFilter extends AbstractPoiType {
return poiTypes;
}
}

View file

@ -26,8 +26,8 @@ public class PoiType extends AbstractPoiType {
private int order = 90;
public PoiType(MapPoiTypes poiTypes, PoiCategory category, PoiFilter filter, String name) {
super(name, poiTypes);
public PoiType(MapPoiTypes poiTypes, PoiCategory category, PoiFilter filter, String keyName) {
super(keyName, poiTypes);
this.category = category;
this.filter = filter;
}

View file

@ -15,6 +15,7 @@ import net.osmand.search.core.CustomSearchPoiFilter;
import net.osmand.search.core.ObjectType;
import net.osmand.search.core.SearchCoreAPI;
import net.osmand.search.core.SearchCoreFactory;
import net.osmand.search.core.SearchCoreFactory.SearchAmenityByTypeAPI;
import net.osmand.search.core.SearchCoreFactory.SearchAmenityTypesAPI;
import net.osmand.search.core.SearchCoreFactory.SearchBuildingAndIntersectionsByStreetAPI;
import net.osmand.search.core.SearchCoreFactory.SearchStreetByCityAPI;
@ -325,7 +326,7 @@ public class SearchUICore {
apis.add(new SearchCoreFactory.SearchLocationAndUrlAPI());
SearchAmenityTypesAPI searchAmenityTypesAPI = new SearchAmenityTypesAPI(poiTypes);
apis.add(searchAmenityTypesAPI);
apis.add(new SearchCoreFactory.SearchAmenityByTypeAPI(poiTypes, searchAmenityTypesAPI));
apis.add(new SearchAmenityByTypeAPI(poiTypes, searchAmenityTypesAPI));
apis.add(new SearchCoreFactory.SearchAmenityByNameAPI());
SearchBuildingAndIntersectionsByStreetAPI streetsApi =
new SearchCoreFactory.SearchBuildingAndIntersectionsByStreetAPI();
@ -573,6 +574,24 @@ public class SearchUICore {
return radius;
}
public AbstractPoiType getUnselectedPoiType() {
for (SearchCoreAPI capi : apis) {
if (capi instanceof SearchAmenityByTypeAPI) {
return ((SearchAmenityByTypeAPI) capi).getUnselectedPoiType();
}
}
return null;
}
public String getCustomNameFilter() {
for (SearchCoreAPI capi : apis) {
if (capi instanceof SearchAmenityByTypeAPI) {
return ((SearchAmenityByTypeAPI) capi).getNameFilter();
}
}
return null;
}
void searchInternal(final SearchPhrase phrase, SearchResultMatcher matcher) {
preparePhrase(phrase);
ArrayList<SearchCoreAPI> lst = new ArrayList<>(apis);
@ -759,14 +778,28 @@ public class SearchUICore {
return exportedCities;
}
public void exportObject(MapObject object) {
public void exportObject(SearchPhrase phrase, MapObject object) {
double maxDistance = phrase.getSettings().getExportSettings().getMaxDistance();
if (maxDistance > 0) {
double distance = MapUtils.getDistance(phrase.getSettings().getOriginalLocation(), object.getLocation());
if (distance > maxDistance) {
return;
}
}
if (exportedObjects == null) {
exportedObjects = new ArrayList<>();
}
exportedObjects.add(object);
}
public void exportCity(City city) {
public void exportCity(SearchPhrase phrase, City city) {
double maxDistance = phrase.getSettings().getExportSettings().getMaxDistance();
if (maxDistance > 0) {
double distance = MapUtils.getDistance(phrase.getSettings().getOriginalLocation(), city.getLocation());
if (distance > maxDistance) {
return;
}
}
if (exportedCities == null) {
exportedCities = new ArrayList<>();
}

View file

@ -226,7 +226,7 @@ public class SearchCoreFactory {
sr.objectType = ObjectType.REGION;
sr.location = bmir.getRegionCenter();
sr.preferredZoom = 6;
if (phrase.getFirstUnknownSearchWord().length() <= 1 && phrase.isNoSelectedType()) {
if (phrase.getFullSearchPhrase().length() <= 1 && phrase.isNoSelectedType()) {
resultMatcher.publish(sr);
} else if (phrase.getFirstUnknownNameStringMatcher().matches(sr.localeName)) {
resultMatcher.publish(sr);
@ -343,7 +343,7 @@ public class SearchCoreFactory {
int limit = 0;
for (City c : resArray) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportCity(c);
resultMatcher.exportCity(phrase, c);
}
SearchResult res = new SearchResult(phrase);
res.object = c;
@ -388,7 +388,7 @@ public class SearchCoreFactory {
@Override
public boolean publish(MapObject object) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportObject(object);
resultMatcher.exportObject(phrase, object);
}
if (isCancelled()) {
return false;
@ -546,7 +546,7 @@ public class SearchCoreFactory {
@Override
public boolean publish(Amenity object) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportObject(object);
resultMatcher.exportObject(phrase, object);
}
if (limit++ > LIMIT) {
return false;
@ -648,6 +648,7 @@ public class SearchCoreFactory {
public void clearCustomFilters() {
this.customPoiFilters.clear();
this.activePoiFilters.clear();
}
public void addCustomFilter(CustomSearchPoiFilter poiFilter, int priority) {
@ -731,6 +732,7 @@ public class SearchCoreFactory {
if (translatedNames.isEmpty()) {
translatedNames = types.getAllTranslatedNames(false);
topVisibleFilters = types.getTopVisibleFilters();
topVisibleFilters.remove(types.getOsmwiki());
categories = types.getCategories(false);
}
}
@ -839,9 +841,8 @@ public class SearchCoreFactory {
private static final int BBOX_RADIUS = 10000;
private SearchAmenityTypesAPI searchAmenityTypesAPI;
private MapPoiTypes types;
private Map<PoiCategory, LinkedHashSet<String>> acceptedTypes = new LinkedHashMap<PoiCategory,
LinkedHashSet<String>>();
private Map<String, PoiType> poiAdditionals = new HashMap<String, PoiType>();
private AbstractPoiType unselectedPoiType;
private String nameFilter;
public SearchAmenityByTypeAPI(MapPoiTypes types, SearchAmenityTypesAPI searchAmenityTypesAPI) {
super(ObjectType.POI);
@ -849,6 +850,14 @@ public class SearchCoreFactory {
this.searchAmenityTypesAPI = searchAmenityTypesAPI;
}
public AbstractPoiType getUnselectedPoiType() {
return unselectedPoiType;
}
public String getNameFilter() {
return nameFilter;
}
@Override
public boolean isSearchMoreAvailable(SearchPhrase phrase) {
return getSearchPriority(phrase) != -1 && super.isSearchMoreAvailable(phrase);
@ -864,23 +873,17 @@ public class SearchCoreFactory {
return phrase.getNextRadiusSearch(BBOX_RADIUS);
}
public void updateTypesToAccept(AbstractPoiType pt) {
pt.putTypes(acceptedTypes);
if (pt instanceof PoiType && ((PoiType) pt).isAdditional() && ((PoiType) pt).getParentType() != null) {
poiAdditionals.put(pt.getKeyName(), (PoiType) pt);
}
}
@Override
public boolean search(final SearchPhrase phrase, final SearchResultMatcher resultMatcher) throws IOException {
unselectedPoiType = null;
SearchPoiTypeFilter poiTypeFilter = null;
String nameFilter = null;
int countExtraWords = 0;
Map<String, PoiType> poiAdditionals = new LinkedHashMap<String, PoiType>();
if (phrase.isLastWord(ObjectType.POI_TYPE)) {
Object obj = phrase.getLastSelectedWord().getResult().object;
if (obj instanceof AbstractPoiType) {
poiTypeFilter = getPoiTypeFilter((AbstractPoiType) obj);
poiTypeFilter = getPoiTypeFilter((AbstractPoiType) obj, poiAdditionals);
} else if (obj instanceof SearchPoiTypeFilter) {
poiTypeFilter = (SearchPoiTypeFilter) obj;
} else {
@ -910,17 +913,20 @@ public class SearchCoreFactory {
nameFilter += otherSearchWords.get(k);
}
}
poiTypeFilter = getPoiTypeFilter(poiType.getKey());
poiTypeFilter = getPoiTypeFilter(poiType.getKey(), poiAdditionals);
unselectedPoiType = poiType.getKey();
}
}
}
}
this.nameFilter = nameFilter;
if (poiTypeFilter != null) {
QuadRect bbox = phrase.getRadiusBBoxToSearch(BBOX_RADIUS);
List<BinaryMapIndexReader> offlineIndexes = phrase.getOfflineIndexes();
Set<String> searchedPois = new TreeSet<>();
for (BinaryMapIndexReader r : offlineIndexes) {
ResultMatcher<Amenity> rm = getResultMatcher(phrase, poiTypeFilter, resultMatcher, nameFilter, r, searchedPois, countExtraWords);
ResultMatcher<Amenity> rm = getResultMatcher(phrase, poiTypeFilter, resultMatcher, nameFilter, r,
searchedPois, poiAdditionals, countExtraWords);
if (poiTypeFilter instanceof CustomSearchPoiFilter) {
rm = ((CustomSearchPoiFilter) poiTypeFilter).wrapResultMatcher(rm);
}
@ -937,7 +943,8 @@ public class SearchCoreFactory {
private ResultMatcher<Amenity> getResultMatcher(final SearchPhrase phrase, final SearchPoiTypeFilter poiTypeFilter,
final SearchResultMatcher resultMatcher, final String nameFilter,
final BinaryMapIndexReader selected, final Set<String> searchedPois,
final int countExtraWords) {
final Map<String, PoiType> poiAdditionals, final int countExtraWords) {
final NameStringMatcher ns = nameFilter == null ? null : new NameStringMatcher(nameFilter, StringMatcherMode.CHECK_STARTS_FROM_SPACE);
return new ResultMatcher<Amenity>() {
@ -945,7 +952,7 @@ public class SearchCoreFactory {
@Override
public boolean publish(Amenity object) {
if (phrase.getSettings().isExportObjects()) {
resultMatcher.exportObject(object);
resultMatcher.exportObject(phrase, object);
}
SearchResult res = new SearchResult(phrase);
String poiID = object.getType().getKeyName() + "_" + object.getId();
@ -1009,10 +1016,14 @@ public class SearchCoreFactory {
};
}
private SearchPoiTypeFilter getPoiTypeFilter(AbstractPoiType pt) {
acceptedTypes.clear();
private SearchPoiTypeFilter getPoiTypeFilter(AbstractPoiType pt, Map<String, PoiType> poiAdditionals ) {
final Map<PoiCategory, LinkedHashSet<String>> acceptedTypes = new LinkedHashMap<PoiCategory,
LinkedHashSet<String>>();
pt.putTypes(acceptedTypes);
poiAdditionals.clear();
updateTypesToAccept(pt);
if (pt instanceof PoiType && ((PoiType) pt).isAdditional() && ((PoiType) pt).getParentType() != null) {
poiAdditionals.put(pt.getKeyName(), (PoiType) pt);
}
return new SearchPoiTypeFilter() {
@Override

View file

@ -3,30 +3,29 @@ package net.osmand.search.core;
public class SearchExportSettings {
private boolean exportEmptyCities;
private boolean exportBuildings;
private double maxDistance;
public SearchExportSettings() {
exportEmptyCities = true;
exportBuildings = true;
maxDistance = -1;
}
public SearchExportSettings(boolean exportEmptyCities, boolean exportBuildings) {
public SearchExportSettings(boolean exportEmptyCities, boolean exportBuildings, double maxDistance) {
this.exportEmptyCities = exportEmptyCities;
this.exportBuildings = exportBuildings;
this.maxDistance = maxDistance;
}
public boolean isExportEmptyCities() {
return exportEmptyCities;
}
public void setExportEmptyCities(boolean exportEmptyCities) {
this.exportEmptyCities = exportEmptyCities;
}
public boolean isExportBuildings() {
return exportBuildings;
}
public void setExportBuildings(boolean exportBuildings) {
this.exportBuildings = exportBuildings;
public double getMaxDistance() {
return maxDistance;
}
}

View file

@ -24,7 +24,7 @@ public class SearchSettings {
private boolean emptyQueryAllowed;
private boolean sortByName;
private SearchExportSettings exportSettings;
//private SearchExportSettings exportSettings = new SearchExportSettings(false, false);
//private SearchExportSettings exportSettings = new SearchExportSettings(false, false, -1);
public SearchSettings(SearchSettings s) {
if(s != null) {

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -25,7 +25,10 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Map.Entry;
@ -372,24 +375,55 @@ public class OsmAndFormatter {
public static String getPoiStringWithoutType(Amenity amenity, String locale, boolean transliterate) {
PoiCategory pc = amenity.getType();
PoiType pt = pc.getPoiTypeByKeyName(amenity.getSubType());
String nm = amenity.getSubType();
String typeName = amenity.getSubType();
if (pt != null) {
nm = pt.getTranslation();
} else if(nm != null){
nm = Algorithms.capitalizeFirstLetterAndLowercase(nm.replace('_', ' '));
typeName = pt.getTranslation();
} else if(typeName != null){
typeName = Algorithms.capitalizeFirstLetterAndLowercase(typeName.replace('_', ' '));
}
String n = amenity.getName(locale, transliterate);
if (n.indexOf(nm) != -1) {
String localName = amenity.getName(locale, transliterate);
if (typeName != null && localName.contains(typeName)) {
// type is contained in name e.g.
// n = "Bakery the Corner"
// localName = "Bakery the Corner"
// type = "Bakery"
// no need to repeat this
return n;
return localName;
}
if (n.length() == 0) {
return nm;
if (localName.length() == 0) {
return typeName;
}
return nm + " " + n; //$NON-NLS-1$
return typeName + " " + localName; //$NON-NLS-1$
}
public static List<String> getPoiStringsWithoutType(Amenity amenity, String locale, boolean transliterate) {
PoiCategory pc = amenity.getType();
PoiType pt = pc.getPoiTypeByKeyName(amenity.getSubType());
String typeName = amenity.getSubType();
if (pt != null) {
typeName = pt.getTranslation();
} else if(typeName != null){
typeName = Algorithms.capitalizeFirstLetterAndLowercase(typeName.replace('_', ' '));
}
List<String> res = new ArrayList<>();
String localName = amenity.getName(locale, transliterate);
addPoiString(typeName, localName, res);
for (String name : amenity.getAllNames(true)) {
addPoiString(typeName, name, res);
}
for (String name : amenity.getAdditionalInfo().values()) {
addPoiString(typeName, name, res);
}
return res;
}
private static void addPoiString(String poiTypeName, String poiName, List<String> res) {
if (poiTypeName != null && poiName.contains(poiTypeName)) {
res.add(poiName);
}
if (poiName.length() == 0) {
res.add(poiTypeName);
}
res.add(poiTypeName + " " + poiName);
}
public static String getAmenityDescriptionContent(OsmandApplication ctx, Amenity amenity, boolean shortDescription) {

View file

@ -248,6 +248,8 @@ public class ImportHelper {
}
} catch (FileNotFoundException e) {
//
} catch (SecurityException e) {
log.error(e.getMessage(), e);
} finally {
if (is != null) try {
is.close();
@ -314,6 +316,8 @@ public class ImportHelper {
}
} catch (FileNotFoundException e) {
//
} catch (SecurityException e) {
log.error(e.getMessage(), e);
} finally {
if (is != null) try {
is.close();
@ -410,7 +414,7 @@ public class ImportHelper {
}
}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(), e);
} finally {
try {
if (is != null) {
@ -463,6 +467,8 @@ public class ImportHelper {
}
} catch (FileNotFoundException e) {
//
} catch (SecurityException e) {
log.error(e.getMessage(), e);
} finally {
if (is != null) try {
is.close();
@ -549,6 +555,9 @@ public class ImportHelper {
} catch (IOException e) {
e.printStackTrace();
error = e.getMessage();
} catch (SecurityException e) {
e.printStackTrace();
error = e.getMessage();
} finally {
if (in != null) {
try {
@ -918,6 +927,8 @@ public class ImportHelper {
log.error(e);
} catch (IOException e) {
log.error(e);
} catch (SecurityException e) {
log.error(e.getMessage(), e);
} finally {
if (is != null) try {
is.close();

View file

@ -35,7 +35,6 @@ import androidx.fragment.app.FragmentManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.activities.LocalIndexHelper;
@ -50,6 +49,7 @@ import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseListener;
import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseTaskType;
import net.osmand.plus.inapp.InAppPurchases.InAppSubscription;
import net.osmand.plus.resources.IncrementalChangesManager;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.util.Algorithms;
import java.io.File;
@ -82,6 +82,8 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
return lhs.getName().compareTo(rhs.getName());
}
};
private OsmandApplication app;
private View subscriptionHeader;
private ExpandableListView listView;
private LocalIndexesAdapter adapter;
@ -109,6 +111,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
app = getMyApplication();
if (getActivity() instanceof OsmLiveActivity) {
showSettingsOnly = ((OsmLiveActivity) getActivity()).isShowSettingOnly();
}
@ -120,7 +123,6 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
View view = inflater.inflate(R.layout.fragment_live_updates, container, false);
listView = (ExpandableListView) view.findViewById(android.R.id.list);
final OsmandApplication app = getMyApplication();
boolean nightMode = !app.getSettings().isLightContent();
final SwipeRefreshLayout swipeRefresh = view.findViewById(R.id.swipe_refresh);
int swipeColor = ContextCompat.getColor(app, nightMode ? R.color.osmand_orange_dark : R.color.osmand_orange);
@ -141,7 +143,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
if (!processing && InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication())) {
if (!processing && InAppPurchaseHelper.isSubscribedToLiveUpdates(app)) {
final FragmentManager fragmentManager = getChildFragmentManager();
LiveUpdatesSettingsDialogFragment
.createInstance(adapter.getChild(groupPosition, childPosition).getFileName())
@ -155,7 +157,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
progressBar = (ProgressBar) view.findViewById(R.id.progress);
if (!Version.isDeveloperVersion(getMyApplication())) {
if (!Version.isDeveloperVersion(app)) {
subscriptionHeader = inflater.inflate(R.layout.live_updates_header, listView, false);
updateSubscriptionHeader();
listView.addHeaderView(subscriptionHeader, "subscriptionHeader", false);
@ -172,22 +174,22 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
if (getActivity() instanceof OsmLiveActivity && subscriptionHeader != null) {
View subscriptionBanner = subscriptionHeader.findViewById(R.id.subscription_banner);
View subscriptionInfo = subscriptionHeader.findViewById(R.id.subscription_info);
if (InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication())) {
if (InAppPurchaseHelper.isSubscribedToLiveUpdates(app)) {
ImageView statusIcon = (ImageView) subscriptionHeader.findViewById(R.id.statusIcon);
TextView statusTextView = (TextView) subscriptionHeader.findViewById(R.id.statusTextView);
TextView regionNameHeaderTextView = (TextView) subscriptionHeader.findViewById(R.id.regionHeaderTextView);
TextView regionNameTextView = (TextView) subscriptionHeader.findViewById(R.id.regionTextView);
statusTextView.setText(getString(R.string.osm_live_active));
statusIcon.setImageDrawable(getMyApplication().getUIUtilities().getThemedIcon(R.drawable.ic_action_done));
statusIcon.setImageDrawable(app.getUIUtilities().getThemedIcon(R.drawable.ic_action_done));
regionNameHeaderTextView.setText(R.string.osm_live_support_region);
String countryName = getSettings().BILLING_USER_COUNTRY.get();
String countryName = app.getSettings().BILLING_USER_COUNTRY.get();
InAppPurchaseHelper purchaseHelper = getInAppPurchaseHelper();
if (purchaseHelper != null) {
InAppSubscription monthlyPurchased = purchaseHelper.getPurchasedMonthlyLiveUpdates();
if (monthlyPurchased != null && monthlyPurchased.isDonationSupported()) {
if (Algorithms.isEmpty(countryName)) {
if (getSettings().BILLING_USER_COUNTRY_DOWNLOAD_NAME.get().equals(OsmandSettings.BILLING_USER_DONATION_NONE_PARAMETER)) {
if (app.getSettings().BILLING_USER_COUNTRY_DOWNLOAD_NAME.get().equals(OsmandSettings.BILLING_USER_DONATION_NONE_PARAMETER)) {
regionNameHeaderTextView.setText(R.string.default_buttons_support);
countryName = getString(R.string.osmand_team);
} else {
@ -277,12 +279,10 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
}
public void notifyLiveUpdatesChanged() {
if (getActivity() != null) {
if (adapter != null && getMyApplication() != null) {
if (getActivity() != null && adapter != null) {
adapter.notifyLiveUpdatesChanged();
}
}
}
private boolean isDonationSupported() {
InAppPurchaseHelper purchaseHelper = getInAppPurchaseHelper();
@ -313,7 +313,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
public void add(LocalIndexInfo info) {
OsmandSettings.CommonPreference<Boolean> preference = preferenceLiveUpdatesOn(
info.getFileName(), getSettings());
info.getFileName(), app.getSettings());
if (preference.get()) {
dataShouldUpdate.add(info);
} else {
@ -325,7 +325,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
Set<LocalIndexInfo> changedSet = new HashSet<>();
for (LocalIndexInfo localIndexInfo : dataShouldUpdate) {
OsmandSettings.CommonPreference<Boolean> preference =
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), getSettings());
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), app.getSettings());
if (!preference.get()) {
changedSet.add(localIndexInfo);
}
@ -335,7 +335,7 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
changedSet.clear();
for (LocalIndexInfo localIndexInfo : dataShouldNotUpdate) {
OsmandSettings.CommonPreference<Boolean> preference =
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), getSettings());
preferenceLiveUpdatesOn(localIndexInfo.getFileName(), app.getSettings());
if (preference.get()) {
changedSet.add(localIndexInfo);
}
@ -410,11 +410,11 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if (InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication())) {
if (InAppPurchaseHelper.isSubscribedToLiveUpdates(app)) {
switchOnLiveUpdates(settings);
} else {
liveUpdatesSwitch.setChecked(false);
getMyApplication().showToastMessage(getString(R.string.osm_live_ask_for_purchase));
app.showToastMessage(getString(R.string.osm_live_ask_for_purchase));
}
} else {
settings.IS_LIVE_UPDATES_ON.set(false);
@ -447,16 +447,16 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
private void showUpdateDialog() {
if(dataShouldUpdate.size() > 0) {
if (dataShouldUpdate.size() == 1) {
runLiveUpdate(getMyApplication(), dataShouldUpdate.get(0).getFileName(), false);
runLiveUpdate(app, dataShouldUpdate.get(0).getFileName(), false);
} else {
Builder bld = new AlertDialog.Builder(getActivity());
Builder bld = new AlertDialog.Builder(ctx);
bld.setMessage(R.string.update_all_maps_now);
bld.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for (LocalIndexInfo li : dataShouldUpdate) {
runLiveUpdate(getMyApplication(), li.getFileName(), false);
runLiveUpdate(app, li.getFileName(), false);
}
notifyDataSetChanged();
}
@ -468,17 +468,15 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
}
private void enableLiveUpdates(boolean enable) {
AlarmManager alarmMgr = (AlarmManager) getActivity()
.getSystemService(Context.ALARM_SERVICE);
AlarmManager alarmMgr = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
for (LocalIndexInfo li : dataShouldUpdate) {
String fileName = li.getFileName();
PendingIntent alarmIntent = getPendingIntent(getActivity(),
fileName);
PendingIntent alarmIntent = getPendingIntent(ctx, fileName);
if (enable) {
final OsmandSettings.CommonPreference<Integer> updateFrequencyPreference =
preferenceUpdateFrequency(fileName, getSettings());
preferenceUpdateFrequency(fileName, app.getSettings());
final OsmandSettings.CommonPreference<Integer> timeOfDayPreference =
preferenceTimeOfDayToUpdate(fileName, getSettings());
preferenceTimeOfDayToUpdate(fileName, app.getSettings());
UpdateFrequency updateFrequency = UpdateFrequency.values()[updateFrequencyPreference.get()];
TimeOfDay timeOfDayToUpdate = TimeOfDay.values()[timeOfDayPreference.get()];
setAlarmForPendingIntent(alarmIntent, alarmMgr, updateFrequency, timeOfDayToUpdate);
@ -713,8 +711,8 @@ public class LiveUpdatesFragment extends BaseOsmAndFragment implements InAppPurc
@Override
public void onGetItems() {
if (!InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication())) {
getSettings().IS_LIVE_UPDATES_ON.set(false);
if (!InAppPurchaseHelper.isSubscribedToLiveUpdates(app)) {
app.getSettings().IS_LIVE_UPDATES_ON.set(false);
adapter.enableLiveUpdates(false);
}
disableProgress();

View file

@ -128,7 +128,8 @@ public class EditPoiData {
if (oldValue == null || !oldValue.equals(value)) {
changedTags.add(tag);
}
tagValues.put(tag, value);
String tagVal = value != null ? value : "";
tagValues.put(tag, tagVal);
notifyDatasetChanged(tag);
} finally {
isInEdit = false;
@ -207,7 +208,8 @@ public class EditPoiData {
public void updateTypeTag(String string, boolean userChanges) {
checkNotInEdit();
try {
tagValues.put(POI_TYPE_TAG, string);
String val = string != null ? string : "";
tagValues.put(POI_TYPE_TAG, val);
if (userChanges) {
changedTags.add(POI_TYPE_TAG);
}
@ -216,7 +218,8 @@ public class EditPoiData {
if (pt != null) {
removeTypeTagWithPrefix(!tagValues.containsKey(REMOVE_TAG_PREFIX + pt.getEditOsmTag()));
currentPoiType = pt;
tagValues.put(pt.getEditOsmTag(), pt.getEditOsmValue());
String tagVal = pt.getEditOsmValue() != null ? pt.getEditOsmValue() : "";
tagValues.put(pt.getEditOsmTag(), tagVal);
if (userChanges) {
changedTags.add(pt.getEditOsmTag());
}

View file

@ -67,7 +67,6 @@ import net.osmand.osm.edit.OSMSettings;
import net.osmand.osm.edit.Way;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
@ -75,6 +74,7 @@ import net.osmand.plus.base.BaseOsmAndDialogFragment;
import net.osmand.plus.osmedit.OsmPoint.Action;
import net.osmand.plus.osmedit.dialogs.PoiSubTypeDialogFragment;
import net.osmand.plus.osmedit.dialogs.PoiTypeDialogFragment;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -466,7 +466,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
private String isTextLengthInRange() {
for (Entry<String, String> s : editPoiData.getTagValues().entrySet()) {
if (s.getValue().length() > AMENITY_TEXT_LENGTH) {
if (!Algorithms.isEmpty(s.getValue()) && s.getValue().length() > AMENITY_TEXT_LENGTH) {
return s.getKey();
}
}
@ -559,7 +559,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
if (getActivity() instanceof MapActivity) {
((MapActivity) getActivity()).getMapView().refreshMap(true);
}
dismiss();
dismissAllowingStateLoss();
} else {
OsmEditingPlugin plugin = OsmandPlugin.getPlugin(OsmEditingPlugin.class);
mOpenstreetmapUtil = plugin.getPoiModificationLocalUtil();

View file

@ -11,13 +11,13 @@ import net.osmand.osm.AbstractPoiType;
import net.osmand.osm.MapPoiTypes;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiType;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.api.SQLiteAPI;
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
import net.osmand.plus.api.SQLiteAPI.SQLiteStatement;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.wikipedia.WikipediaPoiMenu;
import net.osmand.util.Algorithms;
@ -54,7 +54,6 @@ public class PoiFiltersHelper {
private PoiUIFilter searchByNamePOIFilter;
private PoiUIFilter customPOIFilter;
private PoiUIFilter showAllPOIFilter;
private PoiUIFilter localWikiPoiFilter;
private PoiUIFilter topWikiPoiFilter;
private List<PoiUIFilter> cacheTopStandardFilters;
private Set<PoiUIFilter> selectedPoiFilters = new TreeSet<>();
@ -120,20 +119,6 @@ public class PoiFiltersHelper {
return customPOIFilter;
}
public PoiUIFilter getLocalWikiPOIFilter() {
if (localWikiPoiFilter == null) {
PoiType place = application.getPoiTypes().getPoiTypeByKey(WIKI_PLACE);
if (place != null && !Algorithms.isEmpty(application.getLanguage())) {
PoiUIFilter filter = new PoiUIFilter(place, application, " " +
application.getLangTranslation(application.getLanguage()));
filter.setSavedFilterByName("wiki:lang:" + application.getLanguage());
filter.setStandardFilter(true);
localWikiPoiFilter = filter;
}
}
return localWikiPoiFilter;
}
public void prepareTopWikiFilter(@NonNull PoiUIFilter wiki) {
boolean prepareByDefault = true;
Bundle wikiSettings = WikipediaPoiMenu.getWikiPoiSettings(application);
@ -217,8 +202,7 @@ public class PoiFiltersHelper {
}
}
PoiUIFilter ff = getFilterById(filterId, getCustomPOIFilter(), getSearchByNamePOIFilter(),
getTopWikiPoiFilter(), getLocalWikiPOIFilter(), getShowAllPOIFilter(),
getNominatimPOIFilter(), getNominatimAddressFilter());
getTopWikiPoiFilter(), getShowAllPOIFilter(), getNominatimPOIFilter(), getNominatimAddressFilter());
if (ff != null) {
return ff;
}
@ -227,7 +211,7 @@ public class PoiFiltersHelper {
AbstractPoiType tp = application.getPoiTypes().getAnyPoiTypeByKey(typeId);
if (tp != null) {
PoiUIFilter lf = new PoiUIFilter(tp, application, "");
ArrayList<PoiUIFilter> copy = new ArrayList<>(cacheTopStandardFilters);
ArrayList<PoiUIFilter> copy = cacheTopStandardFilters != null ? new ArrayList<>(cacheTopStandardFilters) : new ArrayList<PoiUIFilter>();
copy.add(lf);
cacheTopStandardFilters = copy;
return lf;
@ -235,7 +219,7 @@ public class PoiFiltersHelper {
AbstractPoiType lt = application.getPoiTypes().getAnyPoiAdditionalTypeByKey(typeId);
if (lt != null) {
PoiUIFilter lf = new PoiUIFilter(lt, application, "");
ArrayList<PoiUIFilter> copy = new ArrayList<>(cacheTopStandardFilters);
ArrayList<PoiUIFilter> copy = cacheTopStandardFilters != null ? new ArrayList<>(cacheTopStandardFilters) : new ArrayList<PoiUIFilter>();
copy.add(lf);
cacheTopStandardFilters = copy;
return lf;
@ -279,23 +263,21 @@ public class PoiFiltersHelper {
}
public List<PoiUIFilter> getTopDefinedPoiFilters(boolean includeDeleted) {
if (cacheTopStandardFilters == null) {
List<PoiUIFilter> top = new ArrayList<>();
List<PoiUIFilter> top = this.cacheTopStandardFilters;
if (top == null) {
top = new ArrayList<>();
// user defined
top.addAll(getUserDefinedPoiFilters(true));
if (getLocalWikiPOIFilter() != null) {
top.add(getLocalWikiPOIFilter());
}
// default
MapPoiTypes poiTypes = application.getPoiTypes();
for (AbstractPoiType t : poiTypes.getTopVisibleFilters()) {
PoiUIFilter f = new PoiUIFilter(t, application, "");
top.add(f);
}
cacheTopStandardFilters = top;
this.cacheTopStandardFilters = top;
}
List<PoiUIFilter> result = new ArrayList<>();
for (PoiUIFilter filter : cacheTopStandardFilters) {
for (PoiUIFilter filter : top) {
if (includeDeleted || !filter.isDeleted()) {
result.add(filter);
}
@ -462,7 +444,7 @@ public class PoiFiltersHelper {
}
boolean res = helper.addFilter(filter, helper.getWritableDatabase(), false, forHistory);
if (res) {
ArrayList<PoiUIFilter> copy = new ArrayList<>(cacheTopStandardFilters);
ArrayList<PoiUIFilter> copy = cacheTopStandardFilters != null ? new ArrayList<>(cacheTopStandardFilters) : new ArrayList<PoiUIFilter>();
copy.add(filter);
Collections.sort(copy);
cacheTopStandardFilters = copy;
@ -510,13 +492,17 @@ public class PoiFiltersHelper {
if (filter.isTopWikiFilter()) {
prepareTopWikiFilter(filter);
}
Set<PoiUIFilter> selectedPoiFilters = new TreeSet<>(this.selectedPoiFilters);
selectedPoiFilters.add(filter);
saveSelectedPoiFilters();
saveSelectedPoiFilters(selectedPoiFilters);
this.selectedPoiFilters = selectedPoiFilters;
}
public void removeSelectedPoiFilter(PoiUIFilter filter) {
Set<PoiUIFilter> selectedPoiFilters = new TreeSet<>(this.selectedPoiFilters);
selectedPoiFilters.remove(filter);
saveSelectedPoiFilters();
saveSelectedPoiFilters(selectedPoiFilters);
this.selectedPoiFilters = selectedPoiFilters;
}
public boolean isShowingAnyPoi(PoiUIFilter ... filtersToExclude) {
@ -524,6 +510,7 @@ public class PoiFiltersHelper {
}
public void clearSelectedPoiFilters(PoiUIFilter ... filtersToExclude) {
Set<PoiUIFilter> selectedPoiFilters = new TreeSet<>(this.selectedPoiFilters);
if (filtersToExclude != null && filtersToExclude.length > 0) {
Iterator<PoiUIFilter> it = selectedPoiFilters.iterator();
while (it.hasNext()) {
@ -544,7 +531,8 @@ public class PoiFiltersHelper {
} else {
selectedPoiFilters.clear();
}
saveSelectedPoiFilters();
saveSelectedPoiFilters(selectedPoiFilters);
this.selectedPoiFilters = selectedPoiFilters;
}
public String getFiltersName(Set<PoiUIFilter> filters) {
@ -591,7 +579,7 @@ public class PoiFiltersHelper {
if(!application.getPoiTypes().isInit()) {
return;
}
selectedPoiFilters = new TreeSet<>();
Set<PoiUIFilter> selectedPoiFilters = new TreeSet<>();
for (String f : application.getSettings().getSelectedPoiFilters()) {
PoiUIFilter filter = getFilterById(f);
if (filter != null) {
@ -601,6 +589,7 @@ public class PoiFiltersHelper {
selectedPoiFilters.add(filter);
}
}
this.selectedPoiFilters = selectedPoiFilters;
}
@Nullable
@ -630,7 +619,7 @@ public class PoiFiltersHelper {
}
}
private void saveSelectedPoiFilters() {
private void saveSelectedPoiFilters(Set<PoiUIFilter> selectedPoiFilters) {
Set<String> filters = new HashSet<>();
for (PoiUIFilter filter : selectedPoiFilters) {
filters.add(filter.filterId);

View file

@ -4,7 +4,6 @@ package net.osmand.plus.poi;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.CollatorStringMatcher;
import net.osmand.CollatorStringMatcher.StringMatcherMode;
@ -380,17 +379,23 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable<PoiUIFilter>
private AmenityNameFilter getNameFilterInternal(StringBuilder nmFilter,
final boolean allTime, final boolean open, final List<PoiType> poiAdditionals) {
final CollatorStringMatcher sm =
nmFilter.length() > 0 ?
final CollatorStringMatcher sm = nmFilter.length() > 0 ?
new CollatorStringMatcher(nmFilter.toString().trim(), StringMatcherMode.CHECK_CONTAINS) : null;
return new AmenityNameFilter() {
@Override
public boolean accept(Amenity a) {
if (sm != null) {
String lower = OsmAndFormatter.getPoiStringWithoutType(a,
List<String> names = OsmAndFormatter.getPoiStringsWithoutType(a,
app.getSettings().MAP_PREFERRED_LOCALE.get(), app.getSettings().MAP_TRANSLITERATE_NAMES.get());
if (!sm.matches(lower)) {
boolean match = false;
for (String name : names) {
if (sm.matches(name)) {
match = true;
break;
}
}
if (!match) {
return false;
}
}

View file

@ -67,11 +67,13 @@ import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
@ -766,17 +768,28 @@ public class ResourceManager {
warnings.add(MessageFormat.format(context.getString(R.string.version_index_is_big_for_memory), f.getName()));
}
}
Map<PoiCategory, Map<String, PoiType>> toAddPoiTypes = new HashMap<>();
for (AmenityIndexRepository repo : amenityRepositories.values()) {
Map<String, List<String>> categories = ((AmenityIndexRepositoryBinary) repo).getDeltaPoiCategories();
if (!categories.isEmpty()) {
for (Map.Entry<String, List<String>> entry : categories.entrySet()) {
PoiCategory poiCategory = context.getPoiTypes().getPoiCategoryByName(entry.getKey(), true);
if (!toAddPoiTypes.containsKey(poiCategory)) {
toAddPoiTypes.put(poiCategory, new TreeMap<String, PoiType>());
}
Map<String, PoiType> poiTypes = toAddPoiTypes.get(poiCategory);
for (String s : entry.getValue()) {
poiCategory.addPoiType(new PoiType(MapPoiTypes.getDefault(), poiCategory, null, s));
poiTypes.put(s, new PoiType(MapPoiTypes.getDefault(), poiCategory, null, s));
}
}
}
}
Iterator<Entry<PoiCategory, Map<String, PoiType>>> it = toAddPoiTypes.entrySet().iterator();
while(it.hasNext()) {
Entry<PoiCategory, Map<String, PoiType>> next = it.next();
PoiCategory category = next.getKey();
category.addExtraPoiTypes(next.getValue());
}
log.debug("All map files initialized " + (System.currentTimeMillis() - val) + " ms");
if (files.size() > 0 && (!indCache.exists() || indCache.canWrite())) {
try {

View file

@ -68,14 +68,12 @@ import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiType;
import net.osmand.plus.AppInitializer;
import net.osmand.plus.AppInitializer.AppInitializeListener;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.LockableViewPager;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.Version;
@ -92,6 +90,8 @@ import net.osmand.plus.search.listitems.QuickSearchHeaderListItem;
import net.osmand.plus.search.listitems.QuickSearchListItem;
import net.osmand.plus.search.listitems.QuickSearchMoreListItem;
import net.osmand.plus.search.listitems.QuickSearchMoreListItem.SearchMoreItemOnClickListener;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType;
import net.osmand.search.SearchUICore;
@ -354,19 +354,18 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
} else if (searchPhrase.isNoSelectedType() || searchPhrase.isLastWord(POI_TYPE)) {
PoiUIFilter filter;
if (searchPhrase.isNoSelectedType()) {
AbstractPoiType uselectedPoiType = searchUICore.getUnselectedPoiType();
if (isOnlineSearch() && !Algorithms.isEmpty(searchPhrase.getFirstUnknownSearchWord())) {
app.getPoiFilters().resetNominatimFilters();
filter = app.getPoiFilters().getNominatimPOIFilter();
filter.setFilterByName(searchPhrase.getUnknownSearchPhrase());
filter.clearCurrentResults();
// TODO Alexey
// } else if (searchPhrase.hasUnknownSearchWordPoiType()) {
// AbstractPoiType pt = searchPhrase.getUnknownSearchWordPoiType();
// filter = new PoiUIFilter(pt, app, "");
// String customName = searchPhrase.getPoiNameFilter();
// if (!Algorithms.isEmpty(customName)) {
// filter.setFilterByName(customName);
// }
} else if (uselectedPoiType != null) {
filter = new PoiUIFilter(uselectedPoiType, app, "");
String customName = searchUICore.getCustomNameFilter();
if (!Algorithms.isEmpty(customName)) {
filter.setFilterByName(customName);
}
} else {
filter = app.getPoiFilters().getSearchByNamePOIFilter();
if (!Algorithms.isEmpty(searchPhrase.getFirstUnknownSearchWord())) {
@ -1249,7 +1248,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
@Override
public void onApplyPoiFiltersState(final ApplicationMode appMode, boolean stateChanged) {
if (stateChanged) {
searchHelper.refreshFilterOrders();
searchHelper.refreshCustomPoiFilters();
reloadCategoriesInternal();
}
View containerView = getView();
@ -1269,7 +1268,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
settings.POI_FILTERS_ORDER.setModeValue(mode, orders);
settings.INACTIVE_POI_FILTERS.setModeValue(mode, inactive);
}
searchHelper.refreshFilterOrders();
searchHelper.refreshCustomPoiFilters();
reloadCategoriesInternal();
}
});

View file

@ -111,15 +111,18 @@ public class QuickSearchHelper implements ResourceListener {
for (CustomSearchPoiFilter udf : poiFilters.getUserDefinedPoiFilters(false)) {
core.addCustomSearchPoiFilter(udf, 0);
}
PoiUIFilter localWikiPoiFilter = poiFilters.getLocalWikiPOIFilter();
if (localWikiPoiFilter != null) {
core.addCustomSearchPoiFilter(localWikiPoiFilter, 1);
PoiUIFilter topWikiPoiFilter = poiFilters.getTopWikiPoiFilter();
if (topWikiPoiFilter != null && topWikiPoiFilter.isActive()) {
core.addCustomSearchPoiFilter(topWikiPoiFilter, 1);
}
PoiUIFilter showAllPOIFilter = poiFilters.getShowAllPOIFilter();
if (showAllPOIFilter != null && showAllPOIFilter.isActive()) {
core.addCustomSearchPoiFilter(showAllPOIFilter, 1);
}
core.addCustomSearchPoiFilter(poiFilters.getShowAllPOIFilter(), 1);
refreshFilterOrders();
}
public void refreshFilterOrders() {
private void refreshFilterOrders() {
PoiFiltersHelper filtersHelper = app.getPoiFilters();
core.setActivePoiFiltersByOrder(filtersHelper.getPoiFilterOrders(true));
}
@ -201,7 +204,7 @@ public class QuickSearchHelper implements ResourceListener {
//sr.localeRelatedObjectName = app.getRegions().getCountryName(sr.location);
sr.relatedObject = selectedGpx.getGpxFile();
sr.preferredZoom = 17;
if (phrase.getFirstUnknownSearchWord().length() <= 1 && phrase.isNoSelectedType()) {
if (phrase.getFullSearchPhrase().length() <= 1 && phrase.isNoSelectedType()) {
resultMatcher.publish(sr);
} else if (phrase.getFirstUnknownNameStringMatcher().matches(sr.localeName)) {
resultMatcher.publish(sr);
@ -313,7 +316,7 @@ public class QuickSearchHelper implements ResourceListener {
continue;
}
}
if (phrase.getFirstUnknownSearchWord().length() <= 1
if (phrase.getFullSearchPhrase().length() <= 1
&& (phrase.isNoSelectedType() || phrase.isLastWord(ObjectType.FAVORITE_GROUP))) {
resultMatcher.publish(sr);
} else if (phrase.getFirstUnknownNameStringMatcher().matches(sr.localeName)) {
@ -457,7 +460,7 @@ public class QuickSearchHelper implements ResourceListener {
}
if (publish) {
sr.priority = SEARCH_HISTORY_OBJECT_PRIORITY + (p++);
if (phrase.getFirstUnknownSearchWord().length() <= 1 && phrase.isNoSelectedType()) {
if (phrase.getFullSearchPhrase().length() <= 1 && phrase.isNoSelectedType()) {
resultMatcher.publish(sr);
} else if (phrase.getFirstUnknownNameStringMatcher().matches(sr.localeName)) {
resultMatcher.publish(sr);

View file

@ -10,7 +10,7 @@ import net.osmand.plus.settings.bottomsheets.VehicleSizeAssets;
public class SizePreference extends DialogPreference {
private String[] entries;
private Object[] entryValues;
private String[] entryValues;
private String description;
private VehicleSizeAssets assets;
@ -40,11 +40,11 @@ public class SizePreference extends DialogPreference {
this.entries = entries;
}
public Object[] getEntryValues() {
public String[] getEntryValues() {
return entryValues;
}
public void setEntryValues(Object[] entryValues) {
public void setEntryValues(String[] entryValues) {
this.entryValues = entryValues;
}
@ -69,7 +69,11 @@ public class SizePreference extends DialogPreference {
String[] entries = getEntries();
for (int i = 0; i < entries.length; i++) {
if (entries[i].equals(item)) {
return Float.parseFloat(getEntryValues()[i].toString());
try {
return Float.parseFloat(entryValues[i]);
} catch (NumberFormatException e) {
return 0.0f;
}
}
}
return 0.0f;
@ -77,12 +81,18 @@ public class SizePreference extends DialogPreference {
@Override
public CharSequence getSummary() {
String summary = "-";
String persistedString = getValue();
if (!persistedString.equals(defaultValue)) {
try {
persistedString = String.valueOf(Float.parseFloat(persistedString) + 0.01f);
return String.format(getContext().getString(R.string.ltr_or_rtl_combine_via_space), persistedString, getContext().getString(assets.getMetricShortRes()));
summary = String.format(getContext().getString(R.string.ltr_or_rtl_combine_via_space),
persistedString, getContext().getString(assets.getMetricShortRes()));
} catch (NumberFormatException e) {
summary = "-";
}
return "-";
}
return summary;
}
public String getValue() {

View file

@ -236,9 +236,9 @@ public class SRTMPlugin extends OsmandPlugin {
if (contourLinesProp != null) {
final OsmandSettings.CommonPreference<String> pref = app.getSettings().getCustomRenderProperty(contourLinesProp.getAttrName());
if (!Algorithms.isEmpty(pref.get())) {
contourLinesEnabled = !pref.get().equals(CONTOUR_LINES_DISABLED_VALUE);
contourLinesEnabled = !CONTOUR_LINES_DISABLED_VALUE.equals(pref.get());
} else {
contourLinesEnabled = !contourLinesProp.getDefaultValueDescription().equals(CONTOUR_LINES_DISABLED_VALUE);
contourLinesEnabled = !CONTOUR_LINES_DISABLED_VALUE.equals(contourLinesProp.getDefaultValueDescription());
}
}
return contourLinesEnabled;

View file

@ -1,28 +1,5 @@
package net.osmand.plus.srtmplugin;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.data.QuadRect;
import net.osmand.data.QuadTree;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.TileSourceManager.TileSourceTemplate;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmandSettings.TerrainMode;
import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
import net.osmand.plus.views.MapTileLayer;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.database.Cursor;
@ -31,6 +8,29 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.AsyncTask;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.data.QuadRect;
import net.osmand.data.QuadTree;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.TileSourceManager.TileSourceTemplate;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.SQLiteTileSource;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
import net.osmand.plus.settings.backend.OsmandSettings.TerrainMode;
import net.osmand.plus.views.MapTileLayer;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import static net.osmand.plus.settings.backend.OsmandSettings.TerrainMode.HILLSHADE;
public class TerrainLayer extends MapTileLayer {
@ -88,8 +88,8 @@ public class TerrainLayer extends MapTileLayer {
| SQLiteDatabase.CREATE_IF_NECESSARY );
if (sqliteDb.getVersion() == 0) {
sqliteDb.setVersion(1);
sqliteDb.execSQL("CREATE TABLE TILE_SOURCES(filename varchar2(256), date_modified int, left int, right int, top int, bottom int)");
}
sqliteDb.execSQL("CREATE TABLE IF NOT EXISTS TILE_SOURCES(filename varchar2(256), date_modified int, left int, right int, top int, bottom int)");
Map<String, Long> fileModified = new HashMap<String, Long>();
Map<String, SQLiteTileSource> rs = readFiles(app, tilesDir, fileModified);