forked from organicmaps/organicmaps
[fix] [ios] Fixed search usage (Cian and other cases).
This commit is contained in:
parent
f68d43d277
commit
5d0563b29b
4 changed files with 76 additions and 44 deletions
|
@ -584,10 +584,12 @@ BOOL gIsFirstMyPositionMode = YES;
|
|||
- (void)onKeyboardAnimation
|
||||
{
|
||||
auto const kbHeight = [MWMKeyboard keyboardHeight];
|
||||
self.visibleAreaKeyboard.constant = kbHeight;
|
||||
self.sideButtonsAreaKeyboard.constant = kbHeight;
|
||||
if (IPAD)
|
||||
{
|
||||
self.visibleAreaKeyboard.constant = kbHeight;
|
||||
self.placePageAreaKeyboard.constant = kbHeight;
|
||||
}
|
||||
[self.view layoutIfNeeded];
|
||||
}
|
||||
#pragma mark - Properties
|
||||
|
|
|
@ -10,6 +10,8 @@ class Result;
|
|||
|
||||
@interface MWMSearch : NSObject
|
||||
|
||||
+ (BOOL)isCianSearch:(NSString *)query;
|
||||
|
||||
+ (void)addObserver:(id<MWMSearchObserver>)observer;
|
||||
+ (void)removeObserver:(id<MWMSearchObserver>)observer;
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include "search/everywhere_search_params.hpp"
|
||||
#include "search/viewport_search_params.hpp"
|
||||
|
||||
extern NSString * const kCianCategory;
|
||||
|
||||
namespace
|
||||
{
|
||||
using Observer = id<MWMSearchObserver>;
|
||||
|
@ -40,6 +42,8 @@ using Observers = NSHashTable<Observer>;
|
|||
|
||||
@property(nonatomic) MWMSearchBanners * banners;
|
||||
|
||||
@property(nonatomic) NSInteger searchCount;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMSearch
|
||||
|
@ -63,6 +67,11 @@ using Observers = NSHashTable<Observer>;
|
|||
return manager;
|
||||
}
|
||||
|
||||
+ (BOOL)isCianSearch:(NSString *)query
|
||||
{
|
||||
return [query isEqualToString:[L(kCianCategory) stringByAppendingString:@" "]];
|
||||
}
|
||||
|
||||
- (instancetype)initManager
|
||||
{
|
||||
self = [super init];
|
||||
|
@ -81,32 +90,37 @@ using Observers = NSHashTable<Observer>;
|
|||
__strong auto self = weakSelf;
|
||||
if (!self)
|
||||
return;
|
||||
if (timestamp != self.lastSearchStamp)
|
||||
return;
|
||||
|
||||
self->m_everywhereResults = results;
|
||||
self->m_isLocalAdsCustomer = isLocalAdsCustomer;
|
||||
self.suggestionsCount = results.GetSuggestsCount();
|
||||
|
||||
if (results.IsEndMarker())
|
||||
if (timestamp == self.lastSearchStamp)
|
||||
{
|
||||
[self checkIsHotelResults:results];
|
||||
if (results.IsEndedNormal())
|
||||
self->m_everywhereResults = results;
|
||||
self->m_isLocalAdsCustomer = isLocalAdsCustomer;
|
||||
self.suggestionsCount = results.GetSuggestsCount();
|
||||
|
||||
if (results.IsEndMarker())
|
||||
{
|
||||
self.everywhereSearchCompleted = YES;
|
||||
if (IPAD || self.searchOnMap)
|
||||
[self checkIsHotelResults:results];
|
||||
if (results.IsEndedNormal())
|
||||
{
|
||||
self.everywhereSearchCompleted = YES;
|
||||
if ([MWMSearch isCianSearch:@(m_viewportParams.m_query.c_str())])
|
||||
{
|
||||
self.searchCount -= 1;
|
||||
return;
|
||||
}
|
||||
|
||||
auto & f = GetFramework();
|
||||
f.ShowSearchResults(m_everywhereResults);
|
||||
if (IPAD || self.searchOnMap)
|
||||
f.ShowSearchResults(m_everywhereResults);
|
||||
f.SearchInViewport(m_viewportParams);
|
||||
}
|
||||
}
|
||||
[self onSearchCompleted];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self onSearchResultsUpdated];
|
||||
else
|
||||
{
|
||||
[self onSearchResultsUpdated];
|
||||
}
|
||||
}
|
||||
if (results.IsEndMarker())
|
||||
self.searchCount -= 1;
|
||||
};
|
||||
}
|
||||
{
|
||||
|
@ -115,7 +129,7 @@ using Observers = NSHashTable<Observer>;
|
|||
__strong auto self = weakSelf;
|
||||
if (!self)
|
||||
return;
|
||||
[self onSearchStarted];
|
||||
self.searchCount += 1;
|
||||
};
|
||||
}
|
||||
{
|
||||
|
@ -130,11 +144,18 @@ using Observers = NSHashTable<Observer>;
|
|||
self.viewportResultsEmpty = results.GetCount() == 0;
|
||||
self.viewportSearchCompleted = YES;
|
||||
}
|
||||
[self onSearchCompleted];
|
||||
if (results.IsEndMarker())
|
||||
self.searchCount -= 1;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
- (void)searchEverywhere
|
||||
{
|
||||
GetFramework().SearchEverywhere(m_everywhereParams);
|
||||
self.searchCount += 1;
|
||||
}
|
||||
|
||||
- (void)checkIsHotelResults:(search::Results const &)results
|
||||
{
|
||||
self.isHotelResults = search::HotelsClassifier::IsHotelResults(results);
|
||||
|
@ -156,8 +177,9 @@ using Observers = NSHashTable<Observer>;
|
|||
[self updateCallbacks];
|
||||
[self updateFilters];
|
||||
auto & f = GetFramework();
|
||||
f.SearchEverywhere(m_everywhereParams);
|
||||
[self onSearchStarted];
|
||||
if ([MWMSearch isCianSearch:@(m_everywhereParams.m_query.c_str())])
|
||||
f.SearchInViewport(m_viewportParams);
|
||||
[self searchEverywhere];
|
||||
}
|
||||
|
||||
#pragma mark - Add/Remove Observers
|
||||
|
@ -251,7 +273,10 @@ using Observers = NSHashTable<Observer>;
|
|||
{
|
||||
auto manager = [MWMSearch manager];
|
||||
manager->m_everywhereResults.Clear();
|
||||
manager->m_everywhereParams.m_query.clear();
|
||||
manager->m_viewportParams.m_query.clear();
|
||||
manager.suggestionsCount = 0;
|
||||
[manager.filter reset];
|
||||
[self reset];
|
||||
}
|
||||
|
||||
|
@ -263,8 +288,6 @@ using Observers = NSHashTable<Observer>;
|
|||
if (manager.searchOnMap == searchOnMap)
|
||||
return;
|
||||
manager.searchOnMap = searchOnMap;
|
||||
if (!IPAD)
|
||||
[manager update];
|
||||
}
|
||||
|
||||
+ (NSUInteger)suggestionsCount { return [MWMSearch manager].suggestionsCount; }
|
||||
|
@ -288,7 +311,6 @@ using Observers = NSHashTable<Observer>;
|
|||
MWMSearch * manager = [MWMSearch manager];
|
||||
[manager.filter reset];
|
||||
[manager update];
|
||||
[manager onSearchCompleted];
|
||||
}
|
||||
|
||||
- (void)updateItemsIndexWithBannerReload:(BOOL)reloadBanner
|
||||
|
@ -337,18 +359,6 @@ using Observers = NSHashTable<Observer>;
|
|||
|
||||
- (void)onSearchCompleted
|
||||
{
|
||||
// TODO: Uncomment on release with search filters. Update to less annoying behavior.
|
||||
//
|
||||
// BOOL allCompleted = self.viewportSearchCompleted;
|
||||
// BOOL allEmpty = self.viewportResultsEmpty;
|
||||
// if (IPAD)
|
||||
// {
|
||||
// allCompleted = allCompleted && self.everywhereSearchCompleted;
|
||||
// allEmpty = allEmpty && m_everywhereResults.GetCount() == 0;
|
||||
// }
|
||||
// if (allCompleted && allEmpty)
|
||||
// [[MWMAlertViewController activeAlertController] presentSearchNoResultsAlert];
|
||||
|
||||
[self updateItemsIndexWithBannerReload:YES];
|
||||
for (Observer observer in self.observers)
|
||||
{
|
||||
|
@ -367,4 +377,18 @@ using Observers = NSHashTable<Observer>;
|
|||
}
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
- (void)setSearchCount:(NSInteger)searchCount
|
||||
{
|
||||
NSAssert((searchCount >= 0) &&
|
||||
((_searchCount == searchCount - 1) || (_searchCount == searchCount + 1)),
|
||||
@"Invalid search count update");
|
||||
if (_searchCount == 0)
|
||||
[self onSearchStarted];
|
||||
else if (searchCount == 0)
|
||||
[self onSearchCompleted];
|
||||
_searchCount = searchCount;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -113,7 +113,6 @@ using Observers = NSHashTable<Observer>;
|
|||
if (self.state != MWMSearchManagerStateHidden)
|
||||
self.state = MWMSearchManagerStateDefault;
|
||||
self.searchTextField.text = @"";
|
||||
[self clearFilter];
|
||||
[MWMSearch clear];
|
||||
}
|
||||
|
||||
|
@ -278,10 +277,7 @@ using Observers = NSHashTable<Observer>;
|
|||
{
|
||||
[self.navigationController popToRootViewControllerAnimated:NO];
|
||||
|
||||
self.actionBarState = MWMSearchManagerActionBarStateHidden;
|
||||
[self animateConstraints:^{
|
||||
self.actionBarViewBottom.priority = UILayoutPriorityDefaultLow;
|
||||
}];
|
||||
[self updateTableSearchActionBar];
|
||||
[self viewHidden:NO];
|
||||
[MWMSearch setSearchOnMap:NO];
|
||||
[self.tableViewController reloadData];
|
||||
|
@ -327,6 +323,12 @@ using Observers = NSHashTable<Observer>;
|
|||
#pragma mark - MWMSearchObserver
|
||||
|
||||
- (void)onSearchCompleted
|
||||
{
|
||||
if (self.state == MWMSearchManagerStateTableSearch)
|
||||
[self updateTableSearchActionBar];
|
||||
}
|
||||
|
||||
- (void)updateTableSearchActionBar
|
||||
{
|
||||
if (self.state != MWMSearchManagerStateTableSearch)
|
||||
return;
|
||||
|
@ -340,6 +342,8 @@ using Observers = NSHashTable<Observer>;
|
|||
hideActionBar = ([MWMSearch suggestionsCount] != 0);
|
||||
self.actionBarState = hideActionBar ? MWMSearchManagerActionBarStateHidden
|
||||
: MWMSearchManagerActionBarStateModeFilter;
|
||||
|
||||
self.actionBarViewBottom.priority = UILayoutPriorityDefaultLow;
|
||||
}];
|
||||
}
|
||||
|
||||
|
@ -370,7 +374,7 @@ using Observers = NSHashTable<Observer>;
|
|||
switch (self.state)
|
||||
{
|
||||
case MWMSearchManagerStateTableSearch: self.state = MWMSearchManagerStateMapSearch; break;
|
||||
case MWMSearchManagerStateMapSearch: self.state = MWMSearchManagerStateTableSearch;
|
||||
case MWMSearchManagerStateMapSearch: self.state = MWMSearchManagerStateTableSearch; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue