129 lines
6.1 KiB
Kotlin
129 lines
6.1 KiB
Kotlin
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<NotificationHint>() {
|
|
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()
|
|
}
|
|
|
|
} |