package com.jxonlinecar.driver.ui.main //import com.tencent.bugly.crashreport.CrashReport import android.Manifest import android.content.ActivityNotFoundException import android.content.ClipData import android.content.ClipboardManager import android.content.Intent import android.net.Uri import android.os.Handler import android.os.Looper import android.provider.Settings import android.view.Gravity import android.view.View import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import cn.sinata.rxnetty.NettyClient import cn.sinata.xldutils.utils.* import com.google.gson.Gson import com.jxonlinecar.driver.R import com.jxonlinecar.driver.base.BaseEvent import com.jxonlinecar.driver.base.Const import com.jxonlinecar.driver.base.MyApplication import com.jxonlinecar.driver.base.MyBaseActivity import com.jxonlinecar.driver.base.gaode.AMapKit import com.jxonlinecar.driver.bean.* import com.jxonlinecar.driver.netUtls.* import com.jxonlinecar.driver.ui.DialogUtil import com.jxonlinecar.driver.ui.adapter.OrderHallAdapter import com.jxonlinecar.driver.ui.main.event.MineEventActivity import com.jxonlinecar.driver.ui.mine.MineActivity import com.jxonlinecar.driver.ui.mine.MsgActivity import com.jxonlinecar.driver.ui.mine.RechargeActivity import com.jxonlinecar.driver.utils.Cache.CacheKey import com.jxonlinecar.driver.utils.DateUtil import com.jxonlinecar.driver.utils.download.DownloadUtil import com.lljjcoder.style.citylist.Toast.ToastUtils import com.lzf.easyfloat.EasyFloat import com.lzf.easyfloat.enums.ShowPattern import com.lzf.easyfloat.enums.SidePattern import com.lzf.easyfloat.interfaces.OnInvokeView 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.dip import org.jetbrains.anko.startActivity import org.jetbrains.anko.toast import java.util.concurrent.atomic.AtomicBoolean class MainActivity : MyBaseActivity() { val mainFragment by lazy { MainFragment() } val smallFragment by lazy { MainSmallFragment() } val hallAdapter by lazy { OrderHallAdapter() } var queryNum = 0 // val evalFrag = OrderHallFragment() var homeDataBean: HomeDataBean? = null override fun setContentView() { setContentView(R.layout.activity_main) } var isworking = AtomicBoolean(false) private val EasyFloatTag = "BACKGROUND" private var floater: EasyFloat.Builder? = null //浮窗 private var paused: Boolean = false private var timeHandler = Handler(Looper.getMainLooper()) //用于检测小程序订单时间 override fun initView() { // var packageName = "com.android.providers.downloads"; // var intent = Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); // intent.setData(Uri.parse("package:" + packageName)); // startActivity(intent); // addFragment(evalFrag, R.id.fl_container_t) recycler_view_hall.layoutManager = LinearLayoutManager(this) recycler_view_hall.adapter = hallAdapter upDateSmall() MyApplication.getInstance()?.initPersionDate() setTitleText("龙江易出行司机") 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") }else{ MyApplication.getInstance()?.startLocation() } } } }else{ MyApplication.getInstance()?.startLocation() } } tv_Left.setDrawableLeft(R.mipmap.icon_nav_user) iv_right_title.setImageResource(R.mipmap.icon_nav_news) addFragment(smallFragment, R.id.rl_container) // addFragment(mainFragment, R.id.rl_container) MyApplication.isLogin = true beOnDuty(false) initCall() NettyClient.getInstance().startService() callVersion() checkGps() MyApplication.addOrderView(qeeOrderView) } private fun callHall() { var map = getMapByAny() map.set("size", 100) map.set("pageNum", 1) callNetAndError(false, Api.queryHallOrderList, map, { var data = gson.fromJson(it, OrderHallBean::class.java) hallAdapter.data.clear() hallAdapter.data.addAll(data.data.list) hallAdapter.notifyDataSetChanged() if (isworking.get()) tv_order_big_all.text = "接单大厅(" + hallAdapter.data.size + ")" else tv_order_big_all.text = "接单大厅" }) { } } /*** * 一秒检测一次小程序订单时间 */ private fun upDateSmall() { timeHandler.postDelayed({ queryNum++ var size = smallFragment.mainSmallAdapter.data.size tv_order_small.text = "小程序订单($size)" upDateSmall() if (queryNum % 10 == 0) { callHall() } }, 1000) } 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 { if (mainFragment?.isAdded && mainFragment?.isVisible) { 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 showFloater() { if (floater == null) { floater = EasyFloat.with(applicationContext) .setLayout(R.layout.layout_floter, OnInvokeView { it.setOnClickListener { startActivity() } }) .setShowPattern(ShowPattern.ALL_TIME) .setSidePattern(SidePattern.RESULT_LEFT) .setGravity(Gravity.START or Gravity.BOTTOM, 0, dip(-180)) .setDragEnable(true) .setTag(EasyFloatTag) .setMatchParent(widthMatch = false, heightMatch = false) .registerCallback { touchEvent { view, motionEvent -> motionEvent.action } } floater?.show() } } private fun callVersion() { var map = getMapByAny() // map["id"] = CacheKey.getUserId() callNet(Api.queryNewData, map) { var data = gson.fromJson(it, VersionBean::class.java) if (data.data.version != "" && data.data.version != Utils.getAppVersion(this)) { if (data.data.mandatory == 2) { DialogUtil.getDelAndSureDialog(this, "有新版本是否更新?", {}, { download(data.data.url) }) } else if (data.data.mandatory == 1) { DialogUtil.getDelAndSureDialog(this, "版本已过时,是否强制升级?", { EventBus.getDefault().post(BaseEvent(BaseEvent.OUT_APP)) }, { download(data.data.url) ToastUtils.showShortToast(this, "后台开始下载,请等待") }) } else { // toast("已经是最新版本") } } else { // toast("已经是最新版本") } } } private fun callOrderCount() { var map = getMapByAny() map["pageNum"] = 1 map["size"] = 1 callNet(false, Api.queryHallOrderList, map) { val fromJson = gson.fromJson(it, OrderHallBean::class.java) tv_count.text = (fromJson?.data?.orderCount ?: 0).toString() if (!paused) tv_count.postDelayed({ callOrderCount() }, 2000) } } private fun download(url: String) { val p = RxPermissions(this).request(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe { if (it) DownloadUtil(this).downloadAPK(url, "龙江易出行司机") else showToast("下载失败,缺少文件权限") } } override fun onResume() { super.onResume() paused = false // callOrderCount() // mainFragment.showQuan = false if (mainFragment != null && mainFragment.isAdded && mainFragment.isVisible) { mainFragment?.refresh() } } override fun onPause() { super.onPause() paused = true } fun beOnDuty(b: Boolean) { if (b) { avv_anim.visible() tv_up_avv.visible() } else { avv_anim.gone() tv_up_avv.gone() } } override fun onDestroy() { super.onDestroy() if (timeHandler != null) { timeHandler.removeCallbacksAndMessages(0) } MyApplication.removeOrderView(qeeOrderView) } private fun initCall() { var map = getMapByAny() callNet(Api.queryHomeData, map) { var data = gson.fromJson(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) { recycler_view_hall.visibility = View.GONE isworking.set(false) "下班" } else "出车" if (data.data.work == 1) { MyApplication.getTTsManager().setVideoText("您正在上班中") isworking.set(true) recycler_view_hall.visibility = View.VISIBLE beOnDuty(true) if (!Settings.canDrawOverlays(this) && CacheKey.getKeyStr("isRefusedFloat") .isNullOrEmpty() ) { //没有浮窗权限并且没有拒绝过 DialogUtil.getDelAndSureDialog( this, "去开启", "取消", "为了增加后台推单的稳定性,我们需要开启悬浮窗口权限", { CacheKey.putKeyStr("isRefusedFloat", "1") }) { var intent = Intent( Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + packageName) ) startActivityForResult(intent, 1234) } } } else { 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(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.main_yellow) tv_wait_server.textColor(this, R.color.main_gray) tv_order_small.textColor(this, R.color.main_gray) addFragment(mainFragment, R.id.rl_container) 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.main_yellow) tv_order_small.textColor(this, R.color.main_gray) addFragment(mainFragment, R.id.rl_container) mainFragment.state = 2 mainFragment.autoRefresh() } tv_order_small.clickDelay { tv_server_ing.textColor(this, R.color.main_gray) tv_wait_server.textColor(this, R.color.main_gray) tv_order_small.textColor(this, R.color.main_yellow) addFragment(smallFragment, R.id.rl_container) smallFragment.mainSmallAdapter.notifyDataSetChanged() } tv_Left.clickDelay { startActivity() } iv_right_title.clickDelay { startActivity() } tv_history_order.clickDelay { startActivity() } ll_task.clickDelay { startActivity() } tv_car.clickDelay { if (homeDataBean?.data?.work == 1) { callNet(Api.work, getMapByAny()) { homeDataBean?.data?.work = 2 tv_car.text = "出车" beOnDuty(false) MyApplication.getTTsManager().setVideoText("您已下班") recycler_view_hall.visibility = View.GONE isworking.set(false) } } 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() } else { var map = getMapByAny() map["type"] = bean[0].id callNetNoToast(Api.work, map, { toast("上班成功") recycler_view_hall.visibility = View.VISIBLE isworking.set(true) beOnDuty(true) EventBus.getDefault().post(BaseEvent(BaseEvent.START_CAR)) }) { if (it?.contains("余额") == true) { val dialog = DialogUtil.getOnlySureDialog(this, it) { startActivity() } val view = DialogUtil.getView(dialog) view.tv_sure_base.text = "去充值" } else { showToast(it) } } } } } } ll_tests.clickDelay { // :{"orderType":4,"orderId":8,"state":7,"time":10}} // showOrder("3170","2",100,1) // showOrder( // "1944", // "2", // 30, // 2 // ) } ll_order.setOnClickListener { startActivity() } copy.setOnClickListener { val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager val clipData = ClipData.newPlainText("label", tv_log.text) clipboardManager.setPrimaryClip(clipData) } cls.setOnClickListener { tv_log.text = "" } } 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() // val intent = Intent(Intent.ACTION_MAIN) // intent.addCategory(Intent.CATEGORY_HOME) // intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK // startActivity(intent) } } 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.APP_BACKGROUND -> { if (getUserId() != -1 && homeDataBean?.data?.work == 1 && Settings.canDrawOverlays( this ) ) { showFloater() EasyFloat.show(EasyFloatTag) } } BaseEvent.APP_FOREGROUND -> { EasyFloat.hide(EasyFloatTag) } BaseEvent.APP_LOG -> { // tv_log.text = "${TimeUtils.getCurrentTimeMillisecond(System.currentTimeMillis())} ${event.msg}\n"+tv_log.text } BaseEvent.GET_SMALL_ORDER -> { //小程序订单来了 var dataStr = event.msg val data = Gson().fromJson(dataStr, OrderBean::class.java) data.time = System.currentTimeMillis() data.overTime = event.typeTwo.toLong() smallFragment.setOrdertypeA(event.type) smallFragment.setDate(data) var size = smallFragment.mainSmallAdapter.data.size tv_order_small.text = "小程序订单($size)" } } } }