diff --git a/app/src/main/java/com/gh/base/GHUmengNotificationService.kt b/app/src/main/java/com/gh/base/GHUmengNotificationService.kt index ba703b4bea..2b7d2953bf 100644 --- a/app/src/main/java/com/gh/base/GHUmengNotificationService.kt +++ b/app/src/main/java/com/gh/base/GHUmengNotificationService.kt @@ -88,7 +88,7 @@ class GHUmengNotificationService : UmengMessageService() { } val notification = NotificationCompat.Builder(context, "Halo") - .setSmallIcon(R.drawable.logo) + .setSmallIcon(R.drawable.ic_notification) .setTicker(pushData.body?.ticker) .setContentTitle(pushData.body?.title) .setContentText(pushData.body?.text) diff --git a/app/src/main/java/com/gh/common/PushManager.kt b/app/src/main/java/com/gh/common/PushManager.kt index e9f5c4e899..21ff1d2a92 100644 --- a/app/src/main/java/com/gh/common/PushManager.kt +++ b/app/src/main/java/com/gh/common/PushManager.kt @@ -50,17 +50,7 @@ object PushManager { pushAgent.onAppStart() // 开启App统计 //注册推送服务,每次调用register方法都会回调该接口 - pushAgent.register(object : IUmengRegisterCallback { - override fun onSuccess(dToken: String) { - //注册成功会返回device token - deviceToken = dToken - Utils.log("deviceToken::$dToken") - } - - override fun onFailure(s: String, s1: String) { - Utils.log("deviceToken::" + "注册失败") - } - }) + registerDevice() val aliasInSp = PreferenceManager.getDefaultSharedPreferences(application).getString(SP_PUSH_ALIAS, "") previousAlias = gson.fromJson(aliasInSp, AliasEntity::class.java) @@ -76,8 +66,24 @@ object PushManager { pushAgent.setPushIntentServiceClass(GHUmengNotificationService::class.java) } + private fun registerDevice() { + PushAgent.getInstance(application).register(object : IUmengRegisterCallback { + override fun onSuccess(dToken: String) { + //注册成功会返回device token + deviceToken = dToken + Utils.log("deviceToken::$dToken") + } + + override fun onFailure(s: String, s1: String) { + Utils.log("deviceToken::" + "注册失败") + } + }) + } + @JvmStatic fun getAndSetAlias() { + if (deviceToken.isNullOrEmpty()) registerDevice() + val meta = MetaUtil.getMeta() val jsonObject = JSONObject() 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 60c21b77a4..fa4068e12c 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -15,6 +15,10 @@ public class Constants { public static final String USER_TOKEN_KEY = "userTokenKey"; public static final String USER_INFO_KEY = "userInfoKey"; + // 最近显示的弹窗信息 + 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 REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; public static final String REGEX_ACCOUNT = "^[a-zA-Z_]\\w{5,17}$"; diff --git a/app/src/main/java/com/gh/common/notifier/NotifierView.kt b/app/src/main/java/com/gh/common/notifier/NotifierView.kt index 35c7e8f2ad..b8d1b5a423 100644 --- a/app/src/main/java/com/gh/common/notifier/NotifierView.kt +++ b/app/src/main/java/com/gh/common/notifier/NotifierView.kt @@ -50,9 +50,6 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS var rightToLeftPath: Path var leftToRightPath: Path - var zoomInPath: Path - var zoomOutPath: Path - var veryRight: Float = 0F var veryBottom: Float = 0F var centerX: Float = 0F @@ -81,8 +78,6 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS rightToLeftPath = Path() leftToRightPath = Path() - zoomInPath = Path() - zoomOutPath = Path() showAnimatorSet = AnimatorSet() hideAnimatorSet = AnimatorSet() @@ -108,12 +103,6 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS leftToRightPath.moveTo(centerX, b) leftToRightPath.lineTo(r, b) - zoomInPath.moveTo(r, b + dp2px(80F)) - zoomInPath.lineTo(r, b) - - zoomOutPath.moveTo(r, b) - zoomOutPath.lineTo(r, b + dp2px(80F)) - initAnimator() } } diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index c627e49f2b..a92133d12d 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -345,7 +345,7 @@ public class DialogUtils { , "取消", "前往QQ", new ConfirmListener() { @Override public void onConfirm() { - QQUtils.startQQSession(context, qq); + DirectUtils.directToQqConversation(context, qq); } }, null); } diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt new file mode 100644 index 0000000000..e8fc28a564 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -0,0 +1,148 @@ +package com.gh.common.util + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.text.TextUtils +import com.gh.common.util.EntranceUtils.* +import com.gh.gamecenter.* +import com.gh.gamecenter.entity.SubjectData +import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity +import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity +import com.gh.gamecenter.subject.refactor.SubjectActivity +import com.lightgame.utils.Util_System_ClipboardManager +import com.lightgame.utils.Utils + +/** + * 跳转用的方法 + */ +object DirectUtils { + + @JvmStatic + fun directToArticle(context: Context, id: String, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_TO, NewsDetailActivity::class.java.simpleName) + bundle.putString(KEY_NEWSID, id) + EntranceUtils.jumpActivity(context, bundle) + } + + @JvmStatic + fun directToGameDetail(context: Context, id: String, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_TO, GameDetailActivity::class.java.simpleName) + bundle.putString(KEY_GAMEID, id) + EntranceUtils.jumpActivity(context, bundle) + } + + // 专栏 + @JvmStatic + fun directToSubject(context: Context, id: String, subjectName: String? = "", entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_TO, SubjectActivity::class.java.name) + bundle.putParcelable(EntranceUtils.KEY_SUBJECT_DATA, SubjectData(id, subjectName, false, null, null, null, null)) + EntranceUtils.jumpActivity(context, bundle) + } + + // 反馈 + @JvmStatic + fun directToFeedback(context: Context, content: String? = null, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_TO, SuggestionActivity::class.java.simpleName) + bundle.putString(KEY_CONTENT, content) + bundle.putString(KEY_SUGGEST_HINT_TYPE, KEY_PLUGIN) + bundle.putInt(EntranceUtils.KEY_SUGGESTTYPE, 4) + EntranceUtils.jumpActivity(context, bundle) + } + + @JvmStatic + fun directToDownloadManager(context: Context, id: String, packageName: String, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_TO, DownloadManagerActivity.TAG) + bundle.putString(KEY_GAMEID, id) + bundle.putString(KEY_PACKAGENAME, packageName) + EntranceUtils.jumpActivity(context, bundle) + } + + @JvmStatic + fun directToAnswerDetail(context: Context, id: String, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_TO, AnswerDetailActivity::class.java.name) + bundle.putString(KEY_ANSWER_ID, id) + EntranceUtils.jumpActivity(context, bundle) + } + + @JvmStatic + fun directToQuestionDetail(context: Context, id: String, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_TO, QuestionsDetailActivity::class.java.name) + bundle.putString(KEY_QUESTIONS_ID, id) + EntranceUtils.jumpActivity(context, bundle) + } + + @JvmStatic + fun directToWebView(context: Context, url: String, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(EntranceUtils.KEY_TO, WebActivity::class.java.simpleName) + bundle.putString(EntranceUtils.KEY_URL, url) + EntranceUtils.jumpActivity(context, bundle) + } + + // 个人-系统消息 + @JvmStatic + fun directToOfficialNotification(context: Context, entrance: String? = null) { + val bundle = Bundle() + bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(EntranceUtils.KEY_TO, MessageKeFuActivity::class.java.simpleName) + EntranceUtils.jumpActivity(context, bundle) + } + + // 跳转 QQ + @JvmStatic + fun directToQqConversation(context: Context, qqNumber: String? = null) { + var qq = qqNumber + + if (TextUtils.isEmpty(qq)) { + qq = "2586716223" + } + if (ShareUtils.isQQClientAvailable(context)) { + // 安装了 QQ 直接调用QQ,打开手机QQ进行会话 默认 QQ 号:2586716223 + val chatType: String + if (qq!!.startsWith("400") || qq.startsWith("800")) { + chatType = "crm" + } else { + chatType = "wpa" + } + val str = "mqqwpa://im/chat?chat_type=$chatType&uin=$qq&version=1&src_type=web" + context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str))) + } else { + // 没有安装QQ 复制账号 + Util_System_ClipboardManager.setText(context, qq) + Utils.toast(context, "已复制 QQ $qq") + } + } + + // 跳转 QQ 群 + @JvmStatic + fun directToQqGroup(context: Context, groupNumber: String? = null): Boolean { + val intent = Intent() + intent.data = Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D$groupNumber") + // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + try { + context.startActivity(intent) + return true + } catch (e: Exception) { + // 未安装手Q或安装的版本不支持 + return false + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index b1b13f77d8..1ac8b8e1f7 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -28,6 +28,7 @@ public class EntranceUtils { public static final String HOST_GAME = "game"; public static final String HOST_COLUMN = "column"; public static final String HOST_WEB = "web"; + public static final String HOST_QQ = "qq"; public static final String HOST_DOWNLOAD = "download"; public static final String HOST_SUGGESTION = "suggestion"; public static final String HOST_ANSWER = "answer"; @@ -38,6 +39,7 @@ public class EntranceUtils { public static final String KEY_ENTRANCE = "entrance"; public static final String KEY_TARGET = "target"; public static final String ENTRANCE_BROWSER = "(浏览器)"; + public static final String ENTRANCE_WELCOME = "(启动弹窗)"; public static final String ENTRANCE_UMENG = "(友盟推送)"; public static final String ENTRANCE_MIPUSH = "(小米推送)"; public static final String ENTRANCE_DOWNLOAD = "(下载跳转)"; diff --git a/app/src/main/java/com/gh/common/util/QQUtils.java b/app/src/main/java/com/gh/common/util/QQUtils.java deleted file mode 100644 index 20ae53d79f..0000000000 --- a/app/src/main/java/com/gh/common/util/QQUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.gh.common.util; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.text.TextUtils; - -import com.lightgame.utils.Util_System_ClipboardManager; -import com.lightgame.utils.Utils; - -/** - * Created by khy on 2017/3/30. - */ -public class QQUtils { - - public static void startQQSession(Context context, String qq) { - if (TextUtils.isEmpty(qq)) { - qq = "2586716223"; - } - if (ShareUtils.isQQClientAvailable(context)) { - //安装了QQ会直接调用QQ,打开手机QQ进行会话 QQ号:2586716223 - String chatType; - if (qq.startsWith("400") || qq.startsWith("800")) { - chatType = "crm"; - } else { - chatType = "wpa"; - } - String str = "mqqwpa://im/chat?chat_type=" + chatType + "&uin=" + qq + "&version=1&src_type=web"; - context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(str))); - } else { - //没有安装QQ 复制账号 -// ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); -// cmb.setText(qq); - Util_System_ClipboardManager.setText(context, qq); - Utils.toast(context, "已复制" + qq); - } - } - - public static boolean joinQQGroup(Context context, String key) { - Intent intent = new Intent(); - intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D" + key)); - // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - try { - context.startActivity(intent); - return true; - } catch (Exception e) { - // 未安装手Q或安装的版本不支持 - return false; - } - } -} diff --git a/app/src/main/java/com/gh/common/util/ShareUtils.java b/app/src/main/java/com/gh/common/util/ShareUtils.java index e272b383a1..6029125e92 100644 --- a/app/src/main/java/com/gh/common/util/ShareUtils.java +++ b/app/src/main/java/com/gh/common/util/ShareUtils.java @@ -137,7 +137,7 @@ public class ShareUtils { if (pinfo != null) { for (int i = 0; i < pinfo.size(); i++) { String pn = pinfo.get(i).packageName; - if ("com.tencent.mobileqq".equals(pn)) { + if ("com.tencent.mobileqq".equals(pn) || "com.tencent.tim".equals(pn)) { return true; } } diff --git a/app/src/main/java/com/gh/common/view/WelcomeDialog.kt b/app/src/main/java/com/gh/common/view/WelcomeDialog.kt new file mode 100644 index 0000000000..7b5c3cc2d5 --- /dev/null +++ b/app/src/main/java/com/gh/common/view/WelcomeDialog.kt @@ -0,0 +1,71 @@ +package com.gh.common.view + +import android.databinding.DataBindingUtil +import android.os.Bundle +import android.preference.PreferenceManager +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.gh.base.fragment.BaseDialogFragment +import com.gh.common.constant.Constants.SP_LAST_OPENING_ID +import com.gh.common.constant.Constants.SP_LAST_OPENING_TIME +import com.gh.common.util.DirectUtils +import com.gh.common.util.EntranceUtils +import com.gh.common.util.edit +import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.DialogWelcomeBinding +import com.gh.gamecenter.entity.WelcomeDialogEntity + +class WelcomeDialog : BaseDialogFragment() { + + companion object { + @JvmStatic + fun getInstance(welcomeEntity: WelcomeDialogEntity?) = WelcomeDialog().apply { mWelcomeEntity = welcomeEntity } + } + + private var mWelcomeEntity: WelcomeDialogEntity? = null + + lateinit var binding: DialogWelcomeBinding + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + binding = DataBindingUtil.inflate(inflater, R.layout.dialog_welcome, container, false) + binding.ivOpeningCover.setOnClickListener { + when (mWelcomeEntity?.type) { + EntranceUtils.HOST_ARTICLE -> { + DirectUtils.directToArticle(context!!, mWelcomeEntity?.link!!, EntranceUtils.ENTRANCE_WELCOME) + } + EntranceUtils.HOST_GAME -> { + DirectUtils.directToGameDetail(context!!, mWelcomeEntity?.link!!, EntranceUtils.ENTRANCE_WELCOME) + } + EntranceUtils.HOST_COLUMN -> { + DirectUtils.directToSubject(context!!, mWelcomeEntity?.link!!, null, EntranceUtils.ENTRANCE_WELCOME) + } + EntranceUtils.HOST_QUESTION -> { + DirectUtils.directToQuestionDetail(context!!, mWelcomeEntity?.link!!, EntranceUtils.ENTRANCE_WELCOME) + } + EntranceUtils.HOST_ANSWER -> { + DirectUtils.directToAnswerDetail(context!!, mWelcomeEntity?.link!!, EntranceUtils.ENTRANCE_WELCOME) + } + EntranceUtils.HOST_WEB -> { + DirectUtils.directToWebView(context!!, mWelcomeEntity?.link!!, EntranceUtils.ENTRANCE_WELCOME) + } + EntranceUtils.HOST_QQ -> { + DirectUtils.directToQqConversation(context!!, mWelcomeEntity?.link!!) + } + } + dismiss() + } + binding.ivClose.setOnClickListener { dismiss() } + binding.welcome = mWelcomeEntity + return binding.root + } + + override fun onDestroy() { + PreferenceManager.getDefaultSharedPreferences(context?.applicationContext).edit { + putString(SP_LAST_OPENING_ID, mWelcomeEntity?.id) + putLong(SP_LAST_OPENING_TIME, mWelcomeEntity?.time!!) + } + super.onDestroy() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index c5d4dc29a0..96713146c1 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -1,17 +1,12 @@ package com.gh.gamecenter; -import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import com.gh.base.BaseActivity; -import com.gh.common.util.EntranceUtils; +import com.gh.common.util.DirectUtils; import com.gh.common.util.PlatformUtils; -import com.gh.gamecenter.entity.SubjectData; -import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity; -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity; -import com.gh.gamecenter.subject.refactor.SubjectActivity; import com.lightgame.config.CommonDebug; import com.lightgame.utils.Utils; @@ -23,19 +18,10 @@ import static com.gh.common.util.EntranceUtils.HOST_DOWNLOAD; import static com.gh.common.util.EntranceUtils.HOST_GAME; import static com.gh.common.util.EntranceUtils.HOST_QUESTION; import static com.gh.common.util.EntranceUtils.HOST_SUGGESTION; -import static com.gh.common.util.EntranceUtils.KEY_ANSWER_ID; -import static com.gh.common.util.EntranceUtils.KEY_CONTENT; -import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE; -import static com.gh.common.util.EntranceUtils.KEY_GAMEID; import static com.gh.common.util.EntranceUtils.KEY_GAME_NAME; import static com.gh.common.util.EntranceUtils.KEY_NAME; -import static com.gh.common.util.EntranceUtils.KEY_NEWSID; import static com.gh.common.util.EntranceUtils.KEY_PACKAGENAME; import static com.gh.common.util.EntranceUtils.KEY_PLATFORM; -import static com.gh.common.util.EntranceUtils.KEY_PLUGIN; -import static com.gh.common.util.EntranceUtils.KEY_QUESTIONS_ID; -import static com.gh.common.util.EntranceUtils.KEY_SUGGEST_HINT_TYPE; -import static com.gh.common.util.EntranceUtils.KEY_TO; import static com.gh.common.util.EntranceUtils.KEY_VERSION; /** @@ -64,24 +50,17 @@ public class SkipActivity extends BaseActivity { if (!TextUtils.isEmpty(id)) { id = id.substring(1); } - Intent intent = new Intent(); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - Bundle bundle = new Bundle(); - bundle.putString(KEY_ENTRANCE, ENTRANCE_BROWSER); if (host != null) { switch (host) { case HOST_ARTICLE: - bundle.putString(KEY_TO, NewsDetailActivity.class.getSimpleName()); - bundle.putString(KEY_NEWSID, id); + DirectUtils.directToArticle(this, id, ENTRANCE_BROWSER); break; case HOST_GAME: - bundle.putString(KEY_TO, GameDetailActivity.class.getSimpleName()); - bundle.putString(KEY_GAMEID, id); + DirectUtils.directToGameDetail(this, id, ENTRANCE_BROWSER); break; case HOST_COLUMN: - bundle.putString(KEY_TO, SubjectActivity.class.getName()); - bundle.putParcelable(EntranceUtils.KEY_SUBJECT_DATA, new SubjectData(id, uri.getQueryParameter(KEY_NAME), false, null, null, null, null)); + DirectUtils.directToSubject(this, id, uri.getQueryParameter(KEY_NAME), ENTRANCE_BROWSER); break; case HOST_SUGGESTION: String platform = uri.getQueryParameter(KEY_PLATFORM); @@ -90,31 +69,20 @@ public class SkipActivity extends BaseActivity { uri.getQueryParameter(KEY_GAME_NAME), TextUtils.isEmpty(name) ? platform : name, uri.getQueryParameter(KEY_VERSION)); - bundle.putString(KEY_TO, SuggestionActivity.class.getSimpleName()); - bundle.putString(KEY_CONTENT, content); - bundle.putString(KEY_SUGGEST_HINT_TYPE, KEY_PLUGIN); - bundle.putInt(EntranceUtils.KEY_SUGGESTTYPE, 4); + DirectUtils.directToFeedback(this, content, ENTRANCE_BROWSER); break; case HOST_DOWNLOAD: - bundle.putString(KEY_TO, DownloadManagerActivity.TAG); - bundle.putString(KEY_GAMEID, id); - bundle.putString(KEY_PACKAGENAME, uri.getQueryParameter(KEY_PACKAGENAME)); + DirectUtils.directToDownloadManager(this, id, uri.getQueryParameter(KEY_PACKAGENAME), ENTRANCE_BROWSER); break; case HOST_ANSWER: - bundle.putString(KEY_TO, AnswerDetailActivity.class.getName()); - bundle.putString(KEY_ANSWER_ID, id); + DirectUtils.directToAnswerDetail(this, id, ENTRANCE_BROWSER); break; case HOST_QUESTION: - bundle.putString(KEY_TO, QuestionsDetailActivity.class.getName()); - bundle.putString(KEY_QUESTIONS_ID, id); + DirectUtils.directToQuestionDetail(this, id, ENTRANCE_BROWSER); break; - } } - EntranceUtils.jumpActivity(this, bundle); } finish(); - } - } diff --git a/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java index 933c3cb006..730e5ad675 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java @@ -7,7 +7,7 @@ import android.support.annotation.NonNull; import android.view.View; import com.gh.base.BaseActivity; -import com.gh.common.util.QQUtils; +import com.gh.common.util.DirectUtils; import butterknife.OnClick; @@ -67,7 +67,7 @@ public class SuggestSelectActivity extends BaseActivity { type = 6; break; case R.id.suggest_qqun_rl: - QQUtils.joinQQGroup(SuggestSelectActivity.this, "vd754P2_uNUJqDcgX4V-pyXEGZZVH0DE"); // Q群:367541038 KEY + DirectUtils.directToQqGroup(this, "vd754P2_uNUJqDcgX4V-pyXEGZZVH0DE"); // Q群:367541038 KEY return; } diff --git a/app/src/main/java/com/gh/gamecenter/entity/WelcomeDialogEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/WelcomeDialogEntity.kt new file mode 100644 index 0000000000..b94c304bf7 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/WelcomeDialogEntity.kt @@ -0,0 +1,11 @@ +package com.gh.gamecenter.entity + +import com.google.gson.annotations.SerializedName + +data class WelcomeDialogEntity( + @SerializedName("_id") + var id: String? = "", + var link: String? = "", + var icon: String? = "", + var type: String? = "", + var time: Long? = 0) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt index ab6a7647b7..a71f720f79 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt @@ -10,7 +10,9 @@ import android.support.v7.widget.RecyclerView import android.view.View import com.gh.common.exposure.ExposureListener import com.gh.common.util.EntranceUtils +import com.gh.common.view.WelcomeDialog import com.gh.download.DownloadManager +import com.gh.gamecenter.MainActivity import com.gh.gamecenter.R import com.gh.gamecenter.baselist.LoadStatus import com.gh.gamecenter.databinding.FragmentGameBinding @@ -77,6 +79,11 @@ class GameFragment : NormalFragment() { mViewModel?.commandScrollTop?.observe(this, Observer { mLayoutManager?.smoothScrollToPosition(mBinding?.gameList, null, 0) }) + + if (activity is MainActivity) mViewModel?.requestOpeningData() + mViewModel?.openingDialog?.observe(this, Observer { + it?.let { WelcomeDialog.getInstance(it).show(childFragmentManager, "openingDialog") } + }) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -87,7 +94,7 @@ class GameFragment : NormalFragment() { mLayoutManager = LinearLayoutManager(context) mBinding?.gameList?.run { - (this.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false + (itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false layoutManager = mLayoutManager adapter = mListAdapter } diff --git a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt index 40394a355e..dc05acc68e 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt @@ -5,8 +5,10 @@ import android.arch.lifecycle.AndroidViewModel import android.arch.lifecycle.MutableLiveData import android.arch.lifecycle.ViewModel import android.arch.lifecycle.ViewModelProvider +import android.preference.PreferenceManager import android.support.v4.util.ArrayMap import android.text.TextUtils +import com.gh.common.constant.Constants import com.gh.common.util.ApkActiveUtils import com.gh.common.util.GameUtils import com.gh.common.util.RandomUtils @@ -16,8 +18,10 @@ import com.gh.gamecenter.entity.* import com.gh.gamecenter.game.data.GameItemData import com.gh.gamecenter.game.data.GameSubjectData import com.gh.gamecenter.manager.PackageManager +import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.Response 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 @@ -29,7 +33,6 @@ import kotlin.collections.set class GameViewModel(application: Application, blockData: SubjectRecommendEntity?) : AndroidViewModel(application) { - var mApi = RetrofitManager.getInstance(getApplication()).api var blockData = blockData @@ -41,6 +44,7 @@ class GameViewModel(application: Application, blockData: SubjectRecommendEntity? var itemDataList: MutableLiveData> = MutableLiveData() val loadStatus = MutableLiveData() + val openingDialog = MutableLiveData() val mSubjectChangedMap: ArrayMap> = ArrayMap() //存储换一换的数据 var positionAndPackageMap = HashMap() // key: packageName + position, value: position @@ -111,6 +115,27 @@ class GameViewModel(application: Application, blockData: SubjectRecommendEntity? transformationItemData() } + + /** + * 获取开启弹窗 + */ + fun requestOpeningData() { + val lastId = PreferenceManager.getDefaultSharedPreferences(getApplication()).getString(Constants.SP_LAST_OPENING_ID, "") + val lastTime = PreferenceManager.getDefaultSharedPreferences(getApplication()).getLong(Constants.SP_LAST_OPENING_TIME, 0) + mApi.getOpeningDialog(HaloApp.getInstance().channel, lastId, lastTime) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: WelcomeDialogEntity) { + openingDialog.postValue(data) + } + + override fun onFailure(exception: Exception) { + // do nothing. + } + }) + } + fun getSlideData(initData: Boolean) { if (blockData != null && !blockData!!.display.slide) { if (initData) getSubjectDigest(initData) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt index 7e54ca0e7d..36172de30b 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt @@ -13,8 +13,8 @@ import android.view.ViewGroup import android.widget.LinearLayout import com.gh.base.OnListClickListener import com.gh.common.util.DataCollectionUtils +import com.gh.common.util.DirectUtils import com.gh.common.util.NewsUtils -import com.gh.common.util.QQUtils import com.gh.common.util.StringUtils import com.gh.common.view.GridDivider import com.gh.common.view.MarqueeView @@ -25,11 +25,11 @@ import com.gh.gamecenter.databinding.GamedetailItemKaifuBinding import com.gh.gamecenter.entity.NewsEntity import com.gh.gamecenter.eventbus.EBReuse import com.gh.gamecenter.eventbus.EBSkip -import com.gh.gamecenter.gamedetail.fuli.kaifu.GameDetailKaiFuAdapter -import com.gh.gamecenter.gamedetail.fuli.tools.GameDetailToolsAdapter -import com.gh.gamecenter.gamedetail.fuli.libao.GameLibaoGalleryAdapter import com.gh.gamecenter.gamedetail.fuli.answer.GameDetailAnswerAdapter import com.gh.gamecenter.gamedetail.fuli.answer.GameDetailAnswerViewHolder +import com.gh.gamecenter.gamedetail.fuli.kaifu.GameDetailKaiFuAdapter +import com.gh.gamecenter.gamedetail.fuli.libao.GameLibaoGalleryAdapter +import com.gh.gamecenter.gamedetail.fuli.tools.GameDetailToolsAdapter import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.qa.AskFragment import com.lightgame.adapter.BaseRecyclerAdapter @@ -293,10 +293,10 @@ class FuLiAdapter(context: Context, } viewHolder.fuliQqBtn.setOnClickListener { - QQUtils.startQQSession(mContext, contact!!.service!!.qq) + DirectUtils.directToQqConversation(mContext, contact!!.service!!.qq) } viewHolder.fuliQqunBtn.setOnClickListener { - QQUtils.joinQQGroup(mContext, contact!!.player!!.key) + DirectUtils.directToQqGroup(mContext, contact!!.player!!.key) } viewHolder.filiNoticeLl.visibility = View.GONE diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java index 09fa7a99ca..1dd5b58a39 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java @@ -7,8 +7,8 @@ import android.support.annotation.Nullable; import android.text.TextUtils; import android.view.View; +import com.gh.common.util.DirectUtils; import com.gh.common.util.EntranceUtils; -import com.gh.common.util.QQUtils; import com.gh.gamecenter.GameDetailActivity; import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.R; @@ -78,7 +78,7 @@ public class KeFuFragment extends ListFragment { break; case "qq": try { - QQUtils.startQQSession(mContext, id); + DirectUtils.directToQqConversation(mContext, id); } catch (Exception e) { Utils.toast(mContext, "请检查是否已经安装手机QQ"); e.printStackTrace(); @@ -254,15 +254,8 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { break; case "qqqun": String key = uri.getQueryParameter("key"); - intent = new Intent(); - intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D" + key)); - // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 - // intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - try { - mContext.startActivity(intent); - } catch (Exception e) { + if (DirectUtils.directToQqGroup(mContext, key)) { Utils.toast(mContext, "请检查是否已经安装手机QQ"); - e.printStackTrace(); } break; case "inurl": diff --git a/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt b/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt index 62cbee835d..5e33747d74 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt +++ b/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt @@ -3,17 +3,9 @@ package com.gh.gamecenter.receiver import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import android.os.Bundle +import com.gh.common.util.DirectUtils import com.gh.common.util.EntranceUtils -import com.gh.gamecenter.GameDetailActivity -import com.gh.gamecenter.MessageKeFuActivity -import com.gh.gamecenter.NewsDetailActivity -import com.gh.gamecenter.WebActivity import com.gh.gamecenter.entity.PushNotificationEntity -import com.gh.gamecenter.entity.SubjectData -import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity -import com.gh.gamecenter.subject.refactor.SubjectActivity class UmengMessageReceiver : BroadcastReceiver() { @@ -28,42 +20,30 @@ class UmengMessageReceiver : BroadcastReceiver() { } private fun jumpToHaloOfficialNotificationPage(context: Context) { - val bundle = Bundle() - bundle.putString(EntranceUtils.KEY_ENTRANCE, EntranceUtils.ENTRANCE_UMENG) - bundle.putString(EntranceUtils.KEY_TO, MessageKeFuActivity::class.java.simpleName) - EntranceUtils.jumpActivity(context, bundle) + DirectUtils.directToOfficialNotification(context, EntranceUtils.ENTRANCE_UMENG) } private fun jumpToSpecificPage(context: Context, link: PushNotificationEntity.Data.Link) { - val bundle = Bundle() - bundle.putString(EntranceUtils.KEY_ENTRANCE, EntranceUtils.ENTRANCE_UMENG) when (link.type) { EntranceUtils.HOST_ARTICLE -> { - bundle.putString(EntranceUtils.KEY_TO, NewsDetailActivity::class.java.simpleName) - bundle.putString(EntranceUtils.KEY_NEWSID, link.target) + DirectUtils.directToArticle(context, link.target!!, EntranceUtils.ENTRANCE_UMENG) } EntranceUtils.HOST_GAME -> { - bundle.putString(EntranceUtils.KEY_TO, GameDetailActivity::class.java.simpleName) - bundle.putString(EntranceUtils.KEY_GAMEID, link.target) + DirectUtils.directToGameDetail(context, link.target!!, EntranceUtils.ENTRANCE_UMENG) } EntranceUtils.HOST_COLUMN -> { - bundle.putString(EntranceUtils.KEY_TO, SubjectActivity::class.java.name) - bundle.putParcelable(EntranceUtils.KEY_SUBJECT_DATA, SubjectData(subjectId = link.target)) + DirectUtils.directToSubject(context, link.target!!, null, EntranceUtils.ENTRANCE_UMENG) } EntranceUtils.HOST_QUESTION -> { - bundle.putString(EntranceUtils.KEY_TO, QuestionsDetailActivity::class.java.name) - bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, link.target) + DirectUtils.directToQuestionDetail(context, link.target!!, EntranceUtils.ENTRANCE_UMENG) } EntranceUtils.HOST_ANSWER -> { - bundle.putString(EntranceUtils.KEY_TO, AnswerDetailActivity::class.java.name) - bundle.putString(EntranceUtils.KEY_ANSWER_ID, link.target) + DirectUtils.directToAnswerDetail(context, link.target!!, EntranceUtils.ENTRANCE_UMENG) } EntranceUtils.HOST_WEB -> { - bundle.putString(EntranceUtils.KEY_TO, WebActivity::class.java.simpleName) - bundle.putString(EntranceUtils.KEY_URL, link.target) + DirectUtils.directToWebView(context, link.target!!, EntranceUtils.ENTRANCE_UMENG) } } - EntranceUtils.jumpActivity(context, bundle) } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 9e1f571cee..d019841349 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -20,6 +20,7 @@ import com.gh.gamecenter.entity.MessageKeFuEntity; import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.entity.NewsDetailEntity; import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.entity.WelcomeDialogEntity; import com.gh.gamecenter.entity.PackageEntity; import com.gh.gamecenter.entity.PersonalEntity; import com.gh.gamecenter.entity.PersonalHistoryEntity; @@ -1177,4 +1178,8 @@ public interface ApiService { @GET() Observable getImageInfo(@Url String url); + + @GET("dialog") + Single getOpeningDialog(@Query("channel") String channel, @Query("prev_id") String previousId, @Query("prev_time") Long previousTime); + } \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/ic_close_opening.png b/app/src/main/res/drawable-xhdpi/ic_close_opening.png new file mode 100644 index 0000000000..78f737b40c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_close_opening.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_notification.png b/app/src/main/res/drawable-xxhdpi/ic_notification.png new file mode 100644 index 0000000000..3a5b62717b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_notification.png differ diff --git a/app/src/main/res/layout/dialog_welcome.xml b/app/src/main/res/layout/dialog_welcome.xml new file mode 100644 index 0000000000..423f4ec98d --- /dev/null +++ b/app/src/main/res/layout/dialog_welcome.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file