package com.gh.common.util import android.annotation.SuppressLint import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NotificationManagerCompat import com.gh.common.constant.Constants import com.gh.common.dialog.NotificationHintDialogFragment import com.gh.gamecenter.entity.NotificationHint import com.gh.gamecenter.entity.NotificationUgc import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp import com.lightgame.utils.AppManager import com.lightgame.utils.Utils import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers object NotificationHelper { @JvmStatic fun showNotificationHintDialog(ugc: NotificationUgc) { val showedNewVersion = SPUtils.getInt(Constants.SP_SHOWED_NOTIFICATION_NEW_VERSION, 0) val currentVersion = PackageUtils.getVersionCode() // 版本升级后重置数据 if (currentVersion > showedNewVersion) { SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_LOGIN, false) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_QUESTION, false) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_ANSWER, false) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_ARTICLE, false) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_VIDEO, false) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_RATING, false) SPUtils.setString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, "") SPUtils.setInt(Constants.SP_SHOWED_NOTIFICATION_NEW_VERSION, currentVersion) } val isShowedToday = SPUtils.getString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, "") // 每天最多只需提示一次 if (isShowedToday == TimeUtils.getToday()) return val isShowedLogin = SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_LOGIN, false) val isShowedQuestion = SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_QUESTION, false) val isShowedAnswer = SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_ANSWER, false) val isShowedArticle = SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_ARTICLE, false) val isShowedVideo = SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_VIDEO, false) val isShowedRating = SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_RATING, false) if (isShowedLogin && isShowedQuestion && isShowedAnswer && isShowedArticle && isShowedVideo && isShowedRating) return when (ugc) { NotificationUgc.LOGIN -> { if (!isShowedLogin) { show(AppManager.getInstance().currentActivity() as AppCompatActivity) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_LOGIN, true) // 设置今天的时间,表示今天已经触发过了 SPUtils.setString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, TimeUtils.getToday()) } } NotificationUgc.QUESTION -> { if (!isShowedQuestion) { show(AppManager.getInstance().currentActivity() as AppCompatActivity) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_QUESTION, true) SPUtils.setString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, TimeUtils.getToday()) } } NotificationUgc.ANSWER -> { if (!isShowedAnswer) { show(AppManager.getInstance().currentActivity() as AppCompatActivity) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_ANSWER, true) SPUtils.setString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, TimeUtils.getToday()) } } NotificationUgc.ARTICLE -> { if (!isShowedArticle) { show(AppManager.getInstance().currentActivity() as AppCompatActivity) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_ARTICLE, true) SPUtils.setString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, TimeUtils.getToday()) } } NotificationUgc.VIDEO -> { if (!isShowedVideo) { show(AppManager.getInstance().currentActivity() as AppCompatActivity) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_VIDEO, true) SPUtils.setString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, TimeUtils.getToday()) } } NotificationUgc.RATING -> { if (!isShowedRating) { show(AppManager.getInstance().currentActivity() as AppCompatActivity) SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_RATING, true) SPUtils.setString(Constants.SP_IS_SHOWED_NOTIFICATION_TODAY, TimeUtils.getToday()) } } } } @SuppressLint("CheckResult") private fun show(activity: AppCompatActivity?) { if (activity == null) return RetrofitManager.getInstance(activity).api.bootPopup .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : BiResponse() { override fun onSuccess(data: NotificationHint) { try { showEnableNotificationDialogIfItsDisabled(activity, data) } catch (ignore: Exception) { } } }) } @JvmStatic fun showEnableNotificationDialogIfItsDisabled(activity: AppCompatActivity, notificationHint: NotificationHint) { if (notificationIsEnable()) { Utils.log("notification is enable") } else { NotificationHintDialogFragment.getInstance(notificationHint).show(activity.supportFragmentManager, "notification") } } @JvmStatic fun notificationIsEnable(): Boolean { val manager = NotificationManagerCompat.from(HaloApp.getInstance().application) return manager.areNotificationsEnabled() } }