diff --git a/app/build.gradle b/app/build.gradle index 7713397910..235b10f6e0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,6 +82,7 @@ android { * All third-party appid/appkey */ buildConfigField "String", "API_HOST", "\"${API_HOST}\"" + buildConfigField "String", "NEW_API_HOST", "\"${NEW_API_HOST}\"" buildConfigField "String", "WECHAT_APPID", "\"${WECHAT_APPID}\"" buildConfigField "String", "WECHAT_SECRET", "\"${WECHAT_SECRET}\"" buildConfigField "String", "TENCENT_APPID", "\"${TENCENT_APPID}\"" @@ -171,6 +172,7 @@ android { versionNameSuffix "-debug" buildConfigField "String", "DEV_API_HOST", "\"${DEV_API_HOST}\"" + buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_DEV_API_HOST}\"" } // publish release host˛ @@ -178,12 +180,14 @@ android { dimension "env" buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\"" + buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_API_HOST}\"" } tea { dimension "env" buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\"" + buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_API_HOST}\"" manifestPlaceholders.put("APPLOG_SCHEME", "rangersapplog.byAx6uYt".toLowerCase()) } @@ -192,6 +196,7 @@ android { dimension "env" buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\"" + buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_API_HOST}\"" } } @@ -336,7 +341,7 @@ dependencies { implementation "org.nanohttpd:nanohttpd:${nanohttpd}" implementation "com.aliyun.openservices:aliyun-log-android-sdk:${aliyunLog}" - implementation "com.github.princekin-f:EasyFloat:${easyFloat}" + implementation "com.lg:easyfloat:${easyFloat}" implementation "io.github.florent37:shapeofview:${shapeOfView}" diff --git a/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt b/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt index e8b64d845f..c6bee0a827 100644 --- a/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt +++ b/app/src/main/java/com/gh/base/GlobalActivityLifecycleObserver.kt @@ -71,7 +71,7 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks { override fun onActivityPaused(activity: Activity) { CurrentActivityHolder.activitySet.remove(activity) - FloatingBackViewManager.dismissBackView(activity) + FloatingBackViewManager.dismissBackView() if (HaloApp.isUserAcceptPrivacyPolicy(activity)) { DataUtils.onPause(activity) diff --git a/app/src/main/java/com/gh/common/DefaultJsApi.kt b/app/src/main/java/com/gh/common/DefaultJsApi.kt index 3d766a8d23..9df02e8661 100644 --- a/app/src/main/java/com/gh/common/DefaultJsApi.kt +++ b/app/src/main/java/com/gh/common/DefaultJsApi.kt @@ -14,10 +14,7 @@ import com.gh.common.loghub.LoghubUtils import com.gh.common.tracker.Tracker import com.gh.common.util.* import com.gh.common.view.dsbridge.CompletionHandler -import com.gh.gamecenter.BuildConfig -import com.gh.gamecenter.ImageViewerActivity -import com.gh.gamecenter.LoginActivity -import com.gh.gamecenter.WebActivity +import com.gh.gamecenter.* import com.gh.gamecenter.energy.EnergyCenterActivity import com.gh.gamecenter.energy.EnergyHouseActivity import com.gh.gamecenter.entity.Badge @@ -397,6 +394,20 @@ class DefaultJsApi(var context: Context) { runOnUiThread { DirectUtils.directToFullScreenWebPage(context, url.toString(), true) } } + @JavascriptInterface + fun startGameCollectionSquareBrowseTask(event: Any) { + val browseTimeEvent = event.toString().toObject() ?: BrowseTaskEvent() + GameCollectionSquareBrowseTaskHelper.enableBrowseTimeCount( + browseTimeEvent.timeout.toInt(), + browseTimeEvent.isFinished == "true" + ) + } + + @JavascriptInterface + fun checkUpdateGhzs(msg: Any) { + context.startActivity(AboutActivity.getIntent(context, true)); + } + @Keep internal data class ImageEvent(var imageList: ArrayList = arrayListOf(), var position: Int = 0) @@ -411,4 +422,7 @@ class DefaultJsApi(var context: Context) { @Keep internal data class LogEvent(var jsonString: String = "", var logStore: String = "") + + @Keep + internal data class BrowseTaskEvent(var timeout: String = "", var isFinished: String = "") } diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index a49da99b44..e6f14572d5 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -18,6 +18,7 @@ import com.gh.common.util.DirectUtils.directToQa import com.gh.common.util.GsonUtils.gson import com.gh.gamecenter.* import com.gh.gamecenter.entity.* +import com.gh.gamecenter.gamecollection.publish.GameCollectionEditActivity import com.gh.gamecenter.qa.BbsType import com.gh.gamecenter.qa.video.publish.VideoPublishActivity import com.gh.gamecenter.subject.SubjectActivity @@ -375,11 +376,18 @@ object DefaultUrlHandler { } } - EntranceUtils.HOST_GAME_COLLECTION_DETAIL -> { DirectUtils.directToGameCollectionDetail(context, id, entrance) } + EntranceUtils.HOST_GAME_COLLECTION_SQUARE -> { + DirectUtils.directToGameCollectionSquare(context, entrance) + } + + EntranceUtils.HOST_GAME_COLLECTION_EDIT -> { + context.startActivity(GameCollectionEditActivity.getIntent(context, entrance)) + } + else -> DialogHelper.showUpgradeDialog(context) } return true diff --git a/app/src/main/java/com/gh/common/constant/Config.java b/app/src/main/java/com/gh/common/constant/Config.java index 67c0a529e6..6ff19a4df8 100644 --- a/app/src/main/java/com/gh/common/constant/Config.java +++ b/app/src/main/java/com/gh/common/constant/Config.java @@ -38,6 +38,7 @@ public class Config { // 这个 API_HOST 在测试包里会随着选择的环境切换,正式包里会一直保持正式 host public static final String API_HOST = EnvHelper.getHost(); + public static final String NEW_API_HOST = EnvHelper.getNewHost(); /** * 需要配置的请使用{@link PreferenceManager#getDefaultSharedPreferences(Context)} 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 a4bc25e827..49d1935208 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -357,6 +357,10 @@ public class Constants { public static final String GAME_COLLECTION_SHARE_ADDRESS_DEV = "https://dev-and-static.ghzs.com/web/game_collection/index.html#/?from=ghzs"; public static final String GAME_COLLECTION_SHARE_ADDRESS = "https://and-static.ghzs.com/web/game_collection/index.html#/?from=ghzs"; + // 游戏单活动分享链接 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638 + public static final String GAME_COLLECTION_ACTIVITY_ADDRESS_DEV = "https://dev-and-static.ghzs.com/web/ghzs_activity/haoyouUnlock.html"; + public static final String GAME_COLLECTION_ACTIVITY_ADDRESS = "https://and-static.ghzs.com/web/ghzs_activity/haoyouUnlock.html"; + // 青少年模式找回密码 public static final String TEEN_MODE_RESET_PASSWORD = "https://resource.ghzs.com/page/privacy_policies/help_password.html"; 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 ec744161fc..ea9131f5ef 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -97,6 +97,8 @@ public class EntranceUtils { public static final String HOST_HELP_DETAIL = "help_detail"; public static final String HOST_HELP_SUGGESTION = "help_suggestion"; public static final String HOST_GAME_COLLECTION_DETAIL = "game_collection_detail"; + public static final String HOST_GAME_COLLECTION_SQUARE = "game_collection_square"; + public static final String HOST_GAME_COLLECTION_EDIT = "game_collection_edit"; public static final String KEY_DATA = "data"; public static final String KEY_MESSAGE = "message"; public static final String KEY_MESSAGE_ID = "message_id"; diff --git a/app/src/main/java/com/gh/common/util/EnvHelper.kt b/app/src/main/java/com/gh/common/util/EnvHelper.kt index d097d187a9..41c22cfa56 100644 --- a/app/src/main/java/com/gh/common/util/EnvHelper.kt +++ b/app/src/main/java/com/gh/common/util/EnvHelper.kt @@ -24,6 +24,19 @@ object EnvHelper { } } + @JvmStatic + fun getNewHost(): String { + return if (!isTestEnv()) { + BuildConfig.NEW_API_HOST + } else { + if (isDevEnv) { + BuildConfig.NEW_DEV_API_HOST + } else { + BuildConfig.NEW_API_HOST + } + } + } + // 包体是否为测试包 @JvmStatic fun isTestEnv(): Boolean { 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 d3cd027587..e0cd351cd7 100644 --- a/app/src/main/java/com/gh/common/util/FloatingBackViewManager.kt +++ b/app/src/main/java/com/gh/common/util/FloatingBackViewManager.kt @@ -91,8 +91,8 @@ object FloatingBackViewManager { * 隐藏返回小浮窗 */ @JvmStatic - fun dismissBackView(activity: Activity) { - EasyFloat.dismiss(activity, FLOATING_BACK_VIEW) + fun dismissBackView() { + EasyFloat.dismiss(FLOATING_BACK_VIEW) } fun getType(): String { diff --git a/app/src/main/java/com/gh/common/util/GameCollectionSquareBrowseTaskHelper.kt b/app/src/main/java/com/gh/common/util/GameCollectionSquareBrowseTaskHelper.kt new file mode 100644 index 0000000000..f5969cb16b --- /dev/null +++ b/app/src/main/java/com/gh/common/util/GameCollectionSquareBrowseTaskHelper.kt @@ -0,0 +1,226 @@ +package com.gh.common.util + +import android.annotation.SuppressLint +import android.app.Activity +import android.app.Application +import android.os.Build +import android.os.Bundle +import android.view.Gravity +import android.widget.ImageView +import android.widget.ProgressBar +import com.gh.base.CurrentActivityHolder +import com.gh.base.GHThreadFactory +import com.gh.common.runOnUiThread +import com.gh.gamecenter.NormalActivity +import com.gh.gamecenter.R +import com.gh.gamecenter.gamecollection.detail.GameCollectionDetailActivity +import com.gh.gamecenter.gamecollection.square.GameCollectionSquareActivity +import com.gh.gamecenter.retrofit.BiResponse +import com.gh.gamecenter.retrofit.RetrofitManager +import com.halo.assistant.HaloApp +import com.lzf.easyfloat.EasyFloat +import com.lzf.easyfloat.enums.ShowPattern +import com.lzf.easyfloat.enums.SidePattern +import okhttp3.ResponseBody +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors + +/** + * 浏览游戏单广场任务辅助类 + */ +@SuppressLint("StaticFieldLeak") +object GameCollectionSquareBrowseTaskHelper { + + const val KEY_IS_FORM_BROWSE_TASK = "is_from_browse_task" + private const val FLOATING_SQUARE_BROWSE_TASK_VIEW = "floating_square_browse_task_view" + + private var mBrowseTimeCount = 0 + private var mIsBrowseTimeCountEnabled = false // 游戏单广场浏览时间统计是否开启 + private var mBrowseTimeTimeout = 15 + private var mIsBrowseTimeCountValid = false // 游戏单广场浏览时间统计是否有效 + private var mBrowsePro: ProgressBar? = null + private var mIsFinished = false + private var mNeedShowFloatView = false + private var mIsFirstEnterSquare = true + + private val mThreadService: ExecutorService by lazy { + Executors.newSingleThreadExecutor(GHThreadFactory("BROWSE_SQUARE_THREAD")) + } + + private val mActivityLifecycleCallbacks by lazy { + object : Application.ActivityLifecycleCallbacks { + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {} + override fun onActivityStopped(activity: Activity) {} + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} + override fun onActivityStarted(activity: Activity) {} + + override fun onActivityResumed(activity: Activity) { + if (isTopActivityGameCollectionRelated(activity) && mIsBrowseTimeCountEnabled) { + resumeTimeCount() + } else if (isGameCollectionSquare(activity) && mNeedShowFloatView) { + showOrUpdateFloatView(activity, mBrowseTimeTimeout) + } + } + + override fun onActivityPaused(activity: Activity) { + if (isTopActivityGameCollectionRelated(activity) && mIsBrowseTimeCountEnabled) { + pauseTimeCount() + } + if (isGameCollectionSquare(activity)) { + dismissFloatView() + } + } + + override fun onActivityDestroyed(activity: Activity) { + if (isGameCollectionSquare(activity) && mIsBrowseTimeCountEnabled) { + disableBrowseTimeCount() + unregisterActivityLifecycleCallbacks() + } + } + } + } + + fun enableBrowseTimeCount(timeout: Int, isFinished: Boolean) { + mIsBrowseTimeCountEnabled = true + mBrowseTimeTimeout = timeout + mIsFinished = isFinished + mNeedShowFloatView = true + mIsFirstEnterSquare = true + + resumeTimeCount() + + HaloApp.getInstance().registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks) + } + + fun disableBrowseTimeCount() { + mBrowseTimeCount = 0 + mIsBrowseTimeCountEnabled = false + mBrowsePro = null + mIsFinished = false + mIsFirstEnterSquare = true + } + + fun unregisterActivityLifecycleCallbacks() { + mNeedShowFloatView = false + HaloApp.getInstance().unregisterActivityLifecycleCallbacks(mActivityLifecycleCallbacks) + } + + fun resumeTimeCount() { + if (!mIsBrowseTimeCountEnabled) return + + mIsBrowseTimeCountValid = true + + mThreadService.execute { + while (mIsBrowseTimeCountEnabled && mIsBrowseTimeCountValid) { + val topActivity = CurrentActivityHolder.getCurrentActivity() ?: continue + if (isGameCollectionSquare(topActivity, false) && mIsFirstEnterSquare) { + mIsFirstEnterSquare = false + topActivity.intent.putExtra(KEY_IS_FORM_BROWSE_TASK, true) + } + if (isTopActivityGameCollectionRelated(topActivity)) { + tryWithDefaultCatch { + showOrUpdateFloatView(topActivity, if (mIsFinished) mBrowseTimeTimeout else mBrowseTimeCount) + if (mIsFinished) { + disableBrowseTimeCount() + } else { + mBrowseTimeCount++ + if (mBrowseTimeCount >= mBrowseTimeTimeout) { + showOrUpdateFloatView(topActivity, mBrowseTimeTimeout) + postBrowseFinish() + } + } + } + } + Thread.sleep(1000) + } + } + } + + fun pauseTimeCount() { + if (!mIsBrowseTimeCountEnabled) return + + mIsBrowseTimeCountValid = false + } + + // 从任务跳转的游戏单广场/此游戏单广场进入的游戏单详情都计时 + private fun isTopActivityGameCollectionRelated(activity: Activity): Boolean { + return isGameCollectionSquare(activity) + || (activity is GameCollectionDetailActivity + && activity.intent.getBundleExtra(NormalActivity.NORMAL_FRAGMENT_BUNDLE)?.getBoolean(KEY_IS_FORM_BROWSE_TASK) == true) + } + + private fun isGameCollectionSquare(activity: Activity, checkIsFromTask: Boolean = true): Boolean { + return activity is GameCollectionSquareActivity + && (!checkIsFromTask || activity.intent.getBooleanExtra(KEY_IS_FORM_BROWSE_TASK, false)) + } + + private fun showOrUpdateFloatView(activity: Activity, time: Int) { + // 不支持 Android 4.1 的设备 + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN) return + + // 游戏单广场才显示FloatView + if (!isGameCollectionSquare(activity)) return + + runOnUiThread { + val isFinished = time == mBrowseTimeTimeout + val floatView = EasyFloat.getFloatView(FLOATING_SQUARE_BROWSE_TASK_VIEW) + if (floatView != null) { + if (mBrowsePro == null) { + mBrowsePro = floatView.findViewById(R.id.browsePro) + } + mBrowsePro?.progress = time + if (isFinished) { + floatView.findViewById(R.id.browsePic) + .setImageResource(R.drawable.pic_browse_square_finish) + } + } else { + EasyFloat.with(activity) + .setLayout(R.layout.layout_square_browse_task_float) + .setTag(FLOATING_SQUARE_BROWSE_TASK_VIEW) + .setAnimator(null) + .setGravity(Gravity.END.or(Gravity.CENTER_VERTICAL), 0, 0) + .setSidePattern(SidePattern.RIGHT) + .setShowPattern(ShowPattern.CURRENT_ACTIVITY) + .setDragEnable(false) + .registerCallback { + createResult { _, _, view -> + if (isFinished) { + view?.findViewById(R.id.browsePro)?.run { + max = mBrowseTimeTimeout + progress = mBrowseTimeTimeout + } + view?.findViewById(R.id.browsePic) + ?.setImageResource(R.drawable.pic_browse_square_finish) + } else { + view?.findViewById(R.id.browsePro)?.run { + mBrowsePro = this + max = mBrowseTimeTimeout + progress = 0 + } + view?.findViewById(R.id.browsePic) + ?.setImageResource(R.drawable.pic_browse_square) + } + } + } + .show() + } + } + } + + fun dismissFloatView() { + EasyFloat.dismiss(FLOATING_SQUARE_BROWSE_TASK_VIEW) + } + + @SuppressLint("CheckResult") + private fun postBrowseFinish() { + RetrofitManager.getInstance(HaloApp.getInstance()) + .newApi + .postGameCollectionTask("browse_game_list_square") + .compose(singleToMain()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { + disableBrowseTimeCount() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/LogUtils.java b/app/src/main/java/com/gh/common/util/LogUtils.java index 259493edfd..ee88336aa4 100644 --- a/app/src/main/java/com/gh/common/util/LogUtils.java +++ b/app/src/main/java/com/gh/common/util/LogUtils.java @@ -584,6 +584,27 @@ public class LogUtils { .postShareResult(body) .subscribeOn(Schedulers.io()) .subscribe(new EmptyResponse<>()); + + // 判断是否上报游戏单活动的"转发活动"任务 + postGameCollectionRepostActivityTaskCheck(url, shareResult); + } + + @SuppressLint("CheckResult") + public static void postGameCollectionRepostActivityTaskCheck(String url, String shareResult) { + if (!TextUtils.isEmpty(url) && "success".equals(shareResult)) { + String gameCollectionActivityUrl; + if (EnvHelper.isDevEnv()) { + gameCollectionActivityUrl = Constants.GAME_COLLECTION_ACTIVITY_ADDRESS_DEV; + } else { + gameCollectionActivityUrl = Constants.GAME_COLLECTION_ACTIVITY_ADDRESS; + } + if (url.contains(gameCollectionActivityUrl)) { + RetrofitManager.getInstance(HaloApp.getInstance().getApplication()).getNewApi() + .postGameCollectionTask("repost_activity") + .subscribeOn(Schedulers.io()) + .subscribe(new EmptyResponse<>()); + } + } } public static JSONObject getMetaObject() { diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index bb112c004e..fae1c87f5e 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -37,6 +37,7 @@ import static com.gh.common.util.EntranceUtils.HOST_COMMUNITY_QUESTION_LABEL_DET 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_GAME_COLLECTION_DETAIL; +import static com.gh.common.util.EntranceUtils.HOST_GAME_COLLECTION_SQUARE; import static com.gh.common.util.EntranceUtils.HOST_LIBAO; import static com.gh.common.util.EntranceUtils.HOST_QQ; import static com.gh.common.util.EntranceUtils.HOST_QQ_GROUP; @@ -394,6 +395,9 @@ public class SkipActivity extends BaseActivity { case HOST_GAME_COLLECTION_DETAIL: DirectUtils.directToGameCollectionDetail(this, path, ENTRANCE_BROWSER); break; + case HOST_GAME_COLLECTION_SQUARE: + DirectUtils.directToGameCollectionSquare(this, ENTRANCE_BROWSER, "", "", ""); + break; default: EntranceUtils.jumpActivity(this, new Bundle()); // 跳转至首页 return; 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 840cc3b4ce..18739f6753 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 @@ -122,7 +122,7 @@ class CommunityHomeFragment : LazyFragment() { 2 -> { NewLogUtils.logCommunityHomeEvent("click_activity_tab") FloatingBackViewManager.disableBackView() - FloatingBackViewManager.dismissBackView(requireActivity()) + FloatingBackViewManager.dismissBackView() } } }, 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 f3a5231989..ed1cb52eb4 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java @@ -494,7 +494,7 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable implem if (index != INDEX_BBS) { FloatingBackViewManager.disableBackView(); - FloatingBackViewManager.dismissBackView(requireActivity()); + FloatingBackViewManager.dismissBackView(); } SubjectRecommendEntity navBarEntity = mViewModel.getNavBar().getValue(); diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailActivity.kt index 8298502af8..f6ff9e6876 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailActivity.kt @@ -5,8 +5,10 @@ import android.content.Intent import android.os.Bundle import com.gh.common.util.DisplayUtils import com.gh.common.util.EntranceUtils +import com.gh.common.util.GameCollectionSquareBrowseTaskHelper import com.gh.gamecenter.NormalActivity import com.gh.gamecenter.R +import com.gh.gamecenter.gamecollection.square.GameCollectionSquareActivity class GameCollectionDetailActivity : NormalActivity() { @@ -32,6 +34,10 @@ class GameCollectionDetailActivity : NormalActivity() { bundle.putString(EntranceUtils.KEY_GAME_COLLECTION_ID, gameCollectionId) bundle.putBoolean(EntranceUtils.KEY_IS_FROM_SQUARE, isFromSquare) bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_COMMENT_AREA, isScrollToCommentArea) + if (context is GameCollectionSquareActivity) { + val isFromBrowseTask = context.intent.getBooleanExtra(GameCollectionSquareBrowseTaskHelper.KEY_IS_FORM_BROWSE_TASK, false) + bundle.putBoolean(GameCollectionSquareBrowseTaskHelper.KEY_IS_FORM_BROWSE_TASK, isFromBrowseTask) + } return getTargetIntent(context, GameCollectionDetailActivity::class.java, GameCollectionDetailFragment::class.java, bundle) } } diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt index 868d461f7c..da56ff808f 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt @@ -22,6 +22,7 @@ import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.qa.article.detail.CommentItemData import com.gh.gamecenter.qa.comment.base.BaseCommentViewModel import com.gh.gamecenter.retrofit.BiResponse +import com.gh.gamecenter.retrofit.EmptyResponse import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp @@ -68,6 +69,8 @@ open class GameCollectionDetailViewModel(application: Application, filterPos = (data.games?.size ?: 1) + 1 loadResultLiveData.postValue(LoadResult.SUCCESS) mergeData(mListLiveData.value) + + postGameCollectionTask("browse_game_list") } override fun onFailure(exception: Exception) { @@ -258,6 +261,8 @@ open class GameCollectionDetailViewModel(application: Application, @SuppressLint("CheckResult") fun postShareGameCollection() { + postGameCollectionTask("forward_share_game_list") + if (gameCollectionDetail == null) return mApi.shareGameCollection(gameCollectionId) .compose(singleToMain()) @@ -361,6 +366,15 @@ open class GameCollectionDetailViewModel(application: Application, }) } + @SuppressLint("CheckResult") + private fun postGameCollectionTask(event: String) { + RetrofitManager.getInstance(HaloApp.getInstance()) + .newApi + .postGameCollectionTask(event) + .compose(singleToMain()) + .subscribe(EmptyResponse()) + } + fun getStarText(): String { val favoriteCount = gameCollectionDetail?.count?.favorite ?: 0 return when { diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareActivity.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareActivity.kt index d61d327fba..3b25e841ed 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareActivity.kt @@ -3,6 +3,7 @@ package com.gh.gamecenter.gamecollection.square import android.os.Bundle import com.gh.base.BaseActivity import com.gh.common.util.DisplayUtils +import com.gh.common.util.GameCollectionSquareBrowseTaskHelper import com.gh.gamecenter.R class GameCollectionSquareActivity : BaseActivity() { @@ -20,4 +21,14 @@ class GameCollectionSquareActivity : BaseActivity() { ?: GameCollectionSquareFragment().with(intent.extras) supportFragmentManager.beginTransaction().replace(R.id.placeholder, containerFragment, GameCollectionSquareFragment::class.java.simpleName).commitAllowingStateLoss() } + + override fun finish() { + GameCollectionSquareBrowseTaskHelper.run { + if (intent.getBooleanExtra(KEY_IS_FORM_BROWSE_TASK, false)){ + disableBrowseTimeCount() + unregisterActivityLifecycleCallbacks() + } + } + super.finish() + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt index 7a652d6874..070729fadc 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/square/GameCollectionSquareFragment.kt @@ -7,7 +7,6 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils -import android.view.animation.TranslateAnimation import android.widget.ImageView import android.widget.RelativeLayout import android.widget.TextView diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java b/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java index c44c958ae6..33951afdde 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java @@ -6,7 +6,6 @@ import com.chuckerteam.chucker.api.ChuckerCollector; import com.chuckerteam.chucker.api.ChuckerInterceptor; import com.chuckerteam.chucker.api.RetentionManager; import com.gh.common.constant.Config; -import com.gh.common.util.EnvHelper; import com.gh.gamecenter.Injection; import com.gh.gamecenter.retrofit.service.ApiService; @@ -32,6 +31,7 @@ public class RetrofitManager { private static final byte[] LOCK = new byte[0]; private final ApiService mApiService; private final ApiService mUploadApiService; + private final ApiService mNewApiService; public static T provideService(OkHttpClient client, String url, Class serviceCls) { return new Retrofit.Builder() @@ -45,6 +45,7 @@ public class RetrofitManager { OkHttpClient okHttpNormalConfig = getOkHttpConfig(context, 0, 2); mApiService = provideService(okHttpNormalConfig, Config.API_HOST, ApiService.class); mUploadApiService = provideService(getOkHttpConfig(context, UPLOAD_CALL_TIME_OUT, 1), Config.API_HOST, ApiService.class); + mNewApiService = provideService(okHttpNormalConfig, Config.NEW_API_HOST, ApiService.class); } private OkHttpClient getOkHttpConfig(Context context, int callTimeout, int maxRetryCount) { @@ -81,4 +82,8 @@ public class RetrofitManager { public ApiService getUploadApi() { return mUploadApiService; } + + public ApiService getNewApi() { + return mNewApiService; + } } 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 2f0a2e7d1c..b3b0b4e1d1 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 @@ -3426,4 +3426,10 @@ public interface ApiService { */ @DELETE("api_go/game_list/{game_list_id}/comment/{comment_id}") Observable deleteGameCollectionComment(@Path("game_list_id") String gameCollectionId, @Path("comment_id") String commentId); + + /** + * 游戏单活动上报任务 + */ + @POST("lottery/incr-progress/{task_event}") + Single postGameCollectionTask(@Path("task_event") String event); } \ No newline at end of file diff --git a/app/src/main/res/drawable-xxxhdpi/pic_browse_square.webp b/app/src/main/res/drawable-xxxhdpi/pic_browse_square.webp new file mode 100644 index 0000000000..155101db54 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/pic_browse_square.webp differ diff --git a/app/src/main/res/drawable-xxxhdpi/pic_browse_square_finish.webp b/app/src/main/res/drawable-xxxhdpi/pic_browse_square_finish.webp new file mode 100644 index 0000000000..343f83f015 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/pic_browse_square_finish.webp differ diff --git a/app/src/main/res/drawable/bg_browse_square_progress.xml b/app/src/main/res/drawable/bg_browse_square_progress.xml new file mode 100644 index 0000000000..4757878588 --- /dev/null +++ b/app/src/main/res/drawable/bg_browse_square_progress.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/progressbar_browse_square_style.xml b/app/src/main/res/drawable/progressbar_browse_square_style.xml new file mode 100644 index 0000000000..f56cb17c0a --- /dev/null +++ b/app/src/main/res/drawable/progressbar_browse_square_style.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_square_browse_task_float.xml b/app/src/main/res/layout/layout_square_browse_task_float.xml new file mode 100644 index 0000000000..8c087d2431 --- /dev/null +++ b/app/src/main/res/layout/layout_square_browse_task_float.xml @@ -0,0 +1,32 @@ + + + + + + + + + diff --git a/dependencies.gradle b/dependencies.gradle index 1c8902ba2b..a8d83c64cc 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -110,7 +110,7 @@ ext { apkParser = "v2.6.10" nanohttpd = "2.3.1" aliyunLog = "2.5.14" - easyFloat = "1.3.4" + easyFloat = "2.0.4" shapeOfView = "1.4.7" splitties = "3.0.0" diff --git a/gradle.properties b/gradle.properties index b8bc5b1866..04f32aa994 100644 --- a/gradle.properties +++ b/gradle.properties @@ -53,6 +53,8 @@ QUICK_LOGIN_APPKEY=002BAABA2C078342DA33BEAB0A4C6A25 # hosts DEV_API_HOST=https\://dev-and-api.ghzs.com/v5d5d0/ API_HOST=https\://and-api.ghzs.com/v5d5d0/ +NEW_DEV_API_HOST=https\://dev-app-api.ghzs.com/ +NEW_API_HOST=https\://app-api.ghzs.com/ android.useAndroidX=true android.enableJetifier=true