package com.future.driver.ui.main
|
|
import android.Manifest
|
import android.content.ActivityNotFoundException
|
import android.content.Intent
|
import android.os.Handler
|
import android.os.Looper
|
import android.provider.Settings
|
import android.util.Log
|
import android.view.View
|
import android.widget.Toast
|
import cn.sinata.rxnetty.NettyClient
|
import cn.sinata.xldutils.utils.*
|
import com.amap.api.location.AMapLocation
|
import com.amap.api.location.AMapLocationListener
|
import com.future.driver.R
|
import com.future.driver.base.BaseEvent
|
import com.future.driver.base.Const
|
import com.future.driver.base.MyApplication
|
import com.future.driver.base.MyBaseActivity
|
import com.future.driver.base.gaode.AMapKit
|
import com.future.driver.bean.HomeDataBean
|
import com.future.driver.bean.OrderSimpleData
|
import com.future.driver.bean.SelectServerModeBean
|
import com.future.driver.bean.VersionBean
|
import com.future.driver.netUtls.Api
|
import com.future.driver.netUtls.callNet
|
import com.future.driver.netUtls.getMapByAny
|
import com.future.driver.ui.DialogUtil
|
import com.future.driver.ui.main.add_order.AddCityOrderActivity
|
import com.future.driver.ui.main.event.MineEventActivity
|
import com.future.driver.ui.mine.MineActivity
|
import com.future.driver.ui.mine.MsgActivity
|
import com.future.driver.utils.AudioRecordUtils
|
import com.future.driver.utils.Cache.CacheKey
|
import com.future.driver.utils.DateUtil
|
import com.future.driver.utils.OSSUtil
|
import com.future.driver.utils.download.DownloadUtil
|
import com.google.gson.Gson
|
import com.lljjcoder.style.citylist.Toast.ToastUtils
|
import com.tbruyelle.rxpermissions2.RxPermissions
|
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.app_title.*
|
import kotlinx.android.synthetic.main.dialog_sure_and_del.view.*
|
import org.greenrobot.eventbus.EventBus
|
import org.jetbrains.anko.startActivity
|
import org.jetbrains.anko.toast
|
|
class MainActivity : MyBaseActivity(), AMapLocationListener,
|
AudioRecordUtils.OnAudioStatusUpdateListener {
|
|
val mainFragment by lazy {
|
MainFragment()
|
}
|
|
var homeDataBean: HomeDataBean? = null
|
|
override fun setContentView() {
|
setContentView(R.layout.activity_main)
|
}
|
|
private var recorder:AudioRecordUtils? = null //录音器
|
private val VOICE_LENGTH = 1000L*60*5 //实际5分钟一个片段
|
// private val VOICE_LENGTH = 1000L*15 //测试15秒一个片段
|
|
override fun initView() {
|
MyApplication.canPlayVoice = true
|
// var packageName = "com.android.providers.downloads";
|
// var intent = Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
// intent.setData(Uri.parse("package:" + packageName));
|
// startActivity(intent);
|
if (CacheKey.getKeyStr(Const.REFUSE_LOCATION).isNotEmpty()&&!RxPermissions(this).isGranted(
|
Manifest.permission.ACCESS_FINE_LOCATION
|
)){
|
toast("没有定位权限,您将无法收到新订单推送")
|
}else{
|
if (!RxPermissions(this).isGranted(Manifest.permission.ACCESS_FINE_LOCATION)){
|
DialogUtil.getDelAndSureDialog(
|
this,
|
"去授权",
|
"否",
|
"《未来出行司机》需要获取您的当前位置信息,用于查询当前城市是否开通服务,我们会将您的位置实时上传至后端为您匹配和推送附近订单。如果拒绝定位权限,您将无法正常接单。",
|
{
|
}){
|
val subscribe =
|
RxPermissions(this).request(Manifest.permission.ACCESS_FINE_LOCATION).subscribe {
|
if (!it){
|
toast("没有定位权限,您将无法收到新订单推送")
|
CacheKey.putKeyStr(Const.REFUSE_LOCATION, "1")
|
}
|
}
|
}
|
}
|
}
|
setTitleText("未来出行司机")
|
tv_Left.setDrawableLeft(R.mipmap.icon_nav_user)
|
iv_right_title.setImageResource(R.mipmap.icon_nav_news)
|
addFragment(mainFragment, R.id.rl_container)
|
AMapKit.initLocation(this, this)
|
MyApplication.isLogin = true
|
beOnDuty(false)
|
initCall()
|
NettyClient.getInstance().startService()
|
callVersion()
|
checkGps()
|
MyApplication.addOrderView(qeeOrderView)
|
|
}
|
|
var qeeOrderView = object : MyApplication.OrderStatueView {
|
override fun orderInfo(data: OrderSimpleData?) {
|
data?.let {
|
when(it.orderType){
|
1, 2, 3 -> {
|
if (it.status == 10 || it.status == 12) {
|
Handler(Looper.getMainLooper()).post {
|
mainFragment?.refresh()
|
MyApplication.getTTsManager().setVideoText("有用户订单被取消或改派")
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
private fun checkGps() {
|
if (!AMapKit.isLocServiceEnable(this)){
|
DialogUtil.getDelAndSureDialog(this, "查看定位", "退出", "您暂未开启手机定位GPS,是否前往开启?", {
|
onBackPressed()
|
}){
|
val intent = Intent()
|
intent.action = Settings.ACTION_LOCATION_SOURCE_SETTINGS;
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK;
|
try {
|
startActivity(intent)
|
} catch (ex: ActivityNotFoundException) { //如果页面无法打开,进入设置页面
|
intent.action = Settings.ACTION_SETTINGS
|
try {
|
startActivity(intent)
|
} catch (e: Exception) {
|
e.printStackTrace()
|
}
|
}
|
}
|
}
|
}
|
|
private fun callVersion() {
|
var map = getMapByAny()
|
// map["id"] = CacheKey.getUserId()
|
callNet(Api.queryNewData, map) {
|
var data = gson.fromJson<VersionBean>(it, VersionBean::class.java)
|
if (data.data.version != "" && data.data.version > Utils.getAppVersion(this)) {
|
if (data.data.mandatory == 2) {
|
DialogUtil.getDelAndSureDialog(this, "有新版本是否更新?", {}, {
|
DownloadUtil(this).downloadAPK(data.data.url, "未来出行司机端")
|
})
|
} else if (data.data.mandatory == 1) {
|
var isOk = false
|
val delAndSureDialog = DialogUtil.getDelAndSureDialog(this, "版本已过时,是否强制升级?", {
|
}, {
|
isOk = true
|
DownloadUtil(this).downloadAPK(data.data.url, "未来出行司机端")
|
ToastUtils.showShortToast(this, "后台开始下载,请等待")
|
})
|
val view = DialogUtil.getView(delAndSureDialog)
|
view.view_hint_close_base.visibility = View.INVISIBLE
|
delAndSureDialog.setOnDismissListener {
|
if (!isOk)
|
EventBus.getDefault().post(BaseEvent(BaseEvent.OUT_APP))
|
}
|
}else{
|
// toast("已经是最新版本")
|
}
|
} else {
|
// toast("已经是最新版本")
|
}
|
}
|
}
|
|
override fun onResume() {
|
super.onResume()
|
mainFragment?.refresh()
|
}
|
|
fun beOnDuty(b: Boolean){
|
if (b){
|
avv_anim.visible()
|
tv_up_avv.visible()
|
}else{
|
avv_anim.gone()
|
tv_up_avv.gone()
|
}
|
}
|
|
|
private fun initCall(playVoice:Boolean = true) {
|
var map = getMapByAny()
|
callNet(Api.queryHomeData, map) {
|
var data = gson.fromJson<HomeDataBean>(it, HomeDataBean::class.java)
|
homeDataBean = data
|
tv_order_num.text = data.data.dayNum.toString()
|
tv_month_order.text = data.data.mouthNum.toString()
|
tv_grade.text = getFormatOne(data.data.score)
|
tv_task.text = data.data.activity.toString()
|
tv_car_num.text = data.data.licensePlate
|
tv_lien_name.text = data.data.brand.toString()
|
tv_car.text = if (data.data.work == 1) "收车" else "出车"
|
if (data.data.work == 1){
|
if (playVoice)
|
MyApplication.getTTsManager().setVideoText("您正在上班中")
|
beOnDuty(true)
|
}else{
|
if (playVoice)
|
MyApplication.getTTsManager().setVideoText("您已收车")
|
beOnDuty(false)
|
}
|
tv_time.text = DateUtil.getTime(
|
DateUtil.TYPE7,
|
System.currentTimeMillis()
|
) + " " + DateUtil.getWeek(System.currentTimeMillis())
|
}
|
}
|
|
fun callNum(){
|
var map = getMapByAny()
|
callNet(Api.queryHomeData, map) {
|
var data = gson.fromJson<HomeDataBean>(it, HomeDataBean::class.java)
|
homeDataBean = data
|
tv_order_num.text = data.data.dayNum.toString()
|
tv_month_order.text = data.data.mouthNum.toString()
|
tv_grade.text = getFormatOne(data.data.score)
|
tv_task.text = data.data.activity.toString()
|
tv_car_num.text = data.data.licensePlate
|
tv_lien_name.text = data.data.brand.toString()
|
tv_time.text = DateUtil.getTime(
|
DateUtil.TYPE7,
|
System.currentTimeMillis()
|
) + " " + DateUtil.getWeek(System.currentTimeMillis())
|
}
|
}
|
|
|
override fun setOnclick() {
|
tv_server_ing.setOnClickListener {
|
tv_server_ing.textColor(this, R.color.color_f07207)
|
tv_wait_server.textColor(this, R.color.main_gray)
|
mainFragment.state = 1
|
mainFragment.autoRefresh()
|
}
|
|
tv_wait_server.setOnClickListener {
|
tv_server_ing.textColor(this, R.color.main_gray)
|
tv_wait_server.textColor(this, R.color.color_f07207)
|
mainFragment.state = 2
|
mainFragment.autoRefresh()
|
}
|
|
tv_Left.clickDelay {
|
startActivity<MineActivity>()
|
}
|
|
iv_right_title.clickDelay {
|
startActivity<MsgActivity>()
|
}
|
|
tv_history_order.clickDelay {
|
startActivity<HistoryOrderActivity>()
|
}
|
|
ll_task.clickDelay {
|
startActivity<MineEventActivity>()
|
}
|
|
tv_help_order.clickDelay {
|
startActivity<AddCityOrderActivity>()
|
}
|
|
tv_car.clickDelay {
|
if (homeDataBean?.data?.work == 1) {
|
callNet(Api.work, getMapByAny()) {
|
homeDataBean?.data?.work = 2
|
tv_car.text = "出车"
|
beOnDuty(false)
|
MyApplication.getTTsManager().setVideoText("您已收车")
|
}
|
} else {
|
callNet(Api.queryMyBusiness, getMapByAny()){
|
var bean = gson.fromJson(it, SelectServerModeBean::class.java).data
|
if (bean.isEmpty()){
|
toast("请选择接单业务")
|
return@callNet
|
}
|
if (bean.size > 1){
|
startActivity<SelectServerModeActivity>()
|
}else{
|
var map= getMapByAny()
|
map["type"] = bean[0].id
|
callNet(Api.work, map,{
|
toast("上班成功")
|
beOnDuty(true)
|
EventBus.getDefault().post(BaseEvent(BaseEvent.START_CAR))
|
}){
|
if (it?.contains("人脸") == true){
|
tv_face.visible()
|
}
|
}
|
}
|
}
|
}
|
}
|
|
tv_face.setOnClickListener {
|
startActivity<FaceActivity>()
|
}
|
}
|
|
|
|
private
|
var mBackAppTime: Long = 0
|
|
override fun onBackPressed() {
|
if (System.currentTimeMillis() - mBackAppTime > 2000) {
|
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show()
|
mBackAppTime = System.currentTimeMillis()
|
} else {
|
closeAll()
|
}
|
}
|
|
override fun onEventMainThread(event: BaseEvent?) {
|
super.onEventMainThread(event)
|
when (event!!.code) {
|
BaseEvent.START_CAR -> {
|
beOnDuty(true)
|
initCall()
|
}
|
BaseEvent.CHANGE_CAR_SUCCESS -> {
|
initCall()
|
}
|
BaseEvent.CALL_NUM_MAIN -> {
|
callNum()
|
}
|
BaseEvent.REFREASH_MAIN -> {
|
mainFragment?.refresh()
|
}
|
BaseEvent.FACE_SUC -> {
|
tv_face.gone()
|
}
|
BaseEvent.FACE_FAILED -> {
|
tv_face.visible()
|
initCall(false)
|
}
|
BaseEvent.START_RECORD -> {
|
if (!MyApplication.isRecording)
|
startRecord()
|
}
|
BaseEvent.FINISH_RECORD -> {
|
recorder?.stopRecord()
|
}
|
}
|
}
|
|
override fun onLocationChanged(p0: AMapLocation?) {
|
if (p0?.errorCode == 0) {
|
MyApplication.aMapLocation = p0
|
CacheKey.putKeyStr("location", Gson().toJson(p0))
|
}
|
}
|
|
private fun startRecord(){
|
if (recorder == null){
|
recorder = AudioRecordUtils(getExternalFilesDir(null)?.path+"/")
|
recorder?.setOnAudioStatusUpdateListener(this)
|
}
|
if (RxPermissions(this).isGranted(Manifest.permission.RECORD_AUDIO)&&RxPermissions(this).isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
|
Log.e("mmp","订单${MyApplication.recordOrderId} 开始录音...")
|
recorder?.startRecord()
|
}
|
else
|
toast("缺少录音相关权限")
|
}
|
|
private fun updateVoice(filePath: String) {
|
val ossUtil = OSSUtil(this)
|
ossUtil.uploadSingleWithSize(filePath, object : OSSUtil.OSSUploadCallBack() {
|
override fun onFinishWithSize(url: String, size: Long) {
|
super.onFinishWithSize(url, size)
|
Log.e("mmp","录音保存路径:${url},大小:${size/1024}kb")
|
val mapByAny = getMapByAny()
|
mapByAny["fileFormat"] = "caf"
|
mapByAny["fileName"] = url.substring(url.lastIndexOf("/"))
|
mapByAny["fileLink"] = url
|
mapByAny["fileSize"] = size/1024
|
mapByAny["orderId"] = MyApplication.recordOrderId
|
mapByAny["orderType"] = MyApplication.recordOrderType
|
callNet(false,Api.tape,mapByAny){}
|
}
|
|
override fun onFial(message: String?) {
|
super.onFial(message)
|
runOnUiThread {
|
Toast.makeText(this@MainActivity, "录音上传失败,请检查网络", Toast.LENGTH_SHORT).show()
|
}
|
}
|
})
|
}
|
|
override fun onUpdate(db: Double, time: Long) {
|
MyApplication.isRecording = true
|
if (time >= VOICE_LENGTH) {
|
Log.e("mmp","订单${MyApplication.recordOrderId} 录音片段完成")
|
recorder?.stopRecord() //结束录音
|
}
|
}
|
|
override fun onStop(filePath: String) {
|
MyApplication.isRecording = false
|
Thread {
|
updateVoice(filePath)
|
}.start()
|
if (MyApplication.currentOrderId.isNotEmpty()){//行程未结束 继续录制下一段
|
Log.e("mmp","订单${MyApplication.recordOrderId} 开始下一片段录音")
|
recorder?.startRecord()
|
}
|
}
|
|
override fun onStartPlay() {
|
}
|
|
override fun onFinishPlay() {
|
}
|
|
override fun onDestroy() {
|
super.onDestroy()
|
MyApplication.canPlayVoice = false
|
}
|
}
|