Skip to content

Commit

Permalink
Merge pull request #147 from mapzen/132-search-back-stack
Browse files Browse the repository at this point in the history
Improve search UI back stack management
  • Loading branch information
ecgreb committed Dec 1, 2015
2 parents ca8f676 + 77fe108 commit d41799b
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,30 +42,32 @@ public open class MainPresenterImpl(val mapzenLocation: MapzenLocation, val bus:
this.searchResults = searchResults
mainViewController?.showSearchResults(searchResults?.getFeatures())
mainViewController?.hideProgress()
val featureCount = searchResults?.getFeatures()?.size()
val featureCount = searchResults?.features?.size
if (featureCount != null && featureCount > 1) {
mainViewController?.showActionViewAll()
mainViewController?.hideOverflowMenu()
} else {
mainViewController?.hideActionViewAll()
mainViewController?.showOverflowMenu()
}
}

override fun onReverseGeocodeResultsAvailable(searchResults: Result?) {
var features = ArrayList<Feature>()
this.searchResults = searchResults
if(searchResults?.getFeatures()?.isEmpty() as Boolean) {
if(searchResults?.features?.isEmpty() as Boolean) {
val current = currentFeature
if (current is Feature) {
features.add(current)
}
mainViewController?.showReverseGeocodeFeature(features)
searchResults?.setFeatures(features)
} else {
val current = searchResults?.getFeatures()?.get(0)
val current = searchResults?.features?.get(0)
if (current is Feature) {
features.add(current)
}
searchResults?.setFeatures(features)
searchResults?.features = features
mainViewController?.showReverseGeocodeFeature(features)
}
}
Expand All @@ -90,7 +92,6 @@ public open class MainPresenterImpl(val mapzenLocation: MapzenLocation, val bus:

override fun onExpandSearchView() {
vsm.viewState = ViewStateManager.ViewState.SEARCH
mainViewController?.hideOverflowMenu()
}

override fun onCollapseSearchView() {
Expand All @@ -102,6 +103,7 @@ public open class MainPresenterImpl(val mapzenLocation: MapzenLocation, val bus:
mainViewController?.hideSearchResults()
mainViewController?.showOverflowMenu()
mainViewController?.hideActionViewAll()
mainViewController?.clearQuery()
}

override fun onQuerySubmit() {
Expand All @@ -110,12 +112,12 @@ public open class MainPresenterImpl(val mapzenLocation: MapzenLocation, val bus:

override fun onSearchResultSelected(position: Int) {
if (searchResults != null) {
mainViewController?.centerOnCurrentFeature(searchResults?.getFeatures())
mainViewController?.centerOnCurrentFeature(searchResults?.features)
}
}

override fun onViewAllSearchResults() {
mainViewController?.showAllSearchResults(searchResults?.getFeatures())
mainViewController?.showAllSearchResults(searchResults?.features)
}

@Subscribe public fun onRoutePreviewEvent(event: RoutePreviewEvent) {
Expand Down
43 changes: 14 additions & 29 deletions app/src/main/kotlin/com/mapzen/erasermap/view/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
package com.mapzen.erasermap.view

import android.content.Context
import android.content.Intent
import android.location.Location
import android.os.Bundle
import android.os.Handler
import android.preference.PreferenceManager
import android.support.v4.view.MenuItemCompat
import android.support.v7.app.AppCompatActivity
import android.util.DisplayMetrics
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.MotionEvent
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.EditorInfo
import android.widget.Button
import android.widget.ImageButton
Expand Down Expand Up @@ -204,9 +200,6 @@ public class MainActivity : AppCompatActivity(), MainViewController, RouteCallba
menuInflater.inflate(R.menu.menu_main, menu)
optionsMenu = menu

MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search),
SearchOnActionExpandListener())

val searchView = menu.findItem(R.id.action_search).actionView
val listView = findViewById(R.id.auto_complete) as AutoCompleteListView
val emptyView = findViewById(android.R.id.empty)
Expand All @@ -223,15 +216,16 @@ public class MainActivity : AppCompatActivity(), MainViewController, RouteCallba
searchView.setOnSubmitListener({ presenter?.onQuerySubmit() })
searchView.setIconifiedByDefault(false)

val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val display = windowManager.defaultDisplay
val metrics = DisplayMetrics()
display.getMetrics(metrics)
searchView.maxWidth = display.width - (32 * metrics.density.toInt())
searchView.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI
searchView.queryHint = "Search for place or address"
listView.emptyView = emptyView
restoreCurrentSearchTerm(searchView)

searchView.setOnPeliasFocusChangeListener { view, b ->
if (b) {
presenter?.onExpandSearchView()
}
}
}

return true
Expand All @@ -241,7 +235,6 @@ public class MainActivity : AppCompatActivity(), MainViewController, RouteCallba
val id = item.itemId
when (id) {
R.id.action_settings -> { onActionSettings(); return true }
R.id.action_search -> { onActionSearch(); return true }
R.id.action_clear -> { onActionClear(); return true }
R.id.action_view_all -> { onActionViewAll(); return true }
}
Expand All @@ -253,9 +246,6 @@ public class MainActivity : AppCompatActivity(), MainViewController, RouteCallba
startActivity(Intent(this, SettingsActivity::class.java))
}

private fun onActionSearch() {
}

private fun onActionClear() {
savedSearch?.clear()
autoCompleteAdapter?.clear()
Expand Down Expand Up @@ -334,18 +324,6 @@ public class MainActivity : AppCompatActivity(), MainViewController, RouteCallba
}
}

inner class SearchOnActionExpandListener : MenuItemCompat.OnActionExpandListener {
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
presenter?.onExpandSearchView()
return true
}

override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
presenter?.onCollapseSearchView()
return true
}
}

override fun showSearchResults(features: List<Feature>) {
showSearchResultsPager(features)
addSearchResultsToMap(features)
Expand Down Expand Up @@ -447,7 +425,14 @@ public class MainActivity : AppCompatActivity(), MainViewController, RouteCallba
}

override fun collapseSearchView() {
optionsMenu?.findItem(R.id.action_search)?.collapseActionView()
presenter?.onCollapseSearchView()
}

override fun clearQuery() {
val searchView = optionsMenu?.findItem(R.id.action_search)?.actionView
if (searchView is PeliasSearchView) {
searchView.setQuery("", false)
}
}

override fun showRoutePreview(location: Location, feature: Feature) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public interface MainViewController {
public fun showActionViewAll()
public fun hideActionViewAll()
public fun collapseSearchView()
public fun clearQuery()
public fun showRoutePreview(location: Location, feature: Feature)
public fun hideRoutePreview()
public fun hideRoutingMode()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,6 @@ public class MainPresenterTest {
assertThat(mainController.isProgressVisible).isFalse()
}

@Test fun onExpandSearchView_shouldHideOverflowMenu() {
mainController.isOverflowVisible = true
presenter.onExpandSearchView()
assertThat(mainController.isOverflowVisible).isFalse()
}

@Test fun onCollapseSearchView_shouldShowOverflowMenu() {
mainController.isOverflowVisible = false
presenter.onCollapseSearchView()
Expand All @@ -142,6 +136,12 @@ public class MainPresenterTest {
assertThat(mainController.isViewAllVisible).isFalse()
}

@Test fun onCollapseSearchView_shouldClearQueryText() {
mainController.queryText = "query"
presenter.onCollapseSearchView()
assertThat(mainController.queryText).isEmpty()
}

@Test fun onRoutePreviewEvent_shouldCollapseSearchView() {
mainController.isSearchVisible = true
presenter.onRoutePreviewEvent(RoutePreviewEvent(getTestFeature()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public class TestMainController : MainViewController {
public var tilt: Float = 0f
public var rotation: Float = 0f
public var routeLine: List<LngLat>? = null
public var queryText: String = ""

public var isProgressVisible: Boolean = false
public var isOverflowVisible: Boolean = false
Expand Down Expand Up @@ -65,6 +66,10 @@ public class TestMainController : MainViewController {
isSearchVisible = false
}

override fun clearQuery() {
queryText = ""
}

override fun showRoutePreview(location: Location, feature: Feature) {
isRoutePreviewVisible = true
}
Expand Down

0 comments on commit d41799b

Please sign in to comment.