Skip to content

Commit 83ca6d2

Browse files
refactor(traffic): replace clear-traffic pref with dialog button
1 parent f5cbf49 commit 83ca6d2

10 files changed

Lines changed: 39 additions & 69 deletions

File tree

MikuRay/app/src/main/java/com/miku/ray/AppConfig.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ object AppConfig {
182182
const val WEATHER_UPDATE_TASK_NAME = "weather_updater"
183183
const val WEATHER_LOCATION_TIMEOUT_MS = 10_000L
184184
const val WEATHER_LOCATION_STALE_METERS = 5_000f
185-
const val PREF_ACTION_CLEAR_TOTAL_TRAFFIC = "action_clear_total_traffic"
186185
const val PREF_SEARCH_CHIP_GRADIENT = "pref_search_chip_gradient"
187186
const val PREF_SHOW_REALTIME_TRAFFIC_IP = "pref_show_realtime_traffic_ip"
188187
const val PREF_DISMISS_TEST_BUILD_INFO = "pref_dismiss_test_build_info"

MikuRay/app/src/main/java/com/miku/ray/ui/main/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,7 @@ class MainActivity : HelperBaseActivity(),
687687
startActivity(Intent(this, WeatherForecastActivity::class.java))
688688
}
689689
isTotalTrafficChipSelected() -> {
690-
showTotalTrafficDetailDialog(this)
690+
showTotalTrafficDetailDialog(this) { refreshTotalTrafficChip() }
691691
}
692692
}
693693
}

MikuRay/app/src/main/java/com/miku/ray/ui/preference/activity/SettingsActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class SettingsActivity : HelperBaseActivity(), SearchPreferenceResultListener {
152152
startActivity(Intent(this, WeatherForecastActivity::class.java))
153153
}
154154
isTotalTrafficChipSelected() -> {
155-
showTotalTrafficDetailDialog(this)
155+
showTotalTrafficDetailDialog(this) { refreshTotalTrafficChip() }
156156
}
157157
}
158158
}

