From 302fbc0fd695e590b8fdb2a223c66f158fbd5744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=89=E9=B2=AB=E9=9B=AA=E7=8B=90?= <139336664+ArcticFoxPro@users.noreply.github.com> Date: Fri, 5 Apr 2024 23:04:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E9=83=A8=E5=88=86=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E3=80=81=E5=BD=93=E6=9C=AA=E8=8E=B7=E5=8F=96=E5=88=B0?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=8C=85=E5=A4=A7=E5=B0=8F=E6=97=B6=E5=88=86?= =?UTF-8?q?=E4=BA=AB=E5=AD=97=E7=AC=A6=E4=B8=B2=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E3=80=81Json=20=E8=AF=A6=E6=83=85=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E6=A1=86=E6=98=BE=E7=A4=BA=E6=A0=87=E9=A2=98=E3=80=81?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E5=AF=B9=E8=AF=9D=E6=A1=86=E6=96=87=E6=A1=88?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20(#31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化:更换设置、用户协议和报错图标,新增 Json 详情对话框图标 - 修复:当未获取到安装包大小时分享字符串显示大小为“-0.00 MB”的问题 - 优化:Json 详情对话框显示“Json 详情”标题 - 优化:报错对话框文案 --- - 代码中去除部分 if-else 单行语句的大括号 --- app/build.gradle.kts | 2 +- .../xiaoniu/qqversionlist/ui/MainActivity.kt | 97 +++++++++---------- .../qqversionlist/ui/VersionAdapter.kt | 10 +- .../xiaoniu/qqversionlist/util/InfoUtil.kt | 6 +- app/src/main/res/drawable/alert_line.xml | 9 ++ app/src/main/res/drawable/braces_line.xml | 9 ++ app/src/main/res/drawable/clipboard_line.xml | 9 ++ ...{download_line_2.xml => download_line.xml} | 2 +- .../main/res/drawable/error_warning_line.xml | 9 -- ...ile_copy_2_line.xml => file_copy_line.xml} | 0 app/src/main/res/drawable/file_text_line.xml | 9 ++ app/src/main/res/drawable/file_user_line.xml | 9 -- app/src/main/res/drawable/settings_line.xml | 2 +- app/src/main/res/layout/dialog_guess.xml | 4 +- app/src/main/res/layout/success_button.xml | 4 +- 15 files changed, 97 insertions(+), 84 deletions(-) create mode 100644 app/src/main/res/drawable/alert_line.xml create mode 100644 app/src/main/res/drawable/braces_line.xml create mode 100644 app/src/main/res/drawable/clipboard_line.xml rename app/src/main/res/drawable/{download_line_2.xml => download_line.xml} (63%) delete mode 100644 app/src/main/res/drawable/error_warning_line.xml rename app/src/main/res/drawable/{file_copy_2_line.xml => file_copy_line.xml} (100%) create mode 100644 app/src/main/res/drawable/file_text_line.xml delete mode 100644 app/src/main/res/drawable/file_user_line.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f9bcc71f..5d964601 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -27,7 +27,7 @@ android { minSdk = 24 targetSdk = 34 versionCode = gitCommitCount - versionName = "1.2.3-$gitCommitHash" + versionName = "1.2.4-$gitCommitHash" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/xiaoniu/qqversionlist/ui/MainActivity.kt b/app/src/main/java/com/xiaoniu/qqversionlist/ui/MainActivity.kt index d2d6bb5d..0680c691 100644 --- a/app/src/main/java/com/xiaoniu/qqversionlist/ui/MainActivity.kt +++ b/app/src/main/java/com/xiaoniu/qqversionlist/ui/MainActivity.kt @@ -97,6 +97,7 @@ class MainActivity : AppCompatActivity() { return (dp * resources.displayMetrics.density).toInt() } +// 未来可期的 px to dp 函数 // private fun Context.pxToDp(px: Int): Int { // return (px / resources.displayMetrics.density).toInt() // } @@ -110,9 +111,8 @@ class MainActivity : AppCompatActivity() { // 对于每一项都添加底部间距 bottom = space // 如果不是第一行,则添加顶部间距 - if (parent.getChildAdapterPosition(view) != 0) { - top = space - } + if (parent.getChildAdapterPosition(view) != 0) top = space + } } } @@ -120,6 +120,7 @@ class MainActivity : AppCompatActivity() { private fun showUADialog(agreed: Boolean) { + // 屏幕高度获取 val screenHeight = Resources.getSystem().displayMetrics.heightPixels //用户协议,传参内容表示先前是否同意过协议 @@ -128,7 +129,7 @@ class MainActivity : AppCompatActivity() { val dialogUA = MaterialAlertDialogBuilder(this) .setTitle("用户协议") - .setIcon(R.drawable.file_user_line) + .setIcon(R.drawable.file_text_line) .setView(userAgreementBinding.root) .setCancelable(false) .create() @@ -136,12 +137,17 @@ class MainActivity : AppCompatActivity() { val constraintSet = ConstraintSet() constraintSet.clone(userAgreementBinding.userAgreement) + // 屏幕方向判断,不同方向分别设置相应的约束布局用户协议子项高度 val currentConfig = resources.configuration - if (currentConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { - constraintSet.constrainHeight(R.id.UA_text, screenHeight / 6) - } else if (currentConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { - constraintSet.constrainHeight(R.id.UA_text, screenHeight / 2) - } + if (currentConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) constraintSet.constrainHeight( + R.id.UA_text, + screenHeight / 6 + ) + else if (currentConfig.orientation == Configuration.ORIENTATION_PORTRAIT) constraintSet.constrainHeight( + R.id.UA_text, + screenHeight / 2 + ) + constraintSet.applyTo(userAgreementBinding.userAgreement) @@ -152,12 +158,9 @@ class MainActivity : AppCompatActivity() { userAgreementBinding.uaButtonDisagree.setOnClickListener { SpUtil.putInt("userAgreement", 0) - //不同意直接退出程序 - finish() - } - if (agreed) { - userAgreementBinding.uaButtonDisagree.text = "撤回同意并退出" + finish() // 不同意直接退出程序 } + if (agreed) userAgreementBinding.uaButtonDisagree.text = "撤回同意并退出" dialogUA.show() } @@ -169,13 +172,10 @@ class MainActivity : AppCompatActivity() { //这里的“getInt: userAgreement”的值代表着用户协议修订版本,后续更新协议版本后也需要在下面一行把“judgeUARead”+1,以此类推 val judgeUARead = 1 - if (SpUtil.getInt("userAgreement", 0) != judgeUARead) { - showUADialog(false) - } + if (SpUtil.getInt("userAgreement", 0) != judgeUARead) showUADialog(false) // 进度条动画 // https://github.com/material-components/material-components-android/blob/master/docs/components/ProgressIndicator.md - binding.progressLine.apply { showAnimationBehavior = LinearProgressIndicator.SHOW_NONE hideAnimationBehavior = LinearProgressIndicator.HIDE_ESCAPE @@ -205,8 +205,8 @@ class MainActivity : AppCompatActivity() { } withContext(Dispatchers.Main) { versionAdapter.setData(qqVersion) - //currentQQVersion = qqVersion.first().versionNumber - //大版本号也放持久化存储了,否则猜版 Shortcut 因为加载过快而获取不到东西 + // 舍弃 currentQQVersion = qqVersion.first().versionNumber + // 大版本号也放持久化存储了,否则猜版 Shortcut 因为加载过快而获取不到东西 SpUtil.putString( "versionBig", qqVersion.first().versionNumber ) @@ -229,11 +229,8 @@ class MainActivity : AppCompatActivity() { binding.rvContent.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) - if (dy > 0) { - binding.btnGuess.shrink() - } else if (dy < 0) { - binding.btnGuess.extend() - } + if (dy > 0) binding.btnGuess.shrink() + else if (dy < 0) binding.btnGuess.extend() } }) @@ -262,7 +259,7 @@ class MainActivity : AppCompatActivity() { message.length, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE ) - val aboutDialog = MaterialAlertDialogBuilder(this) + MaterialAlertDialogBuilder(this) .setTitle("关于") .setIcon(R.drawable.information_line) .setMessage(message) @@ -359,6 +356,7 @@ class MainActivity : AppCompatActivity() { } }) +// 舍弃 // dialogGuessBinding.spinnerVersion.setOnFocusChangeListener { _, hasFocus -> // if (hasFocus) { // val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager @@ -399,9 +397,9 @@ class MainActivity : AppCompatActivity() { if (versionSmall != 0) { SpUtil.putInt("versionSmall", versionSmall) }/*我偷懒了,因为我上面也有偷懒逻辑, - 为了防止 null,我在正式版猜版时默认填入了 0, - 但是我没处理下面涉及到持久化存储逻辑的语句,就把 0 存进去了, - 覆盖了原来的 15xxx 的持久化存储*/ + 为了防止 null,我在正式版猜版时默认填入了 0, + 但是我没处理下面涉及到持久化存储逻辑的语句,就把 0 存进去了, + 覆盖了原来的 15xxx 的持久化存储*/ guessUrl(versionBig, versionSmall, mode) @@ -438,12 +436,9 @@ class MainActivity : AppCompatActivity() { } - /** - * 获取文件大小(以MB为单位) - * - * @param urlString 文件的URL字符串 - * @param callback 回调函数,接收文件大小(以MB为单位)作为参数 - */ + /*获取文件大小(以MB为单位) + @param urlString 文件的URL字符串 + @param callback 回调函数,接收文件大小(以MB为单位)作为参数*/ private fun getFileSizeInMB(urlString: String, callback: (String) -> Unit) { CoroutineScope(Dispatchers.IO).launch { try { @@ -461,13 +456,14 @@ class MainActivity : AppCompatActivity() { e.printStackTrace() withContext(Dispatchers.Main) { callback("Error") + dialogError(e) } } } } - //https://downv6.qq.com/qqweb/QQ_1/android_apk/Android_8.9.75.XXXXX_64.apk + // https://downv6.qq.com/qqweb/QQ_1/android_apk/Android_8.9.75.XXXXX_64.apk private fun guessUrl(versionBig: String, versionSmall: Int, mode: String) { // 绑定 AlertDialog 加载对话框布局 val dialogLoadingBinding = DialogLoadingBinding.inflate(layoutInflater) @@ -484,7 +480,7 @@ class MainActivity : AppCompatActivity() { fun updateProgressDialogMessage(newMessage: String) { dialogLoadingBinding.loadingMessage.text = newMessage if (!progressDialog.isShowing) { - progressDialog.show()//更新文本后才显示对话框 + progressDialog.show()// 更新文本后才显示对话框 } } @@ -545,11 +541,7 @@ class MainActivity : AppCompatActivity() { vSmall += if (!SpUtil.getBoolean( "guessNot5", false ) - ) { - 5 - } else { - 1 - } + ) 5 else 1 successMaterialDialog.dismiss() status = STATUS_ONGOING } @@ -569,8 +561,13 @@ class MainActivity : AppCompatActivity() { type = "text/plain" putExtra( Intent.EXTRA_TEXT, - if (mode == MODE_OFFICIAL) "Android QQ $versionBig 正式版(大小:$appSize MB)\n\n下载地址:$link" - else "Android QQ $versionBig.$vSmall 测试版(大小:$appSize MB)\n\n下载地址:$link" + if (appSize != "Error" && appSize != "-0.00" && appSize != "0.00") { + if (mode == MODE_OFFICIAL) "Android QQ $versionBig 正式版(大小:$appSize MB)\n\n下载地址:$link" + else "Android QQ $versionBig.$vSmall 测试版(大小:$appSize MB)\n\n下载地址:$link" + } else { + if (mode == MODE_OFFICIAL) "Android QQ $versionBig 正式版\n\n下载地址:$link" + else "Android QQ $versionBig.$vSmall 测试版\n\n下载地址:$link" + } ) } startActivity( @@ -590,7 +587,7 @@ class MainActivity : AppCompatActivity() { Environment.DIRECTORY_DOWNLOADS, "Android_QQ_${versionBig}.${vSmall}_64.apk" ) - } else if (mode == MODE_OFFICIAL){ + } else if (mode == MODE_OFFICIAL) { request1.setDestinationInExternalPublicDir( Environment.DIRECTORY_DOWNLOADS, "Android_QQ_${versionBig}_64.apk" @@ -608,11 +605,7 @@ class MainActivity : AppCompatActivity() { vSmall += if (!SpUtil.getBoolean( "guessNot5", false ) - ) { - 5 - } else { - 1 - } + ) 5 else 1 } } @@ -621,9 +614,7 @@ class MainActivity : AppCompatActivity() { } STATUS_END -> { - if (mode != MODE_OFFICIAL) { - showToast("已停止猜测") - } + if (mode != MODE_OFFICIAL) showToast("已停止猜测") progressDialog.dismiss() break } diff --git a/app/src/main/java/com/xiaoniu/qqversionlist/ui/VersionAdapter.kt b/app/src/main/java/com/xiaoniu/qqversionlist/ui/VersionAdapter.kt index abe425b5..f87f0a0f 100644 --- a/app/src/main/java/com/xiaoniu/qqversionlist/ui/VersionAdapter.kt +++ b/app/src/main/java/com/xiaoniu/qqversionlist/ui/VersionAdapter.kt @@ -26,10 +26,10 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import android.widget.Toast -import androidx.core.view.setPadding import androidx.recyclerview.widget.RecyclerView import coil.load import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.xiaoniu.qqversionlist.R import com.xiaoniu.qqversionlist.data.QQVersionBean import com.xiaoniu.qqversionlist.databinding.ItemVersionBinding import com.xiaoniu.qqversionlist.databinding.ItemVersionDetailBinding @@ -187,8 +187,12 @@ class VersionAdapter : RecyclerView.Adapter() { val tv = TextView(context).apply { text = s setTextIsSelectable(true) - setPadding(100) + setPadding(100, 50, 100, 100) } - MaterialAlertDialogBuilder(context).setView(tv).show() + MaterialAlertDialogBuilder(context) + .setView(tv) + .setTitle("Json 详情") + .setIcon(R.drawable.braces_line) + .show() } } \ No newline at end of file diff --git a/app/src/main/java/com/xiaoniu/qqversionlist/util/InfoUtil.kt b/app/src/main/java/com/xiaoniu/qqversionlist/util/InfoUtil.kt index 5fb8584b..7e6cfd7a 100644 --- a/app/src/main/java/com/xiaoniu/qqversionlist/util/InfoUtil.kt +++ b/app/src/main/java/com/xiaoniu/qqversionlist/util/InfoUtil.kt @@ -35,9 +35,9 @@ object InfoUtil { fun Activity.dialogError(e: Exception) { runOnUiThread { MaterialAlertDialogBuilder(this) - .setTitle("程序出错,可前往 GitHub 反馈") - .setIcon(R.drawable.error_warning_line) - .setMessage(e.stackTraceToString()) + .setTitle("程序出错") + .setIcon(R.drawable.alert_line) + .setMessage("如需反馈,请前往 GitHub 仓库报告 Issue(s) 并随附以下信息:\n\n" + e.stackTraceToString()) .setPositiveButton("确定", null) .setCancelable(false) .setNeutralButton("复制", null) diff --git a/app/src/main/res/drawable/alert_line.xml b/app/src/main/res/drawable/alert_line.xml new file mode 100644 index 00000000..4643b2aa --- /dev/null +++ b/app/src/main/res/drawable/alert_line.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/braces_line.xml b/app/src/main/res/drawable/braces_line.xml new file mode 100644 index 00000000..2cf6ecb5 --- /dev/null +++ b/app/src/main/res/drawable/braces_line.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/clipboard_line.xml b/app/src/main/res/drawable/clipboard_line.xml new file mode 100644 index 00000000..24cbb581 --- /dev/null +++ b/app/src/main/res/drawable/clipboard_line.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/download_line_2.xml b/app/src/main/res/drawable/download_line.xml similarity index 63% rename from app/src/main/res/drawable/download_line_2.xml rename to app/src/main/res/drawable/download_line.xml index 6737e57e..62612833 100644 --- a/app/src/main/res/drawable/download_line_2.xml +++ b/app/src/main/res/drawable/download_line.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/error_warning_line.xml b/app/src/main/res/drawable/error_warning_line.xml deleted file mode 100644 index 4cb225d2..00000000 --- a/app/src/main/res/drawable/error_warning_line.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/file_copy_2_line.xml b/app/src/main/res/drawable/file_copy_line.xml similarity index 100% rename from app/src/main/res/drawable/file_copy_2_line.xml rename to app/src/main/res/drawable/file_copy_line.xml diff --git a/app/src/main/res/drawable/file_text_line.xml b/app/src/main/res/drawable/file_text_line.xml new file mode 100644 index 00000000..f5cc9754 --- /dev/null +++ b/app/src/main/res/drawable/file_text_line.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/file_user_line.xml b/app/src/main/res/drawable/file_user_line.xml deleted file mode 100644 index 55fbb041..00000000 --- a/app/src/main/res/drawable/file_user_line.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/settings_line.xml b/app/src/main/res/drawable/settings_line.xml index e5dca1ad..487cd036 100644 --- a/app/src/main/res/drawable/settings_line.xml +++ b/app/src/main/res/drawable/settings_line.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/layout/dialog_guess.xml b/app/src/main/res/layout/dialog_guess.xml index 890d513e..0821bf61 100644 --- a/app/src/main/res/layout/dialog_guess.xml +++ b/app/src/main/res/layout/dialog_guess.xml @@ -96,11 +96,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp" - android:paddingStart="2dp" + android:paddingStart="3dp" android:paddingEnd="0dp" android:text="鉴于 QQ 测试版可能存在不可预知的稳定性问题,您在下载及使用该测试版本之前,必须明确并确保自身具备足够的风险识别和承受能力。根据相关条款,您使用本软件时应当已了解并同意,因下载或使用 QQ 测试版而可能产生的任何直接或间接损失、损害以及其他不利后果,均由您自行承担全部责任。" android:textColor="?attr/colorPrimary" - android:textSize="11sp" + android:textSize="10sp" android:drawablePadding="4dp" app:drawableStartCompat="@drawable/error_warning_fill" /> diff --git a/app/src/main/res/layout/success_button.xml b/app/src/main/res/layout/success_button.xml index 94e7aaf2..236d4da2 100644 --- a/app/src/main/res/layout/success_button.xml +++ b/app/src/main/res/layout/success_button.xml @@ -48,7 +48,7 @@ style="?attr/materialIconButtonFilledTonalStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:icon="@drawable/download_line_2" /> + app:icon="@drawable/download_line" />