Search in sources :

Example 6 with SearchSettings

use of net.osmand.search.core.SearchSettings in project Osmand by osmandapp.

the class QuickSearchDialogFragment method stopAddressSearch.

private void stopAddressSearch() {
    SearchSettings settings = searchUICore.getSearchSettings().resetSearchTypes().setEmptyQueryAllowed(false).setSortByName(false).setRadiusLevel(1);
    searchUICore.updateSettings(settings);
}
Also used : SearchSettings(net.osmand.search.core.SearchSettings)

Example 7 with SearchSettings

use of net.osmand.search.core.SearchSettings in project Osmand by osmandapp.

the class QuickSearchDialogFragment method onCreateView.

@Override
@SuppressLint("PrivateResource, ValidFragment")
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final MapActivity mapActivity = getMapActivity();
    final View view = inflater.inflate(R.layout.search_dialog_fragment, container, false);
    toolbarController = new QuickSearchToolbarController();
    toolbarController.setOnBackButtonClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mapActivity.showQuickSearch(ShowQuickSearchMode.CURRENT, false);
        }
    });
    toolbarController.setOnTitleClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mapActivity.showQuickSearch(ShowQuickSearchMode.CURRENT, false);
        }
    });
    toolbarController.setOnCloseButtonClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mapActivity.closeQuickSearch();
        }
    });
    Bundle arguments = getArguments();
    if (savedInstanceState != null) {
        searchType = QuickSearchType.valueOf(savedInstanceState.getString(QUICK_SEARCH_TYPE_KEY, QuickSearchType.REGULAR.name()));
        searchQuery = savedInstanceState.getString(QUICK_SEARCH_QUERY_KEY);
        double lat = savedInstanceState.getDouble(QUICK_SEARCH_LAT_KEY, Double.NaN);
        double lon = savedInstanceState.getDouble(QUICK_SEARCH_LON_KEY, Double.NaN);
        if (!Double.isNaN(lat) && !Double.isNaN(lon)) {
            centerLatLon = new LatLon(lat, lon);
        }
        interruptedSearch = savedInstanceState.getBoolean(QUICK_SEARCH_INTERRUPTED_SEARCH_KEY, false);
        hidden = savedInstanceState.getBoolean(QUICK_SEARCH_HIDDEN_KEY, false);
        toolbarTitle = savedInstanceState.getString(QUICK_SEARCH_TOOLBAR_TITLE_KEY);
        toolbarVisible = savedInstanceState.getBoolean(QUICK_SEARCH_TOOLBAR_VISIBLE_KEY, false);
        fabVisible = savedInstanceState.getBoolean(QUICK_SEARCH_FAB_VISIBLE_KEY, false);
    }
    if (searchQuery == null && arguments != null) {
        searchType = QuickSearchType.valueOf(arguments.getString(QUICK_SEARCH_TYPE_KEY, QuickSearchType.REGULAR.name()));
        searchQuery = arguments.getString(QUICK_SEARCH_QUERY_KEY);
        runSearchFirstTime = arguments.getBoolean(QUICK_SEARCH_RUN_SEARCH_FIRST_TIME_KEY, false);
        phraseDefined = arguments.getBoolean(QUICK_SEARCH_PHRASE_DEFINED_KEY, false);
        double lat = arguments.getDouble(QUICK_SEARCH_LAT_KEY, Double.NaN);
        double lon = arguments.getDouble(QUICK_SEARCH_LON_KEY, Double.NaN);
        if (!Double.isNaN(lat) && !Double.isNaN(lon)) {
            centerLatLon = new LatLon(lat, lon);
        }
        newSearch = true;
    }
    if (searchQuery == null)
        searchQuery = "";
    QuickSearchTab showSearchTab = QuickSearchTab.HISTORY;
    if (arguments != null) {
        showSearchTab = QuickSearchTab.valueOf(arguments.getString(QUICK_SEARCH_SHOW_TAB_KEY, QuickSearchTab.HISTORY.name()));
    }
    if (showSearchTab == QuickSearchTab.ADDRESS) {
        addressSearch = true;
    }
    tabToolbarView = view.findViewById(R.id.tab_toolbar_layout);
    tabsView = view.findViewById(R.id.tabs_view);
    searchView = view.findViewById(R.id.search_view);
    buttonToolbarView = view.findViewById(R.id.button_toolbar_layout);
    buttonToolbarImage = (ImageView) view.findViewById(R.id.buttonToolbarImage);
    buttonToolbarImage.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_marker_dark));
    buttonToolbarFilter = (ImageButton) view.findViewById(R.id.filterButton);
    buttonToolbarFilter.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_filter));
    buttonToolbarFilter.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SearchPhrase searchPhrase = searchUICore.getPhrase();
            if (searchPhrase.isLastWord(POI_TYPE)) {
                String filterId = null;
                String filterByName = searchPhrase.getUnknownSearchPhrase().trim();
                Object object = searchPhrase.getLastSelectedWord().getResult().object;
                if (object instanceof PoiUIFilter) {
                    PoiUIFilter model = (PoiUIFilter) object;
                    if (!Algorithms.isEmpty(model.getSavedFilterByName())) {
                        model.setFilterByName(model.getSavedFilterByName());
                    }
                    filterId = model.getFilterId();
                } else if (object instanceof AbstractPoiType) {
                    AbstractPoiType abstractPoiType = (AbstractPoiType) object;
                    PoiUIFilter custom = app.getPoiFilters().getFilterById(PoiUIFilter.STD_PREFIX + abstractPoiType.getKeyName());
                    if (custom != null) {
                        custom.setFilterByName(null);
                        custom.clearFilter();
                        custom.updateTypesToAccept(abstractPoiType);
                        filterId = custom.getFilterId();
                    }
                }
                if (filterId != null) {
                    QuickSearchPoiFilterFragment.showDialog(QuickSearchDialogFragment.this, filterByName, filterId);
                }
            }
        }
    });
    buttonToolbarText = (TextView) view.findViewById(R.id.buttonToolbarTitle);
    view.findViewById(R.id.buttonToolbar).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SearchPhrase searchPhrase = searchUICore.getPhrase();
            if (foundPartialLocation) {
                QuickSearchCoordinatesFragment.showDialog(QuickSearchDialogFragment.this, searchPhrase.getUnknownSearchWord());
            } else if (searchPhrase.isNoSelectedType() || searchPhrase.isLastWord(POI_TYPE)) {
                PoiUIFilter filter;
                if (searchPhrase.isNoSelectedType()) {
                    if (isOnlineSearch() && !Algorithms.isEmpty(searchPhrase.getUnknownSearchWord())) {
                        app.getPoiFilters().resetNominatimFilters();
                        filter = app.getPoiFilters().getNominatimPOIFilter();
                        filter.setFilterByName(searchPhrase.getUnknownSearchWord());
                        filter.clearCurrentResults();
                    } else {
                        filter = app.getPoiFilters().getSearchByNamePOIFilter();
                        if (!Algorithms.isEmpty(searchPhrase.getUnknownSearchWord())) {
                            filter.setFilterByName(searchPhrase.getUnknownSearchWord());
                            filter.clearCurrentResults();
                        }
                    }
                } else if (searchPhrase.getLastSelectedWord().getResult().object instanceof AbstractPoiType) {
                    if (searchPhrase.isNoSelectedType()) {
                        filter = new PoiUIFilter(null, app, "");
                    } else {
                        AbstractPoiType abstractPoiType = (AbstractPoiType) searchPhrase.getLastSelectedWord().getResult().object;
                        filter = new PoiUIFilter(abstractPoiType, app, "");
                    }
                    if (!Algorithms.isEmpty(searchPhrase.getUnknownSearchWord())) {
                        filter.setFilterByName(searchPhrase.getUnknownSearchWord());
                    }
                } else {
                    filter = (PoiUIFilter) searchPhrase.getLastSelectedWord().getResult().object;
                }
                app.getPoiFilters().clearSelectedPoiFilters();
                app.getPoiFilters().addSelectedPoiFilter(filter);
                mapActivity.getContextMenu().closeActiveToolbar();
                showToolbar();
                getMapActivity().updateStatusBarColor();
                getMapActivity().refreshMap();
                hide();
            } else {
                SearchWord word = searchPhrase.getLastSelectedWord();
                if (word != null) {
                    if ((searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION || searchType == QuickSearchType.INTERMEDIATE) && word.getLocation() != null) {
                        if (mainSearchFragment != null) {
                            mainSearchFragment.showResult(word.getResult());
                        }
                    } else if (word.getLocation() != null) {
                        SearchResult searchResult = word.getResult();
                        String name = QuickSearchListItem.getName(app, searchResult);
                        String typeName = QuickSearchListItem.getTypeName(app, searchResult);
                        PointDescription pointDescription = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, typeName, name);
                        app.getSettings().setMapLocationToShow(searchResult.location.getLatitude(), searchResult.location.getLongitude(), searchResult.preferredZoom, pointDescription, true, searchResult.object);
                        hideToolbar();
                        MapActivity.launchMapActivityMoveToTop(getActivity());
                        reloadHistory();
                        hide();
                    } else if (word.getType() == ObjectType.FAVORITE_GROUP) {
                        FavouritesDbHelper.FavoriteGroup group = (FavouritesDbHelper.FavoriteGroup) word.getResult().object;
                        if (group.points.size() > 1) {
                            double left = 0, right = 0;
                            double top = 0, bottom = 0;
                            for (FavouritePoint p : group.points) {
                                if (left == 0) {
                                    left = p.getLongitude();
                                    right = p.getLongitude();
                                    top = p.getLatitude();
                                    bottom = p.getLatitude();
                                } else {
                                    left = Math.min(left, p.getLongitude());
                                    right = Math.max(right, p.getLongitude());
                                    top = Math.max(top, p.getLatitude());
                                    bottom = Math.min(bottom, p.getLatitude());
                                }
                            }
                            getMapActivity().getMapView().fitRectToMap(left, right, top, bottom, 0, 0, 0);
                            hideToolbar();
                            MapActivity.launchMapActivityMoveToTop(getActivity());
                            hide();
                        } else if (group.points.size() == 1) {
                            FavouritePoint p = group.points.get(0);
                            app.getSettings().setMapLocationToShow(p.getLatitude(), p.getLongitude(), word.getResult().preferredZoom);
                            hideToolbar();
                            MapActivity.launchMapActivityMoveToTop(getActivity());
                            hide();
                        }
                    }
                }
            }
        }
    });
    toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    if (!app.getSettings().isLightContent()) {
        toolbar.setBackgroundColor(ContextCompat.getColor(mapActivity, R.color.actionbar_dark_color));
    }
    toolbar.setNavigationIcon(app.getIconsCache().getThemedIcon(R.drawable.ic_arrow_back));
    toolbar.setNavigationContentDescription(R.string.access_shared_string_navigate_up);
    toolbar.setNavigationOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (!processBackAction()) {
                dismiss();
            }
        }
    });
    toolbarEdit = (Toolbar) view.findViewById(R.id.toolbar_edit);
    toolbarEdit.setNavigationIcon(app.getIconsCache().getIcon(R.drawable.ic_action_remove_dark));
    toolbarEdit.setNavigationContentDescription(R.string.shared_string_cancel);
    toolbarEdit.setNavigationOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            enableSelectionMode(false, -1);
        }
    });
    titleEdit = (TextView) view.findViewById(R.id.titleEdit);
    view.findViewById(R.id.shareButton).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            List<HistoryEntry> historyEntries = new ArrayList<HistoryEntry>();
            List<QuickSearchListItem> selectedItems = historySearchFragment.getListAdapter().getSelectedItems();
            for (QuickSearchListItem searchListItem : selectedItems) {
                HistoryEntry historyEntry = (HistoryEntry) searchListItem.getSearchResult().object;
                historyEntries.add(historyEntry);
            }
            if (historyEntries.size() > 0) {
                shareHistory(historyEntries);
                enableSelectionMode(false, -1);
            }
        }
    });
    view.findViewById(R.id.deleteButton).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            DeleteDialogFragment deleteDialog = new DeleteDialogFragment();
            deleteDialog.setSelectedItems(historySearchFragment.getListAdapter().getSelectedItems());
            deleteDialog.show(getChildFragmentManager(), "DeleteHistoryConfirmationFragment");
        }
    });
    viewPager = (LockableViewPager) view.findViewById(R.id.pager);
    viewPager.setOffscreenPageLimit(2);
    pagerAdapter = new SearchFragmentPagerAdapter(getChildFragmentManager(), getResources());
    viewPager.setAdapter(pagerAdapter);
    switch(showSearchTab) {
        case HISTORY:
            viewPager.setCurrentItem(0);
            break;
        case CATEGORIES:
            viewPager.setCurrentItem(1);
            break;
        case ADDRESS:
            viewPager.setCurrentItem(2);
            break;
    }
    tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(viewPager);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {
            hideKeyboard();
            addressSearch = position == 2;
            updateClearButtonAndHint();
            if (addressSearch && !citiesLoaded) {
                reloadCities();
            } else {
                restoreSearch();
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });
    searchEditText = (EditText) view.findViewById(R.id.searchEditText);
    searchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                searchQuery += " ";
                AndroidUtils.hideSoftKeyboard(getActivity(), searchEditText);
                runSearch();
                return true;
            }
            return false;
        }
    });
    searchEditText.addTextChangedListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            String newQueryText = s.toString();
            updateClearButtonAndHint();
            updateClearButtonVisibility(true);
            boolean textEmpty = newQueryText.length() == 0;
            updateTabbarVisibility(textEmpty && !isOnlineSearch());
            if (textEmpty) {
                if (addressSearch) {
                    startAddressSearch();
                }
                if (poiFilterApplied) {
                    poiFilterApplied = false;
                    reloadCategories();
                    if (fabVisible) {
                        fabVisible = false;
                        updateFab();
                    }
                }
            }
            if (!searchQuery.equalsIgnoreCase(newQueryText)) {
                searchQuery = newQueryText;
                if (Algorithms.isEmpty(searchQuery)) {
                    cancelSearch();
                    setResultCollection(null);
                    searchUICore.resetPhrase();
                    mainSearchFragment.getAdapter().clear();
                } else {
                    runSearch();
                }
            } else if (runSearchFirstTime) {
                runSearchFirstTime = false;
                runSearch();
            }
        }
    });
    progressBar = (ProgressBar) view.findViewById(R.id.searchProgressBar);
    clearButton = (ImageButton) view.findViewById(R.id.clearButton);
    clearButton.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_remove_dark));
    clearButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (searchEditText.getText().length() > 0) {
                String newText = searchUICore.getPhrase().getTextWithoutLastWord();
                searchEditText.setText(newText);
                searchEditText.setSelection(newText.length());
            } else if (useMapCenter && location != null) {
                useMapCenter = false;
                centerLatLon = null;
                updateUseMapCenterUI();
                LatLon centerLatLon = new LatLon(location.getLatitude(), location.getLongitude());
                SearchSettings ss = searchUICore.getSearchSettings().setOriginalLocation(new LatLon(centerLatLon.getLatitude(), centerLatLon.getLongitude()));
                searchUICore.updateSettings(ss);
                updateClearButtonAndHint();
                updateClearButtonVisibility(true);
                startLocationUpdate();
            }
            updateToolbarButton();
        }
    });
    fab = view.findViewById(R.id.fab);
    fab.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            saveCustomFilter();
        }
    });
    updateFab();
    setupSearch(mapActivity);
    return view;
}
Also used : FavouritePoint(net.osmand.data.FavouritePoint) SearchWord(net.osmand.search.core.SearchWord) SpannableString(android.text.SpannableString) SearchPhrase(net.osmand.search.core.SearchPhrase) KeyEvent(android.view.KeyEvent) QuickSearchListItem(net.osmand.plus.search.listitems.QuickSearchListItem) TextWatcher(android.text.TextWatcher) Editable(android.text.Editable) SearchSettings(net.osmand.search.core.SearchSettings) ArrayList(java.util.ArrayList) List(java.util.List) TextView(android.widget.TextView) MapActivity(net.osmand.plus.activities.MapActivity) Bundle(android.os.Bundle) SearchResult(net.osmand.search.core.SearchResult) FavouritesDbHelper(net.osmand.plus.FavouritesDbHelper) AbstractPoiType(net.osmand.osm.AbstractPoiType) ImageView(android.widget.ImageView) View(android.view.View) AdapterView(android.widget.AdapterView) TextView(android.widget.TextView) ListView(android.widget.ListView) LockableViewPager(net.osmand.plus.LockableViewPager) ViewPager(android.support.v4.view.ViewPager) FavouritePoint(net.osmand.data.FavouritePoint) SuppressLint(android.annotation.SuppressLint) PoiUIFilter(net.osmand.plus.poi.PoiUIFilter) LatLon(net.osmand.data.LatLon) PointDescription(net.osmand.data.PointDescription) SearchMoreItemOnClickListener(net.osmand.plus.search.listitems.QuickSearchMoreListItem.SearchMoreItemOnClickListener) OnClickListener(android.view.View.OnClickListener) HistoryEntry(net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry) SuppressLint(android.annotation.SuppressLint)

