Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
02c5eb6009
7 changed files with 152 additions and 74 deletions
|
@ -9,6 +9,7 @@
|
|||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
||||
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
|
||||
-->
|
||||
<string name="type_address">Type address</string>
|
||||
<string name="type_city_town">Type city or town</string>
|
||||
<string name="type_postcode">Type postcode</string>
|
||||
<string name="nearest_cities">Nearest cities</string>
|
||||
|
|
|
@ -122,7 +122,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
private QuickSearchMainListFragment mainSearchFragment;
|
||||
private QuickSearchHistoryListFragment historySearchFragment;
|
||||
private QuickSearchCategoriesListFragment categoriesSearchFragment;
|
||||
private QuickSearchAddressListFragment addrSearchFragment;
|
||||
private QuickSearchAddressListFragment addressSearchFragment;
|
||||
private QuickSearchToolbarController toolbarController;
|
||||
|
||||
private Toolbar toolbarEdit;
|
||||
|
@ -436,7 +436,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
addressSearch = position == 2;
|
||||
updateClearButtonAndHint();
|
||||
if (addressSearch) {
|
||||
startSearchingCity(true, true);
|
||||
startAddressSearch();
|
||||
} else {
|
||||
stopAddressSearch();
|
||||
}
|
||||
|
@ -466,6 +466,9 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
updateClearButtonVisibility(true);
|
||||
boolean textEmpty = newQueryText.length() == 0;
|
||||
updateTabbarVisibility(textEmpty);
|
||||
if (textEmpty && addressSearch) {
|
||||
startAddressSearch();
|
||||
}
|
||||
if (textEmpty && poiFilterApplied) {
|
||||
poiFilterApplied = false;
|
||||
reloadCategories();
|
||||
|
@ -477,15 +480,8 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
if (!searchQuery.equalsIgnoreCase(newQueryText)) {
|
||||
searchQuery = newQueryText;
|
||||
if (Algorithms.isEmpty(searchQuery)) {
|
||||
if (addressSearch) {
|
||||
startSearchingCity(true, true);
|
||||
}
|
||||
searchUICore.resetPhrase();
|
||||
} else {
|
||||
if (addressSearch) {
|
||||
updateAddressSearch(searchUICore.getPhrase().getLastSelectedWord() != null
|
||||
? searchUICore.getPhrase().getLastSelectedWord().getResult() : null);
|
||||
}
|
||||
runSearch();
|
||||
}
|
||||
} else if (runSearchFirstTime) {
|
||||
|
@ -517,6 +513,9 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
searchUICore.updateSettings(ss);
|
||||
updateClearButtonAndHint();
|
||||
updateClearButtonVisibility(true);
|
||||
if (addressSearchFragment != null) {
|
||||
reloadCities();
|
||||
}
|
||||
startLocationUpdate();
|
||||
}
|
||||
updateToolbarButton();
|
||||
|
@ -898,7 +897,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
clearButton.setImageDrawable(app.getIconsCache().getIcon(R.drawable.ic_action_get_my_location, R.color.color_myloc_distance));
|
||||
} else {
|
||||
if (addressSearch) {
|
||||
searchEditText.setHint(R.string.type_city_town);
|
||||
searchEditText.setHint(R.string.type_address);
|
||||
} else {
|
||||
searchEditText.setHint(R.string.search_poi_category_hint);
|
||||
}
|
||||
|
@ -953,7 +952,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
break;
|
||||
|
||||
case ADDRESS:
|
||||
addrSearchFragment = (QuickSearchAddressListFragment) searchListFragment;
|
||||
addressSearchFragment = (QuickSearchAddressListFragment) searchListFragment;
|
||||
reloadCities();
|
||||
break;
|
||||
|
||||
|
@ -1002,8 +1001,13 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
|
||||
private void reloadCategoriesInternal() {
|
||||
try {
|
||||
SearchResultCollection res = searchUICore.shallowSearch(SearchAmenityTypesAPI.class,
|
||||
"", null);
|
||||
if (addressSearch) {
|
||||
stopAddressSearch();
|
||||
}
|
||||
SearchResultCollection res = searchUICore.shallowSearch(SearchAmenityTypesAPI.class, "", null);
|
||||
if (addressSearch) {
|
||||
startAddressSearch();
|
||||
}
|
||||
if (res != null) {
|
||||
List<QuickSearchListItem> rows = new ArrayList<>();
|
||||
for (SearchResult sr : res.getCurrentSearchResults()) {
|
||||
|
@ -1052,11 +1056,10 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
|
||||
private void reloadCitiesInternal() {
|
||||
try {
|
||||
startSearchingCity(false, false);
|
||||
SearchResultCollection res = searchUICore.shallowSearch(SearchAddressByNameAPI.class,
|
||||
"", null);
|
||||
startNearestCitySearch();
|
||||
SearchResultCollection res = searchUICore.shallowSearch(SearchAddressByNameAPI.class, "", null);
|
||||
if (addressSearch) {
|
||||
startSearchingCity(true, true);
|
||||
startAddressSearch();
|
||||
} else {
|
||||
stopAddressSearch();
|
||||
}
|
||||
|
@ -1067,7 +1070,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
searchEditText.setHint(R.string.type_city_town);
|
||||
startSearchingCity(true, true);
|
||||
startCitySearch();
|
||||
updateTabbarVisibility(false);
|
||||
runSearch();
|
||||
searchEditText.requestFocus();
|
||||
|
@ -1079,7 +1082,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
searchEditText.setHint(R.string.type_postcode);
|
||||
startSearchingPostcode(true);
|
||||
startPostcodeSearch();
|
||||
mainSearchFragment.getAdapter().clear();
|
||||
updateTabbarVisibility(false);
|
||||
searchEditText.requestFocus();
|
||||
|
@ -1097,7 +1100,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
limit--;
|
||||
}
|
||||
}
|
||||
addrSearchFragment.updateListAdapter(rows, false);
|
||||
addressSearchFragment.updateListAdapter(rows, false);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
app.showToastMessage(e.getMessage());
|
||||
|
@ -1129,9 +1132,14 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
|
||||
private void reloadHistoryInternal() {
|
||||
try {
|
||||
SearchResultCollection res = searchUICore.shallowSearch(SearchHistoryAPI.class,
|
||||
"", null);
|
||||
List<QuickSearchListItem> rows = new ArrayList<>();
|
||||
if (addressSearch) {
|
||||
stopAddressSearch();
|
||||
}
|
||||
SearchResultCollection res = searchUICore.shallowSearch(SearchHistoryAPI.class, "", null);
|
||||
if (addressSearch) {
|
||||
startAddressSearch();
|
||||
}
|
||||
List<QuickSearchListItem> rows = new ArrayList<>();
|
||||
if (res != null) {
|
||||
for (SearchResult sr : res.getCurrentSearchResults()) {
|
||||
rows.add(new QuickSearchListItem(app, sr));
|
||||
|
@ -1144,58 +1152,52 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
}
|
||||
}
|
||||
|
||||
private void startSearchingCity(boolean sortByName, boolean searchVillages) {
|
||||
private void startAddressSearch() {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setEmptyQueryAllowed(true)
|
||||
.setAddressSearch(true)
|
||||
.setSortByName(true)
|
||||
.setSearchTypes(ObjectType.CITY, ObjectType.VILLAGE, ObjectType.POSTCODE,
|
||||
ObjectType.HOUSE, ObjectType.STREET_INTERSECTION, ObjectType.STREET,
|
||||
ObjectType.LOCATION, ObjectType.PARTIAL_LOCATION)
|
||||
.setRadiusLevel(1);
|
||||
|
||||
if (sortByName) {
|
||||
settings = settings.setSortByName(true);
|
||||
}
|
||||
if (searchVillages) {
|
||||
settings = settings.setSearchTypes(ObjectType.CITY, ObjectType.VILLAGE);
|
||||
} else {
|
||||
settings = settings.setSearchTypes(ObjectType.CITY);
|
||||
}
|
||||
searchUICore.updateSettings(settings);
|
||||
}
|
||||
|
||||
private void startSearchingPostcode(boolean sortByName) {
|
||||
private void startCitySearch() {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setEmptyQueryAllowed(true)
|
||||
.setAddressSearch(true)
|
||||
.setSortByName(true)
|
||||
.setSearchTypes(ObjectType.CITY, ObjectType.VILLAGE)
|
||||
.setRadiusLevel(1);
|
||||
|
||||
searchUICore.updateSettings(settings);
|
||||
}
|
||||
|
||||
private void startNearestCitySearch() {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setEmptyQueryAllowed(true)
|
||||
.setAddressSearch(true)
|
||||
.setSortByName(false)
|
||||
.setSearchTypes(ObjectType.CITY)
|
||||
.setRadiusLevel(1);
|
||||
|
||||
searchUICore.updateSettings(settings);
|
||||
}
|
||||
|
||||
private void startPostcodeSearch() {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setSearchTypes(ObjectType.POSTCODE)
|
||||
.setEmptyQueryAllowed(false)
|
||||
.setAddressSearch(true)
|
||||
.setSortByName(true)
|
||||
.setRadiusLevel(1);
|
||||
|
||||
if (sortByName) {
|
||||
settings = settings.setSortByName(true);
|
||||
}
|
||||
searchUICore.updateSettings(settings);
|
||||
}
|
||||
|
||||
private void updateAddressSearch(SearchResult searchResult) {
|
||||
if (searchResult != null) {
|
||||
if (searchResult.objectType == ObjectType.STREET) {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setSearchTypes(ObjectType.HOUSE, ObjectType.STREET_INTERSECTION)
|
||||
.setEmptyQueryAllowed(false)
|
||||
.setSortByName(false)
|
||||
.setRadiusLevel(1);
|
||||
|
||||
searchUICore.updateSettings(settings);
|
||||
} else if (searchResult.objectType == ObjectType.CITY || searchResult.objectType == ObjectType.VILLAGE) {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setSearchTypes(ObjectType.STREET)
|
||||
.setEmptyQueryAllowed(false)
|
||||
.setSortByName(false)
|
||||
.setRadiusLevel(1);
|
||||
|
||||
searchUICore.updateSettings(settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void stopAddressSearch() {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.resetSearchTypes()
|
||||
|
@ -1384,9 +1386,6 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
}
|
||||
}
|
||||
searchUICore.selectSearchResult(sr);
|
||||
if (addressSearch) {
|
||||
updateAddressSearch(sr);
|
||||
}
|
||||
String txt = searchUICore.getPhrase().getText(true);
|
||||
searchQuery = txt;
|
||||
searchEditText.setText(txt);
|
||||
|
@ -1573,8 +1572,8 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
historySearchFragment.updateLocation(latLon, heading);
|
||||
} else if (categoriesSearchFragment != null && viewPager.getCurrentItem() == 1) {
|
||||
categoriesSearchFragment.updateLocation(latLon, heading);
|
||||
} else if (addrSearchFragment != null && viewPager.getCurrentItem() == 2) {
|
||||
addrSearchFragment.updateLocation(latLon, heading);
|
||||
} else if (addressSearchFragment != null && viewPager.getCurrentItem() == 2) {
|
||||
addressSearchFragment.updateLocation(latLon, heading);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1590,8 +1589,8 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
if (categoriesSearchFragment != null) {
|
||||
categoriesSearchFragment.getListAdapter().setUseMapCenter(useMapCenter);
|
||||
}
|
||||
if (addrSearchFragment != null) {
|
||||
addrSearchFragment.getListAdapter().setUseMapCenter(useMapCenter);
|
||||
if (addressSearchFragment != null) {
|
||||
addressSearchFragment.getListAdapter().setUseMapCenter(useMapCenter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -174,6 +174,9 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
|
|||
}
|
||||
|
||||
public void insertListItem(@NonNull QuickSearchListItem item, int index) {
|
||||
if (hasSearchMoreItem && item.getType() == QuickSearchListItemType.SEARCH_MORE) {
|
||||
return;
|
||||
}
|
||||
setNotifyOnChange(false);
|
||||
insert(item, index);
|
||||
if (item.getType() == QuickSearchListItemType.SEARCH_MORE) {
|
||||
|
@ -185,7 +188,10 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
|
|||
|
||||
@Override
|
||||
public boolean isEnabled(int position) {
|
||||
return getItem(position).getType() != QuickSearchListItemType.HEADER;
|
||||
QuickSearchListItemType type = getItem(position).getType();
|
||||
return type != QuickSearchListItemType.HEADER
|
||||
&& type != QuickSearchListItemType.TOP_SHADOW
|
||||
&& type != QuickSearchListItemType.BOTTOM_SHADOW;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -257,6 +263,26 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
|
|||
view.findViewById(R.id.top_divider)
|
||||
.setVisibility(((QuickSearchHeaderListItem)listItem).isShowTopDivider() ? View.VISIBLE : View.GONE);
|
||||
((TextView) view.findViewById(R.id.title)).setText(listItem.getName());
|
||||
} else if (type == QuickSearchListItemType.TOP_SHADOW) {
|
||||
if (convertView == null) {
|
||||
LayoutInflater inflater = (LayoutInflater) app
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
view = (LinearLayout) inflater.inflate(
|
||||
R.layout.list_shadow_header, null);
|
||||
} else {
|
||||
view = (LinearLayout) convertView;
|
||||
}
|
||||
return view;
|
||||
} else if (type == QuickSearchListItemType.BOTTOM_SHADOW) {
|
||||
if (convertView == null) {
|
||||
LayoutInflater inflater = (LayoutInflater) app
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
view = (LinearLayout) inflater.inflate(
|
||||
R.layout.list_shadow_footer, null);
|
||||
} else {
|
||||
view = (LinearLayout) convertView;
|
||||
}
|
||||
return view;
|
||||
} else {
|
||||
if (convertView == null) {
|
||||
LayoutInflater inflater = (LayoutInflater) app
|
||||
|
@ -344,7 +370,8 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
|
|||
app.getSettings().isLightContent() ? R.color.bg_color_light : R.color.bg_color_dark));
|
||||
View divider = view.findViewById(R.id.divider);
|
||||
if (divider != null) {
|
||||
if (position == getCount() - 1 || getItem(position + 1).getType() == QuickSearchListItemType.HEADER) {
|
||||
if (position == getCount() - 1 || getItem(position + 1).getType() == QuickSearchListItemType.HEADER
|
||||
|| getItem(position + 1).getType() == QuickSearchListItemType.BOTTOM_SHADOW) {
|
||||
divider.setVisibility(View.GONE);
|
||||
} else {
|
||||
divider.setVisibility(View.VISIBLE);
|
||||
|
|
|
@ -29,15 +29,18 @@ import net.osmand.plus.activities.MapActivity;
|
|||
import net.osmand.plus.base.OsmAndListFragment;
|
||||
import net.osmand.plus.dashboard.DashLocationFragment;
|
||||
import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry;
|
||||
import net.osmand.plus.search.listitems.QuickSearchBottomShadowListItem;
|
||||
import net.osmand.plus.search.listitems.QuickSearchButtonListItem;
|
||||
import net.osmand.plus.search.listitems.QuickSearchListItem;
|
||||
import net.osmand.plus.search.listitems.QuickSearchListItemType;
|
||||
import net.osmand.plus.search.listitems.QuickSearchMoreListItem;
|
||||
import net.osmand.plus.search.listitems.QuickSearchTopShadowListItem;
|
||||
import net.osmand.search.core.ObjectType;
|
||||
import net.osmand.search.core.SearchResult;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class QuickSearchListFragment extends OsmAndListFragment {
|
||||
|
@ -77,10 +80,10 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
|
|||
}
|
||||
}
|
||||
});
|
||||
View header = getLayoutInflater(savedInstanceState).inflate(R.layout.list_shadow_header, null);
|
||||
View footer = getLayoutInflater(savedInstanceState).inflate(R.layout.list_shadow_footer, null);
|
||||
listView.addHeaderView(header, null, false);
|
||||
listView.addFooterView(footer, null, false);
|
||||
//View header = getLayoutInflater(savedInstanceState).inflate(R.layout.list_shadow_header, null);
|
||||
//View footer = getLayoutInflater(savedInstanceState).inflate(R.layout.list_shadow_footer, null);
|
||||
//listView.addHeaderView(header, null, false);
|
||||
//listView.addFooterView(footer, null, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -322,7 +325,12 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
|
|||
|
||||
public void updateListAdapter(List<QuickSearchListItem> listItems, boolean append) {
|
||||
if (listAdapter != null) {
|
||||
listAdapter.setListItems(listItems);
|
||||
List<QuickSearchListItem> list = new ArrayList<>(listItems);
|
||||
if (list.size() > 0) {
|
||||
list.add(0, new QuickSearchTopShadowListItem(getMyApplication()));
|
||||
list.add(new QuickSearchBottomShadowListItem(getMyApplication()));
|
||||
}
|
||||
listAdapter.setListItems(list);
|
||||
if (!append) {
|
||||
getListView().setSelection(0);
|
||||
}
|
||||
|
@ -331,7 +339,20 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
|
|||
|
||||
public void addListItem(QuickSearchListItem listItem) {
|
||||
if (listItem != null) {
|
||||
listAdapter.addListItem(listItem);
|
||||
if (listAdapter.getCount() == 0) {
|
||||
List<QuickSearchListItem> list = new ArrayList<>();
|
||||
list.add(new QuickSearchTopShadowListItem(getMyApplication()));
|
||||
list.add(listItem);
|
||||
list.add(new QuickSearchBottomShadowListItem(getMyApplication()));
|
||||
listAdapter.setListItems(list);
|
||||
} else {
|
||||
QuickSearchListItem lastItem = listAdapter.getItem(listAdapter.getCount() - 1);
|
||||
if (lastItem.getType() == QuickSearchListItemType.BOTTOM_SHADOW) {
|
||||
listAdapter.insertListItem(listItem, listAdapter.getCount() - 1);
|
||||
} else {
|
||||
listAdapter.addListItem(listItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package net.osmand.plus.search.listitems;
|
||||
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
||||
public class QuickSearchBottomShadowListItem extends QuickSearchListItem {
|
||||
|
||||
public QuickSearchBottomShadowListItem(OsmandApplication app) {
|
||||
super(app, null);
|
||||
}
|
||||
|
||||
public QuickSearchListItemType getType() {
|
||||
return QuickSearchListItemType.BOTTOM_SHADOW;
|
||||
}
|
||||
}
|
|
@ -5,5 +5,7 @@ public enum QuickSearchListItemType {
|
|||
HEADER,
|
||||
BUTTON,
|
||||
SEARCH_MORE,
|
||||
SELECT_ALL
|
||||
SELECT_ALL,
|
||||
TOP_SHADOW,
|
||||
BOTTOM_SHADOW
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package net.osmand.plus.search.listitems;
|
||||
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
||||
public class QuickSearchTopShadowListItem extends QuickSearchListItem {
|
||||
|
||||
public QuickSearchTopShadowListItem(OsmandApplication app) {
|
||||
super(app, null);
|
||||
}
|
||||
|
||||
public QuickSearchListItemType getType() {
|
||||
return QuickSearchListItemType.TOP_SHADOW;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue