summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/location/utils/StyleChangeIdlingResource.kt
blob: 0f37498a29a522d82dbe1c72b7ed07ad92c2f10e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.mapbox.mapboxsdk.location.utils

import android.support.test.espresso.IdlingResource
import com.mapbox.mapboxsdk.maps.MapView
import com.mapbox.mapboxsdk.maps.MapboxMap

/**
 * Resource, that's idling until the provided style is loaded.
 * Remember to add any espresso action (like view assertion) after the [waitForStyle] call
 * for the test to keep running.
 */
class StyleChangeIdlingResource : IdlingResource {

  private var callback: IdlingResource.ResourceCallback? = null
  private var isIdle = true

  override fun getName(): String {
    return javaClass.simpleName
  }

  override fun isIdleNow(): Boolean {
    return isIdle
  }

  override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) {
    this.callback = callback
  }

  private fun setIdle() {
    isIdle = true
    callback?.onTransitionToIdle()
  }

  fun waitForStyle(mapView: MapView, mapboxMap: MapboxMap, styleUrl: String) {
    isIdle = false
    mapView.addOnMapChangedListener(object : MapView.OnMapChangedListener {
      override fun onMapChanged(change: Int) {
        if (change == MapView.DID_FINISH_LOADING_STYLE) {
          mapView.removeOnMapChangedListener(this)
          setIdle()
        }
      }
    })
    mapboxMap.setStyleUrl(styleUrl)
  }
}