refactor(app): 移除激活相关功能并优化关于页面

- 移除了 ActivateActivity 和相关布局文件
- 更新了 AboutActivity,移除了过时的视图和逻辑
- 优化了 ApplicationListActivity 和 BookmarkManagerActivity 的代码结构
- 删除了未使用的 FunAdapter 和相关布局文件
- 更新了 LoginActivity,移除了与激活相关的代码
This commit is contained in:
Cold-Mint 2025-02-07 14:23:11 +08:00
parent db003678d5
commit 20e5e75a35
27 changed files with 216 additions and 1100 deletions

View File

@ -3,23 +3,31 @@ package com.coldmint.rust.pro
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.text.Html
import android.view.*
import com.coldmint.rust.core.web.ServerConfiguration
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import androidx.core.text.HtmlCompat
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databinding.ActivityAboutBinding
import com.coldmint.rust.pro.tool.AppSettings
import java.text.SimpleDateFormat
import java.util.Locale
class AboutActivity : BaseActivity<ActivityAboutBinding>() {
fun initView() {
private fun initView() {
try {
val packageInfo = packageManager.getPackageInfo(packageName, 0)
viewBinding.versionView.text = "v." + packageInfo.versionName
if (packageInfo != null) {
viewBinding.versionView.text = "v.${packageInfo.versionName}"
}
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
val year = Integer.valueOf(SimpleDateFormat("yyyy").format(System.currentTimeMillis()))
val year = Integer.valueOf(
SimpleDateFormat(
"yyyy",
Locale.getDefault()
).format(System.currentTimeMillis())
)
val copyright = String.format(getString(R.string.copyright), year)
viewBinding.copyRightView.text = copyright
val aboutText = """<h6>起源</h6>
@ -57,39 +65,12 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
|
|
""".trimMargin()
viewBinding.aboutView.text = Html.fromHtml(aboutText)
val time = AppSettings.getValue(com.coldmint.rust.pro.tool.AppSettings.Setting.ExpirationTime, 0.toLong())
if (time == 0.toLong()) {
viewBinding.expirationTimeView.text = getString(R.string.tourist_pattern)
} else {
val stringTime = ServerConfiguration.toStringTime(time)
viewBinding.expirationTimeView.text =
if (stringTime == ServerConfiguration.ForeverTime) {
getString(R.string.forever_time)
} else {
String.format(
getString(R.string.expiration_time_tip),
stringTime
)
}
}
viewBinding.aboutView.text =
HtmlCompat.fromHtml(aboutText, HtmlCompat.FROM_HTML_MODE_COMPACT)
}
fun initAction() {
viewBinding.privacyPolicyView.setOnClickListener {
val link =
ServerConfiguration.getRealLink("/resources/agreement/privacy_policy.html")
val thisIntent = Intent(this, BrowserActivity::class.java)
thisIntent.putExtra("link", link)
startActivity(thisIntent)
}
viewBinding.serviceAgreementView.setOnClickListener {
val link =
ServerConfiguration.getRealLink("/resources/agreement/service_agreement.html")
val thisIntent = Intent(this, BrowserActivity::class.java)
thisIntent.putExtra("link", link)
startActivity(thisIntent)
}
}
@ -103,6 +84,7 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
R.id.thanks -> {
startActivity(Intent(this, ThanksActivity::class.java))
}
R.id.libs -> {
startActivity(Intent(this, LibraryActivity::class.java))
}

View File

@ -1,301 +0,0 @@
package com.coldmint.rust.pro
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.text.SpannableString
import android.text.Spanned
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import android.view.View
import androidx.core.view.isVisible
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.coldmint.rust.core.dataBean.ApiResponse
import com.coldmint.rust.core.dataBean.CouponListDataBean
import com.coldmint.rust.core.dataBean.PlanDataBean
import com.coldmint.rust.core.interfaces.ApiCallBack
import com.coldmint.rust.core.tool.AppOperator
import com.coldmint.rust.core.web.ActivationApp
import com.coldmint.rust.core.web.Coupon
import com.coldmint.rust.core.web.ServerConfiguration
import com.coldmint.rust.pro.adapters.CouponAdapter
import com.coldmint.rust.pro.adapters.FunAdapter
import com.coldmint.rust.pro.adapters.PlanAdapter
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databean.FunctionInfo
import com.coldmint.rust.pro.databinding.ActivityActivateBinding
import com.coldmint.rust.pro.tool.AppSettings
import com.coldmint.rust.pro.tool.GlobalMethod
import com.coldmint.rust.pro.ui.StableLinearLayoutManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
class ActivateActivity : BaseActivity<ActivityActivateBinding>() {
var planAdapter: PlanAdapter? = null
var planId: String? = null
var couponId: Int? = null
/**
* 加载计划列表
* @param account String
*/
private fun loadPlanList(account: String) {
ActivationApp.instance.getPlanList(account, object : ApiCallBack<PlanDataBean> {
override fun onResponse(t: PlanDataBean) {
if (t.code == ServerConfiguration.Success_Code) {
val data = t.data
if (data != null && data.isNotEmpty()) {
val layoutManager = StableLinearLayoutManager(this@ActivateActivity)
layoutManager.orientation = RecyclerView.HORIZONTAL
viewBinding.recyclerview.layoutManager = layoutManager
viewBinding.couponRecyclerview.layoutManager =
StableLinearLayoutManager(this@ActivateActivity)
val adapter = PlanAdapter(this@ActivateActivity, data)
planAdapter = adapter
adapter.setItemEvent { i, itemPlanBinding, viewHolder, data ->
itemPlanBinding.linearLayout.setOnClickListener {
selectItemAndLoadInfo(data, adapter, i)
}
}
//默认加载第一个元素
selectItemAndLoadInfo(data[0], adapter, 0)
viewBinding.recyclerview.adapter = adapter
initAllFunctionList()
viewBinding.linearLayout.isVisible = false
viewBinding.nestedScrollView.isVisible = true
viewBinding.button.isVisible = true
}
} else {
showInfoToView(string = t.message)
}
}
override fun onFailure(e: Exception) {
showInfoToView(R.string.network_error)
}
})
}
/**
* 加载上下文菜单
* @param menu Menu
* @return Boolean
*/
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu_pay, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.order_list -> {
val thisIntent = Intent(this, OrderListActivity::class.java)
startActivity(thisIntent)
}
}
return super.onOptionsItemSelected(item)
}
/**
* 加载优惠券列表
* @param account String
*/
fun loadCouponList(account: String) {
Coupon.instance.list(account, object : ApiCallBack<CouponListDataBean> {
override fun onResponse(t: CouponListDataBean) {
val list = t.data
if (t.code == ServerConfiguration.Success_Code && list != null) {
val couponTip = String.format(getString(R.string.coupon_num), list.size)
viewBinding.couponView.text = couponTip
val adapter = CouponAdapter(this@ActivateActivity, list)
adapter.setItemEvent { i, itemCouponBinding, viewHolder, data ->
itemCouponBinding.useButton.setOnClickListener {
val finalPlanAdapter = planAdapter
if (finalPlanAdapter != null) {
couponId = data.id
finalPlanAdapter.setCoupon(null)
finalPlanAdapter.setCoupon(data)
selectItemAndLoadInfo(
finalPlanAdapter.getItemData(0),
finalPlanAdapter,
0
)
val spannableString =
SpannableString(data.describe + "[" + getString(R.string.clean) + "]")
viewBinding.couponDescribeView.movementMethod =
LinkMovementMethod.getInstance()
spannableString.setSpan(
object : ClickableSpan() {
override fun onClick(widget: View) {
couponId = null
finalPlanAdapter.setCoupon(null)
viewBinding.couponDescribeView.text =
getString(R.string.coupon_not_use)
selectItemAndLoadInfo(
finalPlanAdapter.getItemData(0),
finalPlanAdapter,
0
)
}
},
data.describe.length,
spannableString.length,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
);
viewBinding.couponDescribeView.text = spannableString
}
}
}
viewBinding.couponRecyclerview.adapter = adapter
} else {
viewBinding.couponDescribeView.text = t.message
}
}
override fun onFailure(e: Exception) {
showInternetError(viewBinding.button, e)
}
})
}
/**
* 初始化功能列表
*/
fun initAllFunctionList() {
val list: ArrayList<FunctionInfo> = ArrayList()
list.add(FunctionInfo("中文编辑", iconRes = R.drawable.translate))
list.add(FunctionInfo("模组优化", iconRes = R.drawable.flash))
list.add(FunctionInfo("代码高亮", iconRes = R.drawable.highlighted))
list.add(FunctionInfo("智能联想", iconRes = R.drawable.lenovo))
list.add(FunctionInfo("单位构建", iconRes = R.drawable.build))
list.add(FunctionInfo("代码检查", iconRes = R.drawable.error_check))
list.add(FunctionInfo("模组回收站", iconRes = R.drawable.auto_delete))
list.add(FunctionInfo("模板系统", iconRes = R.drawable.template))
val adapter = FunAdapter(this, list)
viewBinding.functionRecyclerView.layoutManager = GridLayoutManager(this, 4)
viewBinding.functionRecyclerView.adapter = adapter
}
/**
* 选中项目并加载信息
* @param data Data 数据
*/
fun selectItemAndLoadInfo(data: PlanDataBean.Data, adapter: PlanAdapter, position: Int) {
planId = data.id
val tip = String.format(getString(R.string.open_tip), data.price)
viewBinding.button.text = tip
adapter.selectItem(position)
//如果折扣,计算并显示折扣信息
val originalPrize = data.originalPrice
if (originalPrize > data.price) {
viewBinding.planDescribeView.text = String.format(
getString(R.string.discount_prompt),
data.describe,
(originalPrize - data.price)
)
} else {
viewBinding.planDescribeView.text = data.describe
}
}
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityActivateBinding {
return ActivityActivateBinding.inflate(layoutInflater)
}
/**
* 显示信息在视图上
* @param resId Int?
* @param string String?
*/
fun showInfoToView(resId: Int? = null, string: String? = null) {
viewBinding.button.isVisible = false
viewBinding.nestedScrollView.isVisible = false
viewBinding.linearLayout.isVisible = true
viewBinding.tipView.isVisible = true
viewBinding.progressBar.isVisible = false
if (resId != null) {
viewBinding.tipView.setText(resId)
}
if (string != null) {
viewBinding.tipView.text = string
}
}
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
if (canUseView) {
title = getText(R.string.activation_app)
setReturnButton()
val account = AppSettings.getValue(AppSettings.
Setting.Account, "")
if (account.isBlank()) {
showError(getString(R.string.please_login_first))
return
}
loadPlanList(account)
loadCouponList(account)
viewBinding.button.setOnClickListener {
val finalPlanId = planId ?: return@setOnClickListener
val finalCouponId = couponId
val func: () -> Unit = {
ActivationApp.instance.createOrder(
account,
finalPlanId,
object : ApiCallBack<ApiResponse> {
override fun onResponse(t: ApiResponse) {
if (t.code == ServerConfiguration.Success_Code) {
val uuid = t.data
if (uuid != null) {
val newIntent = Intent(
this@ActivateActivity,
PayActivity::class.java
)
newIntent.putExtra("uuid", uuid)
newIntent.putExtra("account", account)
startActivity(
newIntent
)
}
} else {
Snackbar.make(
viewBinding.button,
t.message,
Snackbar.LENGTH_SHORT
)
.show()
}
}
override fun onFailure(e: Exception) {
showInternetError(view = viewBinding.button, e)
}
},
couponsId = couponId
)
}
if (finalCouponId != null) {
MaterialAlertDialogBuilder(this).setTitle(R.string.coupon)
.setMessage(R.string.use_coupon)
.setPositiveButton(R.string.dialog_ok) { i, i2 ->
func.invoke()
}.setNegativeButton(R.string.dialog_cancel) { i, i2 ->
}.show()
} else {
func.invoke()
}
}
}
}
}

