From f0ef8e9dcd32823f2a1a231a1abc9d193977ccaa Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Tue, 5 Mar 2024 09:18:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=8A=A0=E5=85=A5SmsF=E9=A2=84=E8=A7=88=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E8=AE=A1=E5=88=92=EF=BC=88=E5=9C=A8=E7=BA=BF=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=AF=8F=E5=91=A8=E6=9E=84=E5=BB=BA=E7=89=88=EF=BC=89=20#416?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 23 +++++++++++++-- .../sms/forwarder/activity/MainActivity.kt | 2 +- .../sms/forwarder/fragment/AboutFragment.kt | 29 ++++++++++++++++++- .../idormy/sms/forwarder/utils/AppUtils.kt | 2 +- .../idormy/sms/forwarder/utils/Constants.kt | 4 ++- .../sms/forwarder/utils/SettingUtils.kt | 3 ++ .../forwarder/utils/sdkinit/XUpdateInit.kt | 22 ++++++++++---- app/src/main/res/layout/fragment_about.xml | 29 +++++++++++++++++-- app/src/main/res/values-en/strings.xml | 13 +++++---- app/src/main/res/values-en/styles_widget.xml | 14 ++++----- app/src/main/res/values-zh-rCN/strings.xml | 3 ++ app/src/main/res/values-zh-rTW/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/values/styles_widget.xml | 6 ++-- 14 files changed, 124 insertions(+), 32 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 98a7f432..c8700395 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,8 +39,15 @@ android { minSdkVersion build_versions.min_sdk targetSdkVersion build_versions.target_sdk versionCode build_versions.version_code - versionName build_versions.version_name + //版本号拼接编译日期 + def date = new Date().format("yyMMdd", TimeZone.getTimeZone("GMT+08")) + versionName = "${build_versions.version_name}.${date}" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + //编译时间 + def time = new Date().format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT+08")) + buildConfigField "String", "BUILD_TIME", "\"${time}\"" + //Git 的 commit ID + buildConfigField "String", "GIT_COMMIT_ID", getGitCommitId() multiDexEnabled true //vectorDrawables.useSupportLibrary = true @@ -164,12 +171,11 @@ android { android.applicationVariants.configureEach { variant -> // Assigns a different version code for each output APK. variant.outputs.each { output -> - def date = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08")) //noinspection GrDeprecatedAPIUsage def abiName = output.getFilter(com.android.build.OutputFile.ABI) if (abiName == null) abiName = "universal" output.versionCodeOverride = abiCodes.get(abiName, 0) * 100000 + variant.versionCode - output.outputFileName = "SmsF_${versionName}_${output.versionCode}_${abiName}_${date}_${variant.name}.apk" + output.outputFileName = "SmsF_${versionName}_${output.versionCode}_${abiName}_${variant.name}.apk" } } @@ -317,3 +323,14 @@ dependencies { apply from: 'x-library.gradle' //walle多渠道打包 //apply from: 'multiple-channel.gradle' + +//获取 commit ID +static def getGitCommitId() { + try { + def commitId = 'git rev-parse --short HEAD'.execute().text.trim() + return "\"$commitId\"" + } catch (Exception e) { + e.printStackTrace() + return "\"\"" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt index 71e19fdc..870d7323 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/MainActivity.kt @@ -178,7 +178,7 @@ class MainActivity : BaseActivity(), DrawerAdapter.OnItemS //仅当开启自动检查且有网络时自动检查更新/获取提示 if (SettingUtils.autoCheckUpdate && NetworkUtils.isHaveInternet()) { showTips(this) - XUpdateInit.checkUpdate(this, false) + XUpdateInit.checkUpdate(this, false, SettingUtils.joinPreviewProgram) } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt index d7d17bd6..b982696f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/AboutFragment.kt @@ -4,6 +4,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.idormy.sms.forwarder.App +import com.idormy.sms.forwarder.BuildConfig import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.core.BaseFragment import com.idormy.sms.forwarder.core.webview.AgentWebActivity @@ -68,11 +69,19 @@ class AboutFragment : BaseFragment(), SuperTextView.OnSup binding!!.scbAutoCheckUpdate.setOnCheckedChangeListener { _, isChecked -> SettingUtils.autoCheckUpdate = isChecked } + + binding!!.sbJoinPreviewProgram.isChecked = SettingUtils.joinPreviewProgram + binding!!.sbJoinPreviewProgram.setOnCheckedChangeListener { _, isChecked -> + SettingUtils.joinPreviewProgram = isChecked + if (isChecked) { + XToastUtils.success(getString(R.string.join_preview_program_tips)) + } + } } override fun initListeners() { binding!!.btnUpdate.setOnClickListener { - XUpdateInit.checkUpdate(requireContext(), true) + XUpdateInit.checkUpdate(requireContext(), true, SettingUtils.joinPreviewProgram) } binding!!.btnCache.setOnClickListener { HistoryUtils.clearPreference() @@ -107,6 +116,8 @@ class AboutFragment : BaseFragment(), SuperTextView.OnSup AgentWebActivity.goWeb(context, getString(R.string.url_project_gitee)) } + binding!!.menuJoinPreviewProgram.setOnSuperTextViewClickListener(this) + binding!!.menuVersion.setOnSuperTextViewClickListener(this) binding!!.menuWechatMiniprogram.setOnSuperTextViewClickListener(this) binding!!.menuDonation.setOnSuperTextViewClickListener(this) binding!!.menuUserProtocol.setOnSuperTextViewClickListener(this) @@ -116,6 +127,22 @@ class AboutFragment : BaseFragment(), SuperTextView.OnSup @SingleClick override fun onClick(v: SuperTextView) { when (v.id) { + R.id.menu_join_preview_program -> { + XToastUtils.info(getString(R.string.join_preview_program_tips)) + } + + R.id.menu_version -> { + XToastUtils.info( + String.format( + getString(R.string.about_app_version_tips), + AppUtils.getAppVersionName(), + AppUtils.getAppVersionCode(), + BuildConfig.BUILD_TIME, + BuildConfig.GIT_COMMIT_ID + ) + ) + } + R.id.menu_donation -> { previewMarkdown(this, getString(R.string.about_item_donation_link), getString(R.string.url_donation_link), false) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/AppUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/AppUtils.kt index 961a114f..40e9346b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/AppUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/AppUtils.kt @@ -84,7 +84,7 @@ object AppUtils { return try { val pm: PackageManager = App.context.packageManager val pi: PackageInfo = pm.getPackageInfo(packageName, 0) - pi.versionName + pi.versionName ?: "" } catch (e: PackageManager.NameNotFoundException) { e.printStackTrace() Log.e("AppUtils", "getAppVersionName: ${e.message}") diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt index 0fb6924a..64088429 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt @@ -24,6 +24,7 @@ object TaskWorker { //初始化相关 const val AUTO_CHECK_UPDATE = "auto_check_update" +const val JOIN_PREVIEW_PROGRAM = "join_preview_program" const val IS_AGREE_PRIVACY_KEY = "is_agree_privacy_key" //数据库 @@ -180,8 +181,9 @@ const val EVENT_LOAD_APP_LIST = "EVENT_LOAD_APP_LIST" const val EVENT_KEY_SIM_SLOT = "EVENT_KEY_SIM_SLOT" const val EVENT_KEY_PHONE_NUMBERS = "EVENT_KEY_PHONE_NUMBERS" -//在线升级URL +//在线升级&预览计划URL const val KEY_UPDATE_URL = "https://xupdate.ppps.cn/update/checkVersion" +const val KEY_PREVIEW_URL = "https://xupdate.ppps.cn/preview/checkVersion" //HttpServer相关 const val HTTP_SERVER_PORT = 5000 diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt index 4236c9b4..3e21bc48 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt @@ -10,6 +10,9 @@ class SettingUtils private constructor() { //是否启动时检查更新 var autoCheckUpdate: Boolean by SharedPreference(AUTO_CHECK_UPDATE, true) + //是否加入SmsF预览体验计划 + var joinPreviewProgram: Boolean by SharedPreference(JOIN_PREVIEW_PROGRAM, false) + //是否同意隐私政策 var isAgreePrivacy: Boolean by SharedPreference(IS_AGREE_PRIVACY_KEY, false) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XUpdateInit.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XUpdateInit.kt index 0f68d281..ab106088 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XUpdateInit.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XUpdateInit.kt @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.utils.sdkinit import android.app.Application import android.content.Context import com.idormy.sms.forwarder.App +import com.idormy.sms.forwarder.BuildConfig +import com.idormy.sms.forwarder.utils.KEY_PREVIEW_URL import com.idormy.sms.forwarder.utils.KEY_UPDATE_URL import com.idormy.sms.forwarder.utils.update.CustomUpdateDownloader import com.idormy.sms.forwarder.utils.update.CustomUpdateFailureListener @@ -36,17 +38,27 @@ class XUpdateInit private constructor() { //.isAutoMode(false) //设置默认公共请求参数 .param("versionCode", UpdateUtils.getVersionCode(application)) - .param("appKey", application.packageName) //这个必须设置!实现网络请求功能。 + .param("appKey", application.packageName) + //设置预览计划请求参数 + .param("versionName", UpdateUtils.getVersionName(application)) + .param("buildTime", BuildConfig.BUILD_TIME) + .param("gitCommitId", BuildConfig.GIT_COMMIT_ID) + //这个必须设置!实现网络请求功能。 .setIUpdateHttpService(XHttpUpdateHttpServiceImpl()) - .setIUpdateDownLoader(CustomUpdateDownloader()) //这个必须初始化 + .setIUpdateDownLoader(CustomUpdateDownloader()) + //这个必须初始化 .init(application) } /** * 进行版本更新检查 */ - fun checkUpdate(context: Context, needErrorTip: Boolean) { - checkUpdate(context, KEY_UPDATE_URL, needErrorTip) + fun checkUpdate(context: Context, needErrorTip: Boolean, joinPreviewProgram: Boolean) { + if (joinPreviewProgram) { + checkUpdate(context, KEY_PREVIEW_URL, needErrorTip) + } else { + checkUpdate(context, KEY_UPDATE_URL, needErrorTip) + } } /** @@ -61,7 +73,7 @@ class XUpdateInit private constructor() { return } XUpdate.newBuild(context).updateUrl(url).update() - XUpdate.get().setOnUpdateFailureListener(CustomUpdateFailureListener(needErrorTip)) + XUpdate.get().debug(App.isDebug).setOnUpdateFailureListener(CustomUpdateFailureListener(needErrorTip)) } } diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index 36e0bff8..acf90976 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -36,10 +36,35 @@ android:textColor="@color/xui_config_color_gray_6" android:textStyle="bold" /> + + + + + + + + + + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index d0e58c72..8ecfa312 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -41,9 +41,10 @@ Help About - App Version: %s + AppVer: %s + Version Name: %s\nVersion Code: %s\nBuild Time: %s\nGit Commit ID: %s Cache Size: %s - Frpc Version:%s + FrpcVer: %s WeChat MiniProgram Cache cleared Frpc Deleted, App restarting @@ -736,9 +737,11 @@ The SIM card information in the card slot %s has not been obtained Add Auto check - Check update - Clear cache - Delete Frpc + Check + Join Preview Program + Check out weekly builds of SmsF for early access to new features and bug fixes + Clear + Delete Channel Name/Status Send Channel/Status diff --git a/app/src/main/res/values-en/styles_widget.xml b/app/src/main/res/values-en/styles_widget.xml index b19a0096..c481a9aa 100644 --- a/app/src/main/res/values-en/styles_widget.xml +++ b/app/src/main/res/values-en/styles_widget.xml @@ -17,23 +17,21 @@ @@ -41,10 +39,8 @@