From 75883e11d869abcaf16f75f2d3e9ef86d6be2d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=8E=89=E4=B9=85?= <1484288157@qq.com> Date: Wed, 4 Dec 2019 11:54:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E5=BC=B9=E7=AA=97=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=88=E5=BC=95=E5=AF=BC=E8=AE=BE=E7=BD=AE=20?= =?UTF-8?q?=E2=80=9C=E9=80=9A=E7=9F=A5=E7=AE=A1=E7=90=86=E2=80=9D=20?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=9C=9F=EF=BC=89https://gitlab.ghzs.com/pm/?= =?UTF-8?q?halo-app-issues/issues/716?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/constant/Constants.java | 12 ++- .../com/gh/common/util/NotificationHelper.kt | 100 +++++++++++++++++- .../main/java/com/gh/common/util/TimeUtils.kt | 22 ++++ .../java/com/gh/gamecenter/MainActivity.java | 13 ++- .../gh/gamecenter/entity/NotificationUgc.kt | 13 +++ .../rating/edit/RatingEditActivity.kt | 2 + .../qa/answer/edit/AnswerEditActivity.kt | 2 + .../article/edit/ArticleTagsSelectFragment.kt | 4 + .../qa/questions/edit/QuestionEditActivity.kt | 7 +- .../video/upload/view/UploadVideoActivity.kt | 1 + 10 files changed, 165 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/gh/common/util/TimeUtils.kt create mode 100644 app/src/main/java/com/gh/gamecenter/entity/NotificationUgc.kt diff --git a/app/src/main/java/com/gh/common/constant/Constants.java b/app/src/main/java/com/gh/common/constant/Constants.java index 79e6ef6b69..3ef05cec5d 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -31,7 +31,17 @@ public class Constants { public static final String SP_LAST_OPENING_ID = "last_opening_dialog_id"; public static final String SP_LAST_OPENING_TIME = "last_opening_dialog_time"; - public static final String SP_SHOWED_NOTIFICATION_HINT = "show_notification_hint"; + //引导设置 “通知管理” 引导弹窗 + public static final String SP_SHOWED_NOTIFICATION_LOGIN = "show_notification_login_hint"; + public static final String SP_SHOWED_NOTIFICATION_QUESTION = "show_notification_question_hint"; + public static final String SP_SHOWED_NOTIFICATION_ANSWER = "show_notification_answer_hint"; + public static final String SP_SHOWED_NOTIFICATION_ARTICLE = "show_notification_article_hint"; + public static final String SP_SHOWED_NOTIFICATION_VIDEO = "show_notification_video_hint"; + public static final String SP_SHOWED_NOTIFICATION_RATING = "show_notification_rating_hint"; + // 新版本 也要触发一次“通知管理” 引导弹窗 + public static final String SP_SHOWED_NOTIFICATION_NEW_VERSION = "show_notification_new_version"; + // 今天是否已经触发了 “通知管理” 引导弹窗 + public static final String SP_IS_SHOWED_NOTIFICATION_TODAY = "show_is_notification_today"; //标记安装的游戏为已玩过弹窗,最多取消2次 public static final String SP_MARK_INSTALLED_GAME = "mark_installed_game"; diff --git a/app/src/main/java/com/gh/common/util/NotificationHelper.kt b/app/src/main/java/com/gh/common/util/NotificationHelper.kt index 15fa9936f0..f91066818c 100644 --- a/app/src/main/java/com/gh/common/util/NotificationHelper.kt +++ b/app/src/main/java/com/gh/common/util/NotificationHelper.kt @@ -1,22 +1,120 @@ 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.Utils +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import java.lang.ref.WeakReference object NotificationHelper { + @JvmStatic + fun showNotificationHintDialog(activity: AppCompatActivity, ugc: NotificationUgc) { + val activityRef = WeakReference(activity) + 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(activityRef.get()) + SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_LOGIN, true) + } + } + NotificationUgc.QUESTION -> { + if (isShowedQuestion) { + show(activityRef.get()) + SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_QUESTION, true) + } + } + NotificationUgc.ANSWER -> { + if (isShowedAnswer) { + show(activityRef.get()) + SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_ANSWER, true) + } + } + NotificationUgc.ARTICLE -> { + if (isShowedArticle) { + show(activityRef.get()) + SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_ARTICLE, true) + } + } + NotificationUgc.VIDEO -> { + if (isShowedVideo) { + show(activityRef.get()) + SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_VIDEO, true) + } + } + NotificationUgc.RATING -> { + if (isShowedRating) { + show(activityRef.get()) + 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") - SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_HINT, true) + //SPUtils.setBoolean(Constants.SP_SHOWED_NOTIFICATION_LOGIN, true) } } diff --git a/app/src/main/java/com/gh/common/util/TimeUtils.kt b/app/src/main/java/com/gh/common/util/TimeUtils.kt new file mode 100644 index 0000000000..6fed63e888 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/TimeUtils.kt @@ -0,0 +1,22 @@ +package com.gh.common.util + +import java.text.SimpleDateFormat +import java.util.* + +object TimeUtils { + + /** + * 获取今天日期 + */ + @JvmStatic + fun getToday(): String { + var date = Date() + val calendar = GregorianCalendar() + calendar.time = date + //把日期往后增加一天.整数往后推,负数往前移动 + calendar.add(GregorianCalendar.DATE, 0) + date = calendar.time + val formatter = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return formatter.format(date) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 11009530e2..503845103a 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -25,9 +25,6 @@ import android.view.View; import android.view.Window; import android.widget.TextView; -import androidx.annotation.NonNull; -import androidx.lifecycle.ViewModelProviders; - import com.gh.base.AppUncaughtHandler; import com.gh.base.BaseActivity; import com.gh.base.fragment.BaseFragment_ViewPager; @@ -69,6 +66,7 @@ import com.gh.gamecenter.entity.GameDigestEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.InnerMetaInfoEntity; import com.gh.gamecenter.entity.NotificationHint; +import com.gh.gamecenter.entity.NotificationUgc; import com.gh.gamecenter.entity.SettingsEntity; import com.gh.gamecenter.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBPackage; @@ -122,6 +120,8 @@ import java.util.TimerTask; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModelProviders; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import okhttp3.MediaType; @@ -421,10 +421,13 @@ public class MainActivity extends BaseActivity { private void checkNotificationPermission() { // 仅登录后再启动光环时请求一次权限 - if (!SPUtils.getBoolean(Constants.HAS_REQUESTED_NOTIFICATION_PERMISSIONS) + /*if (!SPUtils.getBoolean(Constants.HAS_REQUESTED_NOTIFICATION_PERMISSIONS) && UserManager.getInstance().isLoggedIn()) { SPUtils.setBoolean(Constants.HAS_REQUESTED_NOTIFICATION_PERMISSIONS, true); showNotificationHintDialog(); + }*/ + if (UserManager.getInstance().isLoggedIn()) { + NotificationHelper.showNotificationHintDialog(this, NotificationUgc.LOGIN); } } @@ -711,7 +714,7 @@ public class MainActivity extends BaseActivity { @SuppressLint("CheckResult") private void showNotificationHintDialog() { - if (!SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_HINT)) { + if (!SPUtils.getBoolean(Constants.SP_SHOWED_NOTIFICATION_LOGIN)) { RetrofitManager.getInstance(this).getApi().getBootPopup() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) diff --git a/app/src/main/java/com/gh/gamecenter/entity/NotificationUgc.kt b/app/src/main/java/com/gh/gamecenter/entity/NotificationUgc.kt new file mode 100644 index 0000000000..e353b5ffcc --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/NotificationUgc.kt @@ -0,0 +1,13 @@ +package com.gh.gamecenter.entity + +/** + * 引导设置 “通知管理” UGC行为 + */ +enum class NotificationUgc { + LOGIN, + QUESTION, + ANSWER, + ARTICLE, + VIDEO, + RATING, +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt index 8c6957af2b..e4600e950d 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt @@ -23,6 +23,7 @@ import com.gh.gamecenter.ShellActivity import com.gh.gamecenter.WebActivity import com.gh.gamecenter.databinding.ActivityRatingEditBinding import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.entity.NotificationUgc import com.gh.gamecenter.entity.RatingComment import com.lightgame.utils.Utils import com.qq.gdt.action.ActionType @@ -284,6 +285,7 @@ class RatingEditActivity : ToolBarActivity(),KeyboardHeightObserver { mPostDialog?.dismiss() if (it) { MtaHelper.onEvent("发表评论", "提交", mGame.name) + NotificationHelper.showNotificationHintDialog(this, NotificationUgc.RATING) setResult(Activity.RESULT_OK) toast("提交成功") GdtHelper.logAction(ActionType.RATE, diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt index 0f65a6a7cb..7549bee750 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt @@ -18,6 +18,7 @@ import com.gh.base.BaseRichEditorActivity import com.gh.base.fragment.WaitingDialogFragment import com.gh.common.util.* import com.gh.gamecenter.R +import com.gh.gamecenter.entity.NotificationUgc import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.mvvm.Status import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity @@ -142,6 +143,7 @@ class AnswerEditActivity : BaseRichEditorActivity() { .getIntent(this, answerId, mEntrance, "编辑答案") startActivity(intent) } + NotificationHelper.showNotificationHintDialog(this, NotificationUgc.ANSWER) finish() } else if (it.status == Status.ERROR) { val errorString = it.exception?.response()?.errorBody()?.string() diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleTagsSelectFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleTagsSelectFragment.kt index 26ec6afc13..6376eae3f7 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleTagsSelectFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleTagsSelectFragment.kt @@ -11,13 +11,16 @@ import android.view.ViewGroup import android.view.Window import android.widget.EditText import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.gh.base.fragment.BaseDialogWrapperFragment import com.gh.base.fragment.BaseFragment import com.gh.common.util.DisplayUtils +import com.gh.common.util.NotificationHelper import com.gh.gamecenter.R +import com.gh.gamecenter.entity.NotificationUgc import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity import com.gh.gamecenter.qa.entity.ArticleDetailEntity import com.gh.gamecenter.qa.questions.edit.QuestionEditViewModel @@ -68,6 +71,7 @@ class ArticleTagsSelectFragment : BaseFragment() { startActivity(intent) } toast("发布成功") + NotificationHelper.showNotificationHintDialog(activity as AppCompatActivity, NotificationUgc.ARTICLE) activity?.finish() }) diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt index e38a95cc72..20ab4ac9d2 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt @@ -17,14 +17,12 @@ import androidx.lifecycle.ViewModelProviders import com.gh.base.ToolBarActivity import com.gh.base.fragment.BaseDialogWrapperFragment import com.gh.base.fragment.WaitingDialogFragment -import com.gh.common.util.DialogUtils -import com.gh.common.util.DisplayUtils -import com.gh.common.util.EntranceUtils -import com.gh.common.util.TextHelper +import com.gh.common.util.* import com.gh.common.view.SpacingItemDecoration import com.gh.gamecenter.R import com.gh.gamecenter.SuggestionActivity.MEDIA_STORE_REQUEST import com.gh.gamecenter.databinding.ActivityQuestionsEditBinding +import com.gh.gamecenter.entity.NotificationUgc import com.gh.gamecenter.entity.Permissions import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.mvvm.Status @@ -145,6 +143,7 @@ class QuestionEditActivity : ToolBarActivity() { data.putExtra(QuestionsDetailEntity::class.java.simpleName, mViewModel.questionEntity) setResult(Activity.RESULT_OK, data) } + NotificationHelper.showNotificationHintDialog(this, NotificationUgc.QUESTION) finish() } else if (it?.status == Status.ERROR) { val e = it.exception diff --git a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt index df12ef3591..2ad8e1be1e 100644 --- a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt @@ -144,6 +144,7 @@ class UploadVideoActivity : ToolBarActivity() { mViewModel.postLiveData.observeNonNull(this) { if (it.status == Status.SUCCESS) { toast("发布成功") + NotificationHelper.showNotificationHintDialog(this, NotificationUgc.VIDEO) setResult(RESULT_CODE_VIDEO) finish() } else if (it.status == Status.ERROR) {