View File

@ -1,12 +1,11 @@
package com.coldmint.rust.pro
import androidx.recyclerview.widget.LinearLayoutManager
import android.os.Looper
import android.content.pm.PackageInfo
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
@ -15,7 +14,6 @@ import com.coldmint.rust.pro.adapters.ApplicationListAdapter
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databinding.ActivityApplicationListBinding
import com.coldmint.rust.pro.ui.StableLinearLayoutManager
import java.util.ArrayList
class ApplicationListActivity : BaseActivity<ActivityApplicationListBinding>() {
private var loading = true

View File

@ -2,40 +2,30 @@ package com.coldmint.rust.pro
import android.annotation.SuppressLint
import com.coldmint.rust.pro.tool.BookmarkManager
import android.widget.EditText
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import android.content.Intent
import android.os.Bundle
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.core.view.isVisible
import com.coldmint.dialog.CoreDialog
import com.coldmint.rust.pro.adapters.BookmarkAdapter
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databean.Bookmark
import com.coldmint.rust.pro.databinding.ActivityBookmarkManagerBinding
import com.coldmint.rust.pro.databinding.EditBookmarkBinding
import com.coldmint.rust.pro.dialog.BookmarkDialog
import com.coldmint.rust.pro.tool.BookmarkManager
import com.coldmint.rust.pro.ui.StableLinearLayoutManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.File
import java.util.ArrayList
class BookmarkManagerActivity : BaseActivity<ActivityBookmarkManagerBinding>() {
private lateinit var bookmarkManager: BookmarkManager
lateinit var bookmarkAdapter: BookmarkAdapter
lateinit var bookmarkDialog :BookmarkDialog
private lateinit var bookmarkAdapter: BookmarkAdapter
private lateinit var bookmarkDialog :BookmarkDialog
/**
* 重新构建对话框实例化一个对话框并使成员变量指向他
*/
fun recreateBookmarkDialog(){
private fun recreateBookmarkDialog(){
bookmarkDialog = BookmarkDialog(this)
bookmarkDialog.setButtonAction {
val bundle = Bundle()

View File

@ -131,7 +131,6 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
//更新本地激活时间
val expirationTime = userData.data.expirationTime
val time = ServerConfiguration.toLongTime(expirationTime)
AppSettings.forceSetValue(AppSettings.Setting.ExpirationTime, time)
AppSettings.forceSetValue(AppSettings.Setting.LoginStatus, true)
startActivity(Intent(this@LoginActivity, MainActivity::class.java))
finish()
@ -292,8 +291,8 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
val agreementAgreed = getString(R.string.agreement_agreed)
val spannableString = SpannableString(agreementAgreed)
val serviceAgreement = getString(R.string.service_agreement)
val privacyPolicy = getString(R.string.privacy_policy)
val serviceAgreement = "1"
val privacyPolicy = "2"
val start = agreementAgreed.indexOf(serviceAgreement)
val start2 = agreementAgreed.indexOf(privacyPolicy)
if (start > -1 && start2 > -1) {

View File

@ -44,6 +44,7 @@ import java.io.File
import java.util.Locale
import java.util.concurrent.Executors
import java.util.zip.ZipEntry
@Suppress("ConstPropertyName")
class MainActivity : BaseActivity<ActivityMainBinding>() {
@ -69,20 +70,20 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
*/
private fun initNav() {
appBarConfiguration = AppBarConfiguration(
setOf(R.id.community_item, R.id.mod_item, R.id.database_item, R.id.template_item),
viewBinding.drawerlayout
setOf(R.id.community_item, R.id.mod_item, R.id.database_item, R.id.template_item),
viewBinding.drawerlayout
)
val navController = findNavController(R.id.baseFragment)
navController.navInflater.inflate(R.navigation.main_nav).apply {
val use =
AppSettings.getValue(AppSettings.Setting.UseTheCommunityAsTheLaunchPage, true)
AppSettings.getValue(AppSettings.Setting.UseTheCommunityAsTheLaunchPage, true)
this.setStartDestination(
if (use) {
if (use) {
// viewBinding.mainButton.hide()
R.id.community_item
} else {
R.id.mod_item
}
R.id.community_item
} else {
R.id.mod_item
}
)
navController.graph = this
}
@ -91,11 +92,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
viewBinding.navaiagtion.addHeaderView(headLayout.root)
//actionbar动画
val actionToggle = ActionBarDrawerToggle(
this,
viewBinding.drawerlayout,
viewBinding.toolbar,
R.string.app_name,
R.string.app_name
this,
viewBinding.drawerlayout,
viewBinding.toolbar,
R.string.app_name,
R.string.app_name
)
viewBinding.drawerlayout.addDrawerListener(actionToggle)
actionToggle.syncState()
@ -145,7 +146,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
//检查更新
val packageInfo: PackageInfo = packageManager.getPackageInfo(packageName, 0)
val checkBetaUpdate =
AppSettings.getValue(AppSettings.Setting.CheckBetaUpdate, false)
AppSettings.getValue(AppSettings.Setting.CheckBetaUpdate, false)
var needShowDialog = false
if (data.versionNumber > packageInfo.versionCode) {
if (data.isBeta) {
@ -162,18 +163,18 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
//显示对话框
runOnUiThread {
val materialAlertDialogBuilder =
MaterialAlertDialogBuilder(this).setTitle(data.title).setMessage(data.content)
MaterialAlertDialogBuilder(this).setTitle(data.title).setMessage(data.content)
if (data.forced) {
//禁用点击空白关闭
materialAlertDialogBuilder.setCancelable(false)
} else {
materialAlertDialogBuilder.setNegativeButton(
R.string.dialog_cancel
R.string.dialog_cancel
) { _, _ ->
}
}
materialAlertDialogBuilder.setPositiveButton(
R.string.downlod
R.string.downlod
) { _, _ ->
AppOperator.useBrowserAccessWebPage(this, data.link)
}
@ -190,25 +191,25 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
if (!AppSettings.getValue(AppSettings.Setting.SetGameStorage, false)) {
try {
val packageInfo = packageManager.getPackageInfo(
GlobalMethod.DEFAULT_GAME_PACKAGE,
PackageManager.GET_UNINSTALLED_PACKAGES
GlobalMethod.DEFAULT_GAME_PACKAGE,
PackageManager.GET_UNINSTALLED_PACKAGES
)
val versionCode = packageInfo.versionCode
//如果在1.15 p3及以上 (159)
if (versionCode >= 159) {
MaterialAlertDialogBuilder(this).setTitle(R.string.game_configured)
.setMessage(R.string.unable_to_detect)
.setPositiveButton(R.string.show_details) { _, _ ->
startActivity(
Intent(
this@MainActivity,
GameCheckActivity::class.java
)
.setMessage(R.string.unable_to_detect)
.setPositiveButton(R.string.show_details) { _, _ ->
startActivity(
Intent(
this@MainActivity,
GameCheckActivity::class.java
)
}.setNeutralButton(R.string.no_longer_prompt) { _, _ ->
AppSettings.setValue(AppSettings.Setting.SetGameStorage, true)
}.setNeutralButton(R.string.dialog_cancel) { _, _ ->
}.setCancelable(false).show()
)
}.setNeutralButton(R.string.no_longer_prompt) { _, _ ->
AppSettings.setValue(AppSettings.Setting.SetGameStorage, true)
}.setNeutralButton(R.string.dialog_cancel) { _, _ ->
}.setCancelable(false).show()
} else {
AppSettings.setValue(AppSettings.Setting.SetGameStorage, true)
}
@ -224,8 +225,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
first = false
} else {
val newDynamicColor = AppSettings.getValue(
AppSettings.Setting.DynamicColor,
DynamicColors.isDynamicColorAvailable()
AppSettings.Setting.DynamicColor,
DynamicColors.isDynamicColorAvailable()
)
if (oldDynamicColor != newDynamicColor) {
recreate()
@ -363,17 +364,17 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
menu.findItem(R.id.startGame).setOnMenuItemClickListener {
val packName = AppSettings.getValue(
AppSettings.Setting.GamePackage,
GlobalMethod.DEFAULT_GAME_PACKAGE
AppSettings.Setting.GamePackage,
GlobalMethod.DEFAULT_GAME_PACKAGE
)
if (AppOperator.isAppInstalled(this, packName)) {
AppOperator.openApp(this, packName)
} else {
viewBinding.drawerlayout.closeDrawer(GravityCompat.START)
Snackbar.make(
viewBinding.root,
R.string.no_game_installed,
Snackbar.LENGTH_SHORT
viewBinding.root,
R.string.no_game_installed,
Snackbar.LENGTH_SHORT
).show()
}
false
@ -395,39 +396,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
startActivity(Intent(this@MainActivity, SettingsActivity::class.java))
false
}
//激活暂时不可用
val longTime = AppSettings.getValue(
AppSettings.Setting.ExpirationTime,
0.toLong()
)
val loginStatus = AppSettings.getValue(
AppSettings.Setting.LoginStatus,
false
)
val activationItem = menu.findItem(R.id.activation_item)
if (loginStatus) {
val time = ServerConfiguration.toStringTime(
longTime
)
if (time == ServerConfiguration.ForeverTime) {
activationItem.isVisible = false
} else {
activationItem.isVisible = true
if (isActive) {
activationItem.title = getText(R.string.renewal)
} else {
activationItem.title = getText(R.string.activate)
}
activationItem.setOnMenuItemClickListener {
startActivity(Intent(this, ActivateActivity::class.java))
false
}
}
} else {
activationItem.isVisible = false
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -444,38 +412,46 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
val to = File(modDirectory + from.name)
if (FileOperator.copyFile(from, to)) {
Snackbar.make(
viewBinding.root,
String.format(Locale.getDefault(),getString(R.string.import_complete), from.name),
Snackbar.LENGTH_SHORT
viewBinding.root,
String.format(
Locale.getDefault(),
getString(R.string.import_complete),
from.name
),
Snackbar.LENGTH_SHORT
).show()
} else {
Snackbar.make(
viewBinding.root,
String.format(Locale.getDefault(),getString(R.string.import_failed), from.name),
Snackbar.LENGTH_SHORT
viewBinding.root,
String.format(
Locale.getDefault(),
getString(R.string.import_failed),
from.name
),
Snackbar.LENGTH_SHORT
).show()
}
} else {
Snackbar.make(
viewBinding.root,
R.string.bad_file_type,
Snackbar.LENGTH_SHORT
viewBinding.root,
R.string.bad_file_type,
Snackbar.LENGTH_SHORT
).show()
}
} else if (requestCode == 2) {
if ("rp" == type) {
val outputFolder = File(
AppSettings.getValue(
AppSettings.Setting.TemplateDirectory,
this.filesDir.absolutePath + "/template/"
) + LocalTemplatePackage.getAbsoluteFileName(from)
AppSettings.getValue(
AppSettings.Setting.TemplateDirectory,
this.filesDir.absolutePath + "/template/"
) + LocalTemplatePackage.getAbsoluteFileName(from)
)
importTemplate(from, outputFolder)
} else {
Snackbar.make(
viewBinding.root,
R.string.bad_file_type,
Snackbar.LENGTH_SHORT
viewBinding.root,
R.string.bad_file_type,
Snackbar.LENGTH_SHORT
).show()
}
}
@ -492,100 +468,104 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
Thread(Runnable {
try {
//如果建立缓存完成,并且模板文件存在
val compressionManager = CompressionManager.instance
if (templateDirectory.exists()) {
val gson = Gson()
val newInfoData =
//如果建立缓存完成,并且模板文件存在
val compressionManager = CompressionManager.instance
if (templateDirectory.exists()) {
val gson = Gson()
val newInfoData =
compressionManager.readEntry(formFile, LocalTemplatePackage.INFONAME)
if (newInfoData == null) {
handler.post {
Snackbar.make(
if (newInfoData == null) {
handler.post {
Snackbar.make(
viewBinding.root,
getString(R.string.import_failed2),
Snackbar.LENGTH_LONG
).show()
}
return@Runnable
} else {
val newInfo = gson.fromJson(newInfoData, TemplateInfo::class.java)
val templateClass = LocalTemplatePackage(templateDirectory)
val oldInfo = templateClass.getInfo()
if (oldInfo == null) {
handler.post {
Snackbar.make(
viewBinding.root,
R.string.import_failed2,
Snackbar.LENGTH_SHORT
).show()
}
return@Runnable
}
val thisAppVersion =
AppOperator.getAppVersionNum(this, this.packageName)
if (newInfo.versionNum > thisAppVersion) {
handler.post {
Snackbar.make(
viewBinding.root,
String.format(Locale.getDefault(),
getString(R.string.app_version_error),
formFile.name
), Snackbar.LENGTH_LONG
).show()
}
return@Runnable
}
if (newInfo.versionNum < oldInfo.versionNum) {
handler.post {
MaterialAlertDialogBuilder(this).setTitle(oldInfo.name).setMessage(
String.format(Locale.getDefault(),
getString(R.string.covers_the_import),
newInfo.versionName, oldInfo.versionName
)
).setPositiveButton(R.string.dialog_ok) { _, _ ->
FileOperator.delete_files(templateDirectory)
importTemplate(formFile, templateDirectory)
}.setNegativeButton(R.string.dialog_cancel) { _, _ ->
}.show()
}
return@Runnable
} else {
//同等版本,不做处理(覆盖安装)
val newInfo = gson.fromJson(newInfoData, TemplateInfo::class.java)
val templateClass = LocalTemplatePackage(templateDirectory)
val oldInfo = templateClass.getInfo()
if (oldInfo == null) {
handler.post {
Snackbar.make(
viewBinding.root,
R.string.import_failed2,
Snackbar.LENGTH_SHORT
).show()
}
return@Runnable
}
val thisAppVersion =
AppOperator.getAppVersionNum(this, this.packageName)
if (newInfo.versionNum > thisAppVersion) {
handler.post {
Snackbar.make(
viewBinding.root,
String.format(
Locale.getDefault(),
getString(R.string.app_version_error),
formFile.name
), Snackbar.LENGTH_LONG
).show()
}
return@Runnable
}
if (newInfo.versionNum < oldInfo.versionNum) {
handler.post {
MaterialAlertDialogBuilder(this).setTitle(oldInfo.name).setMessage(
String.format(
Locale.getDefault(),
getString(R.string.covers_the_import),
newInfo.versionName, oldInfo.versionName
)
).setPositiveButton(R.string.dialog_ok) { _, _ ->
FileOperator.delete_files(templateDirectory)
importTemplate(formFile, templateDirectory)
}.setNegativeButton(R.string.dialog_cancel) { _, _ ->
}.show()
}
return@Runnable
} else {
//同等版本,不做处理(覆盖安装)
}
}
}
} else {
//常规导入
val newInfo = compressionManager.readEntry(formFile, LocalTemplatePackage.INFONAME)
if (newInfo == null) {
handler.post {
Snackbar.make(
} else {
//常规导入
val newInfo =
compressionManager.readEntry(formFile, LocalTemplatePackage.INFONAME)
if (newInfo == null) {
handler.post {
Snackbar.make(
viewBinding.root,
getString(R.string.import_failed2),
Snackbar.LENGTH_LONG
).show()
}
return@Runnable
} else {
val jsonObject = JSONObject(newInfo)
val appVersion = jsonObject.getInt("appVersionNum")
val thisAppVersion =
AppOperator.getAppVersionNum(this, this.packageName)
if (appVersion > thisAppVersion) {
handler.post {
Snackbar.make(
viewBinding.root,
String.format(Locale.getDefault(),
getString(R.string.app_version_error),
formFile.name
), Snackbar.LENGTH_LONG
).show()
}
return@Runnable
} else {
val jsonObject = JSONObject(newInfo)
val appVersion = jsonObject.getInt("appVersionNum")
val thisAppVersion =
AppOperator.getAppVersionNum(this, this.packageName)
if (appVersion > thisAppVersion) {
handler.post {
Snackbar.make(
viewBinding.root,
String.format(
Locale.getDefault(),
getString(R.string.app_version_error),
formFile.name
), Snackbar.LENGTH_LONG
).show()
}
return@Runnable
}
}
}
}
compressionManager.unzip(
compressionManager.unzip(
formFile,
templateDirectory,
object : UnzipListener {
@ -601,11 +581,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
handler.post {
handler.post {
Snackbar.make(
viewBinding.root,
String.format(Locale.getDefault(),
getString(R.string.import_complete),
formFile.name
), Snackbar.LENGTH_LONG
viewBinding.root,
String.format(
Locale.getDefault(),
getString(R.string.import_complete),
formFile.name
), Snackbar.LENGTH_LONG
).show()
}
}
@ -613,24 +594,24 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
})
}catch (e: Exception){
} catch (e: Exception) {
error(e)
}
}).start()
}
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
val navController = findNavController(R.id.baseFragment)
//判断是否在第一个导航 社区或者仓库
if (navController.currentDestination?.id == navController.graph.startDestinationId) {
MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_close).setMessage(
String.format(Locale.getDefault(),
getString(R.string.exit_tip),
getString(R.string.app_name)
)
String.format(
Locale.getDefault(),
getString(R.string.exit_tip),
getString(R.string.app_name)
)
).setPositiveButton(R.string.dialog_ok) { _, _ ->
finish()
}.setNegativeButton(R.string.dialog_cancel) { _, _ ->
@ -682,8 +663,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
val headIcon = it.data.headIcon
if (headIcon != null) {
Glide.with(this).load(ServerConfiguration.getRealLink(headIcon))
.apply(GlobalMethod.getRequestOptions(true, !it.data.activation))
.into(headLayout.imageView)
.apply(GlobalMethod.getRequestOptions(true, !it.data.activation))
.into(headLayout.imageView)
}
val account = it.data.account
headLayout.imageView.setOnClickListener {
@ -700,10 +681,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
headLayout.emailView.text = ""
headLayout.imageView.setOnClickListener {
startActivity(
Intent(
this,
LoginActivity::class.java
)
Intent(
this,
LoginActivity::class.java
)
)
}
} else {
@ -721,10 +702,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
if (it) {
//显示签名错误
CoreDialog(this).setTitle(R.string.sign_error)
.setMessage(R.string.sign_error_message).setCancelable(false)
.setPositiveButton(R.string.dialog_close) {
finish()
}
.setMessage(R.string.sign_error_message).setCancelable(false)
.setPositiveButton(R.string.dialog_close) {
finish()
}
}
}
@ -736,16 +717,16 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
startViewModel.verifyErrorMsgLiveData.observe(this) {
if (it.isNotBlank()) {
CoreDialog(this).setTitle(R.string.login).setMessage(it)
.setCancelable(false).setPositiveButton(R.string.login) {
startActivity(
Intent(
this,
LoginActivity::class.java
)
.setCancelable(false).setPositiveButton(R.string.login) {
startActivity(
Intent(
this,
LoginActivity::class.java
)
}.setNegativeButton(R.string.close) {
finish()
}.show()
)
}.setNegativeButton(R.string.close) {
finish()
}.show()
}
}
@ -756,8 +737,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
if (canUseView) {
oldLanguage = AppSettings.getValue(AppSettings.Setting.AppLanguage, "en")
oldDynamicColor = AppSettings.getValue(
AppSettings.Setting.DynamicColor,
DynamicColors.isDynamicColorAvailable()
AppSettings.Setting.DynamicColor,
DynamicColors.isDynamicColorAvailable()
)
// useToolbarSetSupportActionBar()
initNav()

View File

@ -213,7 +213,6 @@ class UserHomePageActivity : BaseActivity<ActivityUserHomePageBinding>() {
if (spaceInfoData.data.expirationTime == ServerConfiguration.ForeverTime) {
viewBinding.cardView.isVisible = true
viewBinding.cardView.setCardBackgroundColor(Color.parseColor("#33a3dc"))
viewBinding.positionView.setText(R.string.forever_time)
}
}
}

View File

@ -1,35 +0,0 @@
package com.coldmint.rust.pro.adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import com.bumptech.glide.Glide
import com.coldmint.rust.pro.base.BaseAdapter
import com.coldmint.rust.pro.databean.FunctionInfo
import com.coldmint.rust.pro.databinding.ItemFunBinding
import com.coldmint.rust.pro.databinding.ItemServiceBinding
class FunAdapter( context: Context, dataList: MutableList<FunctionInfo>) :
BaseAdapter<ItemFunBinding, FunctionInfo>(context, dataList) {
override fun getViewBindingObject(
layoutInflater: LayoutInflater,
parent: ViewGroup,
viewType: Int
): ItemFunBinding {
return ItemFunBinding.inflate(layoutInflater, parent, false)
}
override fun onBingView(
data: FunctionInfo,
viewBinding: ItemFunBinding,
viewHolder: ViewHolder<ItemFunBinding>,
position: Int
) {
viewBinding.titleView.text = data.name
val resId = data.iconRes
if (resId != null) {
viewBinding.iconView.setImageResource(resId)
}
}
}

View File

@ -1,35 +0,0 @@
package com.coldmint.rust.pro.adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import com.bumptech.glide.Glide
import com.coldmint.rust.pro.base.BaseAdapter
import com.coldmint.rust.pro.databean.UserGroupData
import com.coldmint.rust.pro.databinding.ItemTemplateBinding
import com.coldmint.rust.pro.databinding.ItemUserBinding
import com.coldmint.rust.pro.databinding.ItemUserGroupBinding
/**
* 用户群适配器
*/
class UserGroupAdapter(context: Context, dataList: MutableList<UserGroupData>) :
BaseAdapter<ItemUserGroupBinding, UserGroupData>(context, dataList) {
override fun getViewBindingObject(
layoutInflater: LayoutInflater,
parent: ViewGroup,
viewType: Int
): ItemUserGroupBinding {
return ItemUserGroupBinding.inflate(layoutInflater, parent, false)
}
override fun onBingView(
data: UserGroupData,
viewBinding: ItemUserGroupBinding,
viewHolder: ViewHolder<ItemUserGroupBinding>,
position: Int
) {
viewBinding.imageView.setImageResource(data.iconRes)
viewBinding.titleView.setText(data.titleRes)
}
}

View File

@ -130,17 +130,12 @@ class RecommendedFragment : BaseFragment<FragmentRecommendedBinding>() {
if (t.code == ServerConfiguration.Success_Code) {
val dataList = t.data
if (!dataList.isNullOrEmpty()) {
val forever =
AppSettings.getValue(
AppSettings.Setting.ExpirationTime,
0.toLong()
) == (-2).toLong()
val textStyleMaker = TextStyleMaker.instance
val showList = dataList.filter {
var show = true
val type = textStyleMaker.getType(it.link)
//如果点击事件为激活助手,但此用户已经永久激活,那么隐藏轮播图
if (type == "activate" && forever) {
if (type == "activate") {
show = false
}
show

View File

@ -1,57 +0,0 @@
package com.coldmint.rust.pro.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.coldmint.rust.core.tool.AppOperator
import com.coldmint.rust.pro.R
import com.coldmint.rust.pro.adapters.UserGroupAdapter
import com.coldmint.rust.pro.databean.UserGroupData
import com.coldmint.rust.pro.databinding.FragmentUserGroupBinding
import com.coldmint.rust.pro.ui.StableLinearLayoutManager
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
/**
* 用户群碎片
* @property viewBinding FragmentUserGroupBinding
*/
class UserGroupFragment : BottomSheetDialogFragment() {
private lateinit var viewBinding: FragmentUserGroupBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewBinding = FragmentUserGroupBinding.inflate(inflater, container, false)
return viewBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewBinding.recyclerView.layoutManager = StableLinearLayoutManager(requireContext())
val dataList = ArrayList<UserGroupData>()
dataList.add(UserGroupData(R.drawable.ic_qq, R.string.qq_group))
dataList.add(UserGroupData(R.drawable.ic_discord, R.string.discord_group))
val adapter = UserGroupAdapter(requireContext(), dataList)
viewBinding.recyclerView.adapter = adapter
adapter.setItemEvent { i, itemUserGroupBinding, viewHolder, userGroupData ->
itemUserGroupBinding.root.setOnClickListener {
if (userGroupData.titleRes == R.string.qq_group) {
AppOperator.useBrowserAccessWebPage(
requireContext(),
"https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&appChannel=share&inviteCode=1W7Dpb0&businessType=9&from=246610&biz=ka"
)
} else if (userGroupData.titleRes == R.string.discord_group) {
AppOperator.useBrowserAccessWebPage(
requireContext(),
"https://discord.gg/DTQDmVdVK3"
)
}
}
}
}
}

View File

@ -172,10 +172,6 @@ class UserInfoFragment : BaseFragment<FragmentUserInfoBinding>() {
viewBinding.logOutButton.setOnClickListener {
AppSettings.setValue(AppSettings.Setting.LoginStatus, false)
// GlobalMethod.isActive = false
AppSettings.setValue(
AppSettings.Setting.ExpirationTime,
0.toLong()
)
(requireActivity() as MainActivity).startViewModel.isActivationLiveData.value = false
startActivity(Intent(requireContext(), LoginActivity::class.java))
}

View File

@ -38,7 +38,7 @@ object AppSettings {
}
enum class Setting {
DatabaseDirectory, DatabasePath, TemplateDirectory, AppLanguage, DeveloperMode, CustomSymbol, AutoCreateNomedia, OnlyLoadConantLanguageTemple, NightMode, GamePackage, KeywordColor, KeywordColorDark, AnnotationColor, AnnotationColorDark, TextColor, TextColorDark, SectionColor, SectionColorDark, KeepRwmodFile, EnableRecoveryStation, RecoveryStationFileSaveDays, RecoveryStationFolder, IndependentFolder, SetGameStorage, PackDirectory, IdentifiersPromptNumber, UserName, UseJetBrainsMonoFont, AppID, Account, PassWord, ExpirationTime, CheckBetaUpdate, UpdateData, ShareTip, AgreePolicy, EnglishEditingMode, NightModeFollowSystem, UseMobileNetwork, MapFolder, ModFolder, UseTheCommunityAsTheLaunchPage, AutoSave, ServerAddress, Token, LoginStatus, DynamicColor, ExperiencePlan, FileSortType, CodeEditBackGroundEnable, BlurTransformationValue, CodeEditBackGroundPath, SimpleDisplayOfAutoCompleteMenu, SourceFileType, ClipboardCue
DatabaseDirectory, DatabasePath, TemplateDirectory, AppLanguage, DeveloperMode, CustomSymbol, AutoCreateNomedia, OnlyLoadConantLanguageTemple, NightMode, GamePackage, KeywordColor, KeywordColorDark, AnnotationColor, AnnotationColorDark, TextColor, TextColorDark, SectionColor, SectionColorDark, KeepRwmodFile, EnableRecoveryStation, RecoveryStationFileSaveDays, RecoveryStationFolder, IndependentFolder, SetGameStorage, PackDirectory, IdentifiersPromptNumber, UserName, UseJetBrainsMonoFont, AppID, Account, PassWord, CheckBetaUpdate, UpdateData, ShareTip, AgreePolicy, EnglishEditingMode, NightModeFollowSystem, UseMobileNetwork, MapFolder, ModFolder, UseTheCommunityAsTheLaunchPage, AutoSave, ServerAddress, Token, LoginStatus, DynamicColor, ExperiencePlan, FileSortType, CodeEditBackGroundEnable, BlurTransformationValue, CodeEditBackGroundPath, SimpleDisplayOfAutoCompleteMenu, SourceFileType, ClipboardCue
}
@ -141,7 +141,6 @@ object AppSettings {
map[Setting.AppID] = "AppId"
map[Setting.Account] = "Account"
map[Setting.PassWord] = "PassWord"
map[Setting.ExpirationTime] = "ExpirationTime"
map[Setting.UpdateData] = "UpdateData"
map[Setting.ShareTip] = "ShareTip"
map[Setting.AgreePolicy] = "AgreePolicy"

View File

@ -295,22 +295,6 @@ class TextStyleMaker private constructor() {
).show()
}
}
"activate" -> {
val time = ServerConfiguration.toStringTime(
AppSettings
.getValue(AppSettings.Setting.ExpirationTime, 0.toLong())
)
if (time == ServerConfiguration.ForeverTime) {
Toast.makeText(
context,
R.string.can_t_activate,
Toast.LENGTH_SHORT
).show()
} else {
val intent = Intent(context, ActivateActivity::class.java)
context.startActivity(intent)
}
}
else -> {
Toast.makeText(
context,

View File

@ -126,17 +126,17 @@ class StartViewModel(application: Application) : BaseAndroidViewModel(applicatio
} else {
User.getUserActivationInfo(token, object : ApiCallBack<ActivationInfo> {
override fun onFailure(e: Exception) {
val localTime = AppSettings.getValue(
AppSettings.Setting.ExpirationTime,
0.toLong()
)
if (localTime == (-2).toLong()) {
isActivationLiveData.value = true
} else {
val nowTime = System.currentTimeMillis()
//本地时间大于当前时间 激活
isActivationLiveData.value = localTime > nowTime
}
// val localTime = AppSettings.getValue(
// AppSettings.Setting.ExpirationTime,
// 0.toLong()
// )
// if (localTime == (-2).toLong()) {
// isActivationLiveData.value = true
// } else {
// val nowTime = System.currentTimeMillis()
// //本地时间大于当前时间 激活
// isActivationLiveData.value = localTime > nowTime
// }
}
@ -146,10 +146,6 @@ class StartViewModel(application: Application) : BaseAndroidViewModel(applicatio
//更新本地激活时间
val expirationTime = activationInfo.data.expirationTime
val time = ServerConfiguration.toLongTime(expirationTime)
AppSettings.forceSetValue(
AppSettings.Setting.ExpirationTime,
time
)
isActivationLiveData.value = activationInfo.data.activation
} else {
// 用户登录失败

View File

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M4,19h16v2L4,21zM20,3L4,3v10c0,2.21 1.79,4 4,4h6c2.21,0 4,-1.79 4,-4v-3h2c1.11,0 2,-0.9 2,-2L22,5c0,-1.11 -0.89,-2 -2,-2zM16,13c0,1.1 -0.9,2 -2,2L8,15c-1.1,0 -2,-0.9 -2,-2L6,5h10v8zM20,8h-2L18,5h2v3z"/>
</vector>

View File

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M18,2L6,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,4c0,-1.1 -0.9,-2 -2,-2zM9,4h2v5l-1,-0.75L9,9L9,4zM18,20L6,20L6,4h1v9l3,-2.25L13,13L13,4h5v16z"/>
</vector>

View File

@ -55,13 +55,6 @@
android:layout_marginTop="8dp"
android:text="@string/setting_app_version" />
<TextView
android:id="@+id/expirationTimeView"
style="@style/TextAppearance.Material3.BodySmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/expiration_time_null" />
</LinearLayout>
@ -93,33 +86,6 @@
</androidx.core.widget.NestedScrollView>
<com.google.android.material.divider.MaterialDivider
android:id="@+id/action_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/privacyPolicyView"
android:layout_marginTop="16dp"
app:dividerThickness="0.8dp" />
<Button
android:id="@+id/serviceAgreementView"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toStartOf="@id/privacyPolicyView"
android:text="@string/service_agreement" />
<Button
android:id="@+id/privacyPolicyView"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="8dp"
android:text="@string/privacy_policy" />
</RelativeLayout>

View File

@ -1,173 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ActivateActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginRight="16dp"
android:visibility="gone"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/choose_plan"
android:textSize="16sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />
<TextView
android:id="@+id/planDescribeView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:orientation="vertical">
<TextView
android:id="@+id/couponView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/coupon"
android:textSize="16sp" />
<TextView
android:id="@+id/couponDescribeView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/coupon_not_use" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/couponRecyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="60dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/all_function"
android:textSize="16sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/functionRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:visibility="gone" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tipView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/info"
android:visibility="gone" />
</LinearLayout>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:text="@string/open_tip"
android:visibility="gone" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="8dp">
<com.google.android.material.bottomsheet.BottomSheetDragHandleView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
style="@style/TextAppearance.Material3.TitleMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/user_group" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="24dp" />
</LinearLayout>

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="100dp"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:src="@drawable/image"
android:id="@+id/iconView"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:textSize="12sp"
android:id="@+id/titleView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/all_function" />
</LinearLayout>

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingVertical="16dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerVertical="true"
android:src="@drawable/image" />
<TextView
android:id="@+id/titleView"
android:layout_marginStart="16dp"
style="@style/TextAppearance.Material3.TitleMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@id/imageView"
android:text="@string/title" />
</RelativeLayout>

View File

@ -5,11 +5,6 @@
android:id="@+id/startGame"
android:icon="@drawable/start_the_game"
android:title="@string/start_game" />
<item
android:id="@+id/activation_item"
android:icon="@drawable/store"
android:title="@string/activate" />
</group>
<group android:checkableBehavior="single">
@ -44,32 +39,17 @@
android:icon="@drawable/table"
android:title="@string/code_table" />
<!-- <item-->
<!-- android:id="@+id/themes"-->
<!-- android:icon="@drawable/themes"-->
<!-- android:title="@string/themes" />-->
<item
android:id="@+id/set_up"
android:icon="@drawable/setup"
android:title="@string/set_up" />
<!-- <item-->
<!-- android:id="@+id/user_group"-->
<!-- android:icon="@drawable/ic_outline_free_breakfast_24"-->
<!-- android:title="@string/user_group" />-->
<item
android:id="@+id/github"
android:icon="@drawable/github"
android:title="@string/github" />
<!-- <item-->
<!-- android:id="@+id/rust_api"-->
<!-- android:icon="@drawable/outline_book_24"-->
<!-- android:title="@string/rust_api" />-->
<item
android:id="@+id/about"
android:icon="@drawable/about"

View File

@ -29,8 +29,6 @@
<string name="dialog_ok">Sure</string>
<string name="activation_app">Activate Rust Helper</string>
<string name="activation_app_tip">Your activation time has expired, please activate Rust Assistant.</string>
<string name="choose_plan">combo</string>
<string name="all_function">All functions</string>
<string name="only_one">Only this one time</string>
<string name="always_allow">always allow</string>
<string name="pay_yes">Yes, did receive</string>
@ -85,8 +83,6 @@
<string name="retrieve_password">retrieve password</string>
<string name="login">Log in</string>
<string name="agreement_agreed">I agree to the Service Agreement and Privacy Policy</string>
<string name="service_agreement">\"Service Agreement\"</string>
<string name="privacy_policy">\"Privacy Policy\"</string>
<string name="describe">describe</string>
<string name="mod_tags">Label</string>
<string name="tags_error">Please enter a label.</string>
@ -439,7 +435,6 @@
<string name="additional_selection">Additional items</string>
<string name="delete_source_file">Delete the source file after the package is complete</string>
<string name="packmod">packaging</string>
<string name="open_tip">Open immediately with %1$.2f yuan</string>
<string name="packing">In the packaging…</string>
<string name="share_mod">share</string>
<string name="share_message">Share</string>
@ -486,7 +481,6 @@
<string name="register_successed">Registered successfully</string>
<string name="registration_success_message">The account activation code has been sent to your email address. If not, the mailbox may be considered spam. Please check your dustbin.</string>
<string name="please_login_first">Please log in first.</string>
<string name="tourist_pattern">Tourist pattern</string>
<string name="network_error">Network error.</string>
<string name="check_update_failure">Failed to check the update.</string>
<string name="setting_check_beta_update" translatable="false">CheckBetaUpdate</string>
@ -569,7 +563,6 @@
<string name="english_editing_mode">Native development model</string>
<string name="mt_installed">Do you use English as your development language\? Instead of working on \\"MT manager \\", the assistant has English code hints, as well as intelligent hints for the mod environment.</string>
<string name="expiration_time_null">Unknown activation duration</string>
<string name="expiration_time_tip">Due time :%1$s</string>
<string name="community">community</string>
<string name="recommended">Recommend</string>
<string name="local">local</string>
@ -665,7 +658,6 @@
<string name="export_this">Export to the</string>
<string name="preview_static_code">Looking at static code</string>
<string name="set_note">Set the annotation</string>
<string name="activate">Activation</string>
<string name="money">¥%1$.2f</string>
<string name="discount_prompt">%1$s has saved %2$.2f</string>
<string name="setting_night_mode_follow_system" translatable="false">NightModeFollowSystem</string>
@ -705,11 +697,8 @@
<string name="setting_use_the_community_as_the_launch_page" translatable="false">UseTheCommunityAsTheLaunchPage</string>
<string name="use_the_community_as_the_launch_page">Use the community as the launch page</string>
<string name="use_the_community_as_the_launch_page_tip">Enabled by default</string>
<string name="renewal">renewal</string>
<string name="renewal_tip_title">Renewal reminder</string>
<string name="renewal_tip_msg">Your account (%1$s) will expire in %2$d days.</string>
<string name="forever_time">Permanent activation</string>
<string name="can_t_activate">You are permanently activated.</string>
<string name="report">To report</string>
<string name="report_t">Report - %1$s</string>
<string name="why">The reason:</string>
@ -731,9 +720,7 @@
<string name="review_mod">Review the mod</string>
<string name="refused">Refused to</string>
<string name="remove_fans">Remove the fan</string>
<string name="coupon">coupons</string>
<string name="coupon_num">Coupons (%1$d)</string>
<string name="coupon_not_use">No coupons were used.</string>
<string name="time_limit">Valid until :%1$s can be used %2$s times</string>
<string name="payment_reminders">We will charge your order to your account within 24 hours after receiving it, please wait patiently. If your order is not processed within 24 hours, please submit your order number to us for processing.</string>
<string name="pay">pay</string>
@ -932,7 +919,6 @@
<string name="all">all</string>
<string name="new_password">The new password</string>
<string name="edit_text_color_dark">Dark theme font color</string>
<string name="user_group">The user group</string>
<string name="discord_group">Discord server</string>
<string name="search_suggestions_null">No search suggestion.</string>
<string name="search_suggestions_loading">Get search suggestions…</string>
@ -958,7 +944,6 @@
<string name="obtain_source_code_msg">Check out the source code of Rust Assistant on Github, Assistant has been open source, welcome secondary development.</string>
<string name="obtain_source_code">Get source code</string>
<string name="setting_obtain_source_code" translatable="false">ObtainSourceCode</string>
<string name="rust_api">Rust Api-Code</string>
<string name="search_type_template_package">Template package</string>
<string name="public_mod">publicity</string>
<string name="private_mod">Privately owned</string>

View File

@ -29,8 +29,6 @@
<string name="dialog_ok">確定</string>
<string name="activation_app">サビ助手を活性化させる</string>
<string name="activation_app_tip">起動時間が過ぎましたので、サビヘルパーを起動してください。</string>
<string name="choose_plan">定食</string>
<string name="all_function">全機能</string>
<string name="only_one">たった一度だけ</string>
<string name="always_allow">あくまでも許可する</string>
<string name="pay_yes">はい,確かに受け取りました</string>
@ -85,8 +83,6 @@
<string name="retrieve_password">パスワードを取り戻す</string>
<string name="login">ログイン</string>
<string name="agreement_agreed">「サービス協定」と「プライバシーポリシー」に同意します</string>
<string name="service_agreement">サービス契約書</string>
<string name="privacy_policy">『プライバシーポリシー』</string>
<string name="describe">描写</string>
<string name="mod_tags">ラベル</string>
<string name="tags_error">ラベルを入力してください。</string>
@ -439,7 +435,6 @@
<string name="additional_selection">付加項</string>
<string name="delete_source_file">パッケージ化が完了したらソースファイルを削除する</string>
<string name="packmod">荷物</string>
<string name="open_tip">直ちに%1$.2f元で開通する</string>
<string name="packing">お持ち帰り中…</string>
<string name="share_mod">分かち合い</string>
<string name="share_message">分かち合います</string>
@ -486,7 +481,6 @@
<string name="register_successed">登録に成功する</string>
<string name="registration_success_message">アカウントのアクティベーションコードをメールアドレスに送信しました。受信していない場合、メールボックスは迷惑メールと見なされる可能性があります。ごみ箱をチェックしてください。</string>
<string name="please_login_first">まず登録してください。</string>
<string name="tourist_pattern">ビジターモードです</string>
<string name="network_error">ネットワークエラー。</string>
<string name="check_update_failure">アップデートの失敗をチェックする。</string>
<string name="setting_check_beta_update" translatable="false">CheckBetaUpdate</string>
@ -569,7 +563,6 @@
<string name="english_editing_mode">ネイティブ開発モデル</string>
<string name="mt_installed">開発言語として英語を使用していますか\?\\"MTマネージャ\\"上で仕事をするより、ヘルパーは英文コードのヒント机能と、モジュール環境のインテリジェントなヒントがあります。</string>
<string name="expiration_time_null">未知の活性化時間</string>
<string name="expiration_time_tip">期限:%1$s</string>
<string name="community">コミュニティ</string>
<string name="recommended">推薦</string>
<string name="local">地元</string>
@ -665,7 +658,6 @@
<string name="export_this">ここまで導き出す</string>
<string name="preview_static_code">静的コードを見る</string>
<string name="set_note">註釈を設ける</string>
<string name="activate">活性化</string>
<string name="money">¥% 1ドル.2f</string>
<string name="discount_prompt">%1$s省%2$.2f元</string>
<string name="setting_night_mode_follow_system" translatable="false">NightModeFollowSystem</string>
@ -705,11 +697,8 @@
<string name="setting_use_the_community_as_the_launch_page" translatable="false">UseTheCommunityAsTheLaunchPage</string>
<string name="use_the_community_as_the_launch_page">コミュニティを立ち上げページとして使う</string>
<string name="use_the_community_as_the_launch_page_tip">デフォルトの有効化</string>
<string name="renewal">続料</string>
<string name="renewal_tip_title">おかわりの注意</string>
<string name="renewal_tip_msg">あなたのアカウント(%1$s)は%2$d日後に満期になります。</string>
<string name="forever_time">永久活性化</string>
<string name="can_t_activate">永久に活性化されています。</string>
<string name="report">告発</string>
<string name="report_t">通報-%1$s</string>
<string name="why">理由:</string>
@ -731,9 +720,7 @@
<string name="review_mod">査定モジュール</string>
<string name="refused">拒否</string>
<string name="remove_fans">ファンを除去する</string>
<string name="coupon">クーポン</string>
<string name="coupon_num">クーポン(%1$d)</string>
<string name="coupon_not_use">クーポンは一切使用していない。</string>
<string name="time_limit">有効期間:%1$s %2$s回使用可能</string>
<string name="payment_reminders">私達はあなたの注文を受け取ってから24時間以内にあなたの口座にチャージして、辛抱強く待ってください。ご注文が24時間以内に処理されない場合は、ご注文番号をご提出ください。</string>
<string name="pay">支給</string>
@ -932,7 +919,6 @@
<string name="all">すべて</string>
<string name="new_password">新しいパスワード</string>
<string name="edit_text_color_dark">ダーク・テーマ・フォント・カラー</string>
<string name="user_group">ユーザーベース</string>
<string name="discord_group">Discordサーバ</string>
<string name="search_suggestions_null">検索の提案はない。</string>
<string name="search_suggestions_loading">検索の提案を得る…</string>
@ -958,7 +944,6 @@
<string name="obtain_source_code_msg">Githubで錆びたヘルパーのソースコードを見ると、ヘルパーはオープンソース化されており、再開発を歓迎しています。</string>
<string name="obtain_source_code">ソースコードを取得します</string>
<string name="setting_obtain_source_code" translatable="false">ObtainSourceCode</string>
<string name="rust_api">サビape-codeです</string>
<string name="search_type_template_package">テンプレートパッケージです</string>
<string name="public_mod">公開します</string>
<string name="private_mod">プライベートです</string>

View File

@ -29,8 +29,6 @@
<string name="dialog_ok">увер</string>
<string name="activation_app">Активировать помощника ржавчины</string>
<string name="activation_app_tip">Время активации прошло. Пожалуйста, активируйте ржавчину.</string>
<string name="choose_plan">пакет</string>
<string name="all_function">Все функции.</string>
<string name="only_one">Только в этот раз.</string>
<string name="always_allow">Всегда.</string>
<string name="pay_yes">Да, получил</string>
@ -85,8 +83,6 @@
<string name="retrieve_password">Найди пароль.</string>
<string name="login">залогин</string>
<string name="agreement_agreed">Я согласен с соглашением о службе и политикой конфиденциальности.</string>
<string name="service_agreement">Протокол обслуживания</string>
<string name="privacy_policy">Политика конфиденциальности</string>
<string name="describe">описыва</string>
<string name="mod_tags">этикетк</string>
<string name="tags_error">Введите этикетку, пожалуйста.</string>
@ -439,7 +435,6 @@
<string name="additional_selection">Дополнительный член</string>
<string name="delete_source_file">Удалите исходный файл, когда закончите</string>
<string name="packmod">упакова</string>
<string name="open_tip">Немедленное открытие на сумму $1.2f</string>
<string name="packing">В упаковке...</string>
<string name="share_mod">подел</string>
<string name="share_message">подел</string>
@ -486,7 +481,6 @@
<string name="register_successed">Регистрация прошла успешно.</string>
<string name="registration_success_message">Код активации аккаунта был отправлен на ваш почтовый ящик. Если письмо не было получено, почтовый ящик можно рассматривать как спам. Пожалуйста, проверьте мусорные баки.</string>
<string name="please_login_first">Заходите, пожалуйста.</string>
<string name="tourist_pattern">Туристский режим</string>
<string name="network_error">Интернет-ошибка.</string>
<string name="check_update_failure">Проверка не удалась.</string>
<string name="setting_check_beta_update" translatable="false">CheckBetaUpdate</string>
@ -569,7 +563,6 @@
<string name="english_editing_mode">Модель развития прототипа</string>
<string name="mt_installed">Вы используете английский в качестве языка разработки\? В отличие от работы в \ \\"MT management \", ассистенты имеют возможность давать советы по английскому коду, а также умные советы, направленные на окружающую среду модуля.</string>
<string name="expiration_time_null">Неизвестная продолжительность активации</string>
<string name="expiration_time_tip">Срок действия: 1 %</string>
<string name="community">сообществ</string>
<string name="recommended">рекомендова</string>
<string name="local">местн</string>
@ -665,7 +658,6 @@
<string name="export_this">Вот так</string>
<string name="preview_static_code">Проверьте статический код</string>
<string name="set_note">Ставить примечания</string>
<string name="activate">активирова</string>
<string name="money">1$.2f</string>
<string name="discount_prompt">$1 % сэкономлено $2%2f</string>
<string name="setting_night_mode_follow_system" translatable="false">NightModeFollowSystem</string>
@ -705,11 +697,8 @@
<string name="setting_use_the_community_as_the_launch_page" translatable="false">UseTheCommunityAsTheLaunchPage</string>
<string name="use_the_community_as_the_launch_page">Используйте сообщество в качестве стартовой страницы</string>
<string name="use_the_community_as_the_launch_page_tip">По умолчанию.</string>
<string name="renewal">продлен</string>
<string name="renewal_tip_title">Дополнительное напоминание</string>
<string name="renewal_tip_msg">Ваш номер счета ($1) истекает через 2 дня.</string>
<string name="forever_time">Постоянная активация</string>
<string name="can_t_activate">Вы активированы навсегда.</string>
<string name="report">наводк</string>
<string name="report_t">- 10 процентов</string>
<string name="why">Причина:</string>
@ -731,9 +720,7 @@
<string name="review_mod">Проверка модуля</string>
<string name="refused">отказыва</string>
<string name="remove_fans">Убрать фанатов.</string>
<string name="coupon">Купоны.</string>
<string name="coupon_num">Купоны.</string>
<string name="coupon_not_use">Не использовал никаких купонов.</string>
<string name="time_limit">Срок действия до: 1 % может использоваться 2 %</string>
<string name="payment_reminders">Мы переведем деньги на ваш счет в течение 24 часов после получения приказа. Если ваш заказ не будет выполнен в течение 24 часов, пожалуйста, сообщите нам ваш номер заказа.</string>
<string name="pay">плат</string>
@ -932,7 +919,6 @@
<string name="all">все</string>
<string name="new_password">Новый пароль.</string>
<string name="edit_text_color_dark">Темный тематический цвет шрифта</string>
<string name="user_group">Пользовательская группа</string>
<string name="discord_group">Дискорд-сервер</string>
<string name="search_suggestions_null">Никаких советов по поиску.</string>
<string name="search_suggestions_loading">Получить ордер на обыск...</string>
@ -958,7 +944,6 @@
<string name="obtain_source_code_msg">Проверьте исходный код ржавого ассистента на Github, который был открыт и добро пожаловать на вторичную разработку.</string>
<string name="obtain_source_code">Получить исходный код.</string>
<string name="setting_obtain_source_code" translatable="false">ObtainSourceCode</string>
<string name="rust_api">ржавчина</string>
<string name="search_type_template_package">Шаблон.</string>
<string name="public_mod">публичн</string>
<string name="private_mod">частн</string>

View File

@ -29,8 +29,6 @@
<string name="dialog_ok">确定</string>
<string name="activation_app">激活铁锈助手</string>
<string name="activation_app_tip">您的激活时间已过,请激活铁锈助手。</string>
<string name="choose_plan">套餐</string>
<string name="all_function">全部功能</string>
<string name="only_one">仅此一次</string>
<string name="always_allow">始终允许</string>
<string name="pay_yes">是的,确实收到了</string>
@ -85,8 +83,6 @@
<string name="retrieve_password">找回密码</string>
<string name="login">登录</string>
<string name="agreement_agreed">我同意《服务协议》和《隐私政策》</string>
<string name="service_agreement">《服务协议》</string>
<string name="privacy_policy">《隐私政策》</string>
<string name="describe">描述</string>
<string name="mod_tags">标签</string>
<string name="tags_error">请输入标签。</string>
@ -439,7 +435,6 @@
<string name="additional_selection">附加项</string>
<string name="delete_source_file">打包完成后删除源文件</string>
<string name="packmod">打包</string>
<string name="open_tip">立即以%1$.2f元开通</string>
<string name="packing">打包中...</string>
<string name="share_mod">分享</string>
<string name="share_message">分享</string>
@ -486,7 +481,6 @@
<string name="register_successed">注册成功</string>
<string name="registration_success_message">账号激活码已发送至您的邮箱。若没有收到,则邮箱可能被视为垃圾邮件了。请检查您的垃圾箱。</string>
<string name="please_login_first">请先登录</string>
<string name="tourist_pattern">游客模式</string>
<string name="network_error">网络错误。</string>
<string name="check_update_failure">检查更新失败。</string>
<string name="setting_check_beta_update" translatable="false">CheckBetaUpdate</string>
@ -569,7 +563,6 @@
<string name="english_editing_mode">原生开发模式</string>
<string name="mt_installed">您是否使用英文作为您的开发语言?相比在\"MT管理器\"上工作,助手有英文代码提示功能,以及针对模组环境的智能提示。</string>
<string name="expiration_time_null">未知的激活时长</string>
<string name="expiration_time_tip">到期时间:%1$s</string>
<string name="community">社区</string>
<string name="recommended">推荐</string>
<string name="local">本地</string>
@ -665,7 +658,6 @@
<string name="export_this">导出到此</string>
<string name="preview_static_code">查看静态代码</string>
<string name="set_note">设置注解</string>
<string name="activate">激活</string>
<string name="money">¥%1$.2f</string>
<string name="discount_prompt">%1$s 已省%2$.2f元</string>
<string name="setting_night_mode_follow_system" translatable="false">NightModeFollowSystem</string>
@ -705,11 +697,8 @@
<string name="setting_use_the_community_as_the_launch_page" translatable="false">UseTheCommunityAsTheLaunchPage</string>
<string name="use_the_community_as_the_launch_page">使用社区作为启动页面</string>
<string name="use_the_community_as_the_launch_page_tip">默认启用</string>
<string name="renewal">续费</string>
<string name="renewal_tip_title">续费提醒</string>
<string name="renewal_tip_msg">您的账号(%1$s)将于%2$d天后到期。</string>
<string name="forever_time">赞助者</string>
<string name="can_t_activate">您已永久激活。</string>
<string name="report">举报</string>
<string name="report_t">举报-%1$s</string>
<string name="why">原因</string>
@ -731,9 +720,7 @@
<string name="review_mod">审核模组</string>
<string name="refused">拒绝</string>
<string name="remove_fans">移除粉丝</string>
<string name="coupon">优惠券</string>
<string name="coupon_num">优惠券(%1$d)</string>
<string name="coupon_not_use">没有使用任何优惠券。</string>
<string name="time_limit">有效期至:%1$s 可使用%2$s次</string>
<string name="payment_reminders">我们会在收到您的订单后24小时内充值进您的账户请耐心等待。若您的订单未在24小时内处理请向我们提交您的订单号申请处理.</string>
<string name="pay">支付</string>
@ -932,7 +919,6 @@
<string name="all">全部</string>
<string name="new_password">新密码</string>
<string name="edit_text_color_dark">暗色主题字体颜色</string>
<string name="user_group">用户群</string>
<string name="discord_group">Discord服务器</string>
<string name="search_suggestions_null">无搜索建议。</string>
<string name="search_suggestions_loading">获取搜索建议...</string>
@ -958,7 +944,6 @@
<string name="obtain_source_code_msg">在Github上查看铁锈助手的源代码助手已开源欢迎二次开发。</string>
<string name="obtain_source_code">获取源代码</string>
<string name="setting_obtain_source_code" translatable="false">ObtainSourceCode</string>
<string name="rust_api">铁锈Api-Code</string>
<string name="search_type_template_package">模板包</string>
<string name="public_mod">公开</string>
<string name="private_mod">私有</string>