package com.fangxinxing.xxfxx.ui.main //import io.rong.imlib.RongIMClient import android.Manifest import android.content.ActivityNotFoundException import android.content.ClipData import android.content.ClipboardManager import android.content.Context.CLIPBOARD_SERVICE import android.content.Intent import android.net.Uri import android.os.Handler import android.os.Looper import android.provider.Settings import android.util.Log import android.view.Gravity import android.view.View import androidx.core.app.ActivityCompat import cn.sinata.rxnetty.NettyClient import cn.sinata.xldutils.utils.Utils import com.fangxinxing.xxfxx.R import com.fangxinxing.xxfxx.base.BaseEvent import com.fangxinxing.xxfxx.base.Const import com.fangxinxing.xxfxx.base.MyApplication import com.fangxinxing.xxfxx.base.MyBaseFragment import com.fangxinxing.xxfxx.base.gaode.AMapKit import com.fangxinxing.xxfxx.bean.AgreeBean import com.fangxinxing.xxfxx.bean.HomeDataBean import com.fangxinxing.xxfxx.bean.OrderSimpleData import com.fangxinxing.xxfxx.bean.SelectServerModeBean import com.fangxinxing.xxfxx.bean.VersionBean import com.fangxinxing.xxfxx.netUtls.Api import com.fangxinxing.xxfxx.netUtls.callNet import com.fangxinxing.xxfxx.netUtls.getMapByAny import com.fangxinxing.xxfxx.ui.DialogUtil import com.fangxinxing.xxfxx.ui.MainTabActivity import com.fangxinxing.xxfxx.ui.main.add_order.AddCityOrderActivity import com.fangxinxing.xxfxx.ui.main.event.MineEventActivity import com.fangxinxing.xxfxx.ui.merchant.MerchantMineOrderActivity import com.fangxinxing.xxfxx.ui.merchant.NineFiveFragment import com.fangxinxing.xxfxx.ui.mine.MsgActivity import com.fangxinxing.xxfxx.ui.to_city.AddCityRouteLineActivity import com.fangxinxing.xxfxx.ui.to_city.CrossOrderActivity import com.fangxinxing.xxfxx.utils.Cache.CacheKey import com.fangxinxing.xxfxx.utils.DateUtil import com.fangxinxing.xxfxx.utils.HtmlUtils import com.fangxinxing.xxfxx.utils.MyUtils import com.fangxinxing.xxfxx.utils.checkPermissions import com.fangxinxing.xxfxx.utils.clickDelay import com.fangxinxing.xxfxx.utils.download.DownloadUtil import com.fangxinxing.xxfxx.utils.getFormatOne import com.fangxinxing.xxfxx.utils.gone import com.fangxinxing.xxfxx.utils.setDrawableNull import com.fangxinxing.xxfxx.utils.textColor import com.fangxinxing.xxfxx.utils.toast import com.fangxinxing.xxfxx.utils.visible 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 com.zlzf.zl_payaccount.citypicker.style.citylist.Toast.ToastUtils import kotlinx.android.synthetic.main.activity_main.avv_anim import kotlinx.android.synthetic.main.activity_main.cls import kotlinx.android.synthetic.main.activity_main.copy import kotlinx.android.synthetic.main.activity_main.iv_police import kotlinx.android.synthetic.main.activity_main.iv_right_title_f import kotlinx.android.synthetic.main.activity_main.ll_task import kotlinx.android.synthetic.main.activity_main.tv_95128 import kotlinx.android.synthetic.main.activity_main.tv_car import kotlinx.android.synthetic.main.activity_main.tv_car_num import kotlinx.android.synthetic.main.activity_main.tv_city_route_line import kotlinx.android.synthetic.main.activity_main.tv_cross import kotlinx.android.synthetic.main.activity_main.tv_grade import kotlinx.android.synthetic.main.activity_main.tv_help_order import kotlinx.android.synthetic.main.activity_main.tv_history_order import kotlinx.android.synthetic.main.activity_main.tv_left_title_f import kotlinx.android.synthetic.main.activity_main.tv_lien_name import kotlinx.android.synthetic.main.activity_main.tv_log import kotlinx.android.synthetic.main.activity_main.tv_map import kotlinx.android.synthetic.main.activity_main.tv_month_order import kotlinx.android.synthetic.main.activity_main.tv_order_num import kotlinx.android.synthetic.main.activity_main.tv_post_city_route_line import kotlinx.android.synthetic.main.activity_main.tv_server_ing import kotlinx.android.synthetic.main.activity_main.tv_task import kotlinx.android.synthetic.main.activity_main.tv_time import kotlinx.android.synthetic.main.activity_main.tv_title_f import kotlinx.android.synthetic.main.activity_main.tv_up_avv import kotlinx.android.synthetic.main.activity_main.tv_wait_server import org.greenrobot.eventbus.EventBus import org.jetbrains.anko.dip import org.jetbrains.anko.startActivity class MainPubFragment : MyBaseFragment() { val mapFragment by lazy { DriverMapFragment() } val mainFragment by lazy { MainFragment() } val nineFragment by lazy { NineFiveFragment() } val cityRouteLineListFragment by lazy { CityRouteLineListFragment() } private val EasyFloatTag = "BACKGROUND" private var floater: EasyFloat.Builder? = null //浮窗 var homeDataBean: HomeDataBean? = null override fun layoutId(): Int { return R.layout.activity_main } 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); MyApplication.getInstance()?.initPersionDate() ActivityCompat.requestPermissions(requireActivity(), Const.PERMISSIONS_LIST_LOCATION, 101) // RongIMClient.connect(CacheKey.getKeyStr("rongToken"), object : RongIMClient.ConnectCallback() { // override fun onSuccess(userId: String) { // // 连接成功 // Log.e("RongLog===>","融云服务连接成功") // } // // override fun onError(code: RongIMClient.ConnectionErrorCode) { // // 连接失败 // Log.e("RongLog===>","融云服务连接失败") // } // // override fun onDatabaseOpened(databaseOpenStatus: RongIMClient.DatabaseOpenStatus) { // // 数据库打开失败 // } // }) if (CacheKey.getKeyStr(Const.REFUSE_LOCATION) .isNotEmpty() && !RxPermissions(requireActivity()).isGranted( Manifest.permission.ACCESS_FINE_LOCATION ) ) { EventBus.getDefault().post( BaseEvent( BaseEvent.APP_LOG, "没有定位权限且用户已明确拒绝" ) ) toast("没有定位权限,您将无法收到新订单推送") } else { if (!RxPermissions(requireActivity()).isGranted(Manifest.permission.ACCESS_FINE_LOCATION)) { DialogUtil.getDelAndSureDialog( requireContext(), "去授权", "否", "《放心行司机端》需要获取您的当前位置信息,用于查询当前城市是否开通服务,我们会将您的位置实时上传至后端为您匹配和推送附近订单。如果拒绝定位权限,您将无法正常接单。", { }) { val subscribe = RxPermissions(requireActivity()).request(Manifest.permission.ACCESS_FINE_LOCATION) .subscribe { if (!it) { toast("没有定位权限,您将无法收到新订单推送") CacheKey.putKeyStr(Const.REFUSE_LOCATION, "1") EventBus.getDefault().post( BaseEvent( BaseEvent.APP_LOG, "定位权限申请失败" ) ) } else { EventBus.getDefault().post( BaseEvent( BaseEvent.APP_LOG, "定位权限申请成功" ) ) } } } } else { EventBus.getDefault().post( BaseEvent( BaseEvent.APP_LOG, "已获取到定位权限" ) ) } } tv_title_f.text = "放心行司机端" tv_left_title_f.setDrawableNull() iv_right_title_f.setImageResource(R.mipmap.icon_nav_news) // addFragment(nineFragment, R.id.rl_container) addFragment(mainFragment, R.id.rl_container) childFragmentManager.beginTransaction().show(mainFragment) MyApplication.getInstance().startLocation() MyApplication.isLogin = true beOnDuty(false) initCall() NettyClient.getInstance().startService() callVersion() checkGps() checkRecord() MyApplication.addOrderView(qeeOrderView) showHintDialog() setOnclick() } private fun checkRecord() { val rxPermissions = RxPermissions(requireActivity()) val subscribe = rxPermissions.request( Manifest.permission.RECORD_AUDIO, Manifest.permission.ACCESS_FINE_LOCATION ).subscribe { if (!it) { toast("为了能正常接单,请打开必要权限") } } } private fun showHintDialog() { var hint = CacheKey.getKeyStr("money_hinr") if (hint.isEmpty()) { var map = getMapByAny() map["type"] = 18 callNet( false, Api.queryByType, map ) { CacheKey.putKeyStr("money_hinr", "money_hinr") var data = gson.fromJson(it, AgreeBean::class.java) var dialog = DialogUtil.getOnlySureDialog( requireContext(), "投诉扣款须知", HtmlUtils.getTextFromHtmlAll(data.data.content) ) { } } } } 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() } if (cityRouteLineListFragment.isAdded && cityRouteLineListFragment.isVisible) { cityRouteLineListFragment.refresh() } MyApplication.getTTsManager().setVideoText("有用户订单被取消或改派") } } } } } } } private fun checkGps() { if (!AMapKit.isLocServiceEnable(requireContext())) { DialogUtil.getDelAndSureDialog( requireContext(), "查看定位", "退出", "您暂未开启手机定位GPS,是否前往开启?", { requireActivity().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(false, Api.queryNewData, map) { var data = gson.fromJson(it, VersionBean::class.java) if (data.data.version != "" && data.data.version != Utils.getAppVersion(requireContext())) { if (data.data.mandatory == 2) { DialogUtil.getDelAndSureDialog(requireContext(), "有新版本是否更新?", {}, { DownloadUtil( requireContext() ).downloadAPK(data.data.url, "放心行司机端") }) } else if (data.data.mandatory == 1) { DialogUtil.getDelAndSureDialog(requireContext(), "版本已过时,是否强制升级?", { EventBus.getDefault().post( BaseEvent( BaseEvent.OUT_APP ) ) }, { DownloadUtil( requireContext() ).downloadAPK(data.data.url, "放心行司机端") ToastUtils.showShortToast(requireContext(), "后台开始下载,请等待") }) } else { // toast("已经是最新版本") } } else { // toast("已经是最新版本") } } } override fun onResume() { super.onResume() if (mainFragment.isAdded && mainFragment.isVisible) { mainFragment.refresh() } if (cityRouteLineListFragment.isAdded && cityRouteLineListFragment.isVisible) { cityRouteLineListFragment.refresh() } } fun beOnDuty(b: Boolean) { if (b) { avv_anim.visible() tv_up_avv.visible() if (homeDataBean?.data?.workType?.split(",")?.contains("3") != false) { tv_cross.visibility = View.GONE } else { tv_cross.visibility = View.GONE } } else { avv_anim.gone() tv_up_avv.gone() tv_cross.gone() } } private fun initCall() { var map = getMapByAny() callNet(false, 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) "下班" else "出车" if (data.data.work == 1) { MyApplication.getTTsManager().setVideoText("您正在上班中") beOnDuty(true) if (!Settings.canDrawOverlays(requireContext()) && CacheKey.getKeyStr("isRefusedFloat") .isNullOrEmpty() ) { //没有浮窗权限并且没有拒绝过 DialogUtil.getDelAndSureDialog( requireContext(), "去开启", "取消", "为了增加后台推单的稳定性,我们需要开启悬浮窗口权限", { CacheKey.putKeyStr("isRefusedFloat", "1") }) { var intent = Intent( Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + requireContext().packageName) ) startActivityForResult(intent, 1234) } } EventBus.getDefault().post( BaseEvent( BaseEvent.APP_LOG, "正在上班中" ) ) } else { MyApplication.getTTsManager().setVideoText("您已下班") beOnDuty(false) } tv_time.text = DateUtil.getTime( DateUtil.TYPE7, System.currentTimeMillis() ) + " " + DateUtil.getWeek(System.currentTimeMillis()) refreshPostCityRouteLineEntrance() } } 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()) } } //刷新发布行程入口 private fun refreshPostCityRouteLineEntrance() { if (!CacheKey.getUserInfo().couldDrivePostRouteLine()) { tv_post_city_route_line.gone() return } tv_post_city_route_line.visible() } var type = 0 fun setOnclick() { tv_map.setOnClickListener { type = 0 addFragment(mapFragment, R.id.rl_container) avv_anim.gone() tv_up_avv.gone() tv_help_order.gone() tv_car.visible() //tv_post_city_route_line.gone() tv_cross.gone() tv_map.textColor(requireContext(), R.color.main_yellow_shen) tv_server_ing.textColor(requireContext(), R.color.main_gray) tv_wait_server.textColor(requireContext(), R.color.main_gray) tv_95128.textColor(requireContext(), R.color.main_gray) tv_city_route_line.textColor(requireContext(), R.color.main_gray) } tv_server_ing.setOnClickListener { type = 0 addFragment(mainFragment, R.id.rl_container) homeDataBean?.also { if (it.data.work == 1) { avv_anim.visible() tv_up_avv.visible() } else { avv_anim.gone() tv_up_avv.gone() } } tv_help_order.gone() tv_car.visible() //tv_post_city_route_line.gone() tv_cross.gone() tv_map.textColor(requireContext(), R.color.main_gray) tv_server_ing.textColor(requireContext(), R.color.main_yellow_shen) tv_wait_server.textColor(requireContext(), R.color.main_gray) tv_95128.textColor(requireContext(), R.color.main_gray) tv_city_route_line.textColor(requireContext(), R.color.main_gray) mainFragment.state = 1 mainFragment.autoRefresh() } tv_wait_server.setOnClickListener { type = 1 addFragment(mainFragment, R.id.rl_container) homeDataBean?.also { if (it.data.work == 1) { avv_anim.visible() tv_up_avv.visible() } else { avv_anim.gone() tv_up_avv.gone() } } tv_help_order.gone() tv_car.visible() //tv_post_city_route_line.gone() tv_cross.gone() tv_map.textColor(requireContext(), R.color.main_gray) tv_server_ing.textColor(requireContext(), R.color.main_gray) tv_wait_server.textColor(requireContext(), R.color.main_yellow_shen) tv_95128.textColor(requireContext(), R.color.main_gray) tv_city_route_line.textColor(requireContext(), R.color.main_gray) mainFragment.state = 2 mainFragment.autoRefresh() } tv_95128.clickDelay { type = 2 addFragment(nineFragment, R.id.rl_container) homeDataBean?.also { if (it.data.work == 1) { avv_anim.visible() tv_up_avv.visible() } else { avv_anim.gone() tv_up_avv.gone() } } tv_help_order.gone() tv_car.visible() //tv_post_city_route_line.gone() tv_cross.gone() nineFragment.showOrder(false) tv_map.textColor(requireContext(), R.color.main_gray) tv_server_ing.textColor(requireContext(), R.color.main_gray) tv_wait_server.textColor(requireContext(), R.color.main_gray) tv_95128.textColor(requireContext(), R.color.main_yellow_shen) tv_city_route_line.textColor(requireContext(), R.color.main_gray) } tv_city_route_line.clickDelay { type = 3 addFragment(cityRouteLineListFragment, R.id.rl_container) avv_anim.gone() tv_up_avv.gone() tv_help_order.gone() tv_car.gone() //tv_post_city_route_line.gone() tv_cross.visible() cityRouteLineListFragment.autoRefresh() tv_map.textColor(requireContext(), R.color.main_gray) tv_server_ing.textColor(requireContext(), R.color.main_gray) tv_wait_server.textColor(requireContext(), R.color.main_gray) tv_95128.textColor(requireContext(), R.color.main_gray) tv_city_route_line.textColor(requireContext(), R.color.main_yellow_shen) } iv_police.clickDelay { MyUtils.getInstans().CallPhone(requireContext(), "110") } iv_right_title_f.clickDelay { requireContext().startActivity() } tv_history_order.clickDelay { if (type == 2) { requireContext().startActivity() } else { requireContext().startActivity() } } ll_task.clickDelay { requireContext().startActivity() } tv_help_order.clickDelay { // if (!MyApplication.isCould) // toast("请先填写个人进件") // else requireContext().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("您已下班") } } else { if (requireActivity().checkPermissions("出车")) { callNet(Api.queryMyBusiness, getMapByAny()) { var bean = gson.fromJson(it, SelectServerModeBean::class.java).data if (bean.isEmpty()) { toast("请前往个人中心--接单设置进行设置") return@callNet } requireActivity().startActivity() } } } } copy.setOnClickListener { val clipboardManager = requireContext().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager val clipData = ClipData.newPlainText("label", tv_log.text) clipboardManager.setPrimaryClip(clipData) } cls.setOnClickListener { tv_log.text = "" } tv_cross.clickDelay { requireContext().startActivity() } tv_post_city_route_line.clickDelay { requireContext().startActivity() } } // 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 -> { if (mainFragment.isAdded && mainFragment.isVisible) { mainFragment.refresh() } if (cityRouteLineListFragment.isAdded && cityRouteLineListFragment.isVisible) { cityRouteLineListFragment.refresh() } } BaseEvent.APP_BACKGROUND -> { if (homeDataBean?.data?.work == 1 && Settings.canDrawOverlays(requireContext())) { 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 } } } fun showFloater() { if (floater == null) { floater = EasyFloat.with(requireActivity()) .setLayout(R.layout.layout_floter, OnInvokeView { it.setOnClickListener { requireActivity().startActivity() } }) .setShowPattern(ShowPattern.ALL_TIME) .setSidePattern(SidePattern.RESULT_LEFT) .setGravity(Gravity.START or Gravity.BOTTOM, 0, requireActivity().dip(-180)) .setDragEnable(true) .setTag(EasyFloatTag) .setMatchParent(widthMatch = false, heightMatch = false) .registerCallback { touchEvent { view, motionEvent -> motionEvent.action } } floater?.show() } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == 1234 && !Settings.canDrawOverlays(requireContext())) { //权限被拒绝了 Log.e("mmp", "浮窗权限被拒") CacheKey.putKeyStr("isRefusedFloat", "1") } } override fun onDestroyView() { super.onDestroyView() MyApplication.removeOrderView(qeeOrderView) } }