summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/ViewPagerActivity.kt
blob: 8312661ebd662b5ef4dbeb57d672bd9480efa74c (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.mapbox.mapboxsdk.testapp.activity.fragment

import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter
import android.support.v7.app.AppCompatActivity
import com.mapbox.mapboxsdk.camera.CameraPosition
import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.maps.MapboxMapOptions
import com.mapbox.mapboxsdk.maps.Style
import com.mapbox.mapboxsdk.maps.SupportMapFragment
import com.mapbox.mapboxsdk.testapp.R
import kotlinx.android.synthetic.main.activity_viewpager.*

/**
 * Test activity showcasing using the Android SDK ViewPager API to show MapFragments.
 */
class ViewPagerActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_viewpager)
    viewPager.adapter = MapFragmentAdapter(supportFragmentManager)
  }

  override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    val currentPosition = viewPager!!.currentItem
    for (i in 0 until FRAGMENT_COUNT) {
      if (Math.abs(i - currentPosition) <= 1) {
        viewPager.adapter?.instantiateItem(viewPager, 0)
        break
      }
    }
  }

  internal class MapFragmentAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {

    override fun getCount(): Int {
      return FRAGMENT_COUNT
    }

    override fun getItem(position: Int): Fragment {
      return when (position) {
        0 -> createFragment(Style.MAPBOX_STREETS, LatLng(34.920526, 102.634774))
        1 -> createFragment(Style.DARK, LatLng(62.326440, 92.764913))
        2 -> createFragment(Style.SATELLITE, LatLng(-25.007786, 133.623852))
        3 -> createFragment(Style.LIGHT, LatLng(-19.922070, -43.939676))
        4 -> createFragment(Style.OUTDOORS, LatLng(46.881020, 9.098098))
        else -> createFragment(Style.TRAFFIC_DAY, LatLng(40.722517, -74.000029))
      }
    }

    private fun createFragment(@Style.StyleUrl style: String, latLng: LatLng): Fragment {
      val options = MapboxMapOptions().camera(CameraPosition.Builder().target(latLng).zoom(3.0).build())
      val fragment = SupportMapFragment.newInstance(options)
      fragment.getMapAsync { mapboxMap -> mapboxMap.setStyle(style) }
      return fragment
    }

    override fun getPageTitle(position: Int): CharSequence? {
      return "Page $position"
    }
  }

  companion object {
    const val FRAGMENT_COUNT = 6
  }
}