summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/MergeOfflineRegionsActivity.kt
blob: 9905733a687f99e6b3e581bd62ccd7e5d9d251a4 (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.mapbox.mapboxsdk.testapp.activity.offline

import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity
import android.widget.Toast
import com.mapbox.mapboxsdk.Mapbox
import com.mapbox.mapboxsdk.constants.Style
import com.mapbox.mapboxsdk.log.Logger
import com.mapbox.mapboxsdk.offline.OfflineManager
import com.mapbox.mapboxsdk.offline.OfflineRegion
import com.mapbox.mapboxsdk.testapp.R
import kotlinx.android.synthetic.main.activity_merge_offline_regions.*
import java.io.File
import java.io.FileOutputStream

class MergeOfflineRegionsActivity : AppCompatActivity() {
  companion object {
    private const val TEST_DB_FILE_NAME = "offline.db"
    private const val PERMISSIONS_REQUEST_CODE = 11
  }

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_merge_offline_regions)

    // forcing offline state
    Mapbox.setConnected(false)

    mapView.setStyleUrl(Style.SATELLITE)

    mapView.onCreate(savedInstanceState)
    load_region_btn.setOnClickListener {
      if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
          arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), PERMISSIONS_REQUEST_CODE)
      } else {
        mergeDb()
      }
    }
  }

  override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode == PERMISSIONS_REQUEST_CODE) {
      for (result in grantResults) {
        if (result != PackageManager.PERMISSION_GRANTED) {
          finish()
        }
      }
      mergeDb()
    }
  }

  private fun mergeDb() {
    // copy db asset to internal memory
    copyAsset()

    OfflineManager.getInstance(this).mergeOfflineRegions(
      this.filesDir.absolutePath + "/" + TEST_DB_FILE_NAME,
      object : OfflineManager.MergeOfflineRegionsCallback {
        override fun onMerge(offlineRegions: Array<OfflineRegion>) {
          mapView.setStyleUrl(Style.SATELLITE)
          Toast.makeText(
            this@MergeOfflineRegionsActivity,
            String.format("Merged %d regions.", offlineRegions.size),
            Toast.LENGTH_LONG).show()
        }

        override fun onError(error: String) {
          Logger.e("MBGL_OFFLINE_DB_MERGE", error)
        }
      })
  }

  private fun copyAsset() {
    val bufferSize = 1024
    val assetManager = this.assets
    val inputStream = assetManager.open(TEST_DB_FILE_NAME)
    val outputStream = FileOutputStream(File(this.filesDir, TEST_DB_FILE_NAME))

    try {
      inputStream.copyTo(outputStream, bufferSize)
    } finally {
      inputStream.close()
      outputStream.flush()
      outputStream.close()
    }
  }

  override fun onStart() {
    super.onStart()
    mapView.onStart()
  }

  override fun onResume() {
    super.onResume()
    mapView.onResume()
  }

  override fun onPause() {
    super.onPause()
    mapView.onPause()
  }

  override fun onStop() {
    super.onStop()
    mapView.onStop()
  }

  override fun onLowMemory() {
    super.onLowMemory()
    mapView.onLowMemory()
  }

  override fun onDestroy() {
    super.onDestroy()
    mapView.onDestroy()
  }

  override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    mapView.onSaveInstanceState(outState)
  }
}