From 98df31c25819abb0be64f9d9423dd7e187d0bcda Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 16 Apr 2018 20:37:56 -0700 Subject: [PATCH] Use Formatter.formatFileSize Fix #1751. --- .../java/com/github/shadowsocks/MainActivity.kt | 10 +++++----- .../com/github/shadowsocks/ProfilesFragment.kt | 6 +++--- .../github/shadowsocks/bg/ServiceNotification.kt | 7 ++++--- .../com/github/shadowsocks/bg/TrafficMonitor.kt | 16 ---------------- mobile/src/main/res/values/strings.xml | 4 ---- 5 files changed, 12 insertions(+), 31 deletions(-) diff --git a/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt b/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt index c1c2c3af..f3738a73 100644 --- a/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt +++ b/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt @@ -39,6 +39,7 @@ import android.support.v7.app.AlertDialog import android.support.v7.app.AppCompatActivity import android.support.v7.content.res.AppCompatResources import android.support.v7.preference.PreferenceDataStore +import android.text.format.Formatter import android.util.Log import android.view.View import android.widget.TextView @@ -49,7 +50,6 @@ import com.github.shadowsocks.aidl.IShadowsocksService import com.github.shadowsocks.aidl.IShadowsocksServiceCallback import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.bg.Executable -import com.github.shadowsocks.bg.TrafficMonitor import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.preference.DataStore @@ -149,10 +149,10 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe stateListener?.invoke(state) } fun updateTraffic(profileId: Int, txRate: Long, rxRate: Long, txTotal: Long, rxTotal: Long) { - txText.text = TrafficMonitor.formatTraffic(txTotal) - rxText.text = TrafficMonitor.formatTraffic(rxTotal) - txRateText.text = getString(R.string.speed, TrafficMonitor.formatTraffic(txRate)) - rxRateText.text = getString(R.string.speed, TrafficMonitor.formatTraffic(rxRate)) + txText.text = Formatter.formatFileSize(this, txTotal) + rxText.text = Formatter.formatFileSize(this, rxTotal) + txRateText.text = getString(R.string.speed, Formatter.formatFileSize(this, txRate)) + rxRateText.text = getString(R.string.speed, Formatter.formatFileSize(this, rxRate)) val child = supportFragmentManager.findFragmentById(R.id.fragment_holder) as ToolbarFragment? if (state != BaseService.STOPPING) child?.onTrafficUpdated(profileId, txRate, rxRate, txTotal, rxTotal) diff --git a/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt b/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt index 309c0b03..6b1ab9f4 100644 --- a/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt +++ b/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt @@ -33,13 +33,13 @@ import android.support.design.widget.Snackbar import android.support.v4.app.DialogFragment import android.support.v7.widget.* import android.support.v7.widget.helper.ItemTouchHelper +import android.text.format.Formatter import android.view.* import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.bg.BaseService -import com.github.shadowsocks.bg.TrafficMonitor import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.plugin.PluginConfiguration @@ -159,10 +159,11 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { text2.visibility = View.VISIBLE text2.text = t2.joinToString("\n") } + val context = requireContext() if (tx <= 0 && rx <= 0) traffic.visibility = View.GONE else { traffic.visibility = View.VISIBLE traffic.text = getString(R.string.traffic, - TrafficMonitor.formatTraffic(tx), TrafficMonitor.formatTraffic(rx)) + Formatter.formatFileSize(context, tx), Formatter.formatFileSize(context, rx)) } if (item.id == DataStore.profileId) { @@ -179,7 +180,6 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { val params = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) params.gravity = Gravity.CENTER_HORIZONTAL - val context = requireContext() adView = AdView(context) adView.layoutParams = params adView.adUnitId = "ca-app-pub-9097031975646651/7760346322" diff --git a/mobile/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt b/mobile/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt index 08d9f1a1..efcbc417 100644 --- a/mobile/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt +++ b/mobile/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt @@ -31,6 +31,7 @@ import android.os.Build import android.os.PowerManager import android.support.v4.app.NotificationCompat import android.support.v4.content.ContextCompat +import android.text.format.Formatter import com.github.shadowsocks.MainActivity import com.github.shadowsocks.R import com.github.shadowsocks.aidl.IShadowsocksServiceCallback @@ -55,11 +56,11 @@ class ServiceNotification(private val service: BaseService.Interface, profileNam override fun stateChanged(state: Int, profileName: String?, msg: String?) { } // ignore override fun trafficUpdated(profileId: Int, txRate: Long, rxRate: Long, txTotal: Long, rxTotal: Long) { service as Context - val txr = service.getString(R.string.speed, TrafficMonitor.formatTraffic(txRate)) - val rxr = service.getString(R.string.speed, TrafficMonitor.formatTraffic(rxRate)) + val txr = service.getString(R.string.speed, Formatter.formatFileSize(service, txRate)) + val rxr = service.getString(R.string.speed, Formatter.formatFileSize(service, rxRate)) builder.setContentText("$txr↑\t$rxr↓") style.bigText(service.getString(R.string.stat_summary).format(Locale.ENGLISH, txr, rxr, - TrafficMonitor.formatTraffic(txTotal), TrafficMonitor.formatTraffic(rxTotal))) + Formatter.formatFileSize(service, txTotal), Formatter.formatFileSize(service, rxTotal))) show() } override fun trafficPersisted(profileId: Int) { } diff --git a/mobile/src/main/java/com/github/shadowsocks/bg/TrafficMonitor.kt b/mobile/src/main/java/com/github/shadowsocks/bg/TrafficMonitor.kt index 8f99a29b..3146b6b3 100644 --- a/mobile/src/main/java/com/github/shadowsocks/bg/TrafficMonitor.kt +++ b/mobile/src/main/java/com/github/shadowsocks/bg/TrafficMonitor.kt @@ -21,9 +21,6 @@ package com.github.shadowsocks.bg import android.os.SystemClock -import com.github.shadowsocks.App.Companion.app -import com.github.shadowsocks.R -import java.text.DecimalFormat object TrafficMonitor { // Bytes per second @@ -41,19 +38,6 @@ object TrafficMonitor { @Volatile private var dirty = true - private val units = arrayOf("KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", "BB", "NB", "DB", "CB") - private val numberFormat = DecimalFormat("@@@") - fun formatTraffic(size: Long): String { - var n = size.toDouble() - var i = -1 - while (n >= 999.5) { - n /= 1024 - ++i - } - return if (i < 0) "$size ${app.resources.getQuantityString(R.plurals.bytes, size.toInt())}" - else "${numberFormat.format(n)} ${units[i]}" - } - fun updateRate(): Boolean { val now = SystemClock.elapsedRealtime() val delta = now - timestampLast diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml index 5e36070f..4479c013 100644 --- a/mobile/src/main/res/values/strings.xml +++ b/mobile/src/main/res/values/strings.xml @@ -20,10 +20,6 @@ %s↑\t%s↓ Sent: \t\t\t\t\t%3$s\t↑\t%1$s\nReceived: \t%4$s\t↓\t%2$s %s/s - - Byte - Bytes - Check Connectivity Testing… Success: %dms latency