Example 8 with SearchSettings

use of net.osmand.search.core.SearchSettings in project Osmand by osmandapp.

the class QuickSearchDialogFragment method startOnlineSearch.

private void startOnlineSearch() {
    SearchSettings settings = searchUICore.getSearchSettings().setSearchTypes(ObjectType.ONLINE_SEARCH).setEmptyQueryAllowed(false).setSortByName(false).setRadiusLevel(1);
    searchUICore.updateSettings(settings);
    setResultCollection(null);
}
Also used : SearchSettings(net.osmand.search.core.SearchSettings)

Example 9 with SearchSettings

use of net.osmand.search.core.SearchSettings in project Osmand by osmandapp.

the class QuickSearchDialogFragment method startLastCitySearch.

private void startLastCitySearch(LatLon latLon) {
    SearchSettings settings = searchUICore.getSearchSettings();
    storedOriginalLocation = settings.getOriginalLocation();
    settings = settings.setEmptyQueryAllowed(true).setSortByName(false).setSearchTypes(ObjectType.CITY).setOriginalLocation(latLon).setRadiusLevel(1);
    searchUICore.updateSettings(settings);
}
Also used : SearchSettings(net.osmand.search.core.SearchSettings)

Example 10 with SearchSettings

use of net.osmand.search.core.SearchSettings in project Osmand by osmandapp.

