From 82ef0ce1bea49d2f3e71a1e701799e4ac9521eac Mon Sep 17 00:00:00 2001 From: yangfei Date: Wed, 11 Oct 2023 16:53:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20VA=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- .gitmodules | 3 + app/build.gradle | 24 +- .../java/com/gh/vspace/ExternalGameUsage.kt | 79 +- .../ExternalGameAdapter.kt | 5 + .../ExternalGameViewHolder.kt | 1 + .../InstallExternalGameFragment.kt | 14 +- .../res/layout/layout_external_game_item.xml | 8 + app/src/internal/res/values/ids.xml | 2 + app/src/internal/res/values/strings.xml | 1 + app/src/main/AndroidManifest.xml | 28 +- .../main/java/com/gh/ad/AdDelegateHelper.kt | 11 +- app/src/main/java/com/gh/ad/LaunchAdImpl.kt | 44 + .../base/GlobalActivityLifecycleObserver.kt | 6 + .../main/java/com/gh/common/DefaultJsApi.kt | 2 +- .../gh/common/chain/ValidateVSpaceHandler.kt | 2 +- .../java/com/gh/common/constant/Config.java | 63 ++ .../com/gh/common/provider/AppProviderImpl.kt | 3 + .../util/ArchiveDownloadButtonHelper.kt | 2 - .../com/gh/common/util/DownloadObserver.kt | 7 + .../common/util/GameActivityDownloadHelper.kt | 2 +- .../com/gh/common/util/NewFlatLogUtils.kt | 6 +- .../java/com/gh/gamecenter/MainActivity.java | 36 +- .../java/com/gh/gamecenter/SkipActivity.java | 25 + .../com/gh/gamecenter/entity/AppEntity.kt | 4 +- .../com/gh/gamecenter/entity/VNewSetting.kt | 42 + .../packagehelper/PackageRepository.kt | 49 +- .../packagehelper/PackageViewModel.kt | 4 +- .../personal/HaloPersonalFragment.kt | 8 +- .../retrofit/service/VApiService.kt | 14 + ...ExternalGamesUsage.java => ITestCase.java} | 4 +- .../main/java/com/gh/vspace/VArchiveHelper.kt | 93 +- app/src/main/java/com/gh/vspace/VHelper.kt | 824 +++++++++++++----- .../gh/vspace/VSpace32NewDialogFragment.kt | 307 +++++++ .../vspace/VSpaceUpdate32NewDialogFragment.kt | 303 +++++++ .../gapps/GAppsDownloadDialogFragment.kt | 2 +- .../com/gh/vspace/shortcut/ShortcutManager.kt | 30 +- .../main/java/com/halo/assistant/HaloApp.java | 7 + .../main/res/layout/dialog_vspace_32_new.xml | 110 +++ .../layout/dialog_vspace_update_32_new.xml | 95 ++ build.gradle | 16 +- dependencies.gradle | 6 +- dependencies_vasdk.gradle | 30 + gradle.properties | 1 + .../gamecenter/common/constant/Constants.java | 6 + .../common/constant/EntranceConsts.java | 4 + .../gamecenter/common/constant/RouteConsts.kt | 2 + module_core/proguard-rules.pro | 6 +- .../gamecenter/core/provider/IAppProvider.kt | 2 + .../gamecenter/setting/view/AboutFragment.kt | 10 + scripts/meta_build.sh | 56 +- setting_vasdk.gradle | 57 ++ settings.gradle | 5 +- vasdk | 1 + vspace-bridge | 2 +- 55 files changed, 2154 insertions(+), 324 deletions(-) create mode 100644 app/src/main/java/com/gh/ad/LaunchAdImpl.kt create mode 100644 app/src/main/java/com/gh/gamecenter/entity/VNewSetting.kt rename app/src/main/java/com/gh/vspace/{IExternalGamesUsage.java => ITestCase.java} (51%) create mode 100644 app/src/main/java/com/gh/vspace/VSpace32NewDialogFragment.kt create mode 100644 app/src/main/java/com/gh/vspace/VSpaceUpdate32NewDialogFragment.kt create mode 100644 app/src/main/res/layout/dialog_vspace_32_new.xml create mode 100644 app/src/main/res/layout/dialog_vspace_update_32_new.xml create mode 100644 dependencies_vasdk.gradle create mode 100644 setting_vasdk.gradle create mode 160000 vasdk diff --git a/.gitignore b/.gitignore index 98d8864bd4..ae637c2a1b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,6 @@ build/ release-app/ test-app/ scripts/apk-channel/ -app/src/test/java/com/gh/gamecenter \ No newline at end of file +app/src/test/java/com/gh/gamecenter +app/src/main/assets-debug/ +app/src/main/assets-release/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 7cbef87053..4a2a579848 100644 --- a/.gitmodules +++ b/.gitmodules @@ -11,3 +11,6 @@ [submodule "ndownload"] path = ndownload url = ../../../android/ndownload.git +[submodule "vasdk"] + path = vasdk + url = ../../../sdg/android/vasdk.git diff --git a/app/build.gradle b/app/build.gradle index 5ea0cf0b40..39fd3c968f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -75,7 +75,7 @@ android { versionName rootProject.ext.versionName applicationId rootProject.ext.applicationId - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt', 'proguard-fresco.txt' + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt', 'proguard-fresco.txt', rootProject.ext.va_proguard_rules String CORE_EVENT_GAME_CATEGORY = "" @@ -164,6 +164,15 @@ android { flavorDimensions("env", "region") sourceSets { + + debug { + assets.srcDirs += 'src/main/assets-debug' + } + + release { + assets.srcDirs += 'src/main/assets-release' + } + publish { java.srcDirs = ['src/main/java', "src/default/java"] } @@ -368,7 +377,7 @@ dependencies { kapt "com.alibaba:arouter-compiler:$arouterVersion" implementation project(':ndownload') - implementation project(':vspace-bridge:vspace') + implementation project(':vspace-bridge') implementation (project(':module_common')) { exclude group: 'androidx.swiperefreshlayout' @@ -408,13 +417,22 @@ dependencies { exclude group: 'androidx.swiperefreshlayout' } internalImplementation(project(':module_internal_test')) - // 根据BUILD_PUSH_TYPE决定使用哪个推送SDK,目前默认使用阿里云推送 def pushProject = findProperty('BUILD_PUSH_TYPE') == 'jg' ? project(':feature:jg_push') : project(':feature:acloud_push') implementation(pushProject) { exclude group: 'androidx.swiperefreshlayout' } + + implementation(project(":va-lib")) + implementation(project(':va-main')) { + exclude group: 'androidx.swiperefreshlayout' + } + debugImplementation "com.bytedance.tools.codelocator:codelocator-core:2.0.3" + compileOnly project(":va-core") + compileOnly project(":va-plugin-host-lib") + implementation project(":va-plugin-host") + implementation project(":va-archive") } File propFile = file('sign.properties') diff --git a/app/src/internal/java/com/gh/vspace/ExternalGameUsage.kt b/app/src/internal/java/com/gh/vspace/ExternalGameUsage.kt index 584c697d1e..04d275fb7b 100644 --- a/app/src/internal/java/com/gh/vspace/ExternalGameUsage.kt +++ b/app/src/internal/java/com/gh/vspace/ExternalGameUsage.kt @@ -1,32 +1,85 @@ package com.gh.vspace import android.content.Intent +import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.Keep import com.gh.gamecenter.R +import com.gh.gamecenter.core.utils.ToastUtils import com.gh.gamecenter.databinding.LayoutPersonalOtherItemBinding import com.gh.vspace.installexternalgames.InstallExternalGameActivity +import com.lg.vspace.VaApp +import com.lg.vspace.plugin.host.PluginHelper +import com.lightgame.utils.Utils +import com.lightgame.utils.toast.ToastHelper +import com.lody.virtual.client.core.VirtualCore +import java.io.File @Keep -class ExternalGameUsage : IExternalGamesUsage { - override fun addInstallExternalGameButton(viewParent: ViewGroup) { +class ExternalGameUsage : ITestCase { + + private fun buttonTemplate(viewParent: ViewGroup, id: Int, fn: (LayoutPersonalOtherItemBinding) -> Unit) { val context = viewParent.context - viewParent.findViewById(R.id.install_game_from_external) ?: run { + viewParent.findViewById(id) ?: run { val binding = LayoutPersonalOtherItemBinding.inflate(LayoutInflater.from(context)).apply { - root.id = R.id.install_game_from_external - titleTv.text = context.getString(R.string.title_install_external_game) - iconIv.setImageResource(R.drawable.ic_personal_my_game) - root.setOnClickListener { - VHelper.connectService { - context.startActivity( - InstallExternalGameActivity.getIntent(context) - .apply { flags = flags or Intent.FLAG_ACTIVITY_NEW_TASK }) - } - } + root.id = id + fn(this) } viewParent.addView(binding.root, 0) } } + + override fun addInstallExternalGameButton(viewParent: ViewGroup) { + val context = viewParent.context + buttonTemplate(viewParent, R.id.install_game_from_external) { + it.titleTv.text = context.getString(R.string.title_install_external_game) + it.iconIv.setImageResource(R.drawable.ic_personal_my_game) + it.root.setOnClickListener { + VHelper.connectService { + context.startActivity( + InstallExternalGameActivity.getIntent(context).apply { flags = flags or Intent.FLAG_ACTIVITY_NEW_TASK }) + } + } + } + } + + override fun addInstallPluginButton(viewParent: ViewGroup) { + buttonTemplate(viewParent, R.id.install_plugin) { + it.titleTv.text = "安装64位插件" + it.root.setOnClickListener { + val file = File("/data/local/tmp/gh-plugins/artifacts.zip") + if (file.exists()) { + Utils.log(VHelper.LOG_TAG, "有本地更新文件: 64位插件") + PluginHelper.getInstance().updatePlugin(file, VHelper.getCwBaseLogParams()) + } else { + ToastUtils.showToast("data/local/tmp没有push文件") + } + } + } + } + + override fun addInstallPlugin32Button(viewParent: ViewGroup) { + buttonTemplate(viewParent, R.id.install_plugin_32) { + it.titleTv.text = "安装32位插件" + it.root.setOnClickListener { + val file = File("/data/local/tmp/gh-plugins/artifacts32.zip") + if (file.exists()) { + Utils.log(VHelper.LOG_TAG, "有本地更新文件: 32位插件") + VirtualCore.get().updatePlugin(file.absolutePath, "artifacts32.zip", + VHelper.getCwBaseLogParams().let { + val bundle = Bundle() + for ((key, value) in it) { + bundle.putString(key, value) + } + bundle + }) + + } else { + ToastUtils.showToast("data/local/tmp没有push文件") + } + } + } + } } \ No newline at end of file diff --git a/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameAdapter.kt b/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameAdapter.kt index 534b51a36a..61b9c5ec44 100644 --- a/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameAdapter.kt +++ b/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameAdapter.kt @@ -25,6 +25,11 @@ class ExternalGameAdapter(private val games: List, private 路径:${item.apkPath} """.trimIndent() } + + holder.update.setOnClickListener { + onItemClickListener.onItemClick(item, OnItemClickListener.ClickType.CLICK_INSTALL) + } + holder.install.goneIf(item.isInstalled) { holder.install.setOnClickListener { onItemClickListener.onItemClick(item, OnItemClickListener.ClickType.CLICK_INSTALL) diff --git a/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameViewHolder.kt b/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameViewHolder.kt index 3a339b0088..9ab762e115 100644 --- a/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameViewHolder.kt +++ b/app/src/internal/java/com/gh/vspace/installexternalgames/ExternalGameViewHolder.kt @@ -8,4 +8,5 @@ class ExternalGameViewHolder(binding: LayoutExternalGameItemBinding) : RecyclerV val install = binding.btnInstall val uninstall = binding.btnUninstall val start = binding.btnStart + val update = binding.btnUpdate } \ No newline at end of file diff --git a/app/src/internal/java/com/gh/vspace/installexternalgames/InstallExternalGameFragment.kt b/app/src/internal/java/com/gh/vspace/installexternalgames/InstallExternalGameFragment.kt index 9b9e3499c9..26d16ac40a 100644 --- a/app/src/internal/java/com/gh/vspace/installexternalgames/InstallExternalGameFragment.kt +++ b/app/src/internal/java/com/gh/vspace/installexternalgames/InstallExternalGameFragment.kt @@ -16,6 +16,7 @@ import com.gh.gamecenter.databinding.FragmentInstallExternalGamesBinding import com.gh.vspace.VHelper import com.halo.assistant.HaloApp import com.lg.vspace.VirtualAppManager +import com.lightgame.download.DownloadEntity import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -105,6 +106,15 @@ class InstallExternalGameFragment : ToolbarFragment(), OnItemClickListener { private fun install(externalGameUiState: ExternalGameUiState) { val bit = externalGameUiState.externalGameEntity.cpuAbi.let { if (it.size == 1 && it.contains("armeabi-v7a")) "32" else "64" } + + VHelper.install(requireContext(), DownloadEntity().apply { + externalGameUiState.externalGameEntity.apply { + packageName = apkPackageName + path = apkPath + } + }, true) + + if (VHelper.showDialogIfVSpaceIsNeeded( requireContext(), "", @@ -144,7 +154,9 @@ class InstallExternalGameFragment : ToolbarFragment(), OnItemClickListener { com.gh.gamecenter.BuildConfig.VERSION_NAME, HaloApp.getInstance().channel, "", - "" + "", + com.lg.core.BuildConfig.VERSION_NAME, + HaloApp.getInstance().oaid ) requireActivity().startActivity(intent) } diff --git a/app/src/internal/res/layout/layout_external_game_item.xml b/app/src/internal/res/layout/layout_external_game_item.xml index 066c698eec..a623ca3c24 100644 --- a/app/src/internal/res/layout/layout_external_game_item.xml +++ b/app/src/internal/res/layout/layout_external_game_item.xml @@ -24,6 +24,14 @@ android:visibility="gone" tools:visibility="visible" /> +