DatiFragment.kt 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162
  1. package com.ytpm.hydtw.fragment
  2. import android.annotation.SuppressLint
  3. import android.os.Build
  4. import android.os.Bundle
  5. import android.os.CountDownTimer
  6. import android.view.Gravity
  7. import android.view.LayoutInflater
  8. import android.view.View
  9. import android.view.ViewGroup
  10. import androidx.core.content.res.ResourcesCompat
  11. import androidx.fragment.app.Fragment
  12. import com.anythink.banner.api.ATBannerListener
  13. import com.anythink.banner.api.ATBannerView
  14. import com.anythink.core.api.ATAdConst
  15. import com.anythink.core.api.ATAdInfo
  16. import com.anythink.core.api.ATShowConfig
  17. import com.anythink.core.api.AdError
  18. import com.anythink.interstitial.api.ATInterstitial
  19. import com.anythink.interstitial.api.ATInterstitialListener
  20. import com.anythink.nativead.api.ATNative
  21. import com.anythink.nativead.api.ATNativeAdView
  22. import com.anythink.nativead.api.ATNativeEventListener
  23. import com.anythink.nativead.api.ATNativeNetworkListener
  24. import com.anythink.nativead.api.NativeAd
  25. import com.anythink.rewardvideo.api.ATRewardVideoAd
  26. import com.anythink.rewardvideo.api.ATRewardVideoListener
  27. import com.blankj.utilcode.util.GsonUtils
  28. import com.blankj.utilcode.util.LogUtils
  29. import com.blankj.utilcode.util.ToastUtils
  30. import com.blankj.utilcode.util.ToastUtils.MODE
  31. import com.gyf.immersionbar.ImmersionBar
  32. import com.ytpm.hydtw.Constants
  33. import com.ytpm.hydtw.R
  34. import com.ytpm.hydtw.adapter.MineAdapter
  35. import com.ytpm.hydtw.dao.Question
  36. import com.ytpm.hydtw.dao.Record
  37. import com.ytpm.hydtw.dao.UserInfo
  38. import com.ytpm.hydtw.databinding.FragmentDatiBinding
  39. import com.ytpm.hydtw.loading.GlobalLoading
  40. import com.ytpm.hydtw.loading.LoadingDialog
  41. import com.ytpm.hydtw.network.BaseRetrofit
  42. import com.ytpm.hydtw.network.Callback2
  43. import com.ytpm.hydtw.utils.DateTimeConverter
  44. import com.ytpm.hydtw.utils.DateTimeUtils
  45. import com.ytpm.hydtw.utils.GlideUtils
  46. import com.ytpm.hydtw.utils.MediationNativeAdUtil
  47. import com.ytpm.hydtw.utils.UserInfoSpUtils
  48. import kotlinx.coroutines.CoroutineScope
  49. import kotlinx.coroutines.DelicateCoroutinesApi
  50. import kotlinx.coroutines.Dispatchers
  51. import kotlinx.coroutines.GlobalScope
  52. import kotlinx.coroutines.Job
  53. import kotlinx.coroutines.cancel
  54. import kotlinx.coroutines.delay
  55. import kotlinx.coroutines.isActive
  56. import kotlinx.coroutines.launch
  57. import java.time.Instant
  58. import java.time.LocalDateTime
  59. import java.time.ZoneId
  60. import java.time.format.DateTimeFormatter
  61. class DatiFragment() : Fragment(), ATRewardVideoListener,
  62. ATBannerListener {
  63. private var mBannerView: ATBannerView? = null
  64. private var atNative: ATNative? = null
  65. private var interstitialAd: ATInterstitial? = null
  66. private var startAdTime: String? = null
  67. private var endAdTime: String? = null
  68. private var startBannerAdTime: String? = null
  69. private var endBannerAdTime: String? = null
  70. private var startNativeAdTime: String? = null
  71. private var endNativeAdTime: String? = null
  72. private var startInAdTime: String? = null
  73. private var endInAdTime: String? = null
  74. private var mRewardVideoAd: ATRewardVideoAd? = null
  75. private var job: Job? = null
  76. private var scope: CoroutineScope? = null
  77. private var useTimer: Int = 0
  78. private var job1: Job? = null
  79. private var scope1: CoroutineScope? = null
  80. private var inAdTime: Int = 0
  81. private var job2: Job? = null
  82. private var scope2: CoroutineScope? = null
  83. private var nativeAdTime: Int = 0
  84. private var job3: Job? = null
  85. private var scope3: CoroutineScope? = null
  86. private var getTlTime = 30
  87. private var pauseGetTlTime = false
  88. private var job4: Job? = null
  89. private var scope4: CoroutineScope? = null
  90. private var getTlShowBtnTime = 8
  91. private var pauseGetTlShowBtnTime = false
  92. private var getTlCountDownTimer: CountDownTimer? = null
  93. private var getTlShowBtnCountDownTimer: CountDownTimer? = null
  94. private var startReloadRewardVideoAd: CountDownTimer? = null
  95. private var questions: ArrayList<Question>? = arrayListOf()
  96. private lateinit var binding: FragmentDatiBinding
  97. private var nowIndex = 0
  98. private var tl = 0
  99. private var jrdd = 0
  100. private var lsdd = 0
  101. private var isGrDialogShow = false
  102. private var isGetTlDialogShow = false
  103. private var isGetResult = false
  104. private var isInAdPaunse = false
  105. private var loadDialog: LoadingDialog? = null
  106. private var loadingTime = 10
  107. override fun onCreateView(
  108. inflater: LayoutInflater,
  109. container: ViewGroup?,
  110. savedInstanceState: Bundle?
  111. ): View {
  112. binding = FragmentDatiBinding.inflate(inflater)
  113. ImmersionBar.with(this)
  114. .transparentStatusBar()
  115. .statusBarDarkFont(true)
  116. .titleBar(null)
  117. .init()
  118. loadAd()
  119. initData()
  120. initUserTime()
  121. initInAdTime()
  122. // initNativeTime()
  123. loadBannerAd()
  124. loadNativeAd()
  125. loadInterstitial()
  126. initView()
  127. useTimer = 0
  128. return binding.root
  129. }
  130. private fun initView() {
  131. val headImg = UserInfoSpUtils().getHeadImg()
  132. if (headImg.isNotEmpty()) {
  133. context?.let {
  134. GlideUtils().circelImages(it, headImg, binding.dialogGettlHead)
  135. GlideUtils().circelImages(it, headImg, binding.fragmentDatiHead)
  136. GlideUtils().circelImages(it, headImg, binding.dialogSetHead)
  137. }
  138. }
  139. val registerTime = UserInfoSpUtils().getRegistryTime()
  140. val ddd = DateTimeConverter.convertToBeijingTime(registerTime, "yyyy/MM/dd HH:mm:ss")
  141. binding.dialogGettlRegisterTime.text = "注册时间:${ddd}"
  142. binding.dialogSetRegisterTime.text = "注册时间:${ddd}"
  143. val loginTime = UserInfoSpUtils().getLoginTime()
  144. val ccc = DateTimeConverter.convertToBeijingTime(loginTime, "yyyy/MM/dd HH:mm:ss")
  145. binding.dialogGettlLoginTime.text = "登录时间:${ccc}"
  146. val uid = UserInfoSpUtils().getUserId()
  147. binding.fragmentDatiUid.text = uid
  148. binding.dialogGettlUserid.text = uid
  149. binding.dialogSetUserid.text = uid
  150. val nickname = UserInfoSpUtils().getNickName()
  151. binding.dialogSetNickname.text = nickname
  152. binding.dialogGettlNickname.text = nickname
  153. jrdd = UserInfoSpUtils().getTodayAnswerCount()
  154. lsdd = UserInfoSpUtils().getHistoryAnswerCount()
  155. binding.jrddTv.text = "今日答题: ${jrdd}题"
  156. binding.lsddTv.text = "历史答题: ${lsdd}题"
  157. tl = UserInfoSpUtils().getPower()
  158. binding.tlValue.text = "体力:${tl}"
  159. binding.switch1.isChecked = true
  160. binding.switch2.isChecked = true
  161. startGetTlTime()
  162. initGetTlTime()
  163. binding.dialogGr.setOnClickListener {
  164. }
  165. binding.fragmentDatiGr.setOnClickListener {
  166. this.isGrDialogShow = !isGrDialogShow
  167. if (isGrDialogShow) {
  168. binding.dialogGr.visibility = View.VISIBLE
  169. } else {
  170. binding.dialogGr.visibility = View.GONE
  171. }
  172. }
  173. binding.dialogGrClose.setOnClickListener {
  174. this.isGrDialogShow = false
  175. binding.dialogGr.visibility = View.GONE
  176. loadBannerAd()
  177. loadNativeAd()
  178. }
  179. binding.getTlCl.setOnClickListener {
  180. if (getTlTime > 0) {
  181. ToastUtils.showShort("等待倒计时结束!")
  182. return@setOnClickListener
  183. }
  184. if (isGetTlDialogShow) {
  185. this.isGetTlDialogShow = false
  186. binding.dialgoGettlLl.visibility = View.GONE
  187. } else {
  188. this.isGetTlDialogShow = true
  189. binding.dialgoGettlLl.visibility = View.VISIBLE
  190. }
  191. var nowTime = ""
  192. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  193. val current = LocalDateTime.now()
  194. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  195. nowTime = current.format(formatter)
  196. } else {
  197. nowTime = DateTimeUtils.getCurrentDateTime()
  198. }
  199. binding.dialogGettlTime.text = nowTime
  200. startGetTlShowBtnTime()
  201. }
  202. binding.dialgoGettlLl.setOnClickListener { }
  203. binding.dialotGettlBtnTx.setOnClickListener {
  204. showAd()
  205. }
  206. binding.getTlDialogClose.setOnClickListener {
  207. this.isGetTlDialogShow = false
  208. binding.dialgoGettlLl.visibility = View.GONE
  209. initGetTlBtnTime()
  210. loadBannerAd()
  211. loadNativeAd()
  212. }
  213. binding.a1.setOnClickListener {
  214. if (isGetResult) {
  215. return@setOnClickListener
  216. }
  217. gameResult(0)
  218. }
  219. binding.a2.setOnClickListener {
  220. if (isGetResult) {
  221. return@setOnClickListener
  222. }
  223. gameResult(1)
  224. }
  225. initDialogGetTl()
  226. }
  227. private fun initUserTime() {
  228. if (job == null) {
  229. job = Job()
  230. }
  231. if (scope == null) {
  232. scope = CoroutineScope(Dispatchers.Main + job!!)
  233. }
  234. scope!!.launch {
  235. while (isActive) {
  236. useTimer++
  237. delay(1000)
  238. }
  239. }
  240. }
  241. private fun initInAdTime() {
  242. if (job1 == null) {
  243. job1 = Job()
  244. }
  245. if (scope1 == null) {
  246. scope1 = CoroutineScope(Dispatchers.Main + job1!!)
  247. }
  248. scope1!!.launch {
  249. while (isActive) {
  250. if (!isInAdPaunse) {
  251. inAdTime++
  252. if (inAdTime == 30) {
  253. interstitialAd?.load()
  254. job1?.cancel()
  255. scope1?.cancel()
  256. job1 = null
  257. scope1 = null
  258. inAdTime = 0
  259. }
  260. }
  261. delay(1000)
  262. }
  263. }
  264. }
  265. private fun initNativeTime() {
  266. if (job2 == null) {
  267. job2 = Job()
  268. }
  269. if (scope2 == null) {
  270. scope2 = CoroutineScope(Dispatchers.Main + job2!!)
  271. }
  272. scope2!!.launch {
  273. while (isActive) {
  274. nativeAdTime++
  275. if (nativeAdTime == 40) {
  276. if (atNative?.checkAdStatus()?.isLoading == false) {
  277. atNative?.makeAdRequest()
  278. }
  279. job2?.cancel()
  280. scope2?.cancel()
  281. job2 = null
  282. scope2 = null
  283. nativeAdTime = 0
  284. }
  285. delay(1000)
  286. }
  287. }
  288. }
  289. override fun onPause() {
  290. super.onPause()
  291. this.isInAdPaunse = true
  292. this.pauseGetTlShowBtnTime = true
  293. }
  294. override fun onResume() {
  295. super.onResume()
  296. this.isInAdPaunse = false
  297. this.pauseGetTlShowBtnTime = false
  298. getUserInfo()
  299. }
  300. private fun initDialogGetTl() {
  301. val adapter = MineAdapter(initDataAdapter())
  302. binding.dialgoGettlRl.adapter = adapter
  303. binding.dialogGettlJrdd.text = "今日答题: ${jrdd}题"
  304. binding.dialogGettlLsdd.text = "历史答题: ${lsdd}题"
  305. }
  306. private fun initDataAdapter(): MutableList<Record> {
  307. val dfdfd = UserInfoSpUtils().getAnswerRecordList()
  308. return dfdfd.toMutableList()
  309. }
  310. private fun answer(questionId: String, itemId: String) {
  311. val map = HashMap<String, Any>()
  312. map["duration"] = useTimer
  313. map["itemId"] = itemId
  314. map["questionId"] = questionId
  315. map["userId"] = UserInfoSpUtils().getUserId()
  316. val requestBody = BaseRetrofit.getRequestBodyByMapToJson(map)
  317. var url = if (Constants.isDebug) {
  318. Constants.ANSWER_QUESTION
  319. } else {
  320. Constants.FULL_URL_V2 + Constants.ANSWER_QUESTION
  321. }
  322. BaseRetrofit.getInstance().apiService.answerQuestion(url, requestBody)
  323. .enqueue(object : Callback2<Any>() {
  324. override fun success(body: Any?) {
  325. val userinfo = UserInfoSpUtils().getUserInfo()
  326. var answerTime = ""
  327. // 格式化为ISO字符串
  328. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  329. val instant = Instant.now()
  330. val formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME
  331. answerTime = instant.atZone(ZoneId.of("UTC")).format(formatter)
  332. } else {
  333. answerTime = DateTimeUtils.getCurrentDateTimeIso().toString()
  334. }
  335. val record = Record(answerTime)
  336. val ddd = UserInfoSpUtils().getUserInfo().answerRecordList as MutableList
  337. ddd.add(0, record)
  338. userinfo.answerRecordList = ddd
  339. userinfo.lastQuestionId = questionId
  340. UserInfoSpUtils().changeValue(userinfo)
  341. initDialogGetTl()
  342. useTimer = 0
  343. }
  344. override fun fail(msg: String?) {
  345. ToastUtils
  346. .make()
  347. .setMode(MODE.DARK)
  348. .setGravity(Gravity.CENTER, 0, 0)
  349. .setTopIcon(R.mipmap.icon_fail)
  350. .setDurationIsLong(true)
  351. .show(msg)
  352. }
  353. })
  354. }
  355. private fun addPower() {
  356. var url = if (Constants.isDebug) {
  357. Constants.ADD_POWER
  358. } else {
  359. Constants.FULL_URL_V2 + Constants.ADD_POWER
  360. }
  361. val userId = UserInfoSpUtils().getUserId()
  362. BaseRetrofit.getInstance().apiService.addPower(url, userId)
  363. .enqueue(object : Callback2<Any>() {
  364. override fun success(body: Any?) {
  365. tl++
  366. val user = UserInfoSpUtils().getUserInfo()
  367. user.power = tl
  368. UserInfoSpUtils().changeValue(user)
  369. isGetTlDialogShow = false
  370. binding.dialgoGettlLl.visibility = View.GONE
  371. changeLever()
  372. initGetTlBtnTime()
  373. initGetTlTime()
  374. }
  375. override fun fail(msg: String?) {
  376. ToastUtils
  377. .make()
  378. .setMode(MODE.DARK)
  379. .setGravity(Gravity.CENTER, 0, 0)
  380. .setTopIcon(R.mipmap.icon_fail)
  381. .setDurationIsLong(true)
  382. .show(msg)
  383. }
  384. })
  385. }
  386. @SuppressLint("SetTextI18n")
  387. private fun initGetTlTime() {
  388. binding.zz.visibility = View.VISIBLE
  389. getTlTime = 30
  390. binding.zz.text = "${getTlTime}s"
  391. getTlCountDownTimer?.start()
  392. }
  393. @SuppressLint("SetTextI18n")
  394. private fun initGetTlBtnTime() {
  395. binding.dialotGettlBtnTx.visibility = View.GONE
  396. binding.getTlDialogClose.visibility = View.GONE
  397. binding.dialgoGettlTime.visibility = View.VISIBLE
  398. getTlShowBtnTime = 8
  399. binding.dialgoGettlTime.text = "${getTlShowBtnTime}s"
  400. }
  401. private fun startGetTlShowBtnTime() {
  402. if (job4 == null) {
  403. job4 = Job()
  404. }
  405. if (scope4 == null) {
  406. scope4 = CoroutineScope(Dispatchers.Main + job4!!)
  407. }
  408. scope4!!.launch {
  409. while (isActive) {
  410. if (!pauseGetTlShowBtnTime) {
  411. getTlShowBtnTime--
  412. if (getTlShowBtnTime <= 0) {
  413. binding.dialgoGettlTime.visibility = View.GONE
  414. binding.dialotGettlBtnTx.visibility = View.VISIBLE
  415. binding.getTlDialogClose.visibility = View.VISIBLE
  416. job4?.cancel()
  417. scope4?.cancel()
  418. job4 = null
  419. scope4 = null
  420. getTlShowBtnTime = 8
  421. } else {
  422. binding.dialgoGettlTime.text = "${getTlShowBtnTime}s"
  423. }
  424. }
  425. delay(1000)
  426. }
  427. }
  428. //
  429. // if (getTlShowBtnCountDownTimer != null) {
  430. // return
  431. // }
  432. // this.getTlShowBtnTime = 8
  433. // getTlShowBtnCountDownTimer =
  434. // object : CountDownTimer((getTlShowBtnTime * 1000).toLong(), 1000) {
  435. // @SuppressLint("SetTextI18n")
  436. // override fun onTick(millisUntilFinished: Long) {
  437. // val secondsRemaining = millisUntilFinished / 1000
  438. // getTlShowBtnTime--
  439. // binding.dialgoGettlTime.text = "${secondsRemaining}s"
  440. // }
  441. //
  442. // override fun onFinish() {
  443. // getTlShowBtnTime = 0
  444. // binding.dialgoGettlTime.visibility = View.GONE
  445. // binding.dialotGettlBtnTx.visibility = View.VISIBLE
  446. // binding.getTlDialogClose.visibility = View.VISIBLE
  447. // }
  448. // }
  449. }
  450. private fun startGetTlTime() {
  451. if (getTlCountDownTimer != null) {
  452. return
  453. }
  454. this.getTlTime = 30
  455. getTlCountDownTimer = object : CountDownTimer((getTlTime * 1000).toLong(), 1000) {
  456. @SuppressLint("SetTextI18n")
  457. override fun onTick(millisUntilFinished: Long) {
  458. val secondsRemaining = millisUntilFinished / 1000
  459. getTlTime--
  460. binding.zz.text = "${secondsRemaining}s"
  461. }
  462. override fun onFinish() {
  463. getTlTime = 0
  464. binding.zz.visibility = View.GONE
  465. }
  466. }
  467. }
  468. private fun startReloadRewardVideoAd() {
  469. if (startReloadRewardVideoAd != null) {
  470. return
  471. }
  472. startReloadRewardVideoAd = object : CountDownTimer((loadingTime * 1000).toLong(), 1000) {
  473. @SuppressLint("SetTextI18n")
  474. override fun onTick(millisUntilFinished: Long) {
  475. }
  476. override fun onFinish() {
  477. ToastUtils.showShort("非法操作,请30秒后重新获取!")
  478. if (loadDialog?.isShowing == true) loadDialog?.dismiss()
  479. }
  480. }
  481. }
  482. private fun initLever() {
  483. val lastQuestionId = UserInfoSpUtils().getLastQuestionId()
  484. questions?.forEachIndexed { index, question ->
  485. if (question.questionId.equals(lastQuestionId)) {
  486. nowIndex = index + 1
  487. if (nowIndex >= (questions?.size?.minus(1)!!)) {
  488. nowIndex = 0
  489. }
  490. }
  491. }
  492. }
  493. private fun initData() {
  494. var url = if (Constants.isDebug) {
  495. Constants.GET_QUESTIONS
  496. } else {
  497. Constants.FULL_URL_V2 + Constants.GET_QUESTIONS
  498. }
  499. BaseRetrofit.getInstance().apiService.getQuestions(url).enqueue(object :
  500. Callback2<List<Question>>() {
  501. override fun success(body: List<Question>?) {
  502. binding.answerCl.visibility = View.VISIBLE
  503. questions = arrayListOf()
  504. body?.forEach { item ->
  505. if (item.itemList.size == 2) {
  506. questions?.add(item)
  507. }
  508. }
  509. if (questions.isNullOrEmpty()) {
  510. ToastUtils
  511. .make()
  512. .setMode(MODE.DARK)
  513. .setGravity(Gravity.CENTER, 0, 0)
  514. .setTopIcon(R.mipmap.icon_fail)
  515. .setDurationIsLong(true)
  516. .show("题目异常,请联系程序猿!")
  517. return
  518. }
  519. initLever()
  520. changeLever()
  521. }
  522. override fun fail(msg: String?) {
  523. ToastUtils
  524. .make()
  525. .setMode(MODE.DARK)
  526. .setGravity(Gravity.CENTER, 0, 0)
  527. .setTopIcon(R.mipmap.icon_fail)
  528. .setDurationIsLong(true)
  529. .show(msg)
  530. }
  531. })
  532. }
  533. private fun setBackGround(view: View, resId: Int) {
  534. view.background = ResourcesCompat.getDrawable(resources, resId, null)
  535. }
  536. @OptIn(DelicateCoroutinesApi::class)
  537. @SuppressLint("SetTextI18n")
  538. private fun gameResult(btnIndex: Int) {
  539. val item = questions?.get(nowIndex)
  540. if (item?.correctItem == item?.itemList?.get(btnIndex)?.itemId) {
  541. when (btnIndex) {
  542. 0 -> {
  543. setBackGround(binding.a1, R.mipmap.icon_success_anseer)
  544. binding.a1Result.visibility = View.VISIBLE
  545. setBackGround(binding.a1Result, R.mipmap.icon_success)
  546. }
  547. 1 -> {
  548. setBackGround(binding.a2, R.mipmap.icon_success_anseer)
  549. binding.a2Result.visibility = View.VISIBLE
  550. setBackGround(binding.a2Result, R.mipmap.icon_success)
  551. }
  552. }
  553. } else {
  554. when (btnIndex) {
  555. 0 -> {
  556. setBackGround(binding.a1, R.mipmap.icon_fail_anseer)
  557. binding.a1Result.visibility = View.VISIBLE
  558. setBackGround(binding.a1Result, R.mipmap.icon_fail)
  559. }
  560. 1 -> {
  561. setBackGround(binding.a2, R.mipmap.icon_fail_anseer)
  562. binding.a2Result.visibility = View.VISIBLE
  563. setBackGround(binding.a2Result, R.mipmap.icon_fail)
  564. }
  565. }
  566. }
  567. if (nowIndex == (questions?.size?.minus(1))) {
  568. nowIndex = 0
  569. } else {
  570. nowIndex++
  571. }
  572. jrdd++
  573. lsdd++
  574. val user = UserInfoSpUtils().getUserInfo()
  575. user.todayAnswerCount = jrdd
  576. user.historyAnswerCount = lsdd
  577. UserInfoSpUtils().changeValue(user)
  578. binding.jrddTv.text = "今日答题: ${jrdd}题"
  579. binding.lsddTv.text = "历史答题: ${lsdd}题"
  580. val questionId = item?.questionId
  581. val itemId = item?.itemList?.get(btnIndex)?.itemId
  582. if (questionId != null && itemId != null) {
  583. answer(questionId, itemId)
  584. } else {
  585. ToastUtils.showShort("参数异常!")
  586. }
  587. GlobalScope.launch {
  588. isGetResult = true
  589. delay(3000)
  590. isGetResult = false
  591. tl--
  592. val user = UserInfoSpUtils().getUserInfo()
  593. user.power = tl
  594. UserInfoSpUtils().changeValue(user)
  595. GlobalScope.launch(Dispatchers.Main) { changeLever() }
  596. }
  597. }
  598. @SuppressLint("SetTextI18n")
  599. private fun changeLever() {
  600. binding.tlValue.text = "体力:${tl}"
  601. binding.gkValue.text = "关卡:${nowIndex + 1}"
  602. setBackGround(binding.a1, R.mipmap.icon_nomal_btn)
  603. binding.a1Result.visibility = View.GONE
  604. setBackGround(binding.a2, R.mipmap.icon_nomal_btn)
  605. binding.a2Result.visibility = View.GONE
  606. val data = questions?.get(nowIndex)
  607. binding.content.text = data?.questionContent
  608. data?.itemList?.forEachIndexed { index, item ->
  609. when (index) {
  610. 0 -> binding.a1.text = item.itemContent
  611. 1 -> binding.a2.text = item.itemContent
  612. }
  613. }
  614. changeTran()
  615. }
  616. private fun changeTran() {
  617. if (tl <= 0) {
  618. binding.a1Tran.visibility = View.VISIBLE
  619. binding.a1.isClickable = false
  620. binding.a2Tran.visibility = View.VISIBLE
  621. binding.a2.isClickable = false
  622. ToastUtils.make().setTopIcon(R.mipmap.icon_fail)
  623. ToastUtils.showShort("体力不足,请先领取")
  624. } else {
  625. binding.a1Tran.visibility = View.GONE
  626. binding.a1.isClickable = true
  627. binding.a2Tran.visibility = View.GONE
  628. binding.a2.isClickable = true
  629. }
  630. }
  631. override fun onDestroy() {
  632. super.onDestroy()
  633. getTlCountDownTimer?.cancel()
  634. getTlShowBtnCountDownTimer?.cancel()
  635. getTlCountDownTimer = null
  636. getTlShowBtnCountDownTimer = null
  637. job?.cancel()
  638. scope?.cancel()
  639. job = null
  640. scope = null
  641. }
  642. private fun loadAd() {
  643. if (mRewardVideoAd == null) {
  644. mRewardVideoAd = ATRewardVideoAd(context, Constants.TAKU_REWARD_PID)
  645. }
  646. val userid = UserInfoSpUtils().getUserInfo().userId
  647. val userdata = UserInfoSpUtils().getUserInfo().nickName
  648. val localMap: MutableMap<String, Any> = HashMap()
  649. localMap[ATAdConst.KEY.USER_ID] = userid
  650. localMap[ATAdConst.KEY.USER_CUSTOM_DATA] = userdata
  651. mRewardVideoAd?.setLocalExtra(localMap)
  652. mRewardVideoAd?.setAdListener(this)
  653. mRewardVideoAd?.load()
  654. }
  655. private var isReload = false
  656. private fun showAd() {
  657. if (mRewardVideoAd?.isAdReady == true) {
  658. mRewardVideoAd?.show(activity)
  659. return
  660. }
  661. // 在 Fragment 中使用
  662. if (isAdded && activity != null && !requireActivity().isFinishing) {
  663. loadDialog = LoadingDialog(activity)
  664. loadDialog?.show()
  665. startReloadRewardVideoAd()
  666. startReloadRewardVideoAd?.start()
  667. }
  668. isReload = true
  669. if (mRewardVideoAd?.checkAdStatus()?.isLoading != true) mRewardVideoAd?.load()
  670. }
  671. private var isRewardedVideoFinish = false
  672. override fun onRewardedVideoAdLoaded() {
  673. LogUtils.e("DFDFDF=onRewardedVideoAdLoaded")
  674. startReloadRewardVideoAd?.cancel()
  675. startReloadRewardVideoAd = null
  676. if (loadDialog?.isShowing == true) loadDialog?.dismiss()
  677. if (isReload) showAd()
  678. }
  679. override fun onRewardedVideoAdFailed(p0: AdError?) {
  680. LogUtils.e("DFDFDF=onRewardedVideoAdFailed${p0?.code}")
  681. }
  682. override fun onRewardedVideoAdPlayStart(p0: ATAdInfo?) {
  683. isReload = false
  684. isRewardedVideoFinish = false
  685. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  686. val current = LocalDateTime.now()
  687. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  688. startAdTime = current.format(formatter)
  689. } else {
  690. startAdTime = DateTimeUtils.getCurrentDateTime()
  691. }
  692. mRewardVideoAd?.load()
  693. LogUtils.e("DFDFDF=onRewardedVideoAdPlayStart${p0.toString()}")
  694. }
  695. override fun onRewardedVideoAdPlayEnd(p0: ATAdInfo?) {
  696. LogUtils.e("DFDFDF=onRewardedVideoAdPlayEnd${p0.toString()}")
  697. isRewardedVideoFinish = true
  698. }
  699. override fun onRewardedVideoAdPlayFailed(p0: AdError?, p1: ATAdInfo?) {
  700. LogUtils.e("DFDFDF=onRewardedVideoAdPlayFailed${p0?.code}===${p1.toString()}")
  701. }
  702. override fun onRewardedVideoAdClosed(p0: ATAdInfo?) {
  703. LogUtils.e("DFDFDF=onRewardedVideoAdClosed${p0.toString()}")
  704. loadBannerAd()
  705. loadNativeAd()
  706. if (!isRewardedVideoFinish) {
  707. ToastUtils.showLong("获取奖励失败,请观看完广告再关闭!")
  708. }
  709. }
  710. override fun onRewardedVideoAdPlayClicked(p0: ATAdInfo?) {
  711. LogUtils.e("DFDFDF=onRewardedVideoAdPlayClicked${p0.toString()}")
  712. }
  713. override fun onReward(p0: ATAdInfo?) {
  714. isRewardedVideoFinish = true
  715. LogUtils.e("DFDFDF=onReward${p0.toString()}")
  716. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  717. val current = LocalDateTime.now()
  718. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  719. endAdTime = current.format(formatter)
  720. } else {
  721. endAdTime = DateTimeUtils.getCurrentDateTime()
  722. }
  723. saveRecord(p0, startAdTime.toString(), endAdTime.toString())
  724. }
  725. private fun saveRecord(p0: ATAdInfo?, startAdTime: String, endAdTime: String) {
  726. if (p0 == null) return
  727. val map = HashMap<String, Any>()
  728. map["adSourceId"] = p0.adsourceId.toInt()
  729. map["beginTime"] = startAdTime
  730. map["finishTime"] = endAdTime
  731. map["networkFormId"] = p0.networkFirmId
  732. map["networkName"] = p0.networkName
  733. map["networkPlacementId"] = p0.networkPlacementId
  734. map["nickName"] = UserInfoSpUtils().getNickName()
  735. map["placementId"] = p0.placementId
  736. map["recordId"] = p0.requestId
  737. map["revenue"] = p0.publisherRevenue.toDouble()
  738. map["userId"] = UserInfoSpUtils().getUserId()
  739. map["ecpm"] = p0.ecpm.toString()
  740. map["adSourceIndex"] = p0.adsourceIndex
  741. map["adSourceType"] = p0.adSourceAdType
  742. map["resultJson"] = p0.toString()
  743. val body = BaseRetrofit.getRequestBodyByMapToJson(map)
  744. var url = if (Constants.isDebug) {
  745. Constants.SAVE_RECORD
  746. } else {
  747. Constants.FULL_URL_V2 + Constants.SAVE_RECORD
  748. }
  749. BaseRetrofit.getInstance().apiService.saveRecord(url, body)
  750. .enqueue(object : Callback2<Any>() {
  751. override fun success(body: Any?) {
  752. if (p0.adSourceAdType == 1) addPower()
  753. LogUtils.e("dfdfdfdf广告同步成功!")
  754. }
  755. override fun fail(msg: String?) {
  756. ToastUtils.showShort(msg)
  757. }
  758. })
  759. }
  760. private fun loadNativeAd() {
  761. if (atNative == null) {
  762. atNative =
  763. ATNative(context, Constants.TAKU_NATIVE_PID, object : ATNativeNetworkListener {
  764. override fun onNativeAdLoaded() {
  765. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  766. val current = LocalDateTime.now()
  767. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  768. startNativeAdTime = current.format(formatter)
  769. } else {
  770. startNativeAdTime = DateTimeUtils.getCurrentDateTime()
  771. }
  772. val nativeAd: NativeAd? = atNative?.getNativeAd(getATShowConfig())
  773. nativeAd?.setNativeEventListener(object : ATNativeEventListener {
  774. override fun onAdImpressed(
  775. p0: ATNativeAdView?,
  776. p1: ATAdInfo?
  777. ) {
  778. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  779. val current = LocalDateTime.now()
  780. val formatter =
  781. DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  782. endNativeAdTime = current.format(formatter)
  783. } else {
  784. endNativeAdTime = DateTimeUtils.getCurrentDateTime()
  785. }
  786. saveRecord(
  787. p1,
  788. startNativeAdTime.toString(),
  789. endNativeAdTime.toString()
  790. )
  791. // reloadNativeAd()
  792. LogUtils.e("dfdfdfdfonAdImpressed${p1.toString()}")
  793. }
  794. override fun onAdClicked(
  795. p0: ATNativeAdView?,
  796. p1: ATAdInfo?
  797. ) {
  798. LogUtils.e("dfdfdfdfonAdImpressed${p1.toString()}")
  799. }
  800. override fun onAdVideoStart(p0: ATNativeAdView?) {
  801. }
  802. override fun onAdVideoEnd(p0: ATNativeAdView?) {
  803. }
  804. override fun onAdVideoProgress(
  805. p0: ATNativeAdView?,
  806. p1: Int
  807. ) {
  808. LogUtils.e("dfdfdfdfonAdVideoProgress}")
  809. }
  810. })
  811. try {
  812. nativeAd?.renderAdContainer(binding.fragmentDatiContentAd, null)
  813. } catch (e: Exception) {
  814. e.printStackTrace()
  815. }
  816. }
  817. override fun onNativeAdLoadFail(adError: AdError) {
  818. LogUtils.e("onNativeAdLoadFail:" + adError.fullErrorInfo)
  819. atNative = null
  820. }
  821. })
  822. }
  823. binding.fragmentDatiContentAd.removeAllViews()
  824. val userid = UserInfoSpUtils().getUserInfo().userId
  825. val userdata = UserInfoSpUtils().getUserInfo().nickName
  826. val localMap: MutableMap<String, Any> = HashMap()
  827. localMap[ATAdConst.KEY.USER_ID] = userid
  828. localMap[ATAdConst.KEY.USER_CUSTOM_DATA] = userdata
  829. atNative?.setLocalExtra(localMap)
  830. if (atNative?.checkAdStatus()?.isLoading == false) atNative?.makeAdRequest()
  831. }
  832. private fun loadInterstitial() {
  833. interstitialAd = ATInterstitial(context, Constants.TAKU_INTERSTITIAL_PID)
  834. val userid = UserInfoSpUtils().getUserInfo().userId
  835. val userdata = UserInfoSpUtils().getUserInfo().nickName
  836. val localMap: MutableMap<String, Any> = HashMap()
  837. localMap[ATAdConst.KEY.USER_ID] = userid
  838. localMap[ATAdConst.KEY.USER_CUSTOM_DATA] = userdata
  839. interstitialAd?.setLocalExtra(localMap)
  840. interstitialAd?.setNativeAdCustomRender { mixNativeAd, atAdInfo ->
  841. MediationNativeAdUtil.getViewFromNativeAd(
  842. context,
  843. mixNativeAd,
  844. atAdInfo,
  845. true
  846. )
  847. }
  848. interstitialAd?.setAdListener(object : ATInterstitialListener {
  849. override fun onInterstitialAdLoaded() {
  850. LogUtils.e("==========onInterstitialAdLoaded")
  851. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  852. val current = LocalDateTime.now()
  853. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  854. startInAdTime = current.format(formatter)
  855. } else {
  856. startInAdTime = DateTimeUtils.getCurrentDateTime()
  857. }
  858. interstitialAd?.show(activity, getATShowConfig1())
  859. }
  860. override fun onInterstitialAdLoadFail(p0: AdError?) {
  861. LogUtils.e("===========onInterstitialAdLoadFail")
  862. initInAdTime()
  863. }
  864. override fun onInterstitialAdClicked(p0: ATAdInfo?) {
  865. LogUtils.e("===========onInterstitialAdClicked")
  866. }
  867. override fun onInterstitialAdShow(p0: ATAdInfo?) {
  868. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  869. val current = LocalDateTime.now()
  870. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  871. endInAdTime = current.format(formatter)
  872. } else {
  873. endInAdTime = DateTimeUtils.getCurrentDateTime()
  874. }
  875. saveRecord(p0, startInAdTime.toString(), endInAdTime.toString())
  876. LogUtils.e("=============onInterstitialAdShow${p0.toString()}")
  877. }
  878. override fun onInterstitialAdClose(p0: ATAdInfo?) {
  879. initInAdTime()
  880. }
  881. override fun onInterstitialAdVideoStart(p0: ATAdInfo?) {
  882. LogUtils.e("===========onInterstitialAdVideoStart")
  883. }
  884. override fun onInterstitialAdVideoEnd(p0: ATAdInfo?) {
  885. LogUtils.e("==============onInterstitialAdVideoEnd")
  886. }
  887. override fun onInterstitialAdVideoError(p0: AdError?) {
  888. LogUtils.e("==========onInterstitialAdVideoError")
  889. }
  890. })
  891. interstitialAd?.load()
  892. }
  893. private fun loadBannerAd() {
  894. mBannerView = ATBannerView(context)
  895. mBannerView?.setPlacementId(Constants.TAKU_BANNER_PID)
  896. mBannerView?.setShowConfig(getATShowConfig())
  897. mBannerView?.setBannerAdListener(this)
  898. binding.fragmentDatiBanner.removeAllViews()
  899. binding.fragmentDatiBanner.addView(mBannerView)
  900. val userid = UserInfoSpUtils().getUserInfo().userId
  901. val userdata = UserInfoSpUtils().getUserInfo().nickName
  902. val localMap: MutableMap<String, Any> = HashMap()
  903. localMap[ATAdConst.KEY.USER_ID] = userid
  904. localMap[ATAdConst.KEY.USER_CUSTOM_DATA] = userdata
  905. mBannerView?.setLocalExtra(localMap)
  906. if (mBannerView?.checkAdStatus()?.isLoading == false) mBannerView?.loadAd()
  907. }
  908. private fun getATShowConfig(): ATShowConfig {
  909. val builder: ATShowConfig.Builder = ATShowConfig.Builder()
  910. builder.scenarioId("banner_ad_show_1")
  911. builder.showCustomExt("banner_ad_show_custom_ext")
  912. return builder.build()
  913. }
  914. private fun getATShowConfig1(): ATShowConfig {
  915. val builder = ATShowConfig.Builder()
  916. builder.scenarioId("interstitial_ad_show_1")
  917. builder.showCustomExt("interstitial_ad_show_custom_ext")
  918. return builder.build()
  919. }
  920. override fun onBannerLoaded() {
  921. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  922. val current = LocalDateTime.now()
  923. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  924. startBannerAdTime = current.format(formatter)
  925. } else {
  926. startBannerAdTime = DateTimeUtils.getCurrentDateTime()
  927. }
  928. LogUtils.e("dfdfdf onBannerLoaded")
  929. }
  930. override fun onBannerFailed(p0: AdError?) {
  931. LogUtils.e("dfdfdf onBannerFailed")
  932. }
  933. override fun onBannerClicked(p0: ATAdInfo?) {
  934. LogUtils.e("dfdfdf onBannerClicked")
  935. }
  936. override fun onBannerShow(p0: ATAdInfo?) {
  937. LogUtils.e("dfdfdf onBannerShow${p0.toString()}")
  938. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  939. val current = LocalDateTime.now()
  940. val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
  941. endBannerAdTime = current.format(formatter)
  942. } else {
  943. endBannerAdTime = DateTimeUtils.getCurrentDateTime()
  944. }
  945. saveRecord(p0, startBannerAdTime.toString(), endBannerAdTime.toString())
  946. }
  947. override fun onBannerClose(p0: ATAdInfo?) {
  948. LogUtils.e("dfdfdf onBannerClose")
  949. }
  950. override fun onBannerAutoRefreshed(p0: ATAdInfo?) {
  951. LogUtils.e("dfdfdf onBannerAutoRefreshed")
  952. }
  953. override fun onBannerAutoRefreshFail(p0: AdError?) {
  954. LogUtils.e("dfdfdf onBannerAutoRefreshFail")
  955. }
  956. private fun getUserInfo() {
  957. var url = if (Constants.isDebug) {
  958. Constants.GET_USER_INFO
  959. } else {
  960. Constants.FULL_URL_V2 + Constants.GET_USER_INFO
  961. }
  962. BaseRetrofit.getInstance().apiService.getUserInfo(url, UserInfoSpUtils().getUserId())
  963. .enqueue(object : Callback2<UserInfo>() {
  964. override fun success(body: UserInfo?) {
  965. body?.let { UserInfoSpUtils().putUserInfo(it) }
  966. jrdd = UserInfoSpUtils().getTodayAnswerCount()
  967. lsdd = UserInfoSpUtils().getHistoryAnswerCount()
  968. binding.jrddTv.text = "今日答题: ${jrdd}题"
  969. binding.lsddTv.text = "历史答题: ${lsdd}题"
  970. initDialogGetTl()
  971. }
  972. override fun fail(msg: String?) {
  973. ToastUtils.showShort(msg)
  974. }
  975. })
  976. }
  977. }