MikuRay/app/src/main/java/com/miku/ray/ui/preference/activity/UiSettingsActivity.kt

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ class UiSettingsActivity : BaseActivity() {
130130

131131
private val weatherUnit by lazy { findPreference<ListPreference>(AppConfig.PREF_WEATHER_USE_CELSIUS) }
132132
private val weatherCustomLocation by lazy { findPreference<EditTextPreference>(AppConfig.PREF_WEATHER_CUSTOM_LOCATION) }
133-
private val clearTotalTraffic by lazy { findPreference<Preference>(AppConfig.PREF_ACTION_CLEAR_TOTAL_TRAFFIC) }
134133
private val searchChipGradient by lazy { findPreference<SwitchPreferenceCompat>(AppConfig.PREF_SEARCH_CHIP_GRADIENT) }
135134
private val toolbarCenterSubtitleMode by lazy { findPreference<SwitchPreferenceCompat>(AppConfig.PREF_TOOLBAR_CENTER_SUBTITLE_MODE) }
136135
private val showRealtimeTrafficIp by lazy { findPreference<SwitchPreferenceCompat>(AppConfig.PREF_SHOW_REALTIME_TRAFFIC_IP) }
@@ -532,7 +531,6 @@ class UiSettingsActivity : BaseActivity() {
532531
WeatherHelper.cancelBackgroundUpdates(requireContext())
533532
}
534533
updateChipPreferenceEnabledState()
535-
updateClearTotalTrafficSummary()
536534
when (mode) {
537535
SearchBarChipMode.WEATHER -> requireContext().snackbarDefault(R.string.pref_search_bar_chip_info_weather, title = getString(R.string.title_alerter_info))
538536
SearchBarChipMode.TOTAL_TRAFFIC -> requireContext().snackbarDefault(R.string.pref_search_bar_chip_info_traffic, title = getString(R.string.title_alerter_info))
@@ -567,26 +565,6 @@ class UiSettingsActivity : BaseActivity() {
567565
true
568566
}
569567

570-
updateClearTotalTrafficSummary()
571-
clearTotalTraffic?.setOnPreferenceClickListener {
572-
if (MmkvManager.getTotalTrafficDetail() == null) {
573-
requireContext().toastInfo(getString(R.string.pref_action_clear_total_traffic_summary_empty))
574-
return@setOnPreferenceClickListener true
575-
}
576-
MaterialAlertDialogBuilder(requireContext())
577-
.setTitle(R.string.pref_action_clear_total_traffic_title)
578-
.setIcon(RemixR.drawable.rmx_delete_bin_line)
579-
.setMessage(R.string.confirm_clear_total_traffic)
580-
.setPositiveButton(android.R.string.ok) { _, _ ->
581-
MmkvManager.clearTotalTrafficDataAndHistory()
582-
updateClearTotalTrafficSummary()
583-
requireContext().snackbarSuccess(getString(R.string.toast_total_traffic_cleared), title = getString(R.string.title_alerter_success))
584-
}
585-
.setNegativeButton(android.R.string.cancel, null)
586-
.showBlur()
587-
true
588-
}
589-
590568
updateChipPreferenceEnabledState()
591569

592570
updateShowIspInfoEnabledState()
@@ -742,30 +720,6 @@ class UiSettingsActivity : BaseActivity() {
742720
}
743721
}
744722

745-
private fun updateClearTotalTrafficSummary() {
746-
val mode = SearchBarChipMode.current()
747-
val chipOn = mode == SearchBarChipMode.TOTAL_TRAFFIC || mode == SearchBarChipMode.DUAL_SWIPE
748-
val detail = MmkvManager.getTotalTrafficDetail()
749-
clearTotalTraffic?.apply {
750-
if (!chipOn) {
751-
isEnabled = false
752-
summary = getString(
753-
R.string.summary_pref_action_clear_total_traffic_disabled,
754-
getString(R.string.pref_search_bar_chip_total_traffic)
755-
)
756-
return@apply
757-
}
758-
isEnabled = detail != null
759-
summary = if (detail != null) {
760-
val (uplink, downlink) = detail
761-
val totalText = MmkvManager.formatTrafficBytesPublic(uplink + downlink)
762-
getString(R.string.pref_action_clear_total_traffic_summary_set, totalText)
763-
} else {
764-
getString(R.string.pref_action_clear_total_traffic_summary_empty)
765-
}
766-
}
767-
}
768-
769723
private fun queryDisplayName(uri: Uri): String? {
770724
return try {
771725
requireContext().contentResolver.query(uri, null, null, null, null)?.use { cursor ->

MikuRay/app/src/main/java/com/miku/ray/util/TotalTrafficDetailDialogUtils.kt

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
package com.miku.ray.util
22

33
import android.content.Context
4+
import android.content.DialogInterface
45
import android.view.LayoutInflater
56
import androidx.core.view.isVisible
67
import com.google.android.material.dialog.MaterialAlertDialogBuilder
8+
import com.miku.ray.R
79
import com.miku.ray.databinding.DialogTotalTrafficDetailBinding
10+
import com.miku.ray.extension.snackbarSuccess
811
import com.miku.ray.handler.MmkvManager
12+
import com.miku.ray.remixicon.R as RemixR
913
import com.miku.ray.widget.TrafficBarChartView
1014

1115
private const val HISTORY_DAYS = 7
1216

13-
fun showTotalTrafficDetailDialog(context: Context) {
17+
/**
18+
* Shows the total traffic detail dialog. [onCleared] is invoked after the user confirms
19+
* clearing the data, so callers can refresh whatever traffic chip UI they own.
20+
*/
21+
fun showTotalTrafficDetailDialog(context: Context, onCleared: () -> Unit = {}) {
22+
val hasData = MmkvManager.getTotalTrafficDetail() != null
1423
val (uploadBytes, downloadBytes) = MmkvManager.getTotalTrafficDetail() ?: (0L to 0L)
1524

1625
val binding = DialogTotalTrafficDetailBinding.inflate(LayoutInflater.from(context))
@@ -35,8 +44,31 @@ fun showTotalTrafficDetailDialog(context: Context) {
3544
val dialog = MaterialAlertDialogBuilder(context)
3645
.setView(binding.root)
3746
.setPositiveButton(android.R.string.ok, null)
47+
.setNegativeButton(R.string.action_clear_total_traffic_button) { _, _ ->
48+
showClearTotalTrafficConfirmDialog(context, onCleared)
49+
}
3850
.create()
3951
WindowBlurUtils.applyWindowBlur(dialog.window)
4052

53+
dialog.setOnShowListener {
54+
dialog.getButton(DialogInterface.BUTTON_NEGATIVE)?.isEnabled = hasData
55+
}
4156
dialog.show()
4257
}
58+
59+
private fun showClearTotalTrafficConfirmDialog(context: Context, onCleared: () -> Unit) {
60+
MaterialAlertDialogBuilder(context)
61+
.setTitle(R.string.pref_action_clear_total_traffic_title)
62+
.setIcon(RemixR.drawable.rmx_delete_bin_line)
63+
.setMessage(R.string.confirm_clear_total_traffic)
64+
.setPositiveButton(android.R.string.ok) { _, _ ->
65+
MmkvManager.clearTotalTrafficDataAndHistory()
66+
onCleared()
67+
context.snackbarSuccess(
68+
context.getString(R.string.toast_total_traffic_cleared),
69+
title = context.getString(R.string.title_alerter_success)
70+
)
71+
}
72+
.setNegativeButton(android.R.string.cancel, null)
73+
.showBlur()
74+
}

MikuRay/app/src/main/res/values-in/strings.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -674,9 +674,7 @@ Nama Paket — cuma bisa kalo kamu pake Xray TUN, routeOnly aktif, dan Android 1
674674
<string name="menu_item_search_main">Cari konfig</string>
675675
<string name="title_search_bar_chip">Chip Bar Pencarian</string>
676676
<string name="pref_action_clear_total_traffic_title">Hapus data traffic</string>
677-
<string name="pref_action_clear_total_traffic_summary_empty">Belum ada data traffic yang tercatat</string>
678-
<string name="pref_action_clear_total_traffic_summary_set">Sekarang: %1$s</string>
679-
<string name="summary_pref_action_clear_total_traffic_disabled">Aktifin \"%1$s\" dulu biar traffic-nya mulai kecatat di sini</string>
677+
<string name="action_clear_total_traffic_button">Hapus</string>
680678
<string name="confirm_clear_total_traffic">Hapus data traffic chip beserta riwayat harian/bulanannya?</string>
681679
<string name="toast_total_traffic_cleared">Data traffic chip udah dihapus</string>
682680
<string name="pref_search_bar_chip_title">Chip bar pencarian</string>

MikuRay/app/src/main/res/values-ru/strings.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -683,9 +683,7 @@
683683
<string name="menu_item_search_main">Поиск конфига</string>
684684
<string name="title_search_bar_chip">Плашка строки поиска</string>
685685
<string name="pref_action_clear_total_traffic_title">Очистить данные трафика</string>
686-
<string name="pref_action_clear_total_traffic_summary_empty">Данные трафика еще не записаны</string>
687-
<string name="pref_action_clear_total_traffic_summary_set">Текущие: %1$s</string>
688-
<string name="summary_pref_action_clear_total_traffic_disabled">Сначала включите \"%1$s\", чтобы здесь начала вестись запись трафика</string>
686+
<string name="action_clear_total_traffic_button">Очистить</string>
689687
<string name="confirm_clear_total_traffic">Очистить данные плашки трафика вместе с дневной/месячной историей?</string>
690688
<string name="toast_total_traffic_cleared">Данные плашки трафика очищены</string>
691689
<string name="pref_search_bar_chip_title">Компонент строки поиска</string>

MikuRay/app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -663,9 +663,7 @@
663663
<string name="menu_item_search_main">搜索配置</string>
664664
<string name="title_search_bar_chip">搜索栏组件</string>
665665
<string name="pref_action_clear_total_traffic_title">清除流量数据</string>
666-
<string name="pref_action_clear_total_traffic_summary_empty">尚未记录流量数据</string>
667-
<string name="pref_action_clear_total_traffic_summary_set">当前:%1$s</string>
668-
<string name="summary_pref_action_clear_total_traffic_disabled">请先启用 \"%1$s\" 以便在此处开始记录流量</string>
666+
<string name="action_clear_total_traffic_button">清除</string>
669667
<string name="confirm_clear_total_traffic">清除流量组件数据及其每日/每月历史记录?</string>
670668
<string name="toast_total_traffic_cleared">流量组件数据已清除</string>
671669
<string name="pref_search_bar_chip_title">搜索栏组件</string>

MikuRay/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -706,9 +706,7 @@ Package Name — only supported when using Xray TUN, routeOnly enabled, and Andr
706706
<string name="weather_temp_format">%d°C</string>
707707
<string name="title_search_bar_chip">Search Bar Chip</string>
708708
<string name="pref_action_clear_total_traffic_title">Clear traffic data</string>
709-
<string name="pref_action_clear_total_traffic_summary_empty">No traffic data recorded yet</string>
710-
<string name="pref_action_clear_total_traffic_summary_set">Current: %1$s</string>
711-
<string name="summary_pref_action_clear_total_traffic_disabled">Enable \"%1$s\" first to start recording traffic here</string>
709+
<string name="action_clear_total_traffic_button">Clear</string>
712710
<string name="confirm_clear_total_traffic">Clear traffic chip data along with its daily/monthly history?</string>
713711
<string name="toast_total_traffic_cleared">Traffic chip data cleared</string>
714712
<string name="pref_search_bar_chip_title">Search bar chip</string>

MikuRay/app/src/main/res/xml/pref_ui_settings.xml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,6 @@
334334
android:dialogTitle="@string/pref_weather_custom_location_title"
335335
android:dialogMessage="@string/pref_weather_custom_location_dialog_message" />
336336

337-
<Preference
338-
android:icon="@drawable/rmx_delete_bin_line"
339-
app:layout="@layout/uwu_mid"
340-
android:key="action_clear_total_traffic"
341-
android:title="@string/pref_action_clear_total_traffic_title"
342-
android:summary="@string/pref_action_clear_total_traffic_summary_empty" />
343-
344337
<androidx.preference.SwitchPreferenceCompat
345338
android:icon="@drawable/rmx_design_contrast_line"
346339
app:layout="@layout/uwu_bot_switch"

0 commit comments

Comments
 (0)