AMapOfflineModule.kt
3.3 KB
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
package cn.qiuxiang.react.amap3d
import com.amap.api.maps.offlinemap.OfflineMapCity
import com.amap.api.maps.offlinemap.OfflineMapManager
import com.amap.api.maps.offlinemap.OfflineMapProvince
import com.amap.api.maps.offlinemap.OfflineMapStatus
import com.facebook.react.bridge.*
import com.facebook.react.modules.core.DeviceEventManagerModule
@Suppress("unused")
class AMapOfflineModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext), OfflineMapManager.OfflineMapDownloadListener {
private val manager = OfflineMapManager(reactContext, this)
override fun getName(): String {
return "AMapOffline"
}
@ReactMethod
fun getProvinces(promise: Promise) {
val provinces = Arguments.createArray()
manager.offlineMapProvinceList.forEach { provinces.pushMap(buildProvince(it)) }
promise.resolve(provinces)
}
@ReactMethod
fun getCities(promise: Promise) {
val cities = Arguments.createArray()
manager.offlineMapCityList.forEach { cities.pushMap(buildCity(it)) }
promise.resolve(cities)
}
@ReactMethod
fun download(name: String) {
manager.offlineMapProvinceList.forEach {
if (it.provinceName == name) {
return manager.downloadByProvinceName(name)
}
it.cityList.forEach {
if (it.city == name) {
return manager.downloadByCityName(name)
}
}
}
}
@ReactMethod
fun stop() {
manager.stop()
}
@ReactMethod
fun remove(name: String) {
manager.remove(name)
}
private fun buildCity(city: OfflineMapCity): WritableMap {
val map = Arguments.createMap()
map.putString("name", city.city)
map.putString("code", city.code)
map.putString("state", getState(city.state))
map.putInt("size", city.size.toInt())
return map
}
private fun buildProvince(province: OfflineMapProvince): WritableMap {
val map = Arguments.createMap()
map.putString("name", province.provinceName)
map.putString("state", getState(province.state))
map.putInt("size", province.size.toInt())
val cities = Arguments.createArray()
province.cityList.forEach { cities.pushMap(buildCity(it)) }
map.putArray("cities", cities)
return map
}
private fun getState(code: Int): String {
var state = ""
when (code) {
OfflineMapStatus.SUCCESS -> state = "downloaded"
OfflineMapStatus.LOADING -> state = "downloading"
OfflineMapStatus.NEW_VERSION -> state = "expired"
OfflineMapStatus.WAITING -> state = "waiting"
OfflineMapStatus.UNZIP -> state = "unzip"
}
return state
}
override fun onDownload(state: Int, progress: Int, name: String?) {
val data = Arguments.createMap()
data.putString("name", name)
data.putString("state", getState(state))
data.putInt("progress", progress)
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java).emit("download", data)
}
override fun onCheckUpdate(p0: Boolean, p1: String?) {}
override fun onRemove(p0: Boolean, p1: String?, p2: String?) {}
}