diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0fa426bad..74a0406d8 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -139,9 +139,25 @@ android { ) } + bundle { + language { + enableSplit = false + } + } + lint { - checkReleaseBuilds = false - abortOnError = false + checkReleaseBuilds = true + abortOnError = true + warningsAsErrors = false + fatal += setOf( + "CheckResult", + "InlinedApi", + "NewApi", + "Recycle", + "MissingPermission", + "WrongConstant", + "LaunchActivityFromNotification", + ) } } diff --git a/app/src/main/java/net/ankio/auto/service/CoreService.kt b/app/src/main/java/net/ankio/auto/service/CoreService.kt index a53a5babb..76b2b72a2 100644 --- a/app/src/main/java/net/ankio/auto/service/CoreService.kt +++ b/app/src/main/java/net/ankio/auto/service/CoreService.kt @@ -15,6 +15,7 @@ import net.ankio.auto.constant.WorkMode import org.ezbook.server.intent.IntentType import net.ankio.auto.service.api.ICoreService import net.ankio.auto.storage.Logger +import net.ankio.auto.ui.activity.MainActivity import net.ankio.auto.utils.PrefManager /** @@ -144,18 +145,24 @@ class CoreService : LifecycleService() { * 创建一个低优先级、静默的通知,点击触发手动 OCR(通知不清除) */ private fun buildNotification(): Notification { + val appIntent = Intent(this, MainActivity::class.java) + val appPendingIntent = PendingIntent.getActivity( + this, 0, appIntent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) val ocrIntent = Intent(this, CoreService::class.java).apply { putExtra("intentType", IntentType.OCR.name) putExtra("manual", true) } - val pendingIntent = PendingIntent.getService( - this, 0, ocrIntent, + val ocrPendingIntent = PendingIntent.getService( + this, 1, ocrIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) return NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.icon_auto) .setContentTitle(getString(R.string.service_notification_title)) - .setContentIntent(pendingIntent) + .setContentIntent(appPendingIntent) + .addAction(R.drawable.ic_ocr, getString(R.string.ocr_tile_title), ocrPendingIntent) .setOngoing(true) .setShowWhen(false) .setSilent(true) diff --git a/app/src/main/java/net/ankio/auto/service/ocr/OcrTools.kt b/app/src/main/java/net/ankio/auto/service/ocr/OcrTools.kt index 4fef3f988..97968dd6f 100644 --- a/app/src/main/java/net/ankio/auto/service/ocr/OcrTools.kt +++ b/app/src/main/java/net/ankio/auto/service/ocr/OcrTools.kt @@ -125,9 +125,21 @@ object OcrTools { } suspend fun collapseStatusBar() { - SelectToSpeakService.instance?.performGlobalAction( - AccessibilityService.GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE - ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + SelectToSpeakService.instance?.performGlobalAction( + AccessibilityService.GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE + ) + } else { + withContext(Dispatchers.IO) { + Shell(BuildConfig.APPLICATION_ID).use { shell -> + runCatching { + if (shell.checkPermission()) { + shell.exec("cmd statusbar collapse") + } + } + } + } + } delay(500) } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/service/overlay/RepeatToast.kt b/app/src/main/java/net/ankio/auto/service/overlay/RepeatToast.kt index f95c5323d..344918128 100644 --- a/app/src/main/java/net/ankio/auto/service/overlay/RepeatToast.kt +++ b/app/src/main/java/net/ankio/auto/service/overlay/RepeatToast.kt @@ -23,6 +23,7 @@ import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.WindowManager +import android.widget.FrameLayout import android.widget.TextView import net.ankio.auto.R import net.ankio.auto.storage.Logger @@ -79,7 +80,8 @@ class RepeatToast( // 视图使用主题化的 Context 进行膨胀,保证主题属性可用 val themedCtx = context.toThemeCtx() - val view = LayoutInflater.from(themedCtx).inflate(R.layout.repeat_toast, null) + val inflationParent = FrameLayout(themedCtx) + val view = LayoutInflater.from(themedCtx).inflate(R.layout.repeat_toast, inflationParent, false) rootView = view val msgView = view.findViewById(R.id.message) @@ -155,4 +157,4 @@ class RepeatToast( }.onFailure { Logger.w("RepeatToast removeView failed: ${it.message}") } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/storage/backup/BackupManager.kt b/app/src/main/java/net/ankio/auto/storage/backup/BackupManager.kt index 2c056b435..33c9bf411 100644 --- a/app/src/main/java/net/ankio/auto/storage/backup/BackupManager.kt +++ b/app/src/main/java/net/ankio/auto/storage/backup/BackupManager.kt @@ -299,7 +299,7 @@ class BackupManager(private val context: Context) { DocumentsContract.getTreeDocumentId(uri) ) - context.contentResolver.query( + val cursor = context.contentResolver.query( childrenUri, arrayOf( DocumentsContract.Document.COLUMN_DISPLAY_NAME, @@ -308,7 +308,9 @@ class BackupManager(private val context: Context) { null, null, null - )?.use { cursor -> + ) + try { + if (cursor == null) return@withIO val nameIndex = cursor.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_DISPLAY_NAME) val idIndex = @@ -322,6 +324,8 @@ class BackupManager(private val context: Context) { backupFiles.add(Pair(name, fileUri)) } } + } finally { + cursor?.close() } // 按文件名排序(文件名包含时间戳,降序排列) @@ -416,4 +420,4 @@ class BackupManager(private val context: Context) { } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/storage/backup/RestoreManager.kt b/app/src/main/java/net/ankio/auto/storage/backup/RestoreManager.kt index c7baec7a5..9467d8e0f 100644 --- a/app/src/main/java/net/ankio/auto/storage/backup/RestoreManager.kt +++ b/app/src/main/java/net/ankio/auto/storage/backup/RestoreManager.kt @@ -62,12 +62,14 @@ class RestoreManager(private val context: Context) { throwable = null ) - inputStream.use { stream -> + try { val file = File(context.cacheDir, filename) - file.writeBytes(stream.readBytes()) + file.writeBytes(inputStream.readBytes()) // 解包并恢复数据 fileManager.unpackData(file) + } finally { + inputStream.close() } Logger.i("本地恢复完成") diff --git a/app/src/main/java/net/ankio/auto/ui/adapter/AnalysisTaskAdapter.kt b/app/src/main/java/net/ankio/auto/ui/adapter/AnalysisTaskAdapter.kt index d8be1385c..89c322f85 100644 --- a/app/src/main/java/net/ankio/auto/ui/adapter/AnalysisTaskAdapter.kt +++ b/app/src/main/java/net/ankio/auto/ui/adapter/AnalysisTaskAdapter.kt @@ -112,7 +112,8 @@ class AnalysisTaskAdapter : BaseAdapter() { } catch (e: Exception) { // 处理包信息获取异常,设置默认值 binding.appName.text = data.packageName - binding.appVersionName.text = "Unknown" + binding.appVersionName.text = binding.root.context.getString(R.string.unknown) binding.appPackageName.text = data.packageName binding.checkbox.isChecked = data.isSelected } @@ -129,4 +130,4 @@ class AppAdapter : BaseAdapter() { } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/ui/adapter/CategoryRuleAdapter.kt b/app/src/main/java/net/ankio/auto/ui/adapter/CategoryRuleAdapter.kt index c119528b9..4b2cd3bb7 100755 --- a/app/src/main/java/net/ankio/auto/ui/adapter/CategoryRuleAdapter.kt +++ b/app/src/main/java/net/ankio/auto/ui/adapter/CategoryRuleAdapter.kt @@ -71,7 +71,7 @@ class CategoryRuleAdapter( if (!value) { selectedIds.clear() } - notifyDataSetChanged() + notifySelectionStateChanged() } /** @@ -229,10 +229,16 @@ class CategoryRuleAdapter( selectedIds.clear() selectedIds.addAll(getItems().map { it.id }) } - notifyDataSetChanged() + notifySelectionStateChanged() onSelectionChanged?.invoke(selectedIds.size) } + private fun notifySelectionStateChanged() { + if (itemCount > 0) { + notifyItemRangeChanged(0, itemCount) + } + } + /** * 移除选中的项目 */ diff --git a/app/src/main/java/net/ankio/auto/ui/adapter/CurrencySelectorAdapter.kt b/app/src/main/java/net/ankio/auto/ui/adapter/CurrencySelectorAdapter.kt index e58ee25eb..a275fbab7 100644 --- a/app/src/main/java/net/ankio/auto/ui/adapter/CurrencySelectorAdapter.kt +++ b/app/src/main/java/net/ankio/auto/ui/adapter/CurrencySelectorAdapter.kt @@ -24,6 +24,7 @@ import net.ankio.auto.ui.api.BaseViewHolder import net.ankio.auto.ui.utils.load import org.ezbook.server.constant.Currency import org.ezbook.server.db.model.CurrencyModel +import java.util.Locale /** * 币种选择适配器 @@ -118,7 +119,11 @@ class CurrencySelectorAdapter( && data.code != baseCurrencyCode && data.rate > 0 if (showRate) { - binding.rateText.text = "≈ ${formatRate(data.rate)} $baseCurrencyCode" + binding.rateText.text = context.getString( + R.string.approximate_rate_format, + formatRate(data.rate), + baseCurrencyCode + ) binding.rateText.visibility = View.VISIBLE } else { binding.rateText.visibility = View.GONE @@ -127,9 +132,9 @@ class CurrencySelectorAdapter( /** 格式化汇率数值:保留合理精度 */ private fun formatRate(rate: Double): String = when { - rate >= 100 -> String.format("%.0f", rate) - rate >= 1 -> String.format("%.2f", rate) - else -> String.format("%.4f", rate) + rate >= 100 -> String.format(Locale.getDefault(), "%.0f", rate) + rate >= 1 -> String.format(Locale.getDefault(), "%.2f", rate) + else -> String.format(Locale.getDefault(), "%.4f", rate) } override fun areItemsSame(oldItem: CurrencyModel, newItem: CurrencyModel): Boolean = diff --git a/app/src/main/java/net/ankio/auto/ui/adapter/TagSelectorAdapter.kt b/app/src/main/java/net/ankio/auto/ui/adapter/TagSelectorAdapter.kt index 653b57756..a5c29b3fa 100644 --- a/app/src/main/java/net/ankio/auto/ui/adapter/TagSelectorAdapter.kt +++ b/app/src/main/java/net/ankio/auto/ui/adapter/TagSelectorAdapter.kt @@ -67,7 +67,7 @@ class TagSelectorAdapter( this.selectedTags.addAll( if (selectionLimit > 0) selectedTags.take(selectionLimit) else selectedTags ) - notifyDataSetChanged() + notifySelectionStateChanged() } companion object { @@ -222,7 +222,13 @@ class TagSelectorAdapter( fun clearSelection() { if (isEditMode) return selectedTags.clear() - notifyDataSetChanged() + notifySelectionStateChanged() + } + + private fun notifySelectionStateChanged() { + if (itemCount > 0) { + notifyItemRangeChanged(0, itemCount) + } } override fun areItemsSame(oldItem: TagModel, newItem: TagModel): Boolean { diff --git a/app/src/main/java/net/ankio/auto/ui/api/BasePageFragment.kt b/app/src/main/java/net/ankio/auto/ui/api/BasePageFragment.kt index c9e4bfe6a..526fc13f9 100644 --- a/app/src/main/java/net/ankio/auto/ui/api/BasePageFragment.kt +++ b/app/src/main/java/net/ankio/auto/ui/api/BasePageFragment.kt @@ -12,6 +12,7 @@ import net.ankio.auto.storage.Logger import net.ankio.auto.ui.components.StatusPage import net.ankio.auto.ui.theme.DynamicColors import net.ankio.auto.utils.CoroutineUtils.withIO +import kotlin.coroutines.cancellation.CancellationException /** * 基础分页Fragment抽象类 @@ -179,10 +180,10 @@ abstract class BasePageFragment : BaseFragment() { resetPage() hasMoreData = true statusPage.showLoading() - + loadJob?.cancel() isLoading = false - + loadDataInside() } @@ -194,10 +195,10 @@ abstract class BasePageFragment : BaseFragment() { Logger.d("静默重新加载数据:从第一页开始") resetPage() hasMoreData = true - + loadJob?.cancel() isLoading = false - + loadDataInside() } @@ -219,6 +220,7 @@ abstract class BasePageFragment : BaseFragment() { Logger.d("开始加载数据:第${page}页") loadJob = launch { + val currentJob = coroutineContext[kotlinx.coroutines.Job] try { // 在IO线程中执行数据加载,避免阻塞UI @@ -240,13 +242,18 @@ abstract class BasePageFragment : BaseFragment() { callback?.invoke(true, hasMoreData) restoreScrollPosition() } + } catch (e: CancellationException) { + throw e } catch (e: Exception) { if (page == 1) { statusPage.showError() } callback?.invoke(false, hasMoreData) } finally { - isLoading = false + if (loadJob === currentJob) { + isLoading = false + loadJob = null + } } } diff --git a/app/src/main/java/net/ankio/auto/ui/components/BreathingGradientView.kt b/app/src/main/java/net/ankio/auto/ui/components/BreathingGradientView.kt index d1700058e..a3f3084d3 100644 --- a/app/src/main/java/net/ankio/auto/ui/components/BreathingGradientView.kt +++ b/app/src/main/java/net/ankio/auto/ui/components/BreathingGradientView.kt @@ -52,7 +52,6 @@ class BreathingGradientView @JvmOverloads constructor( init { setWillNotDraw(false) - setupAnimator() } private fun setupAnimator() { @@ -65,13 +64,16 @@ class BreathingGradientView @JvmOverloads constructor( progress = it.animatedValue as Float invalidate() } + start() } } // Start animation when attached to window override fun onAttachedToWindow() { super.onAttachedToWindow() - animator?.start() + if (animator == null) { + setupAnimator() + } } // Stop animation when detached from window @@ -110,4 +112,4 @@ class BreathingGradientView @JvmOverloads constructor( shader.setLocalMatrix(matrix) canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), paint) } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/ui/components/SettingItemView.kt b/app/src/main/java/net/ankio/auto/ui/components/SettingItemView.kt index 5a4ba1b1b..8a0395f4f 100644 --- a/app/src/main/java/net/ankio/auto/ui/components/SettingItemView.kt +++ b/app/src/main/java/net/ankio/auto/ui/components/SettingItemView.kt @@ -5,6 +5,7 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout import androidx.annotation.DrawableRes +import androidx.core.content.res.use import net.ankio.auto.R import net.ankio.auto.databinding.ViewSettingItemBinding import net.ankio.auto.ui.theme.DynamicColors @@ -22,24 +23,20 @@ class SettingItemView @JvmOverloads constructor( // 获取自定义属性 - context.obtainStyledAttributes(attrs, R.styleable.SettingItemView).apply { - try { + context.obtainStyledAttributes(attrs, R.styleable.SettingItemView).use { // 设置图标 - val iconRes = getResourceId(R.styleable.SettingItemView_settingIcon, 0) + val iconRes = it.getResourceId(R.styleable.SettingItemView_settingIcon, 0) if (iconRes != 0) { binding.settingIcon.setImageResource(iconRes) } // 设置标题 - binding.settingTitle.text = getString(R.styleable.SettingItemView_settingTitle) + binding.settingTitle.text = it.getString(R.styleable.SettingItemView_settingTitle) // 设置描述 - binding.settingDesc.text = getString(R.styleable.SettingItemView_settingDesc) + binding.settingDesc.text = it.getString(R.styleable.SettingItemView_settingDesc) binding.root.setCardBackgroundColor(DynamicColors.SurfaceColor1) - } finally { - recycle() - } } } @@ -63,4 +60,4 @@ class SettingItemView @JvmOverloads constructor( binding.settingIcon.setImageResource(iconRes) } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/ui/dialog/components/AmountDisplayComponent.kt b/app/src/main/java/net/ankio/auto/ui/dialog/components/AmountDisplayComponent.kt index 1cc8dbfa8..4f56b8e5c 100644 --- a/app/src/main/java/net/ankio/auto/ui/dialog/components/AmountDisplayComponent.kt +++ b/app/src/main/java/net/ankio/auto/ui/dialog/components/AmountDisplayComponent.kt @@ -35,6 +35,7 @@ import net.ankio.auto.utils.BillTool import net.ankio.auto.utils.PrefManager import org.ezbook.server.constant.BillType import org.ezbook.server.db.model.BillInfoModel +import java.text.NumberFormat import kotlin.math.abs /** @@ -247,7 +248,7 @@ class AmountDisplayComponent( * @param amount 金额数值 */ private fun setAmount(amount: Double) { - binding.amountContainer.text = amount.toString() + binding.amountContainer.text = NumberFormat.getNumberInstance().format(amount) } /** diff --git a/app/src/main/java/net/ankio/auto/ui/dialog/components/BillTagComponent.kt b/app/src/main/java/net/ankio/auto/ui/dialog/components/BillTagComponent.kt index 90508333f..260c9779d 100644 --- a/app/src/main/java/net/ankio/auto/ui/dialog/components/BillTagComponent.kt +++ b/app/src/main/java/net/ankio/auto/ui/dialog/components/BillTagComponent.kt @@ -82,7 +82,9 @@ class BillTagComponent( updateBillTags(selected) }, onSelectionLimitReached = { limit -> - ToastUtils.info(context.getString(R.string.bill_tag_limit, limit)) + ToastUtils.info( + context.resources.getQuantityString(R.plurals.bill_tag_limit, limit, limit) + ) } ) recyclerView.adapter = adapter diff --git a/app/src/main/java/net/ankio/auto/ui/dialog/components/PaymentInfoComponent.kt b/app/src/main/java/net/ankio/auto/ui/dialog/components/PaymentInfoComponent.kt index cf3662807..02db07a7e 100644 --- a/app/src/main/java/net/ankio/auto/ui/dialog/components/PaymentInfoComponent.kt +++ b/app/src/main/java/net/ankio/auto/ui/dialog/components/PaymentInfoComponent.kt @@ -198,7 +198,11 @@ class PaymentInfoComponent( val text = if (selectedBills.isEmpty()) { context.getString(R.string.float_choose_bill) } else { - context.getString(R.string.float_choose_bills, selectedBills.size) + context.resources.getQuantityString( + R.plurals.float_choose_bills, + selectedBills.size, + selectedBills.size + ) } binding.chooseBillButton.text = text } diff --git a/app/src/main/java/net/ankio/auto/ui/fragment/CategoryRulePageFragment.kt b/app/src/main/java/net/ankio/auto/ui/fragment/CategoryRulePageFragment.kt index 2b1bcf5a4..f715515fc 100644 --- a/app/src/main/java/net/ankio/auto/ui/fragment/CategoryRulePageFragment.kt +++ b/app/src/main/java/net/ankio/auto/ui/fragment/CategoryRulePageFragment.kt @@ -312,7 +312,7 @@ class CategoryRulePageFragment : */ private fun updateBatchDeleteUI(selectedCount: Int) { // 更新删除按钮文本和状态 - binding.batchDeleteButton.text = getString(R.string.delete_data) + "($selectedCount)" + binding.batchDeleteButton.text = getString(R.string.delete_data_count, selectedCount) binding.batchDeleteButton.isEnabled = selectedCount > 0 // 更新全选按钮文本 @@ -330,7 +330,7 @@ class CategoryRulePageFragment : private fun showBatchDeleteConfirmDialog(count: Int) { BaseSheetDialog.create(requireActivity()) .setTitle(getString(R.string.batch_delete_title)) - .setMessage(getString(R.string.batch_delete_confirm, count)) + .setMessage(resources.getQuantityString(R.plurals.batch_delete_confirm, count, count)) .setPositiveButton(getString(R.string.sure_msg)) { _, _ -> performBatchDelete() } diff --git a/app/src/main/java/net/ankio/auto/ui/fragment/components/StatusCardComponent.kt b/app/src/main/java/net/ankio/auto/ui/fragment/components/StatusCardComponent.kt index cc7dd63ca..70cef696b 100644 --- a/app/src/main/java/net/ankio/auto/ui/fragment/components/StatusCardComponent.kt +++ b/app/src/main/java/net/ankio/auto/ui/fragment/components/StatusCardComponent.kt @@ -105,7 +105,7 @@ class StatusCardComponent(binding: CardStatusBinding) : drawable = R.drawable.home_active_error ) } - binding.subtitleText.text = "v${data.versionName}" + binding.subtitleText.text = context.getString(R.string.version_format, data.versionName) binding.ruleVersionText.text = data.ruleVersion binding.ruleUpdateText.text = data.ruleUpdate diff --git a/app/src/main/java/net/ankio/auto/ui/fragment/intro/IntroPagePermissionFragment.kt b/app/src/main/java/net/ankio/auto/ui/fragment/intro/IntroPagePermissionFragment.kt index f770c37e4..4ae185dd6 100644 --- a/app/src/main/java/net/ankio/auto/ui/fragment/intro/IntroPagePermissionFragment.kt +++ b/app/src/main/java/net/ankio/auto/ui/fragment/intro/IntroPagePermissionFragment.kt @@ -252,7 +252,13 @@ class IntroPagePermissionFragment : BaseIntroPageFragment("setting_backup_keep_count")?.apply { summary = - getString(R.string.setting_backup_keep_count_summary, PrefManager.backupKeepCount) + resources.getQuantityString( + R.plurals.setting_backup_keep_count_summary, + PrefManager.backupKeepCount, + PrefManager.backupKeepCount + ) } // 更新WebDAV配置显示 diff --git a/app/src/main/java/net/ankio/auto/ui/fragment/settings/InteractionPreferenceFragment.kt b/app/src/main/java/net/ankio/auto/ui/fragment/settings/InteractionPreferenceFragment.kt index de3e4321c..4fda040ef 100644 --- a/app/src/main/java/net/ankio/auto/ui/fragment/settings/InteractionPreferenceFragment.kt +++ b/app/src/main/java/net/ankio/auto/ui/fragment/settings/InteractionPreferenceFragment.kt @@ -132,7 +132,7 @@ class InteractionPreferenceFragment : BasePreferenceFragment() { private fun Preference.updateSummary() { val timeoutValue = PrefManager.floatTimeoutOff summary = if (timeoutValue > 0) { - getString(R.string.setting_timeout_seconds, timeoutValue) + resources.getQuantityString(R.plurals.setting_timeout_seconds, timeoutValue, timeoutValue) } else { getString(R.string.setting_float_badge_disabled) } diff --git a/app/src/main/java/net/ankio/auto/ui/fragment/settings/PageSignaturesFragment.kt b/app/src/main/java/net/ankio/auto/ui/fragment/settings/PageSignaturesFragment.kt index 52cb5b8ab..79aec08b5 100644 --- a/app/src/main/java/net/ankio/auto/ui/fragment/settings/PageSignaturesFragment.kt +++ b/app/src/main/java/net/ankio/auto/ui/fragment/settings/PageSignaturesFragment.kt @@ -18,7 +18,9 @@ package net.ankio.auto.ui.fragment.settings import android.view.LayoutInflater import android.view.ViewGroup import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import net.ankio.auto.R import net.ankio.auto.databinding.FragmentPageSignaturesBinding @@ -79,14 +81,7 @@ class PageSignaturesFragment : BaseFragment() { private class Adapter( private val onDelete: (PageSignature) -> Unit - ) : RecyclerView.Adapter() { - - private var items: List = emptyList() - - fun submitList(list: List) { - items = list - notifyDataSetChanged() - } + ) : ListAdapter(DiffCallback) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { val b = @@ -95,7 +90,7 @@ class PageSignaturesFragment : BaseFragment() { } override fun onBindViewHolder(holder: VH, position: Int) { - val sig = items[position] + val sig = getItem(position) val appInfo = getAppInfoFromPackageName(sig.packageName) holder.binding.appIcon.setImageDrawable(appInfo?.icon) holder.binding.appName.text = appInfo?.name ?: sig.packageName @@ -109,8 +104,14 @@ class PageSignaturesFragment : BaseFragment() { holder.itemView.setOnLongClickListener { onDelete(sig); true } } - override fun getItemCount(): Int = items.size - class VH(val binding: ItemPageSignatureBinding) : RecyclerView.ViewHolder(binding.root) + + private object DiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: PageSignature, newItem: PageSignature): Boolean = + oldItem.key() == newItem.key() + + override fun areContentsTheSame(oldItem: PageSignature, newItem: PageSignature): Boolean = + oldItem == newItem + } } } diff --git a/app/src/main/java/net/ankio/auto/ui/fragment/settings/RecordingPreferenceFragment.kt b/app/src/main/java/net/ankio/auto/ui/fragment/settings/RecordingPreferenceFragment.kt index 45426e592..3ea45444d 100644 --- a/app/src/main/java/net/ankio/auto/ui/fragment/settings/RecordingPreferenceFragment.kt +++ b/app/src/main/java/net/ankio/auto/ui/fragment/settings/RecordingPreferenceFragment.kt @@ -208,7 +208,11 @@ class RecordingPreferenceFragment : BasePreferenceFragment() { private fun updateSelectedCurrenciesSummary() { findPreference("selectedCurrencies")?.apply { val count = PrefManager.getSelectedCurrencySet().size - summary = getString(R.string.setting_selected_currencies_summary, count) + summary = resources.getQuantityString( + R.plurals.setting_selected_currencies_summary, + count, + count + ) } } @@ -336,13 +340,21 @@ class RecordingPreferenceFragment : BasePreferenceFragment() { // 自动去重时间阈值 findPreference("autoGroupTimeThreshold")?.apply { val threshold = PrefManager.autoGroupTimeThreshold - summary = getString(R.string.setting_auto_group_time_threshold_summary, threshold) + summary = resources.getQuantityString( + R.plurals.setting_auto_group_time_threshold_summary, + threshold, + threshold + ) } // 转账合并时间阈值 findPreference("autoTransferTimeThreshold")?.apply { val threshold = PrefManager.autoTransferTimeThreshold - summary = getString(R.string.setting_auto_transfer_time_threshold_summary, threshold) + summary = resources.getQuantityString( + R.plurals.setting_auto_transfer_time_threshold_summary, + threshold, + threshold + ) } } diff --git a/app/src/main/java/net/ankio/auto/ui/utils/DisplayUtils.kt b/app/src/main/java/net/ankio/auto/ui/utils/DisplayUtils.kt index 5074e2be6..ee1fc14b1 100644 --- a/app/src/main/java/net/ankio/auto/ui/utils/DisplayUtils.kt +++ b/app/src/main/java/net/ankio/auto/ui/utils/DisplayUtils.kt @@ -15,12 +15,14 @@ package net.ankio.auto.ui.utils +import android.annotation.SuppressLint import android.content.Context import android.content.res.Configuration import android.graphics.Point import android.os.Build import android.util.TypedValue import android.view.Display +import android.view.WindowInsets import android.view.WindowManager import net.ankio.auto.autoApp @@ -51,9 +53,14 @@ object DisplayUtils { if (navHeight < 0) { synchronized(this) { if (navHeight < 0) { // 双重检查锁定 - val res = context.resources - val navId = res.getIdentifier("navigation_bar_height", "dimen", "android") - navHeight = if (navId > 0) res.getDimensionPixelSize(navId) else 0 + navHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val windowManager = + context.getSystemService(Context.WINDOW_SERVICE) as WindowManager + windowManager.currentWindowMetrics.windowInsets + .getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()).bottom + } else { + getApi29NavigationBarHeight(context) + } } } } @@ -69,15 +76,35 @@ object DisplayUtils { if (statusHeight < 0) { synchronized(this) { if (statusHeight < 0) { // 双重检查锁定 - val res = context.resources - val statusId = res.getIdentifier("status_bar_height", "dimen", "android") - statusHeight = if (statusId > 0) res.getDimensionPixelSize(statusId) else 0 + statusHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val windowManager = + context.getSystemService(Context.WINDOW_SERVICE) as WindowManager + windowManager.currentWindowMetrics.windowInsets + .getInsetsIgnoringVisibility(WindowInsets.Type.statusBars()).top + } else { + getApi29StatusBarHeight(context) + } } } } return statusHeight } + // API 29 has no supported Context-only WindowMetrics inset API. + @SuppressLint("DiscouragedApi", "InternalInsetResource") + private fun getApi29NavigationBarHeight(context: Context): Int { + val resourceId = + context.resources.getIdentifier("navigation_bar_height", "dimen", "android") + return if (resourceId > 0) context.resources.getDimensionPixelSize(resourceId) else 0 + } + + // API 29 has no supported Context-only WindowMetrics inset API. + @SuppressLint("DiscouragedApi", "InternalInsetResource") + private fun getApi29StatusBarHeight(context: Context): Int { + val resourceId = context.resources.getIdentifier("status_bar_height", "dimen", "android") + return if (resourceId > 0) context.resources.getDimensionPixelSize(resourceId) else 0 + } + /** * 判断当前窗口是否为横屏模式 * 注意:这里判断的是窗口方向,而不是设备方向 @@ -154,4 +181,4 @@ object DisplayUtils { return screenSize } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/ui/utils/ImageUtils.kt b/app/src/main/java/net/ankio/auto/ui/utils/ImageUtils.kt index 9e5726040..63c9912f0 100644 --- a/app/src/main/java/net/ankio/auto/ui/utils/ImageUtils.kt +++ b/app/src/main/java/net/ankio/auto/ui/utils/ImageUtils.kt @@ -87,7 +87,7 @@ fun ImageView.load( defaultResId: Int? = null, ) { - val glide = Glide.with(this) + var glide = Glide.with(this) .load( when { src.isNullOrBlank() -> defaultResId // 空串直接用占位图 @@ -96,7 +96,7 @@ fun ImageView.load( ) .error(defaultResId) if (defaultResId != null) { - glide.fallback(defaultResId) + glide = glide.fallback(defaultResId) } glide.into(this) } @@ -155,4 +155,4 @@ suspend fun ImageView.setAssetIconByName(name: String) { val asset = AssetsAPI.getByName(name) val icon = asset?.icon ?: "" this.load(icon, R.drawable.default_asset) -} \ No newline at end of file +} diff --git a/app/src/main/java/net/ankio/auto/ui/utils/PaletteManager.kt b/app/src/main/java/net/ankio/auto/ui/utils/PaletteManager.kt index 688eb3fe3..0b30542fc 100644 --- a/app/src/main/java/net/ankio/auto/ui/utils/PaletteManager.kt +++ b/app/src/main/java/net/ankio/auto/ui/utils/PaletteManager.kt @@ -7,6 +7,7 @@ import androidx.annotation.ColorInt import androidx.annotation.IntRange import androidx.core.content.ContextCompat import androidx.core.graphics.ColorUtils +import net.ankio.auto.R import kotlin.math.abs /** @@ -49,6 +50,26 @@ object PaletteManager { // 基于 label 的颜色缓存:key=label.hashCode(),value=Duo private val cacheLabelColors = mutableMapOf() + private val backgroundColorResources = intArrayOf( + R.color.palette_01_bg, R.color.palette_02_bg, R.color.palette_03_bg, + R.color.palette_04_bg, R.color.palette_05_bg, R.color.palette_06_bg, + R.color.palette_07_bg, R.color.palette_08_bg, R.color.palette_09_bg, + R.color.palette_10_bg, R.color.palette_11_bg, R.color.palette_12_bg, + R.color.palette_13_bg, R.color.palette_14_bg, R.color.palette_15_bg, + R.color.palette_16_bg, R.color.palette_17_bg, R.color.palette_18_bg, + R.color.palette_19_bg, R.color.palette_20_bg, R.color.palette_21_bg, + R.color.palette_22_bg, R.color.palette_23_bg, R.color.palette_24_bg, + R.color.palette_25_bg, R.color.palette_26_bg, R.color.palette_27_bg, + R.color.palette_28_bg, R.color.palette_29_bg, R.color.palette_30_bg, + R.color.palette_31_bg, R.color.palette_32_bg, R.color.palette_33_bg, + R.color.palette_34_bg, R.color.palette_35_bg, R.color.palette_36_bg, + R.color.palette_37_bg, R.color.palette_38_bg, R.color.palette_39_bg, + R.color.palette_40_bg, R.color.palette_41_bg, R.color.palette_42_bg, + R.color.palette_43_bg, R.color.palette_44_bg, R.color.palette_45_bg, + R.color.palette_46_bg, R.color.palette_47_bg, R.color.palette_48_bg, + R.color.palette_49_bg, R.color.palette_50_bg + ) + /** * 基于 label 获取颜色 * 相同的 label 总是返回相同的颜色 @@ -198,22 +219,12 @@ object PaletteManager { * 命名规则:palette_XX_bg */ fun getBgColorResId( + @Suppress("UNUSED_PARAMETER") context: Context, @IntRange(from = 1, to = TOTAL_FAMILIES.toLong()) index: Int ): Int { val normalized = normalizeIndex(index) - val name = buildBgName(normalized) - val resId = context.resources.getIdentifier(name, "color", context.packageName) - // 理论上应当存在;若异常缺失,回退到 palette_01(兜底不崩溃) - if (resId == 0) { - val fallback = context.resources.getIdentifier( - buildBgName(1), - "color", - context.packageName - ) - return if (fallback != 0) fallback else android.R.color.transparent - } - return resId + return backgroundColorResources.getOrElse(normalized - 1) { R.color.palette_01_bg } } /** @@ -236,11 +247,6 @@ object PaletteManager { } } - private fun buildBgName(index: Int): String { - val idx = String.format("%02d", index) - return "palette_${idx}_bg" - } - // 颜色计算参数 - 基于可访问性标准 const val BRIGHTNESS_THRESHOLD = 0.4f const val DARK_FACTOR = 0.6f @@ -280,5 +286,3 @@ object PaletteManager { ) } } - - diff --git a/app/src/main/java/net/ankio/auto/utils/BillTool.kt b/app/src/main/java/net/ankio/auto/utils/BillTool.kt index 3b04a2238..f6cf6d560 100644 --- a/app/src/main/java/net/ankio/auto/utils/BillTool.kt +++ b/app/src/main/java/net/ankio/auto/utils/BillTool.kt @@ -118,19 +118,19 @@ object BillTool { view.setTextColor(color) // 有货币单位则追加到金额后面,如 "- 100.0 USD" val suffix = if (currencyUnit.isNullOrEmpty()) "" else " $currencyUnit" - when (t) { + val sign = when (t) { BillType.Expend, BillType.ExpendReimbursement, BillType.ExpendLending, BillType.ExpendRepayment -> { - view.text = "- $price$suffix" + "- " } BillType.Income, BillType.IncomeLending, BillType.IncomeRepayment, BillType.IncomeReimbursement -> { - view.text = "+ $price$suffix" + "+ " } - else -> { - view.text = "$price$suffix" - } + else -> "" } + view.text = + view.context.getString(R.string.bill_amount_format, sign, price.toString(), suffix) } /** @@ -186,7 +186,9 @@ object BillTool { } } - ToastUtils.info(autoApp.getString(R.string.sync_completed, syncedCount)) + ToastUtils.info( + autoApp.resources.getQuantityString(R.plurals.sync_completed, syncedCount, syncedCount) + ) } diff --git a/app/src/main/java/net/ankio/auto/xposed/hooks/qianji/tools/QianJiUri.kt b/app/src/main/java/net/ankio/auto/xposed/hooks/qianji/tools/QianJiUri.kt index cebdb2264..71faa122c 100644 --- a/app/src/main/java/net/ankio/auto/xposed/hooks/qianji/tools/QianJiUri.kt +++ b/app/src/main/java/net/ankio/auto/xposed/hooks/qianji/tools/QianJiUri.kt @@ -74,7 +74,7 @@ object QianJiUri { private fun formatTime(time: Long): String { // 时间格式为yyyy-MM-dd HH:mm:ss val date = Date(time) - val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) return sdf.format(date) -} \ No newline at end of file +} diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml deleted file mode 100644 index 0fafaa90c..000000000 --- a/app/src/main/res/anim/fade_in.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml deleted file mode 100644 index 2aa0a50cc..000000000 --- a/app/src/main/res/anim/fade_out.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/drawable/default_asset.png b/app/src/main/res/drawable-nodpi/default_asset.png similarity index 100% rename from app/src/main/res/drawable/default_asset.png rename to app/src/main/res/drawable-nodpi/default_asset.png diff --git a/app/src/main/res/drawable/default_book.webp b/app/src/main/res/drawable-nodpi/default_book.webp old mode 100755 new mode 100644 similarity index 100% rename from app/src/main/res/drawable/default_book.webp rename to app/src/main/res/drawable-nodpi/default_book.webp diff --git a/app/src/main/res/drawable/default_cate.png b/app/src/main/res/drawable-nodpi/default_cate.png old mode 100755 new mode 100644 similarity index 100% rename from app/src/main/res/drawable/default_cate.png rename to app/src/main/res/drawable-nodpi/default_cate.png diff --git a/app/src/main/res/drawable/bottom_unselect_setting.xml b/app/src/main/res/drawable/bottom_unselect_setting.xml index 98f720aa6..68b1302bc 100755 --- a/app/src/main/res/drawable/bottom_unselect_setting.xml +++ b/app/src/main/res/drawable/bottom_unselect_setting.xml @@ -13,11 +13,14 @@ ~ limitations under the License. --> + - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/data_sms.xml b/app/src/main/res/drawable/data_sms.xml deleted file mode 100755 index 15eea3f1c..000000000 --- a/app/src/main/res/drawable/data_sms.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/home_app_book_data.xml b/app/src/main/res/drawable/home_app_book_data.xml index 30526b259..282e01c9a 100644 --- a/app/src/main/res/drawable/home_app_book_data.xml +++ b/app/src/main/res/drawable/home_app_book_data.xml @@ -13,11 +13,14 @@ ~ limitations under the License. --> + - - diff --git a/app/src/main/res/drawable/home_msg_qq.xml b/app/src/main/res/drawable/home_msg_qq.xml deleted file mode 100755 index dfc7c6b3e..000000000 --- a/app/src/main/res/drawable/home_msg_qq.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/home_msg_telegram.xml b/app/src/main/res/drawable/home_msg_telegram.xml deleted file mode 100755 index 17ec8d39b..000000000 --- a/app/src/main/res/drawable/home_msg_telegram.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_apps.xml b/app/src/main/res/drawable/ic_apps.xml index 47190a011..fc884a89f 100644 --- a/app/src/main/res/drawable/ic_apps.xml +++ b/app/src/main/res/drawable/ic_apps.xml @@ -1,10 +1,13 @@ + + android:tint="?colorOnBackground" + tools:ignore="VectorPath"> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_arrow_right.xml b/app/src/main/res/drawable/ic_arrow_right.xml deleted file mode 100644 index be1eb149a..000000000 --- a/app/src/main/res/drawable/ic_arrow_right.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_backup.xml b/app/src/main/res/drawable/ic_backup.xml deleted file mode 100644 index c7353391f..000000000 --- a/app/src/main/res/drawable/ic_backup.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_bill_flag_not_budget.xml b/app/src/main/res/drawable/ic_bill_flag_not_budget.xml index edc86db39..8ba22811e 100644 --- a/app/src/main/res/drawable/ic_bill_flag_not_budget.xml +++ b/app/src/main/res/drawable/ic_bill_flag_not_budget.xml @@ -1,9 +1,12 @@ + + android:tint="?colorOnBackground" + tools:ignore="VectorPath"> diff --git a/app/src/main/res/drawable/ic_bug_report.xml b/app/src/main/res/drawable/ic_bug_report.xml index 5145336f3..6693fedd7 100644 --- a/app/src/main/res/drawable/ic_bug_report.xml +++ b/app/src/main/res/drawable/ic_bug_report.xml @@ -1,10 +1,13 @@ + + android:tint="?colorOnBackground" + tools:ignore="VectorPath"> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_calendar_month.xml b/app/src/main/res/drawable/ic_calendar_month.xml deleted file mode 100644 index ab872f163..000000000 --- a/app/src/main/res/drawable/ic_calendar_month.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_calendar_month2.xml b/app/src/main/res/drawable/ic_calendar_month2.xml deleted file mode 100644 index 388df5766..000000000 --- a/app/src/main/res/drawable/ic_calendar_month2.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_calendar_view_year.xml b/app/src/main/res/drawable/ic_calendar_view_year.xml deleted file mode 100644 index bf7eaf594..000000000 --- a/app/src/main/res/drawable/ic_calendar_view_year.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_calendar_week.xml b/app/src/main/res/drawable/ic_calendar_week.xml deleted file mode 100644 index 64f78f83f..000000000 --- a/app/src/main/res/drawable/ic_calendar_week.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_category_stats.xml b/app/src/main/res/drawable/ic_category_stats.xml deleted file mode 100644 index feaaa0950..000000000 --- a/app/src/main/res/drawable/ic_category_stats.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_chat_bubble.xml b/app/src/main/res/drawable/ic_chat_bubble.xml deleted file mode 100644 index 9d0422fde..000000000 --- a/app/src/main/res/drawable/ic_chat_bubble.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_close_themed.xml b/app/src/main/res/drawable/ic_close_themed.xml deleted file mode 100644 index f80e87885..000000000 --- a/app/src/main/res/drawable/ic_close_themed.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_cloud.xml b/app/src/main/res/drawable/ic_cloud.xml deleted file mode 100644 index 48b0e08d6..000000000 --- a/app/src/main/res/drawable/ic_cloud.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_empty.xml b/app/src/main/res/drawable/ic_empty.xml index 94a298132..a8b53265d 100644 --- a/app/src/main/res/drawable/ic_empty.xml +++ b/app/src/main/res/drawable/ic_empty.xml @@ -13,11 +13,14 @@ ~ limitations under the License. --> + + android:viewportHeight="500" + tools:ignore="VectorPath,VectorRaster"> - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_key.xml b/app/src/main/res/drawable/ic_key.xml index e8308fa17..4fd086694 100644 --- a/app/src/main/res/drawable/ic_key.xml +++ b/app/src/main/res/drawable/ic_key.xml @@ -1,9 +1,12 @@ + + android:tint="?colorOnBackground" + tools:ignore="VectorPath"> diff --git a/app/src/main/res/drawable/ic_net_error.xml b/app/src/main/res/drawable/ic_net_error.xml index 9ba93eb91..cad70426c 100644 --- a/app/src/main/res/drawable/ic_net_error.xml +++ b/app/src/main/res/drawable/ic_net_error.xml @@ -1,8 +1,11 @@ + + android:viewportHeight="500" + tools:ignore="VectorPath,VectorRaster"> diff --git a/app/src/main/res/drawable/ic_payments.xml b/app/src/main/res/drawable/ic_payments.xml deleted file mode 100644 index fe512e341..000000000 --- a/app/src/main/res/drawable/ic_payments.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_science.xml b/app/src/main/res/drawable/ic_science.xml deleted file mode 100644 index 15a0f03be..000000000 --- a/app/src/main/res/drawable/ic_science.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_screenshot.xml b/app/src/main/res/drawable/ic_screenshot.xml deleted file mode 100644 index c34c94e70..000000000 --- a/app/src/main/res/drawable/ic_screenshot.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml deleted file mode 100644 index d367e9728..000000000 --- a/app/src/main/res/drawable/ic_storage.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_summary.xml b/app/src/main/res/drawable/ic_summary.xml deleted file mode 100644 index 3e32cafc8..000000000 --- a/app/src/main/res/drawable/ic_summary.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_switch.xml b/app/src/main/res/drawable/ic_switch.xml deleted file mode 100644 index 1b130c9c1..000000000 --- a/app/src/main/res/drawable/ic_switch.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_theme.xml b/app/src/main/res/drawable/ic_theme.xml deleted file mode 100755 index ec8101dd8..000000000 --- a/app/src/main/res/drawable/ic_theme.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_tip.xml b/app/src/main/res/drawable/ic_tip.xml deleted file mode 100644 index 23259c675..000000000 --- a/app/src/main/res/drawable/ic_tip.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_trend.xml b/app/src/main/res/drawable/ic_trend.xml deleted file mode 100644 index 99da20e85..000000000 --- a/app/src/main/res/drawable/ic_trend.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_usage.xml b/app/src/main/res/drawable/ic_usage.xml deleted file mode 100644 index 4eff5f61c..000000000 --- a/app/src/main/res/drawable/ic_usage.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/icon_eye.xml b/app/src/main/res/drawable/icon_eye.xml deleted file mode 100644 index bb1db1718..000000000 --- a/app/src/main/res/drawable/icon_eye.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/icon_map.xml b/app/src/main/res/drawable/icon_map.xml deleted file mode 100644 index b2f736bd5..000000000 --- a/app/src/main/res/drawable/icon_map.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/icon_question.xml b/app/src/main/res/drawable/icon_question.xml deleted file mode 100644 index 4dec8d102..000000000 --- a/app/src/main/res/drawable/icon_question.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/img_geekbar.xml b/app/src/main/res/drawable/img_geekbar.xml deleted file mode 100644 index 20a5b83ac..000000000 --- a/app/src/main/res/drawable/img_geekbar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/menu_item_notice.xml b/app/src/main/res/drawable/menu_item_notice.xml deleted file mode 100644 index f0d8a43b4..000000000 --- a/app/src/main/res/drawable/menu_item_notice.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/navigation_rail_item_background.xml b/app/src/main/res/drawable/navigation_rail_item_background.xml deleted file mode 100644 index ac934fc49..000000000 --- a/app/src/main/res/drawable/navigation_rail_item_background.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/rounded_border_.xml b/app/src/main/res/drawable/rounded_border_.xml deleted file mode 100644 index 68b539a37..000000000 --- a/app/src/main/res/drawable/rounded_border_.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/rounded_border_dashed.xml b/app/src/main/res/drawable/rounded_border_dashed.xml deleted file mode 100644 index b97afba3f..000000000 --- a/app/src/main/res/drawable/rounded_border_dashed.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/scanner_svgrepo_com.xml b/app/src/main/res/drawable/scanner_svgrepo_com.xml index 0f250b6af..7be761bf7 100644 --- a/app/src/main/res/drawable/scanner_svgrepo_com.xml +++ b/app/src/main/res/drawable/scanner_svgrepo_com.xml @@ -13,11 +13,14 @@ ~ limitations under the License. --> + diff --git a/app/src/main/res/drawable/setting2_icon_language.xml b/app/src/main/res/drawable/setting2_icon_language.xml index f7d7a3749..64e800499 100644 --- a/app/src/main/res/drawable/setting2_icon_language.xml +++ b/app/src/main/res/drawable/setting2_icon_language.xml @@ -1,9 +1,12 @@ + + android:tint="?colorOnBackground" + tools:ignore="VectorPath"> diff --git a/app/src/main/res/drawable/setting2_icon_translate.xml b/app/src/main/res/drawable/setting2_icon_translate.xml deleted file mode 100644 index c2f0b41de..000000000 --- a/app/src/main/res/drawable/setting2_icon_translate.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/setting2_icon_webdav_download.xml b/app/src/main/res/drawable/setting2_icon_webdav_download.xml deleted file mode 100644 index 8313c8354..000000000 --- a/app/src/main/res/drawable/setting2_icon_webdav_download.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/setting2_icon_webdav_upload.xml b/app/src/main/res/drawable/setting2_icon_webdav_upload.xml deleted file mode 100644 index ced59b258..000000000 --- a/app/src/main/res/drawable/setting2_icon_webdav_upload.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/setting_duplicated.xml b/app/src/main/res/drawable/setting_duplicated.xml deleted file mode 100644 index 8abd1447b..000000000 --- a/app/src/main/res/drawable/setting_duplicated.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/setting_icon_color.xml b/app/src/main/res/drawable/setting_icon_color.xml deleted file mode 100644 index 7b4ee261c..000000000 --- a/app/src/main/res/drawable/setting_icon_color.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/setting_icon_map.xml b/app/src/main/res/drawable/setting_icon_map.xml deleted file mode 100644 index 24e2b5533..000000000 --- a/app/src/main/res/drawable/setting_icon_map.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/setting_icon_parent.xml b/app/src/main/res/drawable/setting_icon_parent.xml deleted file mode 100644 index 0b61e9d23..000000000 --- a/app/src/main/res/drawable/setting_icon_parent.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/setting_icon_remark.xml b/app/src/main/res/drawable/setting_icon_remark.xml deleted file mode 100644 index 8a7dbbd9f..000000000 --- a/app/src/main/res/drawable/setting_icon_remark.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/shape_circle.xml b/app/src/main/res/drawable/shape_circle.xml deleted file mode 100644 index 79373caed..000000000 --- a/app/src/main/res/drawable/shape_circle.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/xposed_framework_icon.xml b/app/src/main/res/drawable/xposed_framework_icon.xml index 972f7614e..eebd39bfe 100644 --- a/app/src/main/res/drawable/xposed_framework_icon.xml +++ b/app/src/main/res/drawable/xposed_framework_icon.xml @@ -13,11 +13,14 @@ ~ limitations under the License. --> + + android:paddingEnd="24dp" + tools:ignore="Overdraw"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_asset_group_header.xml b/app/src/main/res/layout/adapter_asset_group_header.xml index 3dc0cbc32..0190c3322 100644 --- a/app/src/main/res/layout/adapter_asset_group_header.xml +++ b/app/src/main/res/layout/adapter_asset_group_header.xml @@ -12,6 +12,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> + + android:paddingVertical="12dp" + tools:ignore="Overdraw"> + + android:minHeight="72dp" + tools:ignore="Overdraw"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_assets.xml b/app/src/main/res/layout/adapter_assets.xml index 071c8f076..26d23edc2 100755 --- a/app/src/main/res/layout/adapter_assets.xml +++ b/app/src/main/res/layout/adapter_assets.xml @@ -1,3 +1,4 @@ + + android:paddingEnd="24dp" + tools:ignore="Overdraw"> + android:paddingEnd="24dp" + tools:ignore="Overdraw"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_backup.xml b/app/src/main/res/layout/adapter_backup.xml index ed7fc95c9..427603569 100644 --- a/app/src/main/res/layout/adapter_backup.xml +++ b/app/src/main/res/layout/adapter_backup.xml @@ -1,3 +1,4 @@ + + android:paddingVertical="16dp" + tools:ignore="Overdraw"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_book_bill.xml b/app/src/main/res/layout/adapter_book_bill.xml index 47b0b6738..324c70200 100644 --- a/app/src/main/res/layout/adapter_book_bill.xml +++ b/app/src/main/res/layout/adapter_book_bill.xml @@ -1,3 +1,4 @@ + + android:paddingEnd="16dp" + tools:ignore="Overdraw"> + android:textSize="@dimen/font_size_normal" + tools:text="示例分类" /> @@ -59,6 +59,7 @@ android:layout_height="20dp" android:layout_marginStart="50dp" android:layout_marginTop="-10dp" + android:importantForAccessibility="no" android:src="@drawable/bg_three" /> @@ -77,4 +78,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_category_stats.xml b/app/src/main/res/layout/adapter_category_stats.xml index f8720e4c2..2101c9f65 100644 --- a/app/src/main/res/layout/adapter_category_stats.xml +++ b/app/src/main/res/layout/adapter_category_stats.xml @@ -1,6 +1,7 @@ + tools:text="0.0%" /> diff --git a/app/src/main/res/layout/adapter_currency_select.xml b/app/src/main/res/layout/adapter_currency_select.xml index 00a1fae0b..89682be44 100644 --- a/app/src/main/res/layout/adapter_currency_select.xml +++ b/app/src/main/res/layout/adapter_currency_select.xml @@ -1,6 +1,7 @@ + + android:paddingEnd="16dp" + tools:ignore="Overdraw"> + android:paddingStart="4dp" + android:paddingEnd="4dp"> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_log.xml b/app/src/main/res/layout/adapter_log.xml index 67b233b9e..6435f8943 100644 --- a/app/src/main/res/layout/adapter_log.xml +++ b/app/src/main/res/layout/adapter_log.xml @@ -23,7 +23,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/one_padding" - android:textSize="10sp" + android:textSize="11sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/date" app:layout_constraintTop_toTopOf="parent" @@ -40,4 +40,4 @@ app:layout_constraintTop_toBottomOf="@id/app" tools:text="这是一个这是一个非常详细的日志...这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志这是一个这是一个非常详细的日志" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_map.xml b/app/src/main/res/layout/adapter_map.xml index a88188b89..b8a54ca80 100644 --- a/app/src/main/res/layout/adapter_map.xml +++ b/app/src/main/res/layout/adapter_map.xml @@ -57,7 +57,7 @@ android:enabled="false" android:minHeight="24dp" android:text="@string/regexLabel" - android:textSize="10sp" + android:textSize="11sp" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -72,7 +72,6 @@ android:layout_height="@dimen/image_size_small" android:layout_gravity="center_vertical" android:layout_marginHorizontal="@dimen/one_padding" - android:contentDescription="" android:importantForAccessibility="no" android:scaleType="centerInside" android:src="@drawable/icon_map_right" /> @@ -90,4 +89,4 @@ app:textSize="@dimen/abc_text_size_medium_material" tools:text="映射文本很长很长映射文本很长很长很长映射文本很长很长很长映射文本很长很长很长映射文本很长很长很长映射文本很长很长很长很长" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_order.xml b/app/src/main/res/layout/adapter_order.xml index 907232061..55a8538fe 100755 --- a/app/src/main/res/layout/adapter_order.xml +++ b/app/src/main/res/layout/adapter_order.xml @@ -15,6 +15,7 @@ + android:textStyle="bold" + tools:text="1月12日" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/adapter_order_item.xml b/app/src/main/res/layout/adapter_order_item.xml index 939d8809a..71012ba31 100755 --- a/app/src/main/res/layout/adapter_order_item.xml +++ b/app/src/main/res/layout/adapter_order_item.xml @@ -120,7 +120,7 @@ android:id="@+id/flexContainer" android:layout_marginTop="6dp" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="0dp" android:layout_weight="1" app:alignItems="center" @@ -268,7 +268,6 @@ android:layout_height="20dp" android:layout_marginEnd="4dp" android:layout_gravity="center_vertical" - android:contentDescription="" android:importantForAccessibility="no" android:src="@drawable/ic_sync" app:tint="?colorPrimary" /> diff --git a/app/src/main/res/layout/adapter_replace_preview.xml b/app/src/main/res/layout/adapter_replace_preview.xml index c4fe53b2f..cf4ca1f3e 100644 --- a/app/src/main/res/layout/adapter_replace_preview.xml +++ b/app/src/main/res/layout/adapter_replace_preview.xml @@ -13,13 +13,15 @@ ~ limitations under the License. --> + + android:padding="16dp" + tools:ignore="Overdraw"> + + android:layout_height="wrap_content" + tools:ignore="MergeRootFrame"> @@ -26,6 +27,7 @@ android:layout_height="@dimen/image_size_small_min" android:layout_gravity="end|bottom" android:background="@drawable/rounded_border_2" + android:importantForAccessibility="no" android:padding="2dp" android:src="@drawable/ic_more2" /> diff --git a/app/src/main/res/layout/component_payment_info.xml b/app/src/main/res/layout/component_payment_info.xml index 12476b096..f8f265026 100644 --- a/app/src/main/res/layout/component_payment_info.xml +++ b/app/src/main/res/layout/component_payment_info.xml @@ -74,8 +74,9 @@ android:background="?attr/selectableItemBackgroundBorderless" android:clickable="true" android:focusable="true" + android:contentDescription="@string/switch_transfer_direction" android:gravity="center" - android:text="➜" /> + android:text="@string/transfer_direction_arrow" /> + android:text="@string/transfer_direction_arrow" /> + android:text="@string/transfer_direction_arrow" /> diff --git a/app/src/main/res/layout/dialog_loading.xml b/app/src/main/res/layout/dialog_loading.xml index 6967694fa..b77991d70 100644 --- a/app/src/main/res/layout/dialog_loading.xml +++ b/app/src/main/res/layout/dialog_loading.xml @@ -17,7 +17,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/transparent" android:gravity="center" android:orientation="vertical" android:padding="20dp"> @@ -35,7 +34,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="10dp" - android:text="Loading..." + android:text="@string/loading" android:textAppearance="@style/TextAppearance.AppCompat.Display1" android:textColor="?colorOnPrimary" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/dialog_regex_money.xml b/app/src/main/res/layout/dialog_regex_money.xml index 6ac08f973..fdad98499 100755 --- a/app/src/main/res/layout/dialog_regex_money.xml +++ b/app/src/main/res/layout/dialog_regex_money.xml @@ -38,7 +38,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/border_side" - android:text=" ~ " /> + android:text="@string/range_separator" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/float_tip.xml b/app/src/main/res/layout/float_tip.xml index fa583d58c..e5b4e2715 100755 --- a/app/src/main/res/layout/float_tip.xml +++ b/app/src/main/res/layout/float_tip.xml @@ -58,6 +58,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" + android:importantForAccessibility="no" android:scaleType="centerInside" android:tint="?colorPrimary" android:src="@drawable/default_cate" diff --git a/app/src/main/res/layout/float_tip_left.xml b/app/src/main/res/layout/float_tip_left.xml index cb9bba700..42797a98b 100755 --- a/app/src/main/res/layout/float_tip_left.xml +++ b/app/src/main/res/layout/float_tip_left.xml @@ -74,6 +74,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" + android:importantForAccessibility="no" android:scaleType="centerInside" android:tint="?colorPrimary" android:src="@drawable/default_cate" diff --git a/app/src/main/res/layout/float_tip_top.xml b/app/src/main/res/layout/float_tip_top.xml index 0730f05f0..39a18994a 100644 --- a/app/src/main/res/layout/float_tip_top.xml +++ b/app/src/main/res/layout/float_tip_top.xml @@ -46,6 +46,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:adjustViewBounds="true" + android:importantForAccessibility="no" android:scaleType="centerInside" android:tint="?attr/colorOnPrimary" app:srcCompat="@drawable/ic_ai" /> @@ -140,4 +141,3 @@ - diff --git a/app/src/main/res/layout/fragment_asset_edit.xml b/app/src/main/res/layout/fragment_asset_edit.xml index e0e365428..fdf8ec355 100644 --- a/app/src/main/res/layout/fragment_asset_edit.xml +++ b/app/src/main/res/layout/fragment_asset_edit.xml @@ -120,6 +120,7 @@ android:layout_width="40dp" android:layout_height="40dp" android:layout_marginEnd="12dp" + android:importantForAccessibility="no" android:scaleType="fitCenter" android:padding="6dp" tools:src="@drawable/default_asset" /> @@ -202,4 +203,4 @@ app:iconTint="?attr/colorOnPrimary" app:cornerRadius="28dp" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_book_edit.xml b/app/src/main/res/layout/fragment_book_edit.xml index 8795f5e01..af399b041 100644 --- a/app/src/main/res/layout/fragment_book_edit.xml +++ b/app/src/main/res/layout/fragment_book_edit.xml @@ -95,6 +95,7 @@ android:id="@+id/bookIconPreview" android:layout_width="0dp" android:layout_height="0dp" + android:importantForAccessibility="no" android:scaleType="centerCrop" android:src="@drawable/default_book" app:layout_constraintBottom_toBottomOf="parent" @@ -141,4 +142,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/fragment_category_edit.xml b/app/src/main/res/layout/fragment_category_edit.xml index 081f4f133..a60633b39 100755 --- a/app/src/main/res/layout/fragment_category_edit.xml +++ b/app/src/main/res/layout/fragment_category_edit.xml @@ -126,6 +126,7 @@ android:layout_height="40dp" android:layout_marginEnd="12dp" android:background="?attr/selectableItemBackgroundBorderless" + android:importantForAccessibility="no" android:scaleType="fitCenter" android:padding="6dp" android:tint="?colorPrimary" diff --git a/app/src/main/res/layout/fragment_intro_page_sync.xml b/app/src/main/res/layout/fragment_intro_page_sync.xml index c13f9540b..99c256d9e 100644 --- a/app/src/main/res/layout/fragment_intro_page_sync.xml +++ b/app/src/main/res/layout/fragment_intro_page_sync.xml @@ -54,6 +54,7 @@ android:id="@+id/sync_image" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:importantForAccessibility="no" android:src="@drawable/ic_warning" android:tint="@color/log_warning" /> diff --git a/app/src/main/res/layout/fragment_plugin_data.xml b/app/src/main/res/layout/fragment_plugin_data.xml index 70d43743c..d3109440d 100644 --- a/app/src/main/res/layout/fragment_plugin_data.xml +++ b/app/src/main/res/layout/fragment_plugin_data.xml @@ -15,6 +15,7 @@ @@ -59,21 +60,25 @@ app:layout_constraintTop_toTopOf="parent"> + + android:gravity="start|center_vertical" + android:orientation="horizontal" + tools:ignore="UselessParent"> + + android:orientation="horizontal" + tools:ignore="UselessParent"> diff --git a/app/src/main/res/layout/item_color.xml b/app/src/main/res/layout/item_color.xml index d405541b8..fae142c67 100644 --- a/app/src/main/res/layout/item_color.xml +++ b/app/src/main/res/layout/item_color.xml @@ -39,6 +39,7 @@ android:layout_width="16dp" android:layout_height="16dp" android:layout_gravity="center" + android:importantForAccessibility="no" android:src="@drawable/ic_check" android:visibility="gone" /> diff --git a/app/src/main/res/layout/menu_item.xml b/app/src/main/res/layout/menu_item.xml index e25a6c5b8..34b195da9 100644 --- a/app/src/main/res/layout/menu_item.xml +++ b/app/src/main/res/layout/menu_item.xml @@ -14,6 +14,7 @@ android:layout_height="24dp" android:layout_gravity="center_vertical" android:layout_marginEnd="16dp" + android:importantForAccessibility="no" android:tint="#8E8E8E" android:tintMode="screen" android:src="@mipmap/ic_launcher" /> diff --git a/app/src/main/res/layout/setting_item_color.xml b/app/src/main/res/layout/setting_item_color.xml index 865c3b5c9..27f2ea641 100644 --- a/app/src/main/res/layout/setting_item_color.xml +++ b/app/src/main/res/layout/setting_item_color.xml @@ -25,6 +25,7 @@ android:id="@+id/icon" android:layout_width="@dimen/image_size" android:layout_height="@dimen/image_size" + android:importantForAccessibility="no" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -55,4 +56,4 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/setting_item_switch.xml b/app/src/main/res/layout/setting_item_switch.xml index db92858fd..ff2211a92 100644 --- a/app/src/main/res/layout/setting_item_switch.xml +++ b/app/src/main/res/layout/setting_item_switch.xml @@ -23,6 +23,7 @@ android:id="@+id/icon" android:layout_width="@dimen/image_size" android:layout_height="@dimen/image_size" + android:importantForAccessibility="no" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/layout/setting_item_text.xml b/app/src/main/res/layout/setting_item_text.xml index 71aebbdcd..018b41905 100644 --- a/app/src/main/res/layout/setting_item_text.xml +++ b/app/src/main/res/layout/setting_item_text.xml @@ -24,6 +24,7 @@ android:id="@+id/icon" android:layout_width="@dimen/image_size" android:layout_height="@dimen/image_size" + android:importantForAccessibility="no" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/layout/status_page.xml b/app/src/main/res/layout/status_page.xml index db35bf1bc..7c85b41b5 100644 --- a/app/src/main/res/layout/status_page.xml +++ b/app/src/main/res/layout/status_page.xml @@ -31,6 +31,7 @@ android:id="@+id/empty_icon" android:layout_width="200dp" android:layout_height="200dp" + android:importantForAccessibility="no" android:src="@drawable/ic_empty" /> @@ -44,7 +45,8 @@ android:id="@+id/stateIcon" android:layout_width="24dp" android:layout_height="24dp" - android:layout_marginStart="12dp" /> + android:layout_marginStart="12dp" + android:importantForAccessibility="no" /> - \ No newline at end of file + android:title="@string/clear_all_analysis" /> + diff --git a/app/src/main/res/menu/asset_menu.xml b/app/src/main/res/menu/asset_menu.xml deleted file mode 100644 index c57e23508..000000000 --- a/app/src/main/res/menu/asset_menu.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - diff --git a/app/src/main/res/menu/bill_menu.xml b/app/src/main/res/menu/bill_menu.xml index b16ee2d8d..36239e451 100644 --- a/app/src/main/res/menu/bill_menu.xml +++ b/app/src/main/res/menu/bill_menu.xml @@ -19,8 +19,8 @@ android:icon="@drawable/menu_icon_search" android:iconTint="?colorOnBackground" android:title="@string/item_search" - app:actionViewClass="net.ankio.auto.ui.components.MaterialSearchView" - app:showAsAction="always|collapseActionView" /> + android:actionViewClass="net.ankio.auto.ui.components.MaterialSearchView" + android:showAsAction="always|collapseActionView" /> + android:showAsAction="ifRoom" + android:title="@string/setting_privacy" /> diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi/ic_launcher.xml old mode 100755 new mode 100644 similarity index 74% rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to app/src/main/res/mipmap-anydpi/ic_launcher.xml index be316184e..1e48b4cc0 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi/ic_launcher.xml @@ -2,4 +2,5 @@ - \ No newline at end of file + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml old mode 100755 new mode 100644 similarity index 74% rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to app/src/main/res/mipmap-anydpi/ic_launcher_round.xml index be316184e..1e48b4cc0 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml @@ -2,4 +2,5 @@ - \ No newline at end of file + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100755 index 0d0a90081..000000000 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100755 index 8f2cbc7f7..000000000 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100755 index 2f0f380f2..000000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100755 index bf20c467b..000000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100755 index 2c21550e5..000000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100755 index c562df8e0..000000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100755 index 2e54b1240..000000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100755 index ddc305de7..000000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100755 index f6cb4e6d5..000000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100755 index 15ffa64b3..000000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/raw/keep.xml b/app/src/main/res/raw/keep.xml new file mode 100644 index 000000000..6608cf9a1 --- /dev/null +++ b/app/src/main/res/raw/keep.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 3804005b2..850be6032 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -64,30 +64,13 @@ #B0BEC5 #000000 #66000000 - #47000000 - #47000000 - #66000000 - #FFCACACA - #B3FFFFFF - #FF90CAF9 - #FFFF8A80 - #FFFFFFFF - #B3FFFFFF - #FF4E2F30 - #FF5A4C21 - #FF543654 - #FF2E5050 - #FF4A356B - #FF4C3A10 - #FF2F4F2F - #FF5C3D26 #FFE6E1E5 #00000000 - #00000000 - #B3000000 + + diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index a3c6b4d66..4c17c8b44 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -35,10 +35,6 @@ false - -