package com.igo.user
|
|
import android.app.Activity
|
import android.app.Application
|
import android.content.Intent
|
import android.os.Bundle
|
import android.util.Log
|
import androidx.core.os.bundleOf
|
import cn.sinata.rxnetty.NettyClient
|
import cn.sinata.xldutils.activity.BaseActivity
|
import cn.sinata.xldutils.application.BaseApplication
|
import cn.sinata.xldutils.utils.SPUtils
|
import cn.sinata.xldutils.utils.myToast
|
import com.amap.api.col.sln3.it
|
import com.google.android.gms.maps.MapsInitializer
|
import com.google.android.libraries.places.api.Places
|
import com.google.gson.Gson
|
import com.igo.user.dialog.TipDialog
|
import com.igo.user.interfaces.OrderStateChangeListener
|
import com.igo.user.network.Apis
|
import com.igo.user.network.HttpManager
|
import com.igo.user.network.entity.TrippingInfo
|
import com.igo.user.network.request
|
import com.igo.user.ui.MainActivity
|
import com.igo.user.ui.SplashActivity
|
import com.igo.user.ui.login.LoginActivity
|
import com.igo.user.ui.trip.TripActivity
|
import com.igo.user.utils.Const
|
import com.sinata.download.DownloadLibrary
|
import com.umeng.commonsdk.UMConfigure
|
import com.umeng.socialize.PlatformConfig
|
import io.reactivex.Flowable
|
import io.reactivex.disposables.Disposable
|
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.launch
|
import org.jetbrains.anko.runOnUiThread
|
import org.jetbrains.anko.startActivity
|
import org.json.JSONObject
|
import java.util.concurrent.TimeUnit
|
|
class IGoApplication : BaseApplication(), Application.ActivityLifecycleCallbacks {
|
override fun getSPName() = "IgoSp"
|
private var heartSubscribe: Disposable? = null
|
private val listeners = ArrayList<OrderStateChangeListener>()
|
private val activities = ArrayList<Activity>()
|
|
|
override fun onCreate() {
|
super.onCreate()
|
appContext = this
|
// initializeRecaptchaClient()
|
registerActivityLifecycleCallbacks(this)
|
DownloadLibrary.init(
|
this,
|
resources.getIdentifier("ic_launcher", "mipmap", packageName),
|
null,
|
packageName
|
)
|
initNetty()
|
UMConfigure.init(this, Const.UMENG_KEY, "", UMConfigure.DEVICE_TYPE_PHONE, "")
|
PlatformConfig.setWeixin(Const.WX_APP_ID, Const.WX_SECRET)
|
PlatformConfig.setWXFileProvider("com.igo.user.FileProvider")
|
UMConfigure.setLogEnabled(true)
|
Places.initialize(this, Const.google_key)
|
MapsInitializer.initialize(
|
this, MapsInitializer.Renderer.LATEST
|
) { renderer ->
|
Log.e(Const.GoogleTag, "LATEST renderer:${renderer.name}")
|
// initializeConsumerSdk()
|
}
|
}
|
|
private fun initNetty() {
|
NettyClient.getInstance().init(this, Apis.SOCKET_SERVER, Apis.SOCKET_PORT, true)
|
NettyClient.getInstance().addOnMessageListener { message ->
|
intervalCount = 0
|
try {
|
val json = JSONObject(message)
|
val method = json.optString("method")
|
val code = json.optString("code")
|
if (code == "200") {
|
Log.e("物流需要补差价: ", "状态${method}")
|
when (method) {
|
|
Const.Method.PING_RECEIVE -> {//心跳
|
//延时发送心跳
|
if (heartSubscribe != null && !heartSubscribe?.isDisposed!!) {
|
heartSubscribe?.dispose()
|
}
|
heartSubscribe =
|
Flowable.just("").delay(5000, TimeUnit.MILLISECONDS).subscribe {
|
sendHeart()
|
}
|
}
|
|
Const.Method.ORDER_STATUS -> {//订单状态改变
|
val order = json.optJSONObject("data")
|
order?.let {
|
listeners.forEach {
|
runOnUiThread {
|
it.onStateChanged(
|
order.optInt("orderId"),
|
order.optInt("state")
|
)
|
}
|
}
|
}
|
}
|
|
Const.Method.DIFFERENCE -> {//物流需要补差价
|
Log.e("物流需要补差价: ", "物流需要补差价")
|
val order = json.optJSONObject("data")
|
val data = Gson().fromJson(order.toString(), TrippingInfo::class.java)
|
order?.let {
|
val topAct = activities[activities.lastIndex]
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf(
|
"msg" to topAct.getString(R.string.补差价提示)
|
.format(data.orderId, data.money),
|
"ok" to topAct.getString(R.string.同意),
|
"cancel" to topAct.getString(R.string.不同意)
|
)
|
tipDialog.setCallback(object : TipDialog.OnClickCallback {
|
override fun onOk() {
|
HttpManager.confirmDifferencePrice(
|
data.orderId,
|
data.money,
|
2
|
).request(topAct as BaseActivity) { _, _ ->
|
}
|
}
|
|
override fun onCancel() {
|
HttpManager.confirmDifferencePrice(
|
data.orderId,
|
data.money,
|
3
|
).request(topAct as BaseActivity) { _, _ ->
|
}
|
}
|
})
|
tipDialog.show(
|
(topAct as BaseActivity).supportFragmentManager,
|
"diff"
|
)
|
}
|
}
|
|
Const.Method.REASSIGN -> {//订单改派
|
val order = json.optJSONObject("data")
|
order?.let {
|
listeners.forEach {
|
runOnUiThread {
|
it.onStateChanged(order.optInt("orderId"), 15)
|
}
|
}
|
}
|
}
|
|
Const.Method.DRIVER_POSITION -> {//司机位置
|
val jb = json.optJSONObject("data")
|
jb?.let {
|
val data = Gson().fromJson(jb.toString(), TrippingInfo::class.java)
|
listeners.forEach {
|
runOnUiThread {
|
it.onTrippingChanged(data)
|
}
|
}
|
}
|
}
|
|
Const.Method.MODIFY_ADDRESS -> {//司机操作目的地变更事件
|
val jb = json.optJSONObject("data")
|
jb?.let {
|
val data = Gson().fromJson(jb.toString(), TrippingInfo::class.java)
|
listeners.forEach {
|
runOnUiThread {
|
it.onAddressChanged(data)
|
}
|
}
|
}
|
}
|
|
Const.Method.FERRY -> {//摆渡车被接单
|
val jb = json.optJSONObject("data")
|
jb?.let {
|
listeners.forEach {
|
runOnUiThread {
|
it.onShuttleConfirm(
|
jb.optInt("orderId"),
|
jb.optInt("orderType")
|
)
|
}
|
}
|
}
|
}
|
|
Const.Method.END_PUSH -> {//无司机接单
|
val jb = json.optJSONObject("data")
|
val id = jb?.optInt("orderId") ?: 0
|
val type = jb?.optInt("orderType") ?: 0
|
val topAct = activities[activities.lastIndex]
|
if (topAct is TripActivity) {
|
topAct.noResponse(id)
|
} else {
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf(
|
"msg" to topAct.getString(R.string.附近暂无司机接单),
|
"ok" to topAct.getString(R.string.继续等待),
|
"cancel" to topAct.getString(R.string.取消订单)
|
)
|
tipDialog.setCallback(object : TipDialog.OnClickCallback {
|
override fun onOk() {
|
|
}
|
|
override fun onCancel() {
|
HttpManager.cancelOrder(lat, lon, id, type)
|
.request(topAct as BaseActivity) { _, _ ->
|
myToast(topAct.getString(R.string.取消成功))
|
if (activities[0] is MainActivity) {
|
(activities[0] as MainActivity).queryTripping()
|
}
|
}
|
}
|
})
|
tipDialog.setDismissCallback(object : TipDialog.OnDismiss {
|
override fun onDismiss() {
|
HttpManager.pushOrderTaxi(id, type)
|
.request(topAct as BaseActivity) { _, _ ->
|
}
|
}
|
})
|
tipDialog.show(
|
(topAct as BaseActivity).supportFragmentManager,
|
"noResponse"
|
)
|
}
|
}
|
|
Const.Method.OFFLINE -> {//强制下线
|
val topAct = activities[activities.lastIndex]
|
SPUtils.instance().remove(Const.User.TOKEN).remove(Const.User.USER_ID)
|
.remove(Const.User.NO_PHONE).apply()
|
val tipDialog = TipDialog()
|
tipDialog.arguments = bundleOf(
|
"msg" to topAct.getString(R.string.您的账号已在其他地方登陆),
|
"isAlert" to true
|
)
|
tipDialog.setDismissCallback(object : TipDialog.OnDismiss {
|
override fun onDismiss() {
|
exit()
|
topAct.startActivity<LoginActivity>()
|
}
|
})
|
tipDialog.show(
|
(topAct as BaseActivity).supportFragmentManager,
|
"logout"
|
)
|
}
|
}
|
}
|
} catch (e: Exception) {
|
e.printStackTrace()
|
}
|
}
|
NettyClient.getInstance().setOnConnectListener {
|
//连接成功,发送一次心跳
|
sendHeart()
|
}
|
}
|
|
private fun sendHeart() {
|
val userId = SPUtils.instance().getInt(Const.User.USER_ID)
|
val token = SPUtils.instance().getString(Const.User.TOKEN)
|
if (userId != -1) {
|
val language = SPUtils.instance().getString("language", "en")
|
val l = when (language) {
|
"ch" -> "1"
|
"fr" -> "3"
|
else -> "2"
|
}
|
NettyClient.getInstance()
|
.sendMessage("{\"data\":{\"userId\":$userId,\"language\":$l,\"token\":\"$token\",\"type\":1},\"method\":\"PING\",\"code\":200,\"msg\":\"SUCCESS\"}")
|
}
|
}
|
|
fun addTripStateListener(changedListener: OrderStateChangeListener) {
|
listeners.add(changedListener)
|
}
|
|
fun removeTripStateListener(changedListener: OrderStateChangeListener) {
|
listeners.remove(changedListener)
|
}
|
|
fun exit() {
|
activities.forEach {
|
if (it !is MainActivity)
|
it.finish()
|
else {
|
val mainActivity = it as MainActivity
|
mainActivity.resetLogin()
|
}
|
}
|
}
|
|
fun reLaunch() {
|
activities.forEach {
|
it.finish()
|
}
|
val intent = Intent(this, SplashActivity::class.java)
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
startActivity(intent)
|
}
|
|
companion object {
|
var lat = 6.833333
|
var lon = -5.25
|
|
var cityCode = "" //定位城市编码
|
var address = "" //定位地址
|
var chooseCityName = "——" //选择城市
|
var chooseCityLat = 0.0 //选择城市精度
|
var chooseCityLon = 0.0 //选择城市维度
|
var chooseCountry = "" //选择国家代码
|
var intervalCount = 0 //计数器,收到消息时置零;在TripActivity中检测改值:如果6秒钟没收到socket 就调取接口查订单实时状态
|
var emergency = "" //紧急联系人
|
var phone = "" //我的手机号
|
var phoneOperator = "" //手机运营商
|
var phoneService = "" //客服电话号
|
var appContext: IGoApplication? = null
|
var isNotifyEmail = false
|
var hasAutoGoTripping = false //true 本次启动已经自动跳转过
|
var mainActivity: MainActivity? = null
|
var tripId = ""
|
|
// var recaptchaClient: RecaptchaClient?=null
|
}
|
|
override fun onActivityPaused(p0: Activity) {
|
|
}
|
|
override fun onActivityStarted(p0: Activity) {
|
}
|
|
override fun onActivityDestroyed(p0: Activity) {
|
activities.remove(p0)
|
}
|
|
override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
|
}
|
|
override fun onActivityStopped(p0: Activity) {
|
}
|
|
override fun onActivityCreated(p0: Activity, p1: Bundle?) {
|
activities.add(p0)
|
}
|
|
override fun onActivityResumed(p0: Activity) {
|
}
|
}
|