diff --git a/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt b/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt index 35821516ea..e8b64d845f 100644 --- a/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt +++ b/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt @@ -7,9 +7,14 @@ import com.gh.common.notifier.Notifier import com.gh.common.util.DataUtils import com.gh.common.util.FloatingBackViewManager import com.gh.download.DownloadManager -import com.gh.gamecenter.SingletonWebActivity +import com.gh.gamecenter.MainActivity import com.gh.gamecenter.SplashScreenActivity import com.gh.gamecenter.energy.EnergyCenterActivity +import com.gh.gamecenter.forum.detail.ForumDetailActivity +import com.gh.gamecenter.forum.list.ForumListActivity +import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity +import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity +import com.gh.gamecenter.qa.video.detail.ForumVideoDetailActivity import com.halo.assistant.HaloApp import com.lightgame.utils.AppManager @@ -29,12 +34,12 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks { // 判断是否需要显示或隐藏返回小浮窗 if (FloatingBackViewManager.getType().isNotEmpty()) { if (activity is EnergyCenterActivity - && FloatingBackViewManager.getType() == FloatingBackViewManager.TYPE_TASK) { + && FloatingBackViewManager.getType() == FloatingBackViewManager.TYPE_TASK + ) { FloatingBackViewManager.disableBackView() - } else if (activity is SingletonWebActivity - && FloatingBackViewManager.getType() == FloatingBackViewManager.TYPE_ACTIVITY - // TODO 再加上一个内容匹配? - ) { + } else if (!shouldShowActivityBackView(activity) + && FloatingBackViewManager.getType() == FloatingBackViewManager.TYPE_ACTIVITY + ) { FloatingBackViewManager.disableBackView() } else { FloatingBackViewManager.showBackView(activity) @@ -55,6 +60,15 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks { } } + private fun shouldShowActivityBackView(activity: Activity): Boolean { + return (activity is MainActivity + || activity is ArticleDetailActivity + || activity is ForumVideoDetailActivity + || activity is ForumDetailActivity + || activity is ForumListActivity + || activity is NewQuestionDetailActivity) + } + override fun onActivityPaused(activity: Activity) { CurrentActivityHolder.activitySet.remove(activity) FloatingBackViewManager.dismissBackView(activity) @@ -78,5 +92,4 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks { } } - } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/DefaultJsApi.kt b/app/src/main/java/com/gh/common/DefaultJsApi.kt index 3587e0a99c..fde3ca10d4 100644 --- a/app/src/main/java/com/gh/common/DefaultJsApi.kt +++ b/app/src/main/java/com/gh/common/DefaultJsApi.kt @@ -387,6 +387,11 @@ class DefaultJsApi(var context: Context) { mLoginHandler = null } + @JavascriptInterface + fun openInNewFullWebview(url: Any) { + runOnUiThread { DirectUtils.directToFullScreenWebPage(context, url.toString(), true) } + } + @Keep internal data class ImageEvent(var imageList: ArrayList = arrayListOf(), var position: Int = 0) diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index 90975b6b3d..d98754273e 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -13,7 +13,6 @@ import com.gh.common.util.DirectUtils.directToGameVideo import com.gh.common.util.DirectUtils.directToLegacyVideoDetail import com.gh.common.util.DirectUtils.directToLinkPage import com.gh.common.util.DirectUtils.directToQa -import com.gh.common.util.DirectUtils.directToVideoDetail import com.gh.common.util.GsonUtils.gson import com.gh.gamecenter.LibaoDetailActivity import com.gh.gamecenter.MainActivity @@ -162,9 +161,12 @@ object DefaultUrlHandler { } directToLegacyVideoDetail(context, id, location, false, gameId, entrance, "", referer, type, act, paginationType, fieldId, sectionName) } + EntranceUtils.HOST_VIDEO_DETAIL -> { + DirectUtils.directToVideoDetail(context, id, entrance, path) + } EntranceUtils.HOST_VIDEO_SINGLE -> { val referer = uri.getQueryParameter("referer") ?: "" - directToVideoDetail(context, id, VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, + DirectUtils.directToVideoDetail(context, id, VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value, false, "", entrance, "", if (TextUtils.isEmpty(referer)) "" else referer) } EntranceUtils.HOST_VIDEO_STREAMING_HOME -> { @@ -295,6 +297,7 @@ object DefaultUrlHandler { val forumName = uri.getQueryParameter("forum_name") ?: "" val forumId = uri.getQueryParameter("forum_id") ?: "" val forumIcon = uri.getQueryParameter("forum_icon") ?: "" + val forumType = uri.getQueryParameter("forum_type") ?: BbsType.OFFICIAL_BBS.value val activityLabelEntity = ActivityLabelEntity(id = activityId, name = activityName) val communityEntity = CommunityEntity(id = forumId, name = forumName, icon = forumIcon) @@ -303,7 +306,7 @@ object DefaultUrlHandler { context, communityEntity, activityLabelEntity, - BbsType.OFFICIAL_BBS.value, + forumType, false, entrance, "" diff --git a/app/src/main/java/com/gh/common/util/BbsStayTimeHelper.kt b/app/src/main/java/com/gh/common/util/BbsStayTimeHelper.kt index 859d263f49..22ce7deafb 100644 --- a/app/src/main/java/com/gh/common/util/BbsStayTimeHelper.kt +++ b/app/src/main/java/com/gh/common/util/BbsStayTimeHelper.kt @@ -6,7 +6,6 @@ import android.app.Application import android.os.Bundle import com.gh.base.CurrentActivityHolder import com.gh.base.GHThreadFactory -import com.gh.common.runOnUiThread import com.gh.gamecenter.MainActivity import com.gh.gamecenter.forum.detail.ForumDetailActivity import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity @@ -37,13 +36,11 @@ object BbsStayTimeHelper { private val mActivityLifecycleCallbacks by lazy { object : Application.ActivityLifecycleCallbacks { - override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { - // do nothing - } - - override fun onActivityStarted(activity: Activity) { - // do nothing - } + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {} + override fun onActivityStopped(activity: Activity) {} + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} + override fun onActivityDestroyed(activity: Activity) {} + override fun onActivityStarted(activity: Activity) {} override fun onActivityResumed(activity: Activity) { if (isTopActivityBbsRelated(activity) && mIsStayTimeCountEnabled) { @@ -56,18 +53,6 @@ object BbsStayTimeHelper { pauseTimeCount() } } - - override fun onActivityStopped(activity: Activity) { - // do nothing - } - - override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) { - // do nothing - } - - override fun onActivityDestroyed(activity: Activity) { - // do nothing - } } } @@ -101,19 +86,6 @@ object BbsStayTimeHelper { if (mStayTimeCount >= mStayTimeTimeout) { postExploreFinish() } - if (!isPublishEnv()) { - if (!isPublishEnv()) { - runOnUiThread { - ToastUtils.toast("论坛页面累计停留了 $mStayTimeCount 秒") - } - } - } - } - } else { - if (!isPublishEnv()) { - runOnUiThread { - ToastUtils.toast("当前页面不满足论坛任务条件(仅测试包有这个 toast 不要慌)") - } } } Thread.sleep(1000) @@ -146,7 +118,7 @@ object BbsStayTimeHelper { .subscribe(object : BiResponse() { override fun onSuccess(data: ResponseBody) { if (!isPublishEnv()) { - ToastUtils.toast("完成了论坛停留任务(仅测试包有这个 toast 不要慌)") + ToastUtils.toast("完成了论坛停留任务(仅测试环境有这个 toast 不要慌)") } disableStayTimeCount() } diff --git a/app/src/main/java/com/gh/common/util/CheckLoginUtils.java b/app/src/main/java/com/gh/common/util/CheckLoginUtils.java index 8c4f525fe2..92b9550043 100644 --- a/app/src/main/java/com/gh/common/util/CheckLoginUtils.java +++ b/app/src/main/java/com/gh/common/util/CheckLoginUtils.java @@ -1,9 +1,11 @@ package com.gh.common.util; +import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; +import com.gh.base.CurrentActivityHolder; import com.gh.common.constant.Constants; import com.gh.gamecenter.LoginActivity; import com.gh.gamecenter.manager.UserManager; @@ -16,14 +18,21 @@ import com.lightgame.utils.Utils; public class CheckLoginUtils { - public static void checkLogin(final Context context, String entrance, OnLoginListener listener) { + public static void checkLogin(Context context, String entrance, OnLoginListener listener) { if (!isLogin()) { if (listener != null) Utils.toast(context, "需要登录"); LogUtils.login("dialog", null, entrance); LogUtils.login("activity", null, entrance); if (SPUtils.getBoolean(Constants.SP_HAS_GET_PHONE_INFO) || NetworkUtils.isOpenMobileData(context)) { - QuickLoginHelper.startLogin(context, entrance); + // 需要确保传入的 context 不为 application + if (!(context instanceof Activity)) { + context = CurrentActivityHolder.getCurrentActivity(); + } + + if (context != null) { + QuickLoginHelper.startLogin(context, entrance); + } } else { // 有可能App未启动 Bundle bundle = new Bundle(); diff --git a/app/src/main/java/com/gh/common/util/CommentHelper.kt b/app/src/main/java/com/gh/common/util/CommentHelper.kt index 2cf66d0786..c8ea390bd2 100644 --- a/app/src/main/java/com/gh/common/util/CommentHelper.kt +++ b/app/src/main/java/com/gh/common/util/CommentHelper.kt @@ -124,7 +124,7 @@ object CommentHelper { val context = view.context val dialogOptions = ArrayList() - if (isShowTop && (articleId != null || questionId != null) && (commentEntity.me?.isModerator == true || commentEntity.me?.isContentAuthor == true)) { + if (isShowTop && (articleId != null || questionId != null) && commentEntity.me?.isContentAuthor == true) { dialogOptions.add(if (commentEntity.isTop) "取消置顶" else "置顶") } if (questionId != null && commentEntity.me?.isContentAuthor == true) { @@ -146,7 +146,7 @@ object CommentHelper { dialogOptions.add("删除评论") } - commentEntity.me?.let { + /*commentEntity.me?.let { if (ignoreModerator) return@let if (it.isModerator || (it.moderatorPermissions.hideAnswerComment > Permissions.GUEST @@ -156,7 +156,7 @@ object CommentHelper { ) { dialogOptions.add("管理") } - } + }*/ if (commentEntity.parentUser != null && showConversation) { dialogOptions.add("查看对话") diff --git a/app/src/main/java/com/gh/common/util/DialogHelper.kt b/app/src/main/java/com/gh/common/util/DialogHelper.kt index fba1d088e3..08f31024fd 100644 --- a/app/src/main/java/com/gh/common/util/DialogHelper.kt +++ b/app/src/main/java/com/gh/common/util/DialogHelper.kt @@ -1,5 +1,6 @@ package com.gh.common.util +import android.app.Activity import android.app.Dialog import android.content.Context import android.graphics.Color @@ -35,9 +36,11 @@ object DialogHelper { uiModificationCallback: ((binding: DialogAlertDefaultBinding) -> Unit)? = null, trackMtaEvent: Boolean = false, mtaEvent: String = "", - mtaKey: String = ""): Dialog { + mtaKey: String = "") { val solidContext = checkDialogContext(context) + if (solidContext is Activity && solidContext.isFinishing) return + val dialog = if (trackMtaEvent) { TrackableDialog(solidContext, R.style.GhAlertDialog, mtaEvent, mtaKey) } else { @@ -98,7 +101,6 @@ object DialogHelper { dialog.setContentView(contentView) dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) dialog.show() - return dialog } /** @@ -115,8 +117,8 @@ object DialogHelper { negativeClickCallback: EmptyCallback, trackMtaEvent: Boolean = false, mtaEvent: String = "", - mtaKey: String = ""): Dialog { - return showDialog( + mtaKey: String = "") { + showDialog( context = context, title = title, content = content, diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java index e34029d0ba..e3c7dbd118 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -397,7 +397,9 @@ public class DownloadItemUtils { if (briefStyle != null && recommendStyle != null && briefStyle.contains("recommend")) { - holder.recommendContainer.setVisibility(View.VISIBLE); + if (holder.recommendContainer != null) { + holder.recommendContainer.setVisibility(View.VISIBLE); + } if (holder.gameRating != null) holder.gameRating.setVisibility(View.GONE); holder.gameDes.setVisibility(View.GONE); diff --git a/app/src/main/java/com/gh/common/util/DownloadObserver.kt b/app/src/main/java/com/gh/common/util/DownloadObserver.kt index 8816acf9e8..11fa9a29ba 100644 --- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt +++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt @@ -6,8 +6,6 @@ import com.gh.base.BaseActivity import com.gh.common.constant.Constants import com.gh.common.exposure.ExposureUtils import com.gh.common.exposure.meta.MetaUtil -import com.gh.common.runOnIoThread -import com.gh.common.runOnUiThread import com.gh.common.simulator.SimulatorDownloadManager import com.gh.common.simulator.SimulatorGameManager import com.gh.common.util.EnergyTaskHelper.postEnergyTask @@ -168,21 +166,17 @@ object DownloadObserver { Utils.toast(mApplication, R.string.install_failure_hint) downloadManager.cancel(downloadEntity.url) } else { - runOnIoThread { - if (PackageUtils.isInstallable(mApplication, downloadEntity.path)) { - downloadEntity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION] = "YES" - tryWithDefaultCatch { - runOnUiThread { - PackageInstaller.install(mApplication, downloadEntity, false) - } - } + if (PackageUtils.isCanLaunchSetup(mApplication, downloadEntity.path)) { + downloadEntity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION] = "YES" + tryWithDefaultCatch { + PackageInstaller.install(mApplication, downloadEntity, false) + } + } else { + // 弹出卸载提示框 + if (downloadEntity.isPlugin) { + EventBus.getDefault().post(EBShowDialog(BaseActivity.PLUGGABLE, downloadEntity.path)) } else { - // 弹出卸载提示框 - if (downloadEntity.isPlugin) { - EventBus.getDefault().post(EBShowDialog(BaseActivity.PLUGGABLE, downloadEntity.path)) - } else { - EventBus.getDefault().post(EBShowDialog(BaseActivity.SIGNATURE_CONFLICT, downloadEntity.path)) - } + EventBus.getDefault().post(EBShowDialog(BaseActivity.SIGNATURE_CONFLICT, downloadEntity.path)) } } } 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 e9da6addde..15d894fdb3 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -53,6 +53,7 @@ public class EntranceUtils { public static final String HOST_VIDEO_STREAMING_HOME = "video_streaming_home";//视频流-首页 public static final String HOST_VIDEO_STREAMING_DESC = "video_streaming_desc";//视频流-游戏介绍进入 public static final String HOST_VIDEO_COLLECTION = "video_collection";//视频合集 + public static final String HOST_VIDEO_DETAIL = "video_detail"; public static final String HOST_USERHOME = "userhome";//个人主页 public static final String HOST_VIDEO = "video"; public static final String HOST_FORUM = "forum"; diff --git a/app/src/main/java/com/gh/common/util/FloatingBackViewManager.kt b/app/src/main/java/com/gh/common/util/FloatingBackViewManager.kt index 63267352ed..d3cd027587 100644 --- a/app/src/main/java/com/gh/common/util/FloatingBackViewManager.kt +++ b/app/src/main/java/com/gh/common/util/FloatingBackViewManager.kt @@ -90,6 +90,7 @@ object FloatingBackViewManager { /** * 隐藏返回小浮窗 */ + @JvmStatic fun dismissBackView(activity: Activity) { EasyFloat.dismiss(activity, FLOATING_BACK_VIEW) } @@ -113,9 +114,17 @@ object FloatingBackViewManager { * @param type 类型 * @param activityUrl 类型为活动的时候用的地址 */ + @JvmStatic fun disableBackView() { mType = "" mActivityUrl = "" } + /** + * 返回小浮窗类型是否为活动 + */ + fun isTypeActivity() : Boolean { + return mType == TYPE_ACTIVITY + } + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/NewLogUtils.kt b/app/src/main/java/com/gh/common/util/NewLogUtils.kt index 57f0907634..ab9f17d00b 100644 --- a/app/src/main/java/com/gh/common/util/NewLogUtils.kt +++ b/app/src/main/java/com/gh/common/util/NewLogUtils.kt @@ -465,7 +465,7 @@ object NewLogUtils { fun logShareTypeClick(shareType: String) { val json = json { "location" to "分享面板" - "event" to "view_detail_share_panel" + "event" to "share_type" "meta" to LogUtils.getMetaObject() "share_type" to shareType "launch_id" to Tracker.launchId @@ -475,6 +475,21 @@ object NewLogUtils { log(json, "bbs_community", false) } + //分享结果 + @JvmStatic + fun logShareResult(shareResult: Boolean){ + val json = json { + "location" to "分享面板" + "event" to "share_result" + "meta" to LogUtils.getMetaObject() + "share_success" to shareResult + "launch_id" to Tracker.launchId + "session_id" to Tracker.sessionId + "timestamp" to System.currentTimeMillis() / 1000 + } + log(json, "bbs_community", false) + } + //分享面板点击 fun logSharePanelClick(event: String, userId: String, contentType: String, contentId: String, bbsId: String, bbsType: String) { val json = json { diff --git a/app/src/main/java/com/gh/common/util/PackageInstaller.kt b/app/src/main/java/com/gh/common/util/PackageInstaller.kt index cc79b536cf..3a23b350d1 100644 --- a/app/src/main/java/com/gh/common/util/PackageInstaller.kt +++ b/app/src/main/java/com/gh/common/util/PackageInstaller.kt @@ -1,7 +1,6 @@ package com.gh.common.util import android.app.Activity -import android.app.Application import android.content.Context import android.content.Intent import android.net.Uri @@ -10,8 +9,6 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.FileProvider import com.gh.common.constant.Constants import com.gh.common.dialog.InstallPermissionDialogFragment -import com.gh.common.runOnIoThread -import com.gh.common.runOnUiThread import com.gh.common.xapk.XapkInstaller import com.gh.download.server.BrowserInstallHelper import com.gh.gamecenter.BuildConfig @@ -48,7 +45,7 @@ object PackageInstaller { // TODO 此处可能遇到 activity 是 WXEntryActivity // TODO 当 activity 全部出栈,但是应用还在下载游戏,下载完会唤不起安装! - if (currentActivity is AppCompatActivity) { + if (currentActivity is AppCompatActivity && !currentActivity.isFinishing) { InstallPermissionDialogFragment.show(currentActivity, downloadEntity) { // 取消状态栏下载完成的通知,若存在 downloadEntity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION] = "YES" @@ -79,26 +76,20 @@ object PackageInstaller { return } - runOnIoThread { - if (PackageUtils.isInstallable(context, pkgPath)) { - runOnUiThread { - HaloApp.put(Constants.LAST_INSTALL_GAME, pkgPath) + if (PackageUtils.isCanLaunchSetup(context, pkgPath)) { + HaloApp.put(Constants.LAST_INSTALL_GAME, pkgPath) - val installIntent = getInstallIntent(context, pkgPath) - context.startActivity(installIntent) + val installIntent = getInstallIntent(context, pkgPath) + context.startActivity(installIntent) + } else { + if (isPluggin) { + DialogHelper.showPluginDialog(context) { + uninstall(context, pkgPath) } } else { - runOnUiThread { - if (isPluggin) { - DialogHelper.showPluginDialog(context) { - uninstall(context, pkgPath) - } - } else { - // 非插件化的同包名不同签名冲突 - DialogHelper.showSignatureConflictDialog(context) { - uninstall(context, pkgPath) - } - } + // 非插件化的同包名不同签名冲突 + DialogHelper.showSignatureConflictDialog(context) { + uninstall(context, pkgPath) } } } @@ -133,7 +124,7 @@ object PackageInstaller { // 应用内更新不加 FLAG_ACTIVITY_NEW_TASK 在模拟器上会出现安装完成后安装界面也一并消失的类似闪退的表现 // Application 上下文就更不用说了 val pkgName = PackageUtils.getPackageNameByPath(context, path) - if (pkgName == context.packageName || context is Application) { + if (pkgName == context.packageName || context !is Activity) { installIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } installIntent.setDataAndType(uri, "application/vnd.android.package-archive") diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index 0b9b9c4f58..fd1187abdd 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -16,10 +16,8 @@ import android.os.PowerManager; import android.text.TextUtils; import androidx.annotation.Nullable; -import androidx.annotation.WorkerThread; import com.g00fy2.versioncompare.Version; -import com.gh.common.AppExecutor; import com.gh.common.xapk.XapkInstaller; import com.gh.gamecenter.BuildConfig; import com.gh.gamecenter.entity.ApkEntity; @@ -241,13 +239,9 @@ public class PackageUtils { return null; } - // TODO 找一个更高效的方式来比较 V2 签名 + // TODO 找一个更好的办法来比较签名并且不触发 ANR public static boolean compareSignatureBetweenInstalledAppWithApk(Context context, String packageName, String apkFilePath) { try { - AppExecutor.getUiExecutor().execute(() -> { - ToastUtils.toast("安装包校验中,约需要3~5秒,请稍候"); - }); - // 据 Sentry 统计,刚上架一个周末的包里对这个方法有 700+ 次调用,然后其中一部分会造成 ANR Signature sig = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures[0]; @@ -300,14 +294,11 @@ public class PackageUtils { } /** - * 根据 path 获取 apk 是否可安装 (全新安装或覆盖安装) - * - * 由于部分不存在 V1 签名的大安装包在调用系统 API 获取签名信息时会非常慢,所以请在工作线程里调用此方法 + * 根据 path 获取 apk 信息确定处理方式 * - * @return true 为可直接唤起系统 PackageInstaller, false 为需要插件化 + * @return true 为直接唤起系统 PackageInstaller, false 为需要插件化 */ - @WorkerThread - public static boolean isInstallable(Context context, String path) { + public static boolean isCanLaunchSetup(Context context, String path) { String packageName = getPackageNameByPath(context, path); if (TextUtils.isEmpty(packageName)) { 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 bd04db1eeb..bb5ea33dc5 100644 --- a/app/src/main/java/com/gh/common/util/ShareUtils.java +++ b/app/src/main/java/com/gh/common/util/ShareUtils.java @@ -144,6 +144,11 @@ public class ShareUtils { if (ShareUtils.shareEntrance == ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("成功", mShareType.getName()); } + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(true); + } } @Override @@ -154,6 +159,11 @@ public class ShareUtils { if (ShareUtils.shareEntrance == ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("失败", mShareType.getName()); } + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(false); + } } @Override @@ -164,6 +174,11 @@ public class ShareUtils { if (ShareUtils.shareEntrance == ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("取消", mShareType.getName()); } + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(false); + } } }; diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index bcc9f5415a..9ecd2e6dda 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -273,6 +273,9 @@ public class SkipActivity extends BaseActivity { bundle.putString(KEY_TYPE, type); EntranceUtils.jumpActivity(this, bundle); break; + case EntranceUtils.HOST_VIDEO_DETAIL: + DirectUtils.directToVideoDetail(this, path, ENTRANCE_BROWSER, ""); + break; case HOST_LIBAO: DirectUtils.directToGiftDetail(this, path, ENTRANCE_BROWSER); break; diff --git a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java index 2c5d447df9..1a16ab29a7 100644 --- a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java @@ -19,6 +19,7 @@ import com.gh.common.util.EnergyTaskHelper; import com.gh.common.util.ImageUtils; import com.gh.common.util.IntegralLogHelper; import com.gh.common.util.LogUtils; +import com.gh.common.util.NewLogUtils; import com.gh.common.util.ShareUtils; import com.gh.gamecenter.eventbus.EBShare; import com.lightgame.utils.Utils; @@ -260,6 +261,11 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("成功", "微博"); } + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(true); + } } else { IntegralLogHelper.INSTANCE.logInviteResult("成功", "微博"); } @@ -275,6 +281,11 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("失败", "微博"); } + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(false); + } } else { IntegralLogHelper.INSTANCE.logInviteResult("失败", "微博"); } @@ -290,6 +301,11 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback { if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("取消", "微博"); } + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(false); + } } else { IntegralLogHelper.INSTANCE.logInviteResult("取消", "微博"); } diff --git a/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt b/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt index ff834eed5d..b3e4814e76 100644 --- a/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt @@ -30,7 +30,15 @@ class AmwaySuccessFragment : NormalFragment() { setNavigationTitle("安利墙") checkCommentBtn.setOnClickListener { - GameDetailActivity.startGameDetailCommentActivity(requireContext(), mGameEntity, "安利墙") + if (mGameEntity != null) { + GameDetailActivity.startGameDetailCommentActivity( + requireContext(), + mGameEntity, + "安利墙" + ) + } else { + requireActivity().finish() + } } checkAmwayBtn.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListAdapter.kt b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListAdapter.kt index e4f3f61b7c..50e7e47111 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumArticleAskListAdapter.kt @@ -100,7 +100,7 @@ class ForumArticleAskListAdapter(context: Context, val bbsId: String, val mEntra "video" -> { NewLogUtils.logForumDetailFeedContentClick("click_forum_detail_content", userId, contentId, "视频帖", sequence, bbsId, bbsType, tabInfo) MtaHelper.onEvent(holder.getEventId(entrance), holder.getKey(entrance), "${answer.articleTitle}(${answer.id})") - mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"")) + mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"", bbsId)) } "question" -> { NewLogUtils.logForumDetailFeedContentClick("click_forum_detail_content", userId, contentId, "提问帖", sequence, bbsId, bbsType, tabInfo) diff --git a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailActivity.kt index a79d0f88d9..f5d4c85b05 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailActivity.kt @@ -32,6 +32,8 @@ class ForumDetailActivity : BaseActivity() { return Pair(intent.getStringExtra(EntranceUtils.KEY_BBS_ID) ?: "", "") } + override fun preventRecreateFragmentByFragmentManager(): Boolean = true + companion object { @JvmStatic fun getIntent(context: Context, bbsId: String, entrance: String): Intent { diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt index a0f088b40d..fd59cc97d4 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt @@ -146,6 +146,11 @@ class CommunityHomeFragment : LazyFragment() { 1 -> NewLogUtils.logCommunityHomeEvent("click_forum_tab") 2 -> NewLogUtils.logCommunityHomeEvent("click_activity_tab") } + + if (position == 2) { + FloatingBackViewManager.disableBackView() + FloatingBackViewManager.dismissBackView(requireActivity()) + } }, onPageScrolled = { position, positionOffset, _ -> if (position + 1 != mTabList.size) { diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleAskItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleAskItemViewHolder.kt index 5dd3bfe4c1..257b29932f 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleAskItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleAskItemViewHolder.kt @@ -287,8 +287,9 @@ class ForumArticleAskItemViewHolder(val binding: CommunityAnswerItemBinding) : B MtaHelper.onEvent(getEventId(entrance), getKey(entrance), "评论图标") } "video" -> { + val communityId = if (entity.bbs.id.isNotEmpty()) entity.bbs.id else UserManager.getInstance().community.id itemView.context.startActivity(ForumVideoDetailActivity.getIntent(itemView.context, entity.id - ?: "",true)) + ?: "",communityId, true)) } "question" -> { if (entity.questions.answerCount == 0) { diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListAdapter.kt b/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListAdapter.kt index 9db55aa20f..84e1bd38bf 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/home/ForumArticleListAdapter.kt @@ -124,7 +124,7 @@ class ForumArticleListAdapter(context: Context, } "video" -> { MtaHelper.onEvent("论坛首页", viewHolder.getKey(BaseActivity.mergeEntranceAndPath(mEntrance, path)), "${articleEntity.title}(${articleEntity.id})") - mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, articleEntity.id ?:"")) + mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, articleEntity.id ?:"", articleEntity.community.id)) } "question" -> { MtaHelper.onEvent("论坛首页", viewHolder.getKey(BaseActivity.mergeEntranceAndPath(mEntrance, path)), "${articleEntity.title}(${articleEntity.id})") diff --git a/app/src/main/java/com/gh/gamecenter/forum/search/ForumContentSearchListAdapter.kt b/app/src/main/java/com/gh/gamecenter/forum/search/ForumContentSearchListAdapter.kt index 15f2a99d2e..0c28930e73 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/search/ForumContentSearchListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/search/ForumContentSearchListAdapter.kt @@ -111,7 +111,7 @@ class ForumContentSearchListAdapter(context: Context, val mListViewModel: ForumC "video" -> { NewLogUtils.logForumSearchResultClick("内容tab", answer.bbs.id, bbsType, answer.id ?: "", "视频帖", answer.user.id ?: "", position + 1) MtaHelper.onEvent(holder.getEventId(entrance), holder.getKey(entrance), "${answer.articleTitle}(${answer.id})") - mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"")) + mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"", answer.bbs.id)) } else -> { NewLogUtils.logForumSearchResultClick("内容tab", answer.bbs.id, bbsType, answer.id ?: "", "提问帖", answer.user.id ?: "", position + 1) @@ -150,7 +150,7 @@ class ForumContentSearchListAdapter(context: Context, val mListViewModel: ForumC val answerViewHolder = ForumArticleAskItemViewHolder(includedAnswerItem) answerViewHolder.bindForumAnswerItem(answer, mEntrance, "") answerViewHolder.itemView.setOnClickListener { - mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"")) + mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"", answer.bbs.id)) } } } else { @@ -194,7 +194,7 @@ class ForumContentSearchListAdapter(context: Context, val mListViewModel: ForumC } "video" -> { NewLogUtils.logForumSearchResultClick("", answer.bbs.id, bbsType, answer.id ?: "", "视频帖", answer.user.id ?: "", position + 1) - mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"")) + mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, answer.id ?:"", answer.bbs.id)) } else -> { NewLogUtils.logForumSearchResultClick("", answer.bbs.id, bbsType, answer.id ?: "", "提问帖", answer.user.id ?: "", position + 1) diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java index a88fc67718..f3a5231989 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java @@ -35,6 +35,7 @@ import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.ExtensionsKt; +import com.gh.common.util.FloatingBackViewManager; import com.gh.common.util.HomeBottomBarHelper; import com.gh.common.util.ImageUtils; import com.gh.common.util.IntegralLogHelper; @@ -491,6 +492,11 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable implem DataUtils.onMtaEvent(getContext(), "顶级页面", "BottomBar", tabText); TrackerLogger.logHomeTabSelected(index, tabText); + if (index != INDEX_BBS) { + FloatingBackViewManager.disableBackView(); + FloatingBackViewManager.dismissBackView(requireActivity()); + } + SubjectRecommendEntity navBarEntity = mViewModel.getNavBar().getValue(); if (navBarEntity != null) { if (index == INDEX_GAME) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index af58bb4297..7cca15513f 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -1600,7 +1600,9 @@ class GameDetailFragment : NormalFragment() { override fun onBackPressed(): Boolean { mOrientationUtils?.backToProtVideo() - if (mViewPager.currentItem == INDEX_TRENDES && fragmentsList[INDEX_TRENDES] is WebFragment) { + if (mViewPager.currentItem == INDEX_TRENDES + && fragmentsList[INDEX_TRENDES] is WebFragment + && fragmentsList[INDEX_TRENDES].isAdded) { return (fragmentsList[INDEX_TRENDES] as WebFragment).onBackPressed() } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt index 72852e013e..0eb76b96e9 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt @@ -208,7 +208,7 @@ class UserHistoryFragment : ListFragment { + val communityId = if (!entity.communityId.isNullOrEmpty()) entity.communityId + ?: "" else entity.bbs.id itemView.context.startActivity(ForumVideoDetailActivity.getIntent(itemView.context, entity.id - ?: "", true)) + ?: "", communityId, true)) } "answer" -> { val intent = CommentActivity.getAnswerCommentIntent(itemView.context, @@ -167,7 +169,7 @@ open class BaseAnswerOrArticleItemViewHolder(itemView: View) : BaseRecyclerViewH itemView.context.startActivity(intent) } "video" -> { - itemView.context.startActivity(ForumVideoDetailActivity.getIntent(itemView.context, entity.id, true)) + itemView.context.startActivity(ForumVideoDetailActivity.getIntent(itemView.context, entity.id, entity.community.id, true)) } else -> { val communityId = if (entity.community.id.isNotEmpty()) entity.community.id diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt index d119cee9d7..7fae628db8 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt @@ -410,11 +410,10 @@ class ArticleDetailFragment : BaseCommentFragment if (isHidden) { - if (mViewModel.detailEntity!!.me.moderatorPermissions.hideCommunityArticle == Permissions.REPORTER) { - toast("提交成功") + if (mViewModel.detailEntity?.me?.isModerator == true) { + toast("已隐藏") } else { - toast("操作成功") - //mViewModel.getArticleDetail() + toast("已删除") } EventBus.getDefault().post(EBDeleteDetail(mViewModel.detailEntity?.id ?: "")) requireActivity().finish() @@ -498,7 +497,7 @@ class ArticleDetailFragment : BaseCommentFragment(), Keyb } else if (mViewModel.type == BbsType.OFFICIAL_BBS.value) { if (mViewModel.gameEntity == null) { mGameName.text = "选择游戏" + mForumIcon.visibility = View.GONE } else { mGameName.text = mViewModel.gameEntity?.name mForumIcon.displayGameIcon(mViewModel.gameEntity?.icon, mViewModel.gameEntity?.iconSubscript) diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentViewModel.kt index 7283ce0748..a50560f7eb 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/comment/base/BaseCommentViewModel.kt @@ -202,7 +202,11 @@ abstract class BaseCommentViewModel( fun deleteComment(entity: CommentEntity, callback: () -> Unit) { val observable = when { videoId.isNotEmpty() -> { - mApi.deleteVideoComment(videoId, entity.id).toObservable() + if (entity.me?.isModerator == true) { + mApi.moderatorsHideVideoComment(communityId, videoId, entity.id).toObservable() + } else { + mApi.deleteVideoComment(videoId, entity.id).toObservable() + } } questionId.isNotEmpty() -> { mApi.deleteQuestionComment(questionId, entity.id).toObservable() diff --git a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseForumContainerAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseForumContainerAdapter.kt index 80036718fb..4d084ebd1a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseForumContainerAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseForumContainerAdapter.kt @@ -65,7 +65,7 @@ class ChooseForumContainerAdapter(content: Context, val type: String, val onSele val tabType = if (type == ChooseForumContainerFragment.ChooseForumType.SEARCH.value) "论坛tab" else "" val bbsType = if (forumEntity.type == "official_bbs") "综合论坛" else "游戏论坛" NewLogUtils.logForumSearchResultClick(tabType, forumEntity.id, bbsType, "", "", "", position + 1) - onSelectCallback?.invoke(CommunityEntity(forumEntity.id, HtmlUtils.stripHtml(forumEntity.name), + onSelectCallback?.invoke(CommunityEntity(forumEntity.id, HtmlUtils.stripHtml(forumEntity.name), type = forumEntity.type, game = forumEntity.game, icon = icon, iconSubscript = forumEntity.game.iconSubscript)) } } else if (holder is FooterViewHolder) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDetailEntity.kt b/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDetailEntity.kt index a600fa9f86..374732bdd0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDetailEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDetailEntity.kt @@ -34,6 +34,7 @@ data class ArticleDetailEntity( @SerializedName("tag_activity_name") var tagActivityName: String = "", var type: String = "", + @SerializedName("game") var gameEntity: GameEntity? = null, @SerializedName("choiceness_status") var choicenessStatus: String = "",// 精选状态 apply(申请), pass already(已精选) cancel not_yet(未精选) diff --git a/app/src/main/java/com/gh/gamecenter/qa/entity/QuestionsDetailEntity.kt b/app/src/main/java/com/gh/gamecenter/qa/entity/QuestionsDetailEntity.kt index 8ca075eb7a..ecdd361cf7 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/entity/QuestionsDetailEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/entity/QuestionsDetailEntity.kt @@ -43,6 +43,7 @@ data class QuestionsDetailEntity( @SerializedName("tag_activity_name") var tagActivityName: String = "", var type: String = "", + @SerializedName("game") var gameEntity: GameEntity? = null, var time: TimeEntity = TimeEntity(), var count: Count = Count(), 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 705178f262..ce0278aec5 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 @@ -289,7 +289,10 @@ class QuestionEditActivity : BaseRichEditorActivity(), mBinding.activityTitle.text = detailEntity.tagActivityName mBinding.activityTitle.setTextColor(R.color.text_FA8500.toColor()) } + setForumName() mBinding.chooseActivityContainer.isEnabled = false + mBinding.chooseForumTv.isEnabled = false + mBinding.chooseForumTv.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null) mViewModel.isModeratorPatch = intent.getBooleanExtra(EntranceUtils.KEY_QUESTION_MODERATOR_PATCH, false) @@ -304,8 +307,6 @@ class QuestionEditActivity : BaseRichEditorActivity(), mBinding.questionseditTitle.setText(detailEntity.title) setEditHtml(detailEntity.description) } - - setForumName() } private fun setQuestionDraft(draftEntity: QuestionDraftEntity) { @@ -705,6 +706,7 @@ class QuestionEditActivity : BaseRichEditorActivity(), } else if (mViewModel.type == BbsType.OFFICIAL_BBS.value) { if (mViewModel.gameEntity == null) { mBinding.chooseForumTv.text = "选择游戏" + mBinding.forumIconView.visibility = View.GONE } else { mBinding.chooseForumTv.text = mViewModel.gameEntity?.name mBinding.forumIconView.displayGameIcon( diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailViewModel.kt index 447548a41a..cfbd26b340 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/newdetail/NewQuestionDetailViewModel.kt @@ -31,8 +31,19 @@ import org.greenrobot.eventbus.EventBus import org.json.JSONObject import retrofit2.HttpException -class NewQuestionDetailViewModel(application: Application, questionId: String = "", communityId: String = "", val answerId: String = "") : - BaseCommentViewModel(application, articleId = "", communityId = communityId, videoId = "", questionId = questionId) { +class NewQuestionDetailViewModel( + application: Application, + questionId: String = "", + communityId: String = "", + val answerId: String = "" +) : + BaseCommentViewModel( + application, + articleId = "", + communityId = communityId, + videoId = "", + questionId = questionId + ) { var questionRenderedLiveData = MutableLiveData() var questionPageFinishedLiveData = MutableLiveData() val moderatorsHideLiveData = MutableLiveData() @@ -44,28 +55,28 @@ class NewQuestionDetailViewModel(application: Application, questionId: String = fun getQuestionDetail() { mApi.getQuestionsById(questionId) - .compose(observableToMain()) - .subscribe(object : Response() { - override fun onResponse(response: QuestionsDetailEntity?) { - super.onResponse(response) - questionDetail = response - topItemData = CommentItemData(questionDetail = response) - commentCount = response?.count?.answer ?: 0 - loadResultLiveData.postValue(LoadResult.SUCCESS) - mergeListData(mListLiveData.value, displayFloor = true) + .compose(observableToMain()) + .subscribe(object : Response() { + override fun onResponse(response: QuestionsDetailEntity?) { + super.onResponse(response) + questionDetail = response + topItemData = CommentItemData(questionDetail = response) + commentCount = response?.count?.answer ?: 0 + loadResultLiveData.postValue(LoadResult.SUCCESS) + mergeListData(mListLiveData.value, displayFloor = true) - NewLogUtils.logForumContentBrowser(questionId, "bbs_question") - } + NewLogUtils.logForumContentBrowser(questionId, "bbs_question") + } - override fun onFailure(e: HttpException?) { - super.onFailure(e) - if (e?.code().toString().startsWith("404")) { - loadResultLiveData.postValue(LoadResult.DELETED) - } else { - loadResultLiveData.postValue(LoadResult.NETWORK_ERROR) - } + override fun onFailure(e: HttpException?) { + super.onFailure(e) + if (e?.code().toString().startsWith("404")) { + loadResultLiveData.postValue(LoadResult.DELETED) + } else { + loadResultLiveData.postValue(LoadResult.NETWORK_ERROR) } - }) + } + }) } override fun provideDataObservable(page: Int): Observable>? { @@ -100,63 +111,67 @@ class NewQuestionDetailViewModel(application: Application, questionId: String = mApi.deleteFollowing(targetUserId) } observable - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - super.onResponse(response) - if (isFollow) { - // 关注成功 - mFollowLiveData.postValue(true) - } else { - // 取消关注成功 - mFollowLiveData.postValue(false) - } - - SyncPageRepository.postSyncData(SyncDataEntity(questionDetail?.id ?: "", - SyncFieldConstants.IS_FOLLOWER, - isFollow, - checkFieldEntity = true)) - EventBus.getDefault().post(EBUserFollow(targetUserId, isFollow)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response() { + override fun onResponse(response: ResponseBody?) { + super.onResponse(response) + if (isFollow) { + // 关注成功 + mFollowLiveData.postValue(true) + } else { + // 取消关注成功 + mFollowLiveData.postValue(false) } - override fun onFailure(e: HttpException?) { - super.onFailure(e) - Utils.toast(getApplication(), R.string.loading_failed_hint) - } - }) + SyncPageRepository.postSyncData( + SyncDataEntity( + questionDetail?.id ?: "", + SyncFieldConstants.IS_FOLLOWER, + isFollow, + checkFieldEntity = true + ) + ) + EventBus.getDefault().post(EBUserFollow(targetUserId, isFollow)) + } + + override fun onFailure(e: HttpException?) { + super.onFailure(e) + Utils.toast(getApplication(), R.string.loading_failed_hint) + } + }) } fun moderatorsHideQuestion() { val me = questionDetail?.me ?: return mApi.moderatorsHideQuestion(UserManager.getInstance().userId, questionId) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - if (me.moderatorPermissions.hideQuestion == Permissions.REPORTER) { - Utils.toast(getApplication(), "提交成功") - } else { - Utils.toast(getApplication(), "操作成功") - moderatorsHideLiveData.postValue(true) - mLoadStatusLiveData.setValue(LoadStatus.INIT_EMPTY) - } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response() { + override fun onResponse(response: ResponseBody?) { + if (me.isModerator) { + Utils.toast(getApplication(), "已隐藏") + } else { + Utils.toast(getApplication(), "已删除") } + moderatorsHideLiveData.postValue(true) + mLoadStatusLiveData.value = LoadStatus.INIT_EMPTY + } - override fun onFailure(e: HttpException?) { - if (e != null && e.code() == 403) { - val string = e.response().errorBody()?.string() - val errorJson = JSONObject(string) - val errorCode = errorJson.getInt("code") - if (errorCode == 403059) { - Utils.toast(getApplication(), "权限错误,请刷新后重试") - load(LoadType.REFRESH) - return - } + override fun onFailure(e: HttpException?) { + if (e != null && e.code() == 403) { + val string = e.response().errorBody()?.string() + val errorJson = JSONObject(string) + val errorCode = errorJson.getInt("code") + if (errorCode == 403059) { + Utils.toast(getApplication(), "权限错误,请刷新后重试") + load(LoadType.REFRESH) + return } - Utils.toast(getApplication(), R.string.post_failure_hint) } - }) + Utils.toast(getApplication(), R.string.post_failure_hint) + } + }) } @SuppressLint("CheckResult") @@ -168,51 +183,55 @@ class NewQuestionDetailViewModel(application: Application, questionId: String = mApi.favoriteQuestion(UserManager.getInstance().userId, questionId) } single.compose(singleToMain()) - .subscribe(object : BiResponse() { - override fun onSuccess(data: ResponseBody) { - if (questionDetail?.me?.isQuestionFavorite == true) { - ToastUtils.showToast("取消收藏") - } else { - ToastUtils.showToast("收藏成功") - } - questionDetail?.me?.isQuestionFavorite = questionDetail?.me?.isQuestionFavorite != true - favoriteLiveData.postValue(true) + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { + if (questionDetail?.me?.isQuestionFavorite == true) { + ToastUtils.showToast("取消收藏") + } else { + ToastUtils.showToast("收藏成功") } - }) + questionDetail?.me?.isQuestionFavorite = + questionDetail?.me?.isQuestionFavorite != true + favoriteLiveData.postValue(true) + } + }) } fun postSolveQuestion(isSolve: Boolean) { if (questionDetail == null) return val body = json { "finish" to isSolve }.toRequestBody() mApi.solveQuestion(questionDetail?.id ?: "", body) - .compose(observableToMain()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - super.onResponse(response) - questionDetail?.apply { - finish = isSolve - updateDetailLiveData.postValue(this) - } + .compose(observableToMain()) + .subscribe(object : Response() { + override fun onResponse(response: ResponseBody?) { + super.onResponse(response) + questionDetail?.apply { + finish = isSolve + updateDetailLiveData.postValue(this) } + } - override fun onFailure(e: HttpException?) { - super.onFailure(e) - ToastUtils.showToast("操作失败") - } - }) + override fun onFailure(e: HttpException?) { + super.onFailure(e) + ToastUtils.showToast("操作失败") + } + }) } - class Factory(private val application: Application, - private val questionId: String = "", - private val communityId: String = "", - private val answerId: String = "") : ViewModelProvider.NewInstanceFactory() { + class Factory( + private val application: Application, + private val questionId: String = "", + private val communityId: String = "", + private val answerId: String = "" + ) : ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { return NewQuestionDetailViewModel( - application = application, - questionId = questionId, - communityId = communityId, - answerId = answerId) as T + application = application, + questionId = questionId, + communityId = communityId, + answerId = answerId + ) as T } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailActivity.kt index f82c1b6f03..3bb98439f0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailActivity.kt @@ -39,13 +39,14 @@ class ForumVideoDetailActivity : BaseActivity() { companion object { const val VIDEO_PATCH_REQUEST = 100 - fun getIntent(context: Context, videoId: String): Intent { - return getIntent(context, videoId, false) + fun getIntent(context: Context, videoId: String, bbsId: String): Intent { + return getIntent(context, videoId, bbsId, false) } - fun getIntent(context: Context, videoId: String, scrollToComment: Boolean = false): Intent { + fun getIntent(context: Context, videoId: String, bbsId: String, scrollToComment: Boolean = false): Intent { val intent = Intent(context, ForumVideoDetailActivity::class.java) intent.putExtra(EntranceUtils.KEY_VIDEO_ID, videoId) + intent.putExtra(EntranceUtils.KEY_BBS_ID, bbsId) if (scrollToComment) { intent.putExtra(PAGE_INDEX, 1) } diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt index 0b96bcfd25..08291f9a38 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/detail/ForumVideoDetailFragment.kt @@ -68,6 +68,7 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { private var mMoreMenuItem: MenuItem? = null private var mForumVideoEntity: ForumVideoEntity? = null private var mVideoId = "" + private var mBbsId = "" private var mVideoDescFragment: VideoDescFragment? = null private var mVideoCommentFragment: VideoCommentFragment? = null private var mIsPortrait = false @@ -97,7 +98,8 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { mVideoDescFragment = this }) fragments.add(VideoCommentFragment().apply { - arguments = bundleOf(EntranceUtils.KEY_VIDEO_ID to mVideoId) + arguments = + bundleOf(EntranceUtils.KEY_VIDEO_ID to mVideoId, EntranceUtils.KEY_BBS_ID to mBbsId) mVideoCommentFragment = this }) } @@ -109,6 +111,7 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { override fun onCreate(savedInstanceState: Bundle?) { mVideoId = arguments?.getString(EntranceUtils.KEY_VIDEO_ID) ?: "" + mBbsId = arguments?.getString(EntranceUtils.KEY_BBS_ID) ?: "" super.onCreate(savedInstanceState) NewLogUtils.logVideoDetailClick("view_video_detail") } @@ -222,8 +225,12 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { mBinding.reuseLoading.root.visibility = View.GONE mSkeleton?.hide() } - mViewModel.deleteLiveData.observe(viewLifecycleOwner, Observer { - ToastUtils.showToast("删除成功") + mViewModel.deleteLiveData.observe(viewLifecycleOwner, { + if (mForumVideoEntity?.me?.isModerator == true) { + ToastUtils.showToast("已隐藏") + } else { + ToastUtils.showToast("已删除") + } EventBus.getDefault().post(EBDeleteDetail(mViewModel.videoId)) requireActivity().finish() }) @@ -563,7 +570,7 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { if (mForumVideoEntity?.user?.id != UserManager.getInstance().userId) { entities.add(MenuItemEntity("投诉", R.drawable.icon_gamedetail_copyright)) } - if (mForumVideoEntity?.me!!.isModerator && mForumVideoEntity?.status == "pass") { + if (mForumVideoEntity?.me!!.isModerator && mForumVideoEntity?.user?.id != UserManager.getInstance().userId && mForumVideoEntity?.status == "pass") { val isEnable = mForumVideoEntity?.getSimplifyChoicenessStatus() != "pass" entities.add( @@ -574,6 +581,8 @@ class ForumVideoDetailFragment : BaseFragment_TabLayout() { isEnable = isEnable ) ) + } + if (mForumVideoEntity?.me!!.isModerator && mForumVideoEntity?.status == "pass") { entities.add(MenuItemEntity("修改活动标签", R.drawable.icon_more_panel_modify_label)) } if (mForumVideoEntity?.me!!.isModerator) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt index c99fe9b1ef..e2d58a6bc0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt @@ -30,6 +30,7 @@ class VideoCommentFragment : LazyListFragment { return mAdapter ?: VideoCommentAdapter(requireContext(), mListViewModel, mEntrance).apply { @@ -49,7 +50,7 @@ class VideoCommentFragment : LazyListFragment() @@ -42,9 +43,10 @@ class VideoCommentViewModel(application: Application, videoId: String) : BaseCom deleteCommentLiveData.postValue(true) } - class Factory(private val videoId: String) : ViewModelProvider.NewInstanceFactory() { + class Factory(private val videoId: String, private val bbsId: String) : + ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { - return VideoCommentViewModel(HaloApp.getInstance().application, videoId) as T + return VideoCommentViewModel(HaloApp.getInstance().application, videoId, bbsId) as T } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/detail/desc/VideoDescAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/video/detail/desc/VideoDescAdapter.kt index 0e2a9db2b1..9c15e1a682 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/detail/desc/VideoDescAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/detail/desc/VideoDescAdapter.kt @@ -83,7 +83,7 @@ class VideoDescAdapter(context: Context, val mVideoDetailViewModel: ForumVideoDe holder.binding.video = recommendVideo holder.binding.root.setOnClickListener { recommendVideo?.let { - mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, it.id)) + mContext.startActivity(ForumVideoDetailActivity.getIntent(mContext, it.id,it.bbs?.id ?: "")) } val bbsType = if (mViewModel.topVideoDetail?.bbs?.type == "game_bbs") "游戏论坛" else "综合论坛" NewLogUtils.logVideoDetailClick("click_video_detail_for_you_video", diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt index 0354af5f3c..ac6d8052d3 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt @@ -547,6 +547,7 @@ class VideoPublishFragment : NormalFragment(), KeyboardHeightObserver { } else if (mViewModel.type == BbsType.OFFICIAL_BBS.value) { if (mViewModel.gameEntity == null) { mBinding.chooseForumTv.text = "选择游戏" + mBinding.forumIconView.visibility = View.GONE } else { mBinding.chooseForumTv.text = mViewModel.gameEntity?.name mBinding.forumIconView.displayGameIcon( @@ -589,7 +590,7 @@ class VideoPublishFragment : NormalFragment(), KeyboardHeightObserver { val title = mBinding.title.text.toString() val des = mBinding.videoDes.text.toString() if (mVideoFileEntity?.url.isNullOrEmpty()) return false - if (mViewModel.communityEntity == null) return false + if (mViewModel.videoPatch == null && mViewModel.communityEntity == null) return false if (title.isEmpty()) return false if (mViewModel.videoPatch != null && mViewModel.videoPatch?.title == title && mViewModel.videoPatch?.des == des) return false return true @@ -770,17 +771,17 @@ class VideoPublishFragment : NormalFragment(), KeyboardHeightObserver { toast("请填写标题") return } - if (!isDraft && !mBinding.originalTv.isChecked && !mBinding.reprintTv.isChecked) { + if (!isDraft && mViewModel.videoPatch == null && !mBinding.originalTv.isChecked && !mBinding.reprintTv.isChecked) { toast("请选择内容来源") return } - if (!isDraft && mViewModel.selectActivityLabelEntity != null && !mBinding.originalTv.isChecked) { + if (!isDraft && mViewModel.videoPatch == null && mViewModel.selectActivityLabelEntity != null && !mBinding.originalTv.isChecked) { toast("本次活动内容要求原创") return } - if (!isDraft && mBinding.reprintTv.isChecked && mBinding.reprintUrlTv.text.isEmpty()) { + if (!isDraft && mViewModel.videoPatch == null && mBinding.reprintTv.isChecked && mBinding.reprintUrlTv.text.isEmpty()) { toast("请填写转载来源") return } diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt index a3006c0d3e..04ca2fb5b5 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt @@ -62,14 +62,14 @@ class VideoPublishViewModel(application: Application) : AndroidViewModel(applica fun postContent(isDraft: Boolean, videoEntity: ForumVideoEntity, videoPath: String?) { when { - videoPatch != null -> { - patchVideo(JSONObject(GsonUtils.toJson(videoEntity)), videoEntity.id) - } isDraft -> { val draftData = JSONObject(videoEntity.toJson()).put("local_path", videoPath).toString() val body = RequestBody.create(MediaType.parse("application/json"), draftData) postDraft(body) } + videoPatch != null -> { + patchVideo(JSONObject(GsonUtils.toJson(videoEntity)), videoEntity.id) + } else -> { val requestJson = JSONObject(GsonUtils.toJson(videoEntity)) var videoHeight = 0 diff --git a/app/src/main/java/com/gh/gamecenter/receiver/InstallReceiver.java b/app/src/main/java/com/gh/gamecenter/receiver/InstallReceiver.java index d18dfa1c1b..69e48dc8bf 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/InstallReceiver.java +++ b/app/src/main/java/com/gh/gamecenter/receiver/InstallReceiver.java @@ -7,7 +7,6 @@ import android.content.Intent; import android.os.Bundle; import com.gh.base.fragment.BaseFragment_ViewPager; -import com.gh.common.AppExecutor; import com.gh.common.constant.Constants; import com.gh.common.util.DownloadNotificationHelper; import com.gh.common.util.EntranceUtils; @@ -45,49 +44,42 @@ public class InstallReceiver extends BroadcastReceiver { } updateNotification(downloadEntity); - DownloadEntity finalDownloadEntity = downloadEntity; - AppExecutor.getIoExecutor().execute(() -> { - if (PackageUtils.isInstallable(context, path)) { - AppExecutor.getUiExecutor().execute(() -> { - if (finalDownloadEntity != null) { - PackageInstaller.install(context, finalDownloadEntity); - } else { - PackageInstaller.install(context, false, path); - } - }); + if (PackageUtils.isCanLaunchSetup(context, path)) { + if (downloadEntity != null) { + PackageInstaller.install(context, downloadEntity); } else { - AppExecutor.getUiExecutor().execute(() -> { - if (RunningUtils.isRunning(context)) { - if (RunningUtils.isEqualsTop(context, DownloadManagerActivity.class.getName())) { - // 这里是指从后台返回到前台 前两个的是关键 - Intent intent2 = new Intent(); - intent2.setAction(Intent.ACTION_MAIN); - intent2.addCategory(Intent.CATEGORY_LAUNCHER); - intent2.setComponent(new ComponentName(context, DownloadManagerActivity.class)); - intent2.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - context.startActivity(intent2); - - EventBus.getDefault().post(new EBMiPush("plugin_install", path)); - } else { - Intent intent2 = new Intent(context, DownloadManagerActivity.class); - intent2.putExtra(BaseFragment_ViewPager.ARGS_INDEX, 0); - intent2.putExtra(EntranceUtils.KEY_PATH, path); - intent2.putExtra(EntranceUtils.KEY_ENTRANCE, "(安装跳转)"); - intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent2); - } - } else { - // 应用未在运行 - Bundle bundle = new Bundle(); - bundle.putString(KEY_TO, DownloadManagerActivity.TAG); - bundle.putInt(BaseFragment_ViewPager.ARGS_INDEX, 0); - bundle.putString(EntranceUtils.KEY_PATH, path); - bundle.putString(EntranceUtils.KEY_ENTRANCE, "(安装跳转)"); - context.startActivity(SplashScreenActivity.getSplashScreenIntent(context, bundle)); - } - }); + PackageInstaller.install(context, false, path); } - }); + } else { + if (RunningUtils.isRunning(context)) { + if (RunningUtils.isEqualsTop(context, DownloadManagerActivity.class.getName())) { + // 这里是指从后台返回到前台 前两个的是关键 + Intent intent2 = new Intent(); + intent2.setAction(Intent.ACTION_MAIN); + intent2.addCategory(Intent.CATEGORY_LAUNCHER); + intent2.setComponent(new ComponentName(context, DownloadManagerActivity.class)); + intent2.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + context.startActivity(intent2); + + EventBus.getDefault().post(new EBMiPush("plugin_install", path)); + } else { + Intent intent2 = new Intent(context, DownloadManagerActivity.class); + intent2.putExtra(BaseFragment_ViewPager.ARGS_INDEX, 0); + intent2.putExtra(EntranceUtils.KEY_PATH, path); + intent2.putExtra(EntranceUtils.KEY_ENTRANCE, "(安装跳转)"); + intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent2); + } + } else { + // 应用未在运行 + Bundle bundle = new Bundle(); + bundle.putString(KEY_TO, DownloadManagerActivity.TAG); + bundle.putInt(BaseFragment_ViewPager.ARGS_INDEX, 0); + bundle.putString(EntranceUtils.KEY_PATH, path); + bundle.putString(EntranceUtils.KEY_ENTRANCE, "(安装跳转)"); + context.startActivity(SplashScreenActivity.getSplashScreenIntent(context, bundle)); + } + } }); } 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 4b139792e8..80aa3ed59b 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 @@ -2600,6 +2600,12 @@ public interface ApiService { @POST("videos/{video_id}/comments/{comment_id}:inactivate") Single deleteVideoComment(@Path("video_id") String videoId, @Path("comment_id") String commentId); + /** + * 版主删除视频评论 + */ + @POST("communities/{community_id}/videos/{video_id}/comments/{comment_id}:hide") + Single moderatorsHideVideoComment(@Path("community_id") String communityId, @Path("video_id") String videoId, @Path("comment_id") String commentId); + /** * 获取已经预约成功的手机号码 */ diff --git a/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java b/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java index cbf327d454..d2bad101ae 100644 --- a/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java +++ b/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java @@ -11,6 +11,7 @@ import com.gh.common.constant.Config; import com.gh.common.util.EnergyTaskHelper; import com.gh.common.util.LogUtils; import com.gh.common.util.LoginHelper; +import com.gh.common.util.NewLogUtils; import com.gh.common.util.ShareUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBShare; @@ -77,6 +78,11 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler, WeC LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "success", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); EnergyTaskHelper.postEnergyTaskForShare(ShareUtils.shareEntrance.getName(), ShareUtils.resourceId, ShareUtils.shareEntity.getShareUrl()); + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(true); + } } else { if (baseResp instanceof SendAuth.Resp) { SendAuth.Resp resp = (SendAuth.Resp) baseResp; @@ -94,6 +100,11 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler, WeC resultString = getString(R.string.share_cancel_hint); LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "cancel", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(false); + } } else { resultString = "登录已取消"; } @@ -112,6 +123,11 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler, WeC resultString = "分享错误"; LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "fail", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); + if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || + ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { + NewLogUtils.logShareResult(false); + } } else { resultString = "登录错误"; } diff --git a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java index 620dfc567a..29cdbedfca 100644 --- a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java @@ -467,7 +467,10 @@ public class WebFragment extends LazyFragment implements IScrollable { public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); // title 有可能超出边界 - if (TextUtils.isEmpty(newsId) && TextUtils.isEmpty(mNavigationTitle) && !mIsTools && mAutoCompletionTitle) { + if (TextUtils.isEmpty(newsId) + && (TextUtils.isEmpty(mNavigationTitle) || mNavigationTitle.contains("http")) + && !mIsTools + && mAutoCompletionTitle) { mNavigationTitle = title; setNavigationTitle(mNavigationTitle); }