From 8389041379240ee67b683bfff6e4154dfe47095c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=A8?= Date: Fri, 27 Dec 2024 13:49:29 +0800 Subject: [PATCH 01/21] fix:https://sentry.shanqu.cc/organizations/lightgame/issues/421826/?project=22 --- .../common/dialog/WechatBindingFailedDialogFragment.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/gh/common/dialog/WechatBindingFailedDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/WechatBindingFailedDialogFragment.kt index fa914437da..b4686edf2e 100644 --- a/app/src/main/java/com/gh/common/dialog/WechatBindingFailedDialogFragment.kt +++ b/app/src/main/java/com/gh/common/dialog/WechatBindingFailedDialogFragment.kt @@ -17,7 +17,7 @@ import com.gh.gamecenter.common.entity.ErrorEntity import com.gh.gamecenter.core.utils.CurrentActivityHolder import com.gh.gamecenter.core.utils.DisplayUtils import com.gh.gamecenter.databinding.DialogWechatBindingFailedBinding -import com.gh.gamecenter.login.user.UserRepository +import com.gh.gamecenter.login.user.UserManager import com.lightgame.utils.Utils class WechatBindingFailedDialogFragment : BaseDialogFragment() { @@ -48,10 +48,10 @@ class WechatBindingFailedDialogFragment : BaseDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - UserRepository.getInstance().loginUserInfo.observe(viewLifecycleOwner) { - currentUserId = it.data.getShortUserId() - binding.tvCurrentName.text = it.data.name - binding.ivCurrentAvatar.displayAvatar(it.data.icon) + UserManager.getInstance().userInfoEntity?.let { + currentUserId = it.getShortUserId() + binding.tvCurrentName.text = it.name ?: "" + binding.ivCurrentAvatar.displayAvatar(it.icon) binding.tvUserId.text = getString(R.string.user_id, currentUserId) } From 98356a7dd7e87768e7450fbaa578b0ab105a76c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E7=BB=B4?= Date: Fri, 27 Dec 2024 13:55:18 +0800 Subject: [PATCH 02/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DViewStub?= =?UTF-8?q?=E5=81=B6=E5=8F=91=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98=20https:?= =?UTF-8?q?//sentry.shanqu.cc/organizations/lightgame/issues/423818/=3Fpro?= =?UTF-8?q?ject=3D22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/gamecenter/common/base/fragment/LazyFragment.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt b/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt index a114d58be3..1eaf426636 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt @@ -66,7 +66,11 @@ abstract class LazyFragment : BaseLazyFragment() { } else { mViewStub?.layoutResource = getRealLayoutId() mViewStub?.setOnInflateListener { _, inflatedView -> onRealLayoutInflated(inflatedView) } - mViewStub?.inflate()?.let { mCachedView = it } + if (mViewStub?.parent != null) { + mViewStub?.inflate()?.let { mCachedView = it } + } else { + mViewStub?.visibility = View.VISIBLE + } } } From 8dfb1644a893990712e90c1002d4c3b652dbc8e9 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Tue, 7 Jan 2025 17:48:53 +0800 Subject: [PATCH 03/21] =?UTF-8?q?fix:=20=E7=99=BB=E5=BD=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98=20https://jira.sh?= =?UTF-8?q?anqu.cc/browse/GHZSCY-7340?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/gamecenter/login/user/UserRepository.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module_login/src/main/java/com/gh/gamecenter/login/user/UserRepository.java b/module_login/src/main/java/com/gh/gamecenter/login/user/UserRepository.java index 2221198106..f1baeb06ed 100644 --- a/module_login/src/main/java/com/gh/gamecenter/login/user/UserRepository.java +++ b/module_login/src/main/java/com/gh/gamecenter/login/user/UserRepository.java @@ -580,8 +580,9 @@ public class UserRepository { @Override public void onApiFailure(ApiResponse e) { super.onApiFailure(e); - mLoginObsResponseUserInfo.postValue(e); if (loginTag != null) { + mLoginObsResponseUserInfo.postValue(e); + IErrorHelperProvider errorHelper = (IErrorHelperProvider) ARouter.getInstance().build(RouteConsts.provider.errorHelper).navigation(); if (errorHelper != null) { errorHelper.handleLoginError(mContext, e.getHttpException(), loginTag.toChinese(), false); From 21f4a398d55226fa911aee23537b7bb33ab41d75 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Thu, 9 Jan 2025 09:45:22 +0800 Subject: [PATCH 04/21] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E8=B6=8A=E7=95=8C=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20https://sentry.shanqu.cc/organizations/lightgame/issues/4089?= =?UTF-8?q?04?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/gh/common/util/PackageUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 976da13a9a..e7280a1eb1 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -301,7 +301,7 @@ public class PackageUtils { Signature[] signatures = packageInfo.signatures; // 使用幸运破解器破解安卓签名认证可能会出现不用签名也能装的情况,这里有可能是空的 - if (signatures[0] != null) { + if (signatures.length > 0 && signatures[0] != null) { return parseSignature(signatures[0].toByteArray()); } else { return new String[]{null, null}; From dd12b103be2ff5f72fa0dc35516b69e9f91bcb4d Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Thu, 9 Jan 2025 09:59:32 +0800 Subject: [PATCH 05/21] =?UTF-8?q?fix:=20=E6=8D=95=E6=8A=93=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5=E6=B8=B8=E6=88=8F=E5=90=AF=E5=8A=A8=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=9A=84=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98=20https://sentry.?= =?UTF-8?q?shanqu.cc/organizations/lightgame/issues/406179?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/util/PackageLauncher.kt | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/gh/common/util/PackageLauncher.kt b/app/src/main/java/com/gh/common/util/PackageLauncher.kt index b89bc9a084..a621a6bed3 100644 --- a/app/src/main/java/com/gh/common/util/PackageLauncher.kt +++ b/app/src/main/java/com/gh/common/util/PackageLauncher.kt @@ -81,28 +81,11 @@ object PackageLauncher { gameEntity: GameEntity? = null, packageName: String? ) { - if (packageName.isNullOrEmpty()) { ToastUtils.toast("启动失败") return } - // 获取 GameInstall 实体,用于记录启动日志用 - val gameInstall = if (gameEntity != null) { - GameInstall.transformGameInstall(gameEntity, packageName) - } else { - PackagesManager.getInstalledList().find { it.packageName == packageName } - } - - if (gameInstall != null) { - NewFlatLogUtils.logGameLaunch( - gameId = gameInstall.id ?: "unknown", - gameName = gameInstall.name ?: "unknown", - gameCategory = gameInstall.category ?: "unknown", - downloadStatus = if (gameInstall.downloadStatus == "demo") "试玩" else "下载" - ) - } - try { val intent = context.applicationContext.packageManager.getLaunchIntentForPackage(packageName) if (intent != null) { @@ -113,6 +96,26 @@ object PackageLauncher { } catch (e: Exception) { ToastUtils.toast( "启动失败") } + + try { + // 获取 GameInstall 实体,用于记录启动日志用 + val gameInstall = if (gameEntity != null) { + GameInstall.transformGameInstall(gameEntity, packageName) + } else { + PackagesManager.getInstalledList().find { it.packageName == packageName } + } + + if (gameInstall != null) { + NewFlatLogUtils.logGameLaunch( + gameId = gameInstall.id ?: "unknown", + gameName = gameInstall.name ?: "unknown", + gameCategory = gameInstall.category ?: "unknown", + downloadStatus = if (gameInstall.downloadStatus == "demo") "试玩" else "下载" + ) + } + } catch (e: RuntimeException) { + // 都 DeadSystemException 了,还想啥日志上报 + } } } \ No newline at end of file From e770f8a3592c620d65871ffddd4fc40ec905eaa6 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Thu, 9 Jan 2025 11:49:38 +0800 Subject: [PATCH 06/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=AE=8C=E6=88=90=E5=90=8E=E6=9B=B4=E6=96=B0=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E4=BF=A1=E6=81=AF=E6=97=B6=E7=9A=84=E9=97=AA=E9=80=80?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20https://sentry.shanqu.cc/organizations/lig?= =?UTF-8?q?htgame/issues/395511?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packagehelper/PackageFilterManager.kt | 14 ++++++++++---- .../gamecenter/packagehelper/PackageRepository.kt | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt index a0ac7bae51..b7cc7d6b83 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt @@ -35,17 +35,21 @@ class PackageFilterManager { if (appendOnly) { // 添加因为异常而没能正常更新的包名列表 - finalPackageList.addAll(PackageRepository.mPendingPackageNameSet) + synchronized(PackageRepository.mPendingPackageNameSet) { + finalPackageList.addAll(PackageRepository.mPendingPackageNameSet) + } } RetrofitManager.getInstance() .newApi - .postInstalledAppList(packageList.toRequestBody()) + .postInstalledAppList(finalPackageList.toRequestBody()) .subscribeOn(Schedulers.io()) .subscribe(object : BiResponse() { override fun onSuccess(data: PackageFilter) { mPackageKey = data.key - PackageRepository.mPendingPackageNameSet.clear() + synchronized(PackageRepository.mPendingPackageNameSet) { + PackageRepository.mPendingPackageNameSet.removeAll(finalPackageList) + } val partialPackageList = arrayListOf() @@ -78,7 +82,9 @@ class PackageFilterManager { super.onFailure(exception) if (appendOnly) { - PackageRepository.mPendingPackageNameSet.addAll(packageList) + synchronized(PackageRepository.mPendingPackageNameSet) { + PackageRepository.mPendingPackageNameSet.addAll(finalPackageList) + } } else { if (exception is retrofit2.HttpException && exception.code() == 403) { // 403 代表 key 过期,需要重新获取 diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt index 35d4673fb9..b7644b7f73 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -85,7 +85,7 @@ object PackageRepository { _recentVaPlayedChanged.postValue(Unit) } val packageFilterManager = PackageFilterManager() - var mPendingPackageNameSet = hashSetOf() // 因遇到异常而等待下次操作更新的包名列表 + var mPendingPackageNameSet = Collections.synchronizedSet(hashSetOf()) // 因遇到异常而等待下次操作更新的包名列表 var mValidPackageNameSet = hashSetOf() // 已被收录的游戏包名列表 From f7cc906cc508e1f56e9c9ad8af2fbf67ba44676c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=90=9B=E9=99=B6?= Date: Thu, 9 Jan 2025 14:37:40 +0800 Subject: [PATCH 07/21] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=BC=80?= =?UTF-8?q?=E5=B1=8F=E5=B9=BF=E5=91=8A=E7=9A=84=E6=98=BE=E7=A4=BA=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E9=AB=98=E7=BA=BF=E7=A8=8B=E6=B1=A0=E7=9A=84=20core?= =?UTF-8?q?=20=E7=BA=BF=E7=A8=8B=E6=95=B0=EF=BC=8C=E9=99=90=E5=88=B6?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=BC=80=E5=B1=8F=E5=B9=BF=E5=91=8A=E7=9A=84?= =?UTF-8?q?=E8=A7=A6=E6=91=B8=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/ad/AdDelegateHelper.kt | 3 +- .../main/java/com/gh/ad/SplashAdVideoView.kt | 10 ++++ .../java/com/gh/gamecenter/MainActivity.java | 54 +++++++++++++------ .../gamecenter/wrapper/MainWrapperFragment.kt | 1 - app/src/main/res/layout/activity_main.xml | 6 +-- .../res/layout/piece_start_ad_container.xml | 4 +- .../com/gh/gamecenter/core/AppExecutor.kt | 2 +- 7 files changed, 56 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/gh/ad/AdDelegateHelper.kt b/app/src/main/java/com/gh/ad/AdDelegateHelper.kt index 6e55aa6755..8f28402071 100644 --- a/app/src/main/java/com/gh/ad/AdDelegateHelper.kt +++ b/app/src/main/java/com/gh/ad/AdDelegateHelper.kt @@ -593,12 +593,11 @@ object AdDelegateHelper { ) adImage.visibleIf(true) - ImageUtils.display(adImage, ad.img) + ImageUtils.displayWithoutMemoryCache(adImage, ad.img) if (ad.isImageType) { adVideo.visibleIf(false) } else { - adVideo.visibleIf(true) adVideo.startPlay(ad.video.url) } startAdContainer.setOnClickListener { diff --git a/app/src/main/java/com/gh/ad/SplashAdVideoView.kt b/app/src/main/java/com/gh/ad/SplashAdVideoView.kt index 3a9c430178..1b1bb35bfe 100644 --- a/app/src/main/java/com/gh/ad/SplashAdVideoView.kt +++ b/app/src/main/java/com/gh/ad/SplashAdVideoView.kt @@ -44,6 +44,16 @@ class SplashAdVideoView @JvmOverloads constructor( return R.layout.layout_splash_ad_video } + override fun touchSurfaceMoveFullLogic(absDeltaX: Float, absDeltaY: Float) { + // no nothing + } + + override fun onPrepared() { + super.onPrepared() + + visibility = VISIBLE + } + override fun onAutoCompletion() { setStateAndUi(CURRENT_STATE_AUTO_COMPLETE); diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 50560def57..7169b8e9b2 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -166,8 +166,13 @@ public class MainActivity extends BaseActivity { private final Handler handler = new Handler(); private boolean mShouldShowAd = false; // 是否显示广告 + private Bundle mTempSavedInstanceState; + private boolean mFragmentIsCreated = false; + @Override protected void onCreate(Bundle savedInstanceState) { + mTempSavedInstanceState = savedInstanceState; + mShouldShowAd = getIntent().getBooleanExtra(SHOW_AD, false) && savedInstanceState == null && !HaloApp.getInstance().isAlreadyUpAndRunning; HaloApp.getInstance().isAlreadyUpAndRunning = true; @@ -175,21 +180,12 @@ public class MainActivity extends BaseActivity { mMainWrapperViewModel = new ViewModelProvider(this, new MainWrapperViewModel.Factory(HaloApp.getInstance())) .get(MainWrapperViewModel.class); + DisplayUtils.transparentStatusBar(this); DisplayUtils.updateGlobalScreen(this); super.onCreate(savedInstanceState); setStatusBarColor(Color.TRANSPARENT); - Fragment fragmentFromFM = getSupportFragmentManager().findFragmentById(com.gh.gamecenter.selector.R.id.layout_activity_content); - - mMainWrapperFragment = fragmentFromFM != null ? (MainWrapperFragment) fragmentFromFM : new MainWrapperFragment(); - if (savedInstanceState != null) { - mMainWrapperFragment.setArguments(savedInstanceState); - } else if (getIntent() != null) { - mMainWrapperFragment.setArguments(getIntent().getExtras()); - } - replaceFragment(mMainWrapperFragment); - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); if (HaloApp.getInstance().isNewForThisVersion) { LunchType lunchType = HaloApp.getInstance().getLaunchType(); @@ -215,7 +211,6 @@ public class MainActivity extends BaseActivity { DataUtils.getGid(); } - mPackageViewModel = ViewModelProviders.of(this, new PackageViewModel.Factory()).get(PackageViewModel.class); final boolean containsErrorMsg = com.gh.gamecenter.common.constant.Config.isContainsErrorMsg(); @@ -273,6 +268,7 @@ public class MainActivity extends BaseActivity { if (mShouldShowAd) { showAd(); } else { + doInitMainFragment(mTempSavedInstanceState); hideTextAd(); hideSplashAd(); } @@ -328,6 +324,23 @@ public class MainActivity extends BaseActivity { CertificationSwitchHelper.getCertificationSwitch(); } + private void doInitMainFragment(Bundle savedInstanceState) { + if (mFragmentIsCreated) return; + + mTempSavedInstanceState = null; + Fragment fragmentFromFM = getSupportFragmentManager().findFragmentById(com.gh.gamecenter.selector.R.id.layout_activity_content); + + mMainWrapperFragment = fragmentFromFM != null ? (MainWrapperFragment) fragmentFromFM : new MainWrapperFragment(); + if (savedInstanceState != null) { + mMainWrapperFragment.setArguments(savedInstanceState); + } else if (getIntent() != null) { + mMainWrapperFragment.setArguments(getIntent().getExtras()); + } + replaceFragment(mMainWrapperFragment); + + mFragmentIsCreated = true; + } + @SuppressLint("CheckResult") private void getTeenagerMode() { RetrofitManager.getInstance() @@ -541,13 +554,21 @@ public class MainActivity extends BaseActivity { protected void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == COUNTDOWN_AD || msg.what == COUNTDOWN_SDK_AD) { - mCountdownCount++; int maxCount; + if (msg.what == COUNTDOWN_AD) { maxCount = mCountdownMaxCount; } else { maxCount = COUNTDOWN_SDK_MAX_COUNT; } + + // 读秒到一半的时候初始化 MainWrapperFragment + if (mCountdownCount == maxCount / 2) { + doInitMainFragment(mTempSavedInstanceState); + } + + mCountdownCount++; + if (maxCount < mCountdownCount) { AdDelegateHelper.INSTANCE.setShowingSplashAd(false); hideSplashAd(); @@ -633,10 +654,11 @@ public class MainActivity extends BaseActivity { ExtensionsKt.removeFromParent(startSdkAdIcpContainer, true); } - onSplashHidden(); + onAdHidden(); } - private void onSplashHidden() { + private void onAdHidden() { + doInitMainFragment(mTempSavedInstanceState); // 通知全局弹窗可以进行显示 AppExecutor.getUiExecutor().execute(GlobalPriorityChainHelper.INSTANCE::start); } @@ -854,7 +876,9 @@ public class MainActivity extends BaseActivity { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 && !mMainWrapperFragment.onHandleBackPressed()) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 + && mMainWrapperFragment != null + && !mMainWrapperFragment.onHandleBackPressed()) { DownloadEntity downloadEntity = null; for (DownloadEntity entity : DownloadManager.getInstance().getAllDownloadEntityExcludeSilentTask()) { if (entity.getStatus().equals(DownloadStatus.done)) { diff --git a/app/src/main/java/com/gh/gamecenter/wrapper/MainWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/wrapper/MainWrapperFragment.kt index 767c5e78b1..7db9e2ab24 100644 --- a/app/src/main/java/com/gh/gamecenter/wrapper/MainWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/wrapper/MainWrapperFragment.kt @@ -65,7 +65,6 @@ class MainWrapperFragment : BaseBottomTabFragment(), OnBa override fun onCreate(savedInstanceState: Bundle?) { mViewModel = viewModelProviderFromParent(MainWrapperViewModel.Factory(HaloApp.getInstance())) super.onCreate(savedInstanceState) - DisplayUtils.transparentStatusBar(requireActivity()) initSkeleton() diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e221931e72..6c9a25e45c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,11 @@ - - @@ -97,4 +97,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/piece_start_ad_container.xml b/app/src/main/res/layout/piece_start_ad_container.xml index bf7eebe283..123a0b0ee9 100644 --- a/app/src/main/res/layout/piece_start_ad_container.xml +++ b/app/src/main/res/layout/piece_start_ad_container.xml @@ -5,7 +5,7 @@ android:id="@+id/startAdContainer" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/ui_background" + android:background="@color/white" android:visibility="gone" tools:visibility="visible"> @@ -13,7 +13,6 @@ android:id="@+id/adImage" android:layout_width="0dp" android:layout_height="0dp" - android:tint="#01000000" android:visibility="gone" app:actualImageScaleType="centerCrop" app:fadeDuration="0" @@ -26,6 +25,7 @@ android:id="@+id/ad_video" android:layout_width="0dp" android:layout_height="0dp" + android:visibility="gone" app:layout_constraintBottom_toTopOf="@id/startAdIcpContainer" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt b/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt index 56c0ea1385..5071e1d0b2 100644 --- a/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt +++ b/module_core/src/main/java/com/gh/gamecenter/core/AppExecutor.kt @@ -21,7 +21,7 @@ import java.util.concurrent.* */ object AppExecutor { - private const val CORE_POOL_SIZE = 3 + private const val CORE_POOL_SIZE = 6 private const val MAX_POOL_SIZE = 32 @JvmStatic From dc2e7147d93bcad6f6f9f387dcee1503de5ce1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E7=BB=B4?= Date: Thu, 9 Jan 2025 11:25:09 +0800 Subject: [PATCH 08/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DViewStub?= =?UTF-8?q?=E5=81=B6=E5=8F=91=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98=20https:?= =?UTF-8?q?//sentry.shanqu.cc/organizations/lightgame/issues/422108/events?= =?UTF-8?q?/=3Fproject=3D22=20https://sentry.shanqu.cc/organizations/light?= =?UTF-8?q?game/issues/425087/=3Fproject=3D22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gh/gamecenter/home/custom/CustomPageFragment.kt | 6 +++--- .../com/gh/gamecenter/personal/HaloPersonalFragment.kt | 2 +- .../gh/gamecenter/wrapper/BaseTabWrapperFragment.kt | 6 +++--- .../wrapper/SearchToolbarTabWrapperFragment.kt | 2 +- .../gh/gamecenter/common/base/fragment/LazyFragment.kt | 7 ++----- .../java/com/gh/gamecenter/common/utils/Extensions.kt | 10 +++++++++- 6 files changed, 19 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageFragment.kt b/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageFragment.kt index f8aa54032b..69c563bbae 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/CustomPageFragment.kt @@ -239,7 +239,7 @@ class CustomPageFragment : LazyFragment(), ISmartRefreshContent, IScrollable { viewModel.loadFirst(false) } } - binding.reuseNoConnectionStub.inflate() + binding.reuseNoConnectionStub.inflateOrShow() } else { noConnectionBinding?.root?.visibility = View.VISIBLE } @@ -249,7 +249,7 @@ class CustomPageFragment : LazyFragment(), ISmartRefreshContent, IScrollable { noDataBinding = ReuseNoneDataBinding.bind(inflated) noDataBinding?.root?.visibility = View.VISIBLE } - binding.reuseNoDataStub.inflate() + binding.reuseNoDataStub.inflateOrShow() } else { noDataBinding?.root?.visibility = View.VISIBLE } @@ -304,7 +304,7 @@ class CustomPageFragment : LazyFragment(), ISmartRefreshContent, IScrollable { } initSearchBar(it) } - binding.reuseSearchBarStub.inflate() + binding.reuseSearchBarStub.inflateOrShow() } else { initSearchBar(it) } diff --git a/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt b/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt index ec9ce66a54..7ac94b6864 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt @@ -701,7 +701,7 @@ class HaloPersonalFragment : BaseLazyFragment() { } private fun inflateRealView() { - mBinding.stub.inflate() + mBinding.stub.inflateOrShow() mStubBinding.statusBar.goneIf(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) mStubBinding.darkModeIv.goneIf(!(Config.getNightModeSetting()?.icon ?: false)) diff --git a/app/src/main/java/com/gh/gamecenter/wrapper/BaseTabWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/wrapper/BaseTabWrapperFragment.kt index e761e3c332..1dce41d7be 100644 --- a/app/src/main/java/com/gh/gamecenter/wrapper/BaseTabWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/wrapper/BaseTabWrapperFragment.kt @@ -160,7 +160,7 @@ abstract class BaseTabWrapperFragment : BaseLazyFragment(), IMultiTab { showLoading(true) } } - noConnectionStub?.inflate() + noConnectionStub?.inflateOrShow() } else { noConnectionBinding?.root?.visibility = View.VISIBLE } @@ -176,7 +176,7 @@ abstract class BaseTabWrapperFragment : BaseLazyFragment(), IMultiTab { noDataBinding = ReuseNoneDataBinding.bind(inflated) noDataBinding?.root?.visibility = View.VISIBLE } - noDataStub?.inflate() + noDataStub?.inflateOrShow() } else { noDataBinding?.root?.visibility = View.VISIBLE } @@ -192,7 +192,7 @@ abstract class BaseTabWrapperFragment : BaseLazyFragment(), IMultiTab { loadingBinding = ReuseLoadingBinding.bind(inflated) loadingBinding?.root?.visibility = View.VISIBLE } - loadingStub?.inflate() + loadingStub?.inflateOrShow() } else { loadingBinding?.root?.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt index 32b562f802..3779d30f58 100644 --- a/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt @@ -957,7 +957,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar setPullDownPushInternal(pullDownPush, pullDownPushHandler) } try { - binding.autoVideoViewStub.inflate() + binding.autoVideoViewStub.inflateOrShow() } catch (e: Exception) { SentryHelper.onEvent("VIEW_STUB_INFLATE_ERROR", "digest", e.localizedMessage) } diff --git a/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt b/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt index 1eaf426636..2f369166dd 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/base/fragment/LazyFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.View import android.view.ViewStub import com.gh.gamecenter.common.R +import com.gh.gamecenter.common.utils.inflateOrShow /** * 这是在 BaseLazyFragment 之上添加了一些通用功能的抽象类 @@ -66,11 +67,7 @@ abstract class LazyFragment : BaseLazyFragment() { } else { mViewStub?.layoutResource = getRealLayoutId() mViewStub?.setOnInflateListener { _, inflatedView -> onRealLayoutInflated(inflatedView) } - if (mViewStub?.parent != null) { - mViewStub?.inflate()?.let { mCachedView = it } - } else { - mViewStub?.visibility = View.VISIBLE - } + mViewStub?.inflateOrShow()?.let { mCachedView = it } } } diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt b/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt index 259db0bc7b..fffe615fc6 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt @@ -1704,4 +1704,12 @@ fun RecyclerView.tryToClearRecycler() { } catch (e: java.lang.Exception) { e.printStackTrace() } -} \ No newline at end of file +} + +fun ViewStub.inflateOrShow(): View? = + if (parent != null) { + inflate() + } else { + visibility = View.VISIBLE + null + } \ No newline at end of file From aef39eb48111b0a7767a48c9855f238bd39411a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E7=BB=B4?= Date: Tue, 24 Dec 2024 11:42:13 +0800 Subject: [PATCH 09/21] =?UTF-8?q?feat:=20=E6=A0=B7=E5=BC=8F=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=BC=98=E5=8C=96=E6=B1=87=E6=80=BB=E2=80=94=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=20https://jira.shanqu.cc/browse/GHZSCY-6866?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/CommonContentHomeSlideWithCardsUi.kt | 4 +- .../CustomHomeGameItemViewHolder.kt | 4 +- .../home/video/AutomaticVideoView.kt | 17 +++++-- .../SearchToolbarTabWrapperFragment.kt | 46 ++++++++++++++++++- .../wrapper/ToolbarWrapperFragment.kt | 45 +++++++++++++++++- .../main/res/drawable/ic_basic_offsound.xml | 19 ++++++++ .../main/res/drawable/ic_basic_onsound.xml | 16 +++++++ .../fragment_search_toolbar_tab_wrapper.xml | 13 ++++++ .../res/layout/fragment_toolbar_wrapper.xml | 13 ++++++ .../layout/recycler_announcement_banner.xml | 1 + .../gamecenter/feature/entity/GameEntity.kt | 2 +- 11 files changed, 168 insertions(+), 12 deletions(-) create mode 100644 app/src/main/res/drawable/ic_basic_offsound.xml create mode 100644 app/src/main/res/drawable/ic_basic_onsound.xml diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/ui/CommonContentHomeSlideWithCardsUi.kt b/app/src/main/java/com/gh/gamecenter/home/custom/ui/CommonContentHomeSlideWithCardsUi.kt index 4780d243f6..68d9640bea 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/ui/CommonContentHomeSlideWithCardsUi.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/ui/CommonContentHomeSlideWithCardsUi.kt @@ -363,7 +363,7 @@ class CommonContentHomeSlideWithCardsUi( homeSlideCardItemBinding.cardIv.visibility = View.VISIBLE // 防止重复加载图片导致闪烁 if (homeSubSlide.image != cardIv.getTag(R.string.tag_img_url_id)) { - ImageUtils.display(cardIv, homeSubSlide.image, false, AlphaGradientProcess()) + ImageUtils.display(cardIv, homeSubSlide.image, true, AlphaGradientProcess()) cardIv.setTag(R.string.tag_img_url_id, homeSubSlide.image) } ConstraintSet().apply { @@ -398,7 +398,7 @@ class CommonContentHomeSlideWithCardsUi( descTv.text = homeSubSlide.cardDesc // 防止重复加载图片导致闪烁 if (homeSubSlide.image != cardIv.getTag(R.string.tag_img_url_id)) { - ImageUtils.display(cardIv, homeSubSlide.image, false, AlphaGradientProcess()) + ImageUtils.display(cardIv, homeSubSlide.image, true, AlphaGradientProcess()) cardIv.setTag(R.string.tag_img_url_id, homeSubSlide.image) } ConstraintSet().apply { diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt index cb615ae95a..ee498130c3 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt @@ -109,7 +109,9 @@ class CustomHomeGameItemViewHolder( item.linkColumn?.id ?: "" ) } - binding.gameBrief.text = game.recommendText + binding.gameBrief.goneIf(game.recommendText.isEmpty()) { + binding.gameBrief.text = game.recommendText + } binding.gameImage.visibleIf(game.showImage) { if (game.isWechatMiniGame()) { ImageUtils.display(binding.gameImage, game.banner) diff --git a/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt b/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt index 7e47e00071..30e4866afe 100644 --- a/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt +++ b/app/src/main/java/com/gh/gamecenter/home/video/AutomaticVideoView.kt @@ -41,6 +41,8 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr var thumbImage: SimpleDraweeView = findViewById(R.id.thumbImage) var containerView: RadiusCardView = findViewById(R.id.container) var detailBtn: TextView? = null + var isMute = true + private var mIsFirstPlay = true private var mMuteDisposable: Disposable? = null private var mMaskDisposable: Disposable? = null private val mUUID = UUID.randomUUID().toString() @@ -89,10 +91,11 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr mVideoAllCallBack.onClickStartThumb(mOriginUrl, mTitle, this) } prepareVideo() - val topVideoVoiceStatus = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) - if (topVideoVoiceStatus) { - violenceUpdateMuteStatus() + if (mIsFirstPlay) { + isMute = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) + mIsFirstPlay = false } + violenceUpdateMuteStatus() resetDetailMask() } @@ -106,15 +109,21 @@ class AutomaticVideoView @JvmOverloads constructor(context: Context, attrs: Attr mMuteDisposable?.dispose() mMuteDisposable = null } - mute() + if (isMute) { + mute() + } else { + unMute() + } } } fun mute() { + isMute = true CustomManager.getCustomManager(getKey()).isNeedMute = true } fun unMute() { + isMute = false CustomManager.getCustomManager(getKey()).isNeedMute = false } diff --git a/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt index 32b562f802..5a3ce35bdf 100644 --- a/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt @@ -43,6 +43,8 @@ import com.gh.gamecenter.common.entity.LinkEntity import com.gh.gamecenter.common.eventbus.EBReuse import com.gh.gamecenter.common.exposure.ExposureSource import com.gh.gamecenter.common.json.json +import com.gh.gamecenter.common.observer.MuteCallback +import com.gh.gamecenter.common.observer.VolumeObserver import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.common.view.TabIndicatorView import com.gh.gamecenter.core.iinterface.IScrollable @@ -163,6 +165,20 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar private val twoLinesTabToolbarHeight = 48F.dip2px() private var autoVideoView: AutomaticVideoView? = null + private val volumeObserver by lazy { + VolumeObserver(object : MuteCallback { + override fun onMute(isMute: Boolean) { + if (::binding.isInitialized) { + binding.muteIv.setImageResource(if (isMute) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound) + } + if (isMute) { + autoVideoView?.mute() + } else { + autoVideoView?.unMute() + } + } + }) + } private var searchStyle: BottomTab.SearchStyle? = null set(value) { @@ -1022,6 +1038,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar ImageUtils.display(gameImageIv, imgUrl) } autoVideoView?.onVideoReset() + muteIv.isVisible = video != null autoVideoView?.goneIf(video == null) { if (autoVideoView?.isInPlayingState == false) { GSYVideoOptionBuilder() @@ -1040,6 +1057,17 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar headerContainer.performClick() } } + var videoVoiceStatus = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) + muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound) + muteIv.setDebouncedClickListener { + videoVoiceStatus = !videoVoiceStatus + muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound) + if (videoVoiceStatus) { + autoVideoView?.mute() + } else { + autoVideoView?.unMute() + } + } } } } @@ -1054,6 +1082,19 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar pullDownPushHandler?.doPreProcess(this as? ISmartRefresh, popupPush) } + private fun observeVolume() { + context?.applicationContext?.contentResolver?.registerContentObserver( + android.provider.Settings.System.CONTENT_URI, + true, + volumeObserver + ) + } + + private fun unObserveVolume() { + context?.applicationContext?.contentResolver?.unregisterContentObserver(volumeObserver) + } + + private fun updateRefreshHeaderStyle(force: Boolean = false) { if (lightRefreshHeaderStyle == isDisplayingLightContent && !force) return lightRefreshHeaderStyle = isDisplayingLightContent @@ -1098,6 +1139,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar } else { resumePullDownPushVideo() } + observeVolume() } } } @@ -1111,6 +1153,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar if (!videoUrl.isNullOrEmpty()) { ScrollCalculatorHelper.savePlaySchedule(MD5Utils.getContentMD5(videoUrl), currentPosition) } + unObserveVolume() } } } @@ -1126,8 +1169,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar if (position != 0L) { autoVideoView?.seekTo(position) autoVideoView?.onVideoResume(false) - val topVideoVoiceStatus = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) - if (topVideoVoiceStatus) { + if (autoVideoView?.isMute == true) { autoVideoView?.mute() } else { autoVideoView?.unMute() diff --git a/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt index 00b7b82c5b..7f7c835957 100644 --- a/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt @@ -41,6 +41,8 @@ import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.eventbus.EBReuse import com.gh.gamecenter.common.exposure.ExposureSource import com.gh.gamecenter.common.json.json +import com.gh.gamecenter.common.observer.MuteCallback +import com.gh.gamecenter.common.observer.VolumeObserver import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.core.utils.DisplayUtils import com.gh.gamecenter.core.utils.MD5Utils @@ -108,6 +110,20 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh, private var mLightToolbar = false private var mAutoFinishTwoLevelHandler: Handler? = null private var mAutoFinishTwoLevelCallback: (() -> Unit)? = null + private val mVolumeObserver by lazy { + VolumeObserver(object : MuteCallback { + override fun onMute(isMute: Boolean) { + if (::mBinding.isInitialized) { + mBinding.muteIv.setImageResource(if (isMute) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound) + if (isMute) { + mBinding.autoVideoView.mute() + } else { + mBinding.autoVideoView.unMute() + } + } + } + }) + } private lateinit var mElapsedHelper: TimeElapsedHelper @@ -227,6 +243,7 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh, gameImageIv.goneIf(video != null) { ImageUtils.display(gameImageIv, imgUrl) } + muteIv.isVisible = video != null autoVideoView.goneIf(video == null) { if (!autoVideoView.isInPlayingState) { GSYVideoOptionBuilder() @@ -258,6 +275,17 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh, headerContainer.performClick() } } + var videoVoiceStatus = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) + muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound) + muteIv.setDebouncedClickListener { + videoVoiceStatus = !videoVoiceStatus + muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound) + if (videoVoiceStatus) { + autoVideoView.mute() + } else { + autoVideoView.unMute() + } + } } } } @@ -271,6 +299,18 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh, pullDownPushHandler?.doPreProcess(this as? ISmartRefresh, popupPush) } + private fun observeVolume() { + context?.applicationContext?.contentResolver?.registerContentObserver( + android.provider.Settings.System.CONTENT_URI, + true, + mVolumeObserver + ) + } + + private fun unObserveVolume() { + context?.applicationContext?.contentResolver?.unregisterContentObserver(mVolumeObserver) + } + override fun onFragmentPause() { super.onFragmentPause() DownloadManager.getInstance().removeObserver(mDataWatcher) @@ -738,6 +778,7 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh, } else { resumePullDownPushVideo() } + observeVolume() } } } @@ -751,6 +792,7 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh, if (videoUrl.isNotEmpty()) { ScrollCalculatorHelper.savePlaySchedule(MD5Utils.getContentMD5(videoUrl), currentPosition) } + unObserveVolume() } } } @@ -766,8 +808,7 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh, if (position != 0L) { autoVideoView.seekTo(position) autoVideoView.onVideoResume(false) - val topVideoVoiceStatus = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) - if (topVideoVoiceStatus) { + if (autoVideoView.isMute) { autoVideoView.mute() } else { autoVideoView.unMute() diff --git a/app/src/main/res/drawable/ic_basic_offsound.xml b/app/src/main/res/drawable/ic_basic_offsound.xml new file mode 100644 index 0000000000..6cad2a9e67 --- /dev/null +++ b/app/src/main/res/drawable/ic_basic_offsound.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_basic_onsound.xml b/app/src/main/res/drawable/ic_basic_onsound.xml new file mode 100644 index 0000000000..f3d0a58dc5 --- /dev/null +++ b/app/src/main/res/drawable/ic_basic_onsound.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml b/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml index 256e970e1a..a68f5d8c80 100644 --- a/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml +++ b/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml @@ -164,6 +164,19 @@ app:lottie_loop="true" app:lottie_repeatMode="restart" /> + + + + Date: Thu, 5 Dec 2024 11:07:45 +0800 Subject: [PATCH 10/21] =?UTF-8?q?fix:=20=E3=80=90=E5=85=89=E7=8E=AF?= =?UTF-8?q?=E5=8A=A9=E6=89=8B=E3=80=91=E6=B7=B1=E8=89=B2=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98=20https://jira.shanqu.cc/b?= =?UTF-8?q?rowse/GHZSCY-7121?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/adapter/ContentLabelLaneAdapter.kt | 6 ++++++ .../viewholder/CustomGameItemViewHolder.kt | 10 +++++++--- .../main/res/layout/amway_comment_item.xml | 10 +++++----- .../main/res/layout/category_game_item.xml | 7 +++---- .../main/res/layout/discovery_game_item.xml | 5 ++--- .../res/layout/fm_search_history_item.xml | 6 ++---- .../fragment_search_toolbar_tab_wrapper.xml | 5 ++--- .../res/layout/fragment_toolbar_wrapper.xml | 5 ++--- app/src/main/res/layout/game_attach_item.xml | 9 ++++----- app/src/main/res/layout/game_item_custom.xml | 5 ++--- app/src/main/res/layout/game_test_item.xml | 6 ++---- app/src/main/res/layout/home_amway_item.xml | 6 +++--- .../res/layout/home_amway_item_custom.xml | 6 +++--- app/src/main/res/layout/home_game_item.xml | 5 ++--- .../main/res/layout/home_game_item_custom.xml | 5 ++--- .../home_sub_slide_list_item_custom.xml | 5 ++--- .../item_game_detail_related_version.xml | 4 ++-- .../item_game_server_test_big_image.xml | 5 ++--- .../res/layout/item_game_server_test_v2.xml | 5 ++--- .../layout/item_home_game_test_v2_item.xml | 7 +++---- .../item_home_horizontal_slide_video.xml | 5 ++--- ...tem_home_horizontal_slide_video_custom.xml | 5 ++--- app/src/main/res/layout/libao_item.xml | 7 +++---- .../main/res/layout/libaodetail_item_top.xml | 7 +++---- .../main/res/layout/recycler_my_reserve.xml | 5 ++--- .../feature/game/GameItemViewHolder.kt | 20 +++++++++++++------ .../src/main/res/layout/game_item.xml | 9 ++++----- .../src/main/res/layout/news_digest_item.xml | 7 +++---- .../main/res/layout/item_sorted_message.xml | 5 ++--- 29 files changed, 93 insertions(+), 99 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/adapter/ContentLabelLaneAdapter.kt b/app/src/main/java/com/gh/gamecenter/home/custom/adapter/ContentLabelLaneAdapter.kt index 54e0284147..d494e1d5f3 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/adapter/ContentLabelLaneAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/adapter/ContentLabelLaneAdapter.kt @@ -6,6 +6,8 @@ import androidx.recyclerview.widget.RecyclerView import com.gh.gamecenter.R import com.gh.gamecenter.common.utils.goneIf import com.gh.gamecenter.common.utils.toBinding +import com.gh.gamecenter.common.utils.toColor +import com.gh.gamecenter.common.utils.toDrawable import com.gh.gamecenter.databinding.RecyclerContentLabelLaneItemBinding import com.gh.gamecenter.home.custom.model.CustomPageData @@ -28,6 +30,10 @@ class ContentLabelLaneAdapter( override fun onBindViewHolder(holder: ContentLabelChildViewHolder, position: Int) { val item = getItem(position) with(holder.binding) { + vBackground.background = R.drawable.bg_shape_content_label_lane_item.toDrawable(context) + tvTitle.setTextColor(com.gh.gamecenter.common.R.color.text_primary.toColor(context)) + tvSubTitle.setTextColor(com.gh.gamecenter.common.R.color.primary_theme.toColor(context)) + ivIcon.goneIf(item.image.isBlank()){ ivIcon.displayGameIcon(item.image, null, null) } diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomGameItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomGameItemViewHolder.kt index b9a13a3dd5..6761ebe4e2 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomGameItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomGameItemViewHolder.kt @@ -193,9 +193,6 @@ class CustomGameItemViewHolder( adLabelTv: TextView? = null, canShowSubTitle: Boolean ) { - if (entity.id == gameSubtitleTv.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id)) return - gameSubtitleTv.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, entity.id) - var showSubtitle = false var showAdvancedDownload = false if (canShowSubTitle && entity.serverLabel == null && entity.subtitle.isNotEmpty() && !entity.advanceDownload) { @@ -215,6 +212,9 @@ class CustomGameItemViewHolder( setColor("#${entity.subtitleStyle?.background}".hexStringToIntColor()) } } + } else { + setTextColor(com.gh.gamecenter.common.R.color.text_secondary.toColor(context)) + background = R.drawable.bg_advance_download_game_subtitle.toDrawable(context) } } } @@ -227,6 +227,10 @@ class CustomGameItemViewHolder( background = R.drawable.bg_advance_download_game_subtitle.toDrawable(context) } } + + if (entity.id == gameSubtitleTv.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id)) return + gameSubtitleTv.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, entity.id) + if (showSubtitle || showAdvancedDownload) { val minWidth = if (showSubtitle) SUBTITLE_MIN_WIDTH.dip2px() else if (showAdvancedDownload) ADVANCED_DOWNLOAD_WIDTH.dip2px() else 0 diff --git a/app/src/main/res/layout/amway_comment_item.xml b/app/src/main/res/layout/amway_comment_item.xml index efff05cfcc..2cdc5b2925 100644 --- a/app/src/main/res/layout/amway_comment_item.xml +++ b/app/src/main/res/layout/amway_comment_item.xml @@ -62,16 +62,16 @@ android:id="@+id/gameSubtitleTv" android:layout_width="wrap_content" android:layout_height="14dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" + android:layout_marginStart="4dp" android:paddingLeft="2dp" android:paddingRight="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" - tools:visibility="visible" - tools:text="副标题" /> + tools:background="@drawable/bg_advance_download_game_subtitle" + tools:text="副标题" + tools:textColor="@color/text_secondary" + tools:visibility="visible" /> + tools:background="@drawable/bg_advance_download_game_subtitle" + tools:text="副标题" + tools:textColor="@color/text_secondary" /> diff --git a/app/src/main/res/layout/fragment_toolbar_wrapper.xml b/app/src/main/res/layout/fragment_toolbar_wrapper.xml index 87bc8f47eb..45a91fa984 100644 --- a/app/src/main/res/layout/fragment_toolbar_wrapper.xml +++ b/app/src/main/res/layout/fragment_toolbar_wrapper.xml @@ -107,15 +107,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/game_attach_item.xml b/app/src/main/res/layout/game_attach_item.xml index b6c7b4335d..cc3414791b 100644 --- a/app/src/main/res/layout/game_attach_item.xml +++ b/app/src/main/res/layout/game_attach_item.xml @@ -53,16 +53,15 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" - tools:visibility="visible" - tools:text="副标题" /> + tools:background="@drawable/bg_advance_download_game_subtitle" + tools:text="副标题" + tools:textColor="@color/text_secondary" + tools:visibility="visible" /> diff --git a/app/src/main/res/layout/home_amway_item_custom.xml b/app/src/main/res/layout/home_amway_item_custom.xml index 7271ffe340..f24dfd66e9 100644 --- a/app/src/main/res/layout/home_amway_item_custom.xml +++ b/app/src/main/res/layout/home_amway_item_custom.xml @@ -57,15 +57,15 @@ android:id="@+id/gameSubtitleTv" android:layout_width="wrap_content" android:layout_height="14dp" - android:layout_marginLeft="8dp" - android:background="@drawable/bg_advance_download_game_subtitle" + android:layout_marginStart="8dp" android:paddingLeft="2dp" android:paddingRight="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/home_game_item.xml b/app/src/main/res/layout/home_game_item.xml index b99a2b9cd7..e384233e09 100644 --- a/app/src/main/res/layout/home_game_item.xml +++ b/app/src/main/res/layout/home_game_item.xml @@ -63,15 +63,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/item_game_detail_related_version.xml b/app/src/main/res/layout/item_game_detail_related_version.xml index 12233cdc42..b02b2c47ad 100644 --- a/app/src/main/res/layout/item_game_detail_related_version.xml +++ b/app/src/main/res/layout/item_game_detail_related_version.xml @@ -43,14 +43,14 @@ android:layout_height="14dp" android:layout_marginStart="4dp" android:layout_marginEnd="16dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/item_game_server_test_big_image.xml b/app/src/main/res/layout/item_game_server_test_big_image.xml index 53bab21df9..8e8f578dda 100644 --- a/app/src/main/res/layout/item_game_server_test_big_image.xml +++ b/app/src/main/res/layout/item_game_server_test_big_image.xml @@ -103,15 +103,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/item_game_server_test_v2.xml b/app/src/main/res/layout/item_game_server_test_v2.xml index d9efd50dd2..4012f726f1 100644 --- a/app/src/main/res/layout/item_game_server_test_v2.xml +++ b/app/src/main/res/layout/item_game_server_test_v2.xml @@ -56,15 +56,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/item_home_game_test_v2_item.xml b/app/src/main/res/layout/item_home_game_test_v2_item.xml index 030c582e4c..15df064029 100644 --- a/app/src/main/res/layout/item_home_game_test_v2_item.xml +++ b/app/src/main/res/layout/item_home_game_test_v2_item.xml @@ -76,15 +76,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" - tools:text="副标题" /> + tools:background="@drawable/bg_advance_download_game_subtitle" + tools:text="副标题" + tools:textColor="@color/text_secondary" /> diff --git a/app/src/main/res/layout/item_home_horizontal_slide_video_custom.xml b/app/src/main/res/layout/item_home_horizontal_slide_video_custom.xml index 4eea32f53f..3399e48e70 100644 --- a/app/src/main/res/layout/item_home_horizontal_slide_video_custom.xml +++ b/app/src/main/res/layout/item_home_horizontal_slide_video_custom.xml @@ -74,15 +74,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/libao_item.xml b/app/src/main/res/layout/libao_item.xml index 43c1a90b44..9b95b2b936 100644 --- a/app/src/main/res/layout/libao_item.xml +++ b/app/src/main/res/layout/libao_item.xml @@ -1,6 +1,5 @@ diff --git a/app/src/main/res/layout/libaodetail_item_top.xml b/app/src/main/res/layout/libaodetail_item_top.xml index 21b6e2b81e..e853849335 100644 --- a/app/src/main/res/layout/libaodetail_item_top.xml +++ b/app/src/main/res/layout/libaodetail_item_top.xml @@ -1,6 +1,5 @@ diff --git a/app/src/main/res/layout/recycler_my_reserve.xml b/app/src/main/res/layout/recycler_my_reserve.xml index 3ed802aa6a..2d1c132340 100644 --- a/app/src/main/res/layout/recycler_my_reserve.xml +++ b/app/src/main/res/layout/recycler_my_reserve.xml @@ -78,15 +78,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题副标题副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> Unit)? = null ) { - if (entity.id == gameSubtitleTv.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id)) return - gameSubtitleTv.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, entity.id) - var showSubtitle = false var showAdvancedDownload = false if ((entity.serverLabel == null && entity.subtitle.isNotEmpty() && !entity.advanceDownload) || (forceShowSubtitle && entity.subtitle.isNotEmpty())) { @@ -170,6 +167,9 @@ class GameItemViewHolder(var binding: GameItemBinding) : BaseRecyclerViewHolder< setColor("#${entity.subtitleStyle?.background}".hexStringToIntColor()) } } + } else { + setTextColor(com.gh.gamecenter.common.R.color.text_secondary.toColor(context)) + background = R.drawable.bg_advance_download_game_subtitle.toDrawable(context) } } } @@ -182,6 +182,10 @@ class GameItemViewHolder(var binding: GameItemBinding) : BaseRecyclerViewHolder< background = R.drawable.bg_advance_download_game_subtitle.toDrawable(context) } } + + if (entity.id == gameSubtitleTv.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id)) return + gameSubtitleTv.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, entity.id) + if (showSubtitle || showAdvancedDownload) { val minWidth = if (showSubtitle) SUBTITLE_MIN_WIDTH.dip2px() else if (showAdvancedDownload) ADVANCED_DOWNLOAD_WIDTH.dip2px() else 0 @@ -238,9 +242,6 @@ class GameItemViewHolder(var binding: GameItemBinding) : BaseRecyclerViewHolder< adLabelTv: TextView? = null, canShowTitle: Boolean ) { - if (entity.id == gameSubtitleTv.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id)) return - gameSubtitleTv.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, entity.id) - var showSubtitle = false var showAdvancedDownload = false if (canShowTitle && entity.serverLabel == null && entity.subtitle.isNotEmpty() && !entity.advanceDownload) { @@ -260,6 +261,9 @@ class GameItemViewHolder(var binding: GameItemBinding) : BaseRecyclerViewHolder< setColor("#${entity.subtitleStyle?.background}".hexStringToIntColor()) } } + } else { + setTextColor(com.gh.gamecenter.common.R.color.text_secondary.toColor(context)) + background = R.drawable.bg_advance_download_game_subtitle.toDrawable(context) } } } @@ -272,6 +276,10 @@ class GameItemViewHolder(var binding: GameItemBinding) : BaseRecyclerViewHolder< background = R.drawable.bg_advance_download_game_subtitle.toDrawable(context) } } + + if (entity.id == gameSubtitleTv.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id)) return + gameSubtitleTv.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, entity.id) + if (showSubtitle || showAdvancedDownload) { val minWidth = if (showSubtitle) SUBTITLE_MIN_WIDTH.dip2px() else if (showAdvancedDownload) ADVANCED_DOWNLOAD_WIDTH.dip2px() else 0 diff --git a/module_core_feature/src/main/res/layout/game_item.xml b/module_core_feature/src/main/res/layout/game_item.xml index 7ecda61336..5002ffe593 100644 --- a/module_core_feature/src/main/res/layout/game_item.xml +++ b/module_core_feature/src/main/res/layout/game_item.xml @@ -76,16 +76,15 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" - tools:visibility="visible" - tools:text="副标题副标题副标题" /> + tools:background="@drawable/bg_advance_download_game_subtitle" + tools:text="副标题副标题副标题" + tools:textColor="@color/text_secondary" + tools:visibility="visible" /> diff --git a/module_message/src/main/res/layout/item_sorted_message.xml b/module_message/src/main/res/layout/item_sorted_message.xml index 91461a460c..15944bbedd 100644 --- a/module_message/src/main/res/layout/item_sorted_message.xml +++ b/module_message/src/main/res/layout/item_sorted_message.xml @@ -55,15 +55,14 @@ android:layout_width="wrap_content" android:layout_height="14dp" android:layout_marginStart="4dp" - android:layout_marginLeft="4dp" - android:background="@drawable/bg_advance_download_game_subtitle" android:paddingStart="2dp" android:paddingEnd="2dp" android:singleLine="true" - android:textColor="@color/text_secondary" android:textSize="@dimen/tag_text_size" android:visibility="gone" + tools:background="@drawable/bg_advance_download_game_subtitle" tools:text="副标题副标题副标题副标题副标题副标题副标题副标题副标题" + tools:textColor="@color/text_secondary" tools:visibility="visible" /> From 315f244153e463d602967c30724c137eeffa166e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=A8?= Date: Wed, 13 Nov 2024 14:23:14 +0800 Subject: [PATCH 11/21] =?UTF-8?q?fix:=E3=80=90=E5=85=89=E7=8E=AF=E5=8A=A9?= =?UTF-8?q?=E6=89=8B=E3=80=91=E5=8C=85=E5=90=8D=E6=A3=80=E6=B5=8B=E5=8F=8A?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E9=A1=B5=E9=9D=A2=E5=9C=A8=E6=B7=B1=E8=89=B2?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=9A=84=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20https://jira.shanqu.cc/browse/GHZSCY-6985?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../search/fragment/SearchTabFragment.kt | 14 +++++++++++++- app/src/main/res/drawable/bg_shape_f9_radius_6.xml | 2 +- .../package_check_dialog_item_progress.xml | 2 +- app/src/main/res/layout/fragment_search_tab.xml | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/search/fragment/SearchTabFragment.kt b/app/src/main/java/com/gh/gamecenter/search/fragment/SearchTabFragment.kt index 03b410bf28..028370fdaa 100644 --- a/app/src/main/java/com/gh/gamecenter/search/fragment/SearchTabFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/search/fragment/SearchTabFragment.kt @@ -9,6 +9,7 @@ import com.gh.gamecenter.R import com.gh.gamecenter.common.base.fragment.BaseFragment import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.utils.goneIf +import com.gh.gamecenter.common.utils.toColor import com.gh.gamecenter.databinding.FragmentSearchTabBinding import com.gh.gamecenter.feature.entity.SettingsEntity import com.gh.gamecenter.search.SearchGameResultFragment @@ -43,7 +44,7 @@ class SearchTabFragment : BaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - + location = arguments?.getString(EntranceConsts.KEY_LOCATION) ?: "" with(activityViewModel) { searchKeyAndType.observe(this@SearchTabFragment) { (key, type) -> @@ -121,6 +122,17 @@ class SearchTabFragment : BaseFragment() { } + override fun onDarkModeChanged() { + super.onDarkModeChanged() + if (::binding.isInitialized) { + binding.tabLayout.setTabTextColors( + com.gh.gamecenter.common.R.color.text_primary.toColor(requireContext()), + com.gh.gamecenter.common.R.color.text_theme.toColor(requireContext()) + ) + + } + } + companion object { fun newInstance(location: String) = diff --git a/app/src/main/res/drawable/bg_shape_f9_radius_6.xml b/app/src/main/res/drawable/bg_shape_f9_radius_6.xml index 77ddf8bf44..edf3ff2dd8 100644 --- a/app/src/main/res/drawable/bg_shape_f9_radius_6.xml +++ b/app/src/main/res/drawable/bg_shape_f9_radius_6.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/package_check_dialog_item_progress.xml b/app/src/main/res/drawable/package_check_dialog_item_progress.xml index 1e687d5210..5b51f26b18 100644 --- a/app/src/main/res/drawable/package_check_dialog_item_progress.xml +++ b/app/src/main/res/drawable/package_check_dialog_item_progress.xml @@ -3,7 +3,7 @@ - + Date: Thu, 9 Jan 2025 15:23:53 +0800 Subject: [PATCH 12/21] Merge branch 'fix/GHZSCY-7277' into 'dev' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复错误的下载错误提示 https://jira.shanqu.cc/browse/GHZSCY-7277 See merge request halo/android/assistant-android!2025 (cherry picked from commit f8a26ece01926dd8f6bda981590a25fdc568ddc9) 54ee3ea3 fix: 游戏下载异常提示 https://jira.shanqu.cc/browse/GHZSCY-7277 Co-authored-by: 陈君陶 --- app/src/main/java/com/gh/common/util/DownloadObserver.kt | 9 +++++++-- app/src/main/java/com/gh/ndownload/NDownloadBridge.kt | 2 +- ndownload | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) 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 a5d07c6112..300a50a294 100644 --- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt +++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt @@ -53,6 +53,7 @@ object DownloadObserver { private const val CORE_EVENT_DOWNLOAD_COMPLETE_LOGGED = "CORE_EVENT_DOWNLOAD_COMPLETE_LOGGED" private val mRetryableHashMap = hashMapOf() + private val mRetryableProgressMap = hashMapOf() /** * 当下载任务是 预约上线提醒 触发的,则所有弹窗均不显示 @@ -146,7 +147,8 @@ object DownloadObserver { || DownloadStatus.timeout == status ) { if (mRetryableHashMap[downloadEntity.url] == true - && NetworkUtils.isWifiConnected(HaloApp.getInstance().application) + && (NetworkUtils.isWifiConnected(HaloApp.getInstance().application) + || NDownloadBridge.isDownloadViaTrafficAllowed(downloadEntity)) ) { downloadManager.resumeDownload(downloadEntity.url) mRetryableHashMap[downloadEntity.url] = false @@ -257,6 +259,7 @@ object DownloadObserver { } mRetryableHashMap.remove(downloadEntity.url) + mRetryableProgressMap.remove(downloadEntity.url) EventBus.getDefault().post(EBDownloadStatus("done", "", "", "", downloadEntity.packageName, "")) } @@ -264,7 +267,9 @@ object DownloadObserver { DownloadNotificationHelper.addOrUpdateDownloadNotification(downloadEntity) // 如果已下载大小发生变化,表示成功恢复下载,则重置重试标记 - if (status == DownloadStatus.downloading) { + if (status == DownloadStatus.downloading + && downloadEntity.progress != mRetryableProgressMap[downloadEntity.url]) { + mRetryableProgressMap[downloadEntity.url] = downloadEntity.progress mRetryableHashMap[downloadEntity.url] = true } } diff --git a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt index 484051796d..801db55f85 100644 --- a/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt +++ b/app/src/main/java/com/gh/ndownload/NDownloadBridge.kt @@ -416,7 +416,7 @@ object NDownloadBridge : InnerDownloadListener, IErrorRetryHandler { }, GlobalDownloadConfig.ERROR_RETRY_INTERVAL) } - private fun isDownloadViaTrafficAllowed(downloadEntity: DownloadEntity?): Boolean { + fun isDownloadViaTrafficAllowed(downloadEntity: DownloadEntity?): Boolean { val mNetworkMobileStatus = "2G3G4G5G" val networkStatus: String? = downloadEntity?.meta?.get(DownloadEntity.NETWORK_STATUS_KEY) Utils.log("download network status$networkStatus") diff --git a/ndownload b/ndownload index 91a183a48b..02ad0aa911 160000 --- a/ndownload +++ b/ndownload @@ -1 +1 @@ -Subproject commit 91a183a48b9fc34fc9dc7b05e1a3046366417d74 +Subproject commit 02ad0aa911b20303b2d27a67b25461e223e37c79 From 78e320a192f978206d6f85a1161b204ceb0c7751 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Thu, 9 Jan 2025 15:27:34 +0800 Subject: [PATCH 13/21] =?UTF-8?q?fix:=20=E8=BF=98=E5=8E=9F=E8=87=AA?= =?UTF-8?q?=E6=9C=89=E5=BC=80=E5=B1=8F=E5=B9=BF=E5=91=8A=E7=9A=84=E8=83=8C?= =?UTF-8?q?=E6=99=AF=E9=A2=9C=E8=89=B2=20https://jira.shanqu.cc/browse/GHZ?= =?UTF-8?q?SCY-7360?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/piece_start_ad_container.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/piece_start_ad_container.xml b/app/src/main/res/layout/piece_start_ad_container.xml index 123a0b0ee9..31e947125a 100644 --- a/app/src/main/res/layout/piece_start_ad_container.xml +++ b/app/src/main/res/layout/piece_start_ad_container.xml @@ -5,7 +5,7 @@ android:id="@+id/startAdContainer" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/white" + android:background="@color/ui_background" android:visibility="gone" tools:visibility="visible"> From 1ed9151b1f967686816efca6406324724a25e0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E7=BB=B4?= Date: Wed, 27 Nov 2024 11:30:44 +0800 Subject: [PATCH 14/21] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=B9=BF=E5=91=8A=E5=9B=BE=E7=9B=B8=E5=85=B3=E5=B9=BF?= =?UTF-8?q?=E5=91=8A=E5=8A=A0=E8=BD=BD=E4=BA=8B=E4=BB=B6=E5=9F=8B=E7=82=B9?= =?UTF-8?q?=E2=80=94=E5=AE=A2=E6=88=B7=E7=AB=AF=20https://jira.shanqu.cc/b?= =?UTF-8?q?rowse/GHZSCY-7046?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/ad/AdDelegateHelper.kt | 78 +++++++++++++------ .../com/gh/common/util/NewFlatLogUtils.kt | 30 +++++++ .../java/com/gh/gamecenter/MainActivity.java | 4 + .../CustomHomeSlideListItemViewHolder.kt | 1 + .../CustomHomeSubSlideListItemViewHolder.kt | 1 + .../common/utils/AsyncImageLoader.kt | 11 ++- .../gh/gamecenter/common/utils/ImageUtils.kt | 9 ++- 7 files changed, 106 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/gh/ad/AdDelegateHelper.kt b/app/src/main/java/com/gh/ad/AdDelegateHelper.kt index 8f28402071..e054b799db 100644 --- a/app/src/main/java/com/gh/ad/AdDelegateHelper.kt +++ b/app/src/main/java/com/gh/ad/AdDelegateHelper.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.content.SharedPreferences +import android.graphics.drawable.Animatable import android.os.Message import android.text.TextUtils import android.view.View @@ -13,11 +14,13 @@ import android.widget.TextView import androidx.appcompat.content.res.AppCompatResources import androidx.fragment.app.Fragment import com.alibaba.android.arouter.launcher.ARouter +import com.facebook.drawee.controller.BaseControllerListener import com.facebook.drawee.view.SimpleDraweeView +import com.facebook.imagepipeline.image.ImageInfo import com.gh.common.exposure.ExposureManager import com.gh.common.util.DirectUtils.directToLinkPage import com.gh.common.util.LogUtils -import com.gh.common.util.NewFlatLogUtils.logOpenScreenAdSkip +import com.gh.common.util.NewFlatLogUtils import com.gh.common.util.PackageUtils import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.MainActivity @@ -59,6 +62,8 @@ object AdDelegateHelper { private val mGameSearchAdList: ArrayList by lazy { arrayListOf() } private var mVGameLaunchAd: AdConfig? = null + private var ownerSplashAdLoadTime = 0L + val vGameLaunchAd: AdConfig? get() = mVGameLaunchAd @@ -76,6 +81,7 @@ object AdDelegateHelper { } var isShowingSplashAd = false // 是否正在显示开屏广告 + var isOwnerSplashAdShown = false // 自有开屏广告是否展示 var gameSearchKeyword = "" fun initAdSdk(context: Context) { @@ -303,6 +309,7 @@ object AdDelegateHelper { ) { val hideCallback = { isShowingSplashAd = false + isOwnerSplashAdShown = false hideAction.invoke() } if (mSplashAd != null) { @@ -575,6 +582,8 @@ object AdDelegateHelper { handler: BaseActivity.BaseHandler, hideCallback: () -> Unit ) { + isOwnerSplashAdShown = false + val jumpBtn = startAdContainer.findViewById(R.id.jumpBtn) val jumpDetailBtn: TextView = startAdContainer.findViewById(R.id.jumpDetailBtn) val adImage: SimpleDraweeView = startAdContainer.findViewById(R.id.adImage) @@ -593,7 +602,27 @@ object AdDelegateHelper { ) adImage.visibleIf(true) - ImageUtils.displayWithoutMemoryCache(adImage, ad.img) + ImageUtils.displayWithCallback(adImage, ad.img, true, object : BaseControllerListener() { + override fun onSubmit(id: String?, callerContext: Any?) { + super.onSubmit(id, callerContext) + adImage.post { + ownerSplashAdLoadTime = System.currentTimeMillis() + NewFlatLogUtils.logSplashAdLoad(ad.id) + } + } + + override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) { + isOwnerSplashAdShown = true + adImage.post { + NewFlatLogUtils.logSplashAdShow(ad.id, System.currentTimeMillis() - ownerSplashAdLoadTime) + } + } + + override fun onFailure(id: String?, throwable: Throwable?) { + super.onFailure(id, throwable) + NewFlatLogUtils.logSplashAdFail(ad.id, "启动广告图加载失败") + } + }) if (ad.isImageType) { adVideo.visibleIf(false) @@ -604,26 +633,31 @@ object AdDelegateHelper { // 拦截点击事件传递 } jumpBtn.setOnClickListener { - handler.removeMessages(MainActivity.COUNTDOWN_AD) - hideCallback.invoke() - val linkEntity = ad.jump - logOpenScreenAdSkip( - ad.id, - (if (linkEntity.text != null) linkEntity.text else "")!!, - (if (linkEntity.type != null) linkEntity.type else "")!!, - (if (linkEntity.link != null) linkEntity.link else "")!! - ) - SensorsBridge.trackEvent( - "SplashAdOwnSkip", - "splash_ad_id", - ad.id, - "link_type", - linkEntity.type ?: "", - "link_id", - linkEntity.link ?: "", - "link_text", - linkEntity.text ?: "" - ) + it.debounceActionWithInterval(1000L) { + if (!isOwnerSplashAdShown) { + NewFlatLogUtils.logSplashAdFail(ad.id, "加载过程中点击跳过广告") + } + handler.removeMessages(MainActivity.COUNTDOWN_AD) + hideCallback.invoke() + val linkEntity = ad.jump + NewFlatLogUtils.logOpenScreenAdSkip( + ad.id, + (if (linkEntity.text != null) linkEntity.text else "")!!, + (if (linkEntity.type != null) linkEntity.type else "")!!, + (if (linkEntity.link != null) linkEntity.link else "")!! + ) + SensorsBridge.trackEvent( + "SplashAdOwnSkip", + "splash_ad_id", + ad.id, + "link_type", + linkEntity.type ?: "", + "link_id", + linkEntity.link ?: "", + "link_text", + linkEntity.text ?: "" + ) + } } val sources: MutableList = ArrayList() sources.add(ExposureSource("开屏广告", ad.id)) diff --git a/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt b/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt index 89e047cc3b..8388b3ed03 100644 --- a/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt +++ b/app/src/main/java/com/gh/common/util/NewFlatLogUtils.kt @@ -2778,4 +2778,34 @@ object NewFlatLogUtils { parseAndPutMeta()(this) }.let(::log) } + + // 自有开屏广告加载 + fun logSplashAdLoad(id: String) { + json { + KEY_EVENT to "splash_ad_load" + "ad_id" to id + parseAndPutMeta()(this) + }.let(::log) + } + + // 自有开屏广告展示 + fun logSplashAdShow(id: String, duration: Long) { + json { + KEY_EVENT to "splash_ad_show" + "ad_id" to id + "duration" to duration + parseAndPutMeta()(this) + }.let(::log) + } + + // 自有开屏广告加载/展示失败 + @JvmStatic + fun logSplashAdFail(id: String, error: String) { + json { + KEY_EVENT to "splash_ad_fail" + "ad_id" to id + "error" to error + parseAndPutMeta()(this) + }.let(::log) + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 7169b8e9b2..40555ff485 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -575,6 +575,10 @@ public class MainActivity extends BaseActivity { if (msg.what == COUNTDOWN_AD && msg.obj instanceof StartupAdEntity) { StartupAdEntity ad = (StartupAdEntity) msg.obj; + if (!AdDelegateHelper.INSTANCE.isOwnerSplashAdShown()) { + com.gh.common.util.NewFlatLogUtils.logSplashAdFail(ad.getId(), "广告加载超时"); + } + AdDelegateHelper.INSTANCE.setOwnerSplashAdShown(false); LinkEntity linkEntity = ad.getJump(); SensorsBridge.trackEvent( "SplashAdOwnSkip", diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideListItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideListItemViewHolder.kt index 3e1c98efce..4814d659ca 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideListItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSlideListItemViewHolder.kt @@ -53,6 +53,7 @@ class CustomHomeSlideListItemViewHolder(val binding: HomeSlideListItemCustomBind ImageUtils.displayWithCallback( binding.slideBackground, homeSlide.image, + false, object : BaseControllerListener() { override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) { binding.bottomGradient.visibility = View.VISIBLE diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSubSlideListItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSubSlideListItemViewHolder.kt index 1cfdc04942..6cde4a5080 100644 --- a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSubSlideListItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeSubSlideListItemViewHolder.kt @@ -67,6 +67,7 @@ class CustomHomeSubSlideListItemViewHolder(val binding: HomeSubSlideListItemCust ImageUtils.displayWithCallback( binding.slideBackground, homeSlide.image, + false, object : BaseControllerListener() { override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) { if (homeSlide.placeholderColor.isNotEmpty() && homeSlide.linkGame != null) { diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/AsyncImageLoader.kt b/module_common/src/main/java/com/gh/gamecenter/common/utils/AsyncImageLoader.kt index 1c31b51e4b..0835fd321b 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/utils/AsyncImageLoader.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/AsyncImageLoader.kt @@ -1,13 +1,15 @@ package com.gh.gamecenter.common.utils import androidx.core.util.Pools +import com.facebook.drawee.controller.BaseControllerListener import com.facebook.drawee.view.SimpleDraweeView +import com.facebook.imagepipeline.image.ImageInfo import com.facebook.imagepipeline.request.Postprocessor import com.gh.gamecenter.core.utils.SingletonHolder class AsyncImageLoader private constructor() { - fun addAsyncImage(view: SimpleDraweeView?, url: String, loadAsAnimatedImage: Boolean, processor: Postprocessor?) { + fun addAsyncImage(view: SimpleDraweeView?, url: String, loadAsAnimatedImage: Boolean, processor: Postprocessor?, controllerListener: BaseControllerListener?) { try { val loopThread = LoopThread.getInstance() val params = loopThread.obtainImageParams() @@ -15,6 +17,7 @@ class AsyncImageLoader private constructor() { params.url = url params.loadAsAnimatedImage = loadAsAnimatedImage params.processor = processor + params.controllerListener = controllerListener loopThread.addAsyncImage(params) } catch (e: InterruptedException) { e.printStackTrace() @@ -86,7 +89,7 @@ class AsyncImageLoader private constructor() { private fun loadImage(params: ImageLoadParams, isIgnoreWidth: Boolean = false) { - ImageUtils.display(params.view, params.url, params.loadAsAnimatedImage, params.processor, isIgnoreWidth) + ImageUtils.display(params.view, params.url, params.loadAsAnimatedImage, params.processor, isIgnoreWidth, params.controllerListener) releaseImageParams(params) } @@ -105,6 +108,7 @@ class AsyncImageLoader private constructor() { loadAsAnimatedImage = false processor = null retryCount = 0 + controllerListener = null mImagePool.release(this) } } @@ -120,5 +124,6 @@ class ImageLoadParams( var url: String = "", var loadAsAnimatedImage: Boolean = true, var processor: Postprocessor? = null, - var retryCount: Int = 0 + var retryCount: Int = 0, + var controllerListener: BaseControllerListener? = null, ) \ No newline at end of file diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/ImageUtils.kt b/module_common/src/main/java/com/gh/gamecenter/common/utils/ImageUtils.kt index 0da28a1aaa..c9d310207e 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/utils/ImageUtils.kt +++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/ImageUtils.kt @@ -162,8 +162,10 @@ object ImageUtils { fun displayWithCallback( draweeView: SimpleDraweeView?, imageUrl: String?, + noMemoryCache: Boolean = false, controllerListener: BaseControllerListener? ) { + if (noMemoryCache) draweeView?.setTag(TAG_NO_MEMORY_CACHE, true) displayInternal( view = draweeView, url = imageUrl, @@ -319,7 +321,7 @@ object ImageUtils { val disableMemoryCache = view?.getTag(TAG_NO_MEMORY_CACHE) == true if (view != null && width == 0 && !isIgnoreWidth) { - AsyncImageLoader.getInstance().addAsyncImage(view, url, loadAsAnimatedImage, processor) + AsyncImageLoader.getInstance().addAsyncImage(view, url, loadAsAnimatedImage, processor, controllerListener) return@execute } var lowResUrl = "" @@ -367,9 +369,10 @@ object ImageUtils { url: String?, loadAsAnimatedImage: Boolean = true, processor: Postprocessor? = null, - isIgnoreWidth: Boolean = false + isIgnoreWidth: Boolean = false, + controllerListener: BaseControllerListener? = null ) { - displayInternal(view, url, loadAsAnimatedImage, processor, isIgnoreWidth) + displayInternal(view, url, loadAsAnimatedImage, processor, isIgnoreWidth, controllerListener) } /** From beee098cfe38d11a64662788f6d5d35dd63e820e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=A8?= Date: Fri, 10 Jan 2025 11:17:26 +0800 Subject: [PATCH 15/21] fix:https://sentry.shanqu.cc/organizations/lightgame/issues/423398/?project=22 --- .../gh/common/fragment/FragmentManagerExt.kt | 31 +------------------ .../java/com/gh/gamecenter/SearchActivity.kt | 13 ++++++++ 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/gh/common/fragment/FragmentManagerExt.kt b/app/src/main/java/com/gh/common/fragment/FragmentManagerExt.kt index 27313e54ee..56719ed8e4 100644 --- a/app/src/main/java/com/gh/common/fragment/FragmentManagerExt.kt +++ b/app/src/main/java/com/gh/common/fragment/FragmentManagerExt.kt @@ -10,16 +10,12 @@ fun FragmentManager.popBackStackAllowStateLoss() { fun FragmentManager.popBackStackAllowStateLoss(id: Int, flags: Int) { if (!isStateSaved) { popBackStack(id, flags) - } else { - hook { popBackStack(id, flags) } } } fun FragmentManager.popBackStackAllowStateLoss(name: String?, flags: Int) { if (!isStateSaved) { popBackStack(name, flags) - } else { - hook { popBackStack(name, flags) } } } @@ -29,34 +25,9 @@ fun FragmentManager.popBackStackImmediateAllowStateLoss(id: Int, flags: Int) = if (!isStateSaved) { popBackStackImmediate(id, flags) } else { - hook { popBackStackImmediate(id, flags) } + false } -fun FragmentManager.popBackStackImmediateAllowStateLoss(name: String?, flags: Int): Boolean = - if (!isStateSaved) { - popBackStackImmediate(name, flags) - } else { - hook { popBackStackImmediate(name, flags) } - } - -/** - * 通过反射将FragmentManager的mStateSaved和mStopped设为false,否则Activity在回调onSavedInstance以后, - * 调用Fragment的popBackStack和popBackStackImmediate方法会触发“java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState”的异常。 - * @see Sentry-418688 - */ -private fun FragmentManager.hook(callback: FragmentManager.() -> T): T { - val mStateSavedField = getField(this::class.java,"mStateSaved") - val stateSaved = mStateSavedField.get(this); - mStateSavedField.set(this, false) - val mStoppedField = getField(this::class.java,"mStopped") - val stopped = mStateSavedField.get(this); - mStoppedField.set(this, false) - val result = callback.invoke(this) - mStateSavedField.set(this, stateSaved) - mStoppedField.set(this, stopped) - return result -} - @Throws(NoSuchFieldException::class) private fun getField(clazz: Class<*>, name: String): Field { var cls: Class<*>? = clazz diff --git a/app/src/main/java/com/gh/gamecenter/SearchActivity.kt b/app/src/main/java/com/gh/gamecenter/SearchActivity.kt index 684aefa259..502faab721 100644 --- a/app/src/main/java/com/gh/gamecenter/SearchActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/SearchActivity.kt @@ -312,6 +312,19 @@ open class SearchActivity : BaseActivity() { // MtaHelper.onEvent("游戏搜索", "主动搜索", newSearchKey) } + override fun onResume() { + super.onResume() + val newSearchKey = searchEt.text.toString().trim { it <= ' ' } + if (newSearchKey.isBlank()) { + try { + popBackToFragment(SearchDefaultFragment::class.java.name) + } catch (e: Exception) { + // no implement + } + + } + } + protected open fun provideDao(): ISearchHistoryDao = SearchHistoryDao(this) open fun updateDisplayType(type: DisplayType) { From db4ac95094ef66f54217fefdccf9f8753bc094e1 Mon Sep 17 00:00:00 2001 From: yangfei Date: Fri, 10 Jan 2025 11:24:45 +0800 Subject: [PATCH 16/21] =?UTF-8?q?feat:=20=E5=90=8C=E6=AD=A5=E5=95=86?= =?UTF-8?q?=E4=B8=9A=E7=89=88VA=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=9D=83?= =?UTF-8?q?=E9=99=90=E9=97=AE=E9=A2=98=E3=80=82=20fix:=20=E5=AE=9E?= =?UTF-8?q?=E5=90=8D=E8=AE=A4=E8=AF=81=E8=B6=85=E5=A4=A7UI=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20fix:=20sentry=20va=20relative=20log.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vasdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vasdk b/vasdk index 0a83d50210..a3162a7915 160000 --- a/vasdk +++ b/vasdk @@ -1 +1 @@ -Subproject commit 0a83d50210685333222a31b29eb94596db1ccdd5 +Subproject commit a3162a791577854e21ae6282608a297107464ba2 From a22858389b16222142d0e8c30d7ece89372a5a9c Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Fri, 10 Jan 2025 13:55:24 +0800 Subject: [PATCH 17/21] =?UTF-8?q?chore:=20=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=87=B3=205.38.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 816c571050..59e8777ea2 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,8 +7,8 @@ ext { targetSdkVersion = 30 // application info (每个大版本之间的 versionCode 增加 20) - versionCode = 1116 - versionName = "5.38.6" + versionCode = 1117 + versionName = "5.38.7" applicationId = "com.gh.gamecenter" applicationIdGat = "com.gh.gamecenter.intl" From e92d89d49868bb3476c57fb1037789b0ae6a5ace Mon Sep 17 00:00:00 2001 From: yangfei Date: Fri, 10 Jan 2025 17:44:03 +0800 Subject: [PATCH 18/21] =?UTF-8?q?fix:=20=E6=89=8B=E6=9C=BA=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81armeabi-v7a=E6=9E=B6=E6=9E=84=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=A0=B9=E6=8D=AE=E6=B8=B8=E6=88=8F=E6=9D=A5=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vasdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vasdk b/vasdk index a3162a7915..3fcd8d6bb4 160000 --- a/vasdk +++ b/vasdk @@ -1 +1 @@ -Subproject commit a3162a791577854e21ae6282608a297107464ba2 +Subproject commit 3fcd8d6bb4b58044cd301f84a3989643dab5f2a9 From c6f70d1b4c5028bbeced00ece4a4f02f87f92879 Mon Sep 17 00:00:00 2001 From: yangfei Date: Tue, 14 Jan 2025 16:23:01 +0800 Subject: [PATCH 19/21] =?UTF-8?q?fix:=20va=5Fcore=E8=BF=9B=E7=A8=8B?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=90=AF=E5=8A=A8=E5=AF=BC=E8=87=B4aidl?= =?UTF-8?q?=E7=9A=84NPE=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vasdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vasdk b/vasdk index 3fcd8d6bb4..56a5d9bd8d 160000 --- a/vasdk +++ b/vasdk @@ -1 +1 @@ -Subproject commit 3fcd8d6bb4b58044cd301f84a3989643dab5f2a9 +Subproject commit 56a5d9bd8d9e317b52a6a299fa90af9a94f524c9 From c215bd195e7816cce2352c3eb965b9de463ad911 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Tue, 14 Jan 2025 16:27:43 +0800 Subject: [PATCH 20/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A2=84?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E8=8E=B7=E5=8F=96=E8=B5=84=E6=BA=90=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=9C=8D=E5=8A=A1=E7=AB=AF=E6=8A=A5=E9=94=99=E6=9C=AA?= =?UTF-8?q?=E8=83=BD=E6=AD=A3=E7=A1=AE=E5=A4=84=E7=90=86=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ndownload | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ndownload b/ndownload index 02ad0aa911..edeefdffa6 160000 --- a/ndownload +++ b/ndownload @@ -1 +1 @@ -Subproject commit 02ad0aa911b20303b2d27a67b25461e223e37c79 +Subproject commit edeefdffa646e25d355d7fabe61e91fb7abfd52e From ab7668fd8159f6e226dfb1c6a214e13dea482826 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Wed, 15 Jan 2025 09:19:40 +0800 Subject: [PATCH 21/21] =?UTF-8?q?chore:=20=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=87=B3=205.38.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 59e8777ea2..4d9c5ab595 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,8 +7,8 @@ ext { targetSdkVersion = 30 // application info (每个大版本之间的 versionCode 增加 20) - versionCode = 1117 - versionName = "5.38.7" + versionCode = 1118 + versionName = "5.38.8" applicationId = "com.gh.gamecenter" applicationIdGat = "com.gh.gamecenter.intl"