the class QuickSearchDialogFragment method setupSearch.

private void setupSearch(final MapActivity mapActivity) {
    // Setup search core
    String locale = app.getSettings().MAP_PREFERRED_LOCALE.get();
    boolean transliterate = app.getSettings().MAP_TRANSLITERATE_NAMES.get();
    searchHelper = app.getSearchUICore();
    searchUICore = searchHelper.getCore();
    defaultResultListener = new SearchResultListener() {

        @Override
        public void publish(SearchResultCollection res, boolean append) {
            updateSearchResult(res, append);
        }

        @Override
        public void searchStarted(SearchPhrase phrase) {
        }

        @Override
        public boolean searchFinished(SearchPhrase phrase) {
            return true;
        }
    };
    stopAddressSearch();
    location = app.getLocationProvider().getLastKnownLocation();
    LatLon searchLatLon;
    if (centerLatLon == null) {
        LatLon clt = mapActivity.getMapView().getCurrentRotatedTileBox().getCenterLatLon();
        searchLatLon = clt;
        searchEditText.setHint(R.string.search_poi_category_hint);
        if (location != null) {
            double d = MapUtils.getDistance(clt, location.getLatitude(), location.getLongitude());
            if (d < DISTANCE_THRESHOLD) {
                searchLatLon = new LatLon(location.getLatitude(), location.getLongitude());
            } else {
                useMapCenter = true;
            }
        } else {
            useMapCenter = true;
        }
    } else {
        searchLatLon = centerLatLon;
        useMapCenter = true;
    }
    SearchSettings settings = searchUICore.getSearchSettings().setOriginalLocation(new LatLon(searchLatLon.getLatitude(), searchLatLon.getLongitude()));
    settings = settings.setLang(locale, transliterate);
    searchUICore.updateSettings(settings);
    if (newSearch) {
        setResultCollection(null);
        if (!phraseDefined) {
            searchUICore.resetPhrase();
        }
        phraseDefined = false;
    }
}
Also used : LatLon(net.osmand.data.LatLon) SearchResultCollection(net.osmand.search.SearchUICore.SearchResultCollection) SearchSettings(net.osmand.search.core.SearchSettings) SpannableString(android.text.SpannableString) SearchPhrase(net.osmand.search.core.SearchPhrase)

Aggregations

SearchSettings (net.osmand.search.core.SearchSettings)24 LatLon (net.osmand.data.LatLon)11 SearchResult (net.osmand.search.core.SearchResult)7 SearchResultCollection (net.osmand.search.SearchUICore.SearchResultCollection)6 SearchPhrase (net.osmand.search.core.SearchPhrase)6 ArrayList (java.util.ArrayList)4 SpannableString (android.text.SpannableString)3 SearchWord (net.osmand.search.core.SearchWord)3 SuppressLint (android.annotation.SuppressLint)2 Bundle (android.os.Bundle)2 Editable (android.text.Editable)2 TextWatcher (android.text.TextWatcher)2 View (android.view.View)2 OnClickListener (android.view.View.OnClickListener)2 ImageView (android.widget.ImageView)2 TextView (android.widget.TextView)2 Point (java.awt.Point)2 ActionEvent (java.awt.event.ActionEvent)2 ActionListener (java.awt.event.ActionListener)2 Test (org.junit.Test)2