diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt index 44f369eb..f8fcabde 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt @@ -13,6 +13,7 @@ import android.widget.Switch import android.widget.Toast import cn.fkj233.ui.activity.MIUIActivity import cn.fkj233.ui.activity.OwnSP +import cn.fkj233.ui.activity.data.MIUIPopupData import cn.fkj233.ui.activity.view.* import cn.fkj233.ui.dialog.MIUIDialog import com.lt2333.simplicitytools.BuildConfig @@ -497,15 +498,6 @@ class SettingsActivity : MIUIActivity() { menuButton.visibility = View.VISIBLE return ArrayList().apply { add(TitleTextV(resId = R.string.statusbar)) - add( - TextSummaryWithSwitchV( - TextSummaryV( - textId = R.string.status_bar_network_speed_refresh_speed, - tipsId = R.string.status_bar_network_speed_refresh_speed_summary - ), - SwitchV("status_bar_network_speed_refresh_speed") - ) - ) add( TextSummaryWithSwitchV( TextSummaryV( @@ -515,15 +507,6 @@ class SettingsActivity : MIUIActivity() { SwitchV("hide_battery_percentage_icon") ) ) - add( - TextSummaryWithSwitchV( - TextSummaryV( - textId = R.string.hide_status_bar_network_speed_second, - tipsId = R.string.hide_status_bar_network_speed_second_summary - ), - SwitchV("hide_status_bar_network_speed_second") - ) - ) add( TextSummaryWithSwitchV( TextSummaryV( @@ -734,6 +717,114 @@ class SettingsActivity : MIUIActivity() { ) ) ) + add(LineV()) + add(TitleTextV(resId = R.string.status_bar_network_speed)) + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.status_bar_network_speed_refresh_speed, + tipsId = R.string.status_bar_network_speed_refresh_speed_summary + ), + SwitchV("status_bar_network_speed_refresh_speed") + ) + ) + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.hide_status_bar_network_speed_second, + tipsId = R.string.hide_status_bar_network_speed_second_summary + ), + SwitchV("hide_status_bar_network_speed_second") + ) + ) + add( + TextWithSwitchV( + TextV(resId = R.string.hide_network_speed_splitter), + SwitchV("hide_network_speed_splitter") + ) + ) + + val status_bar_dual_row_network_speed_binding = getDataBinding( + SPUtils.getBoolean( + activity, + "status_bar_dual_row_network_speed", + false + ) + ) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.status_bar_dual_row_network_speed, + tipsId = R.string.status_bar_dual_row_network_speed_summary + ), + SwitchV( + "status_bar_dual_row_network_speed", + dataBindingSend = status_bar_dual_row_network_speed_binding.bindingSend + ) + ) + ) + add( + TextWithSpinnerV( + TextV(resId = R.string.status_bar_network_speed_dual_row_icon), + SpinnerV( + arrayListOf().apply { + add(MIUIPopupData(getString(R.string.none)) { + OwnSP.ownSP.edit().run { + putString( + "status_bar_network_speed_dual_row_icon", + getString(R.string.none) + ) + apply() + } + }) + add(MIUIPopupData("▲▼") { + OwnSP.ownSP.edit().run { + putString("status_bar_network_speed_dual_row_icon", "▲▼") + apply() + } + }) + add(MIUIPopupData("△▽") { + OwnSP.ownSP.edit().run { + putString("status_bar_network_speed_dual_row_icon", "△▽") + apply() + } + }) + add(MIUIPopupData("↑↓") { + OwnSP.ownSP.edit().run { + putString("status_bar_network_speed_dual_row_icon", "↑↓") + apply() + } + }) + }, "${ + OwnSP.ownSP.getString( + "status_bar_network_speed_dual_row_icon", + getString(R.string.none) + ) + }" + ), + dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2) + ) + ) + add( + TextV( + resId = R.string.status_bar_network_speed_dual_row_size, + dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2) + ) + ) + add( + SeekBarWithTextV( + "status_bar_network_speed_dual_row_size", + 0, + 9, + 0, + dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2) + ) + ) add(LineV()) @@ -1252,13 +1343,6 @@ class SettingsActivity : MIUIActivity() { SwitchV("hide_zen_icon") ) ) - add( - TextWithSwitchV( - TextV(resId = R.string.hide_network_speed_splitter), - SwitchV("hide_network_speed_splitter") - ) - ) - } } diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt index 57009fce..e471712c 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt @@ -56,6 +56,8 @@ class SystemUI : IXposedHookLoadPackage { StatusBarDoubleTapToSleep().handleLoadPackage(lpparam) //旧版快速设置自定义 OldQSCustom().handleLoadPackage(lpparam) + //双排网速 + DoubleLineNetworkSpeed().handleLoadPackage(lpparam) } } diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/DoubleLineNetworkSpeed.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/DoubleLineNetworkSpeed.kt new file mode 100644 index 00000000..b65b5dbc --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/DoubleLineNetworkSpeed.kt @@ -0,0 +1,127 @@ +package com.lt2333.simplicitytools.hook.app.systemui + +import android.content.Context +import android.net.TrafficStats +import android.util.AttributeSet +import android.util.TypedValue +import android.view.Gravity +import android.widget.TextView +import com.lt2333.simplicitytools.util.* +import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.callbacks.XC_LoadPackage +import java.text.DecimalFormat + +class DoubleLineNetworkSpeed : IXposedHookLoadPackage { + + private var mLastTotalUp: Long = 0 + private var mLastTotalDown: Long = 0 + + private var lastTimeStampTotalUp: Long = 0 + private var lastTimeStampTotalDown: Long = 0 + + private var upIcon = "" + private var downIcon = "" + + private val getDualSize = XSPUtils.getInt("status_bar_network_speed_dual_row_size", 0) + + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + + if (XSPUtils.getString("status_bar_network_speed_dual_row_icon", "None") != "None") { + upIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", "None") + ?.firstOrNull()?.plus(" ") ?: String() + downIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", "None") + ?.lastOrNull()?.plus(" ") ?: String() + } + + hasEnable("status_bar_dual_row_network_speed") { + "com.android.systemui.statusbar.views.NetworkSpeedView".findClass(lpparam.classLoader) + .hookAfterConstructor(Context::class.java, AttributeSet::class.java) { + val mView = it.thisObject as TextView + mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f) + if (getDualSize!=0){ + mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, getDualSize.toFloat()) + } + mView.isSingleLine = false + mView.setLineSpacing(0F, 0.8F) + mView.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL + } + + "com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod( + lpparam.classLoader, + "formatSpeed", + Context::class.java, + Long::class.java + ) { + it.result = "${upIcon}${getTotalUpSpeed()}\n${downIcon}${getTotalDownloadSpeed()}" + } + } + } + + //获取总的上行速度 + fun getTotalUpSpeed(): String { + var totalUpSpeed = 0F + + val currentTotalTxBytes = TrafficStats.getTotalTxBytes() + val nowTimeStampTotalUp = System.currentTimeMillis() + + //计算上传速度 + val bytes = + (currentTotalTxBytes - mLastTotalUp) * 1000 / (nowTimeStampTotalUp - lastTimeStampTotalUp).toFloat() + var unit = "" + + if (bytes >= 1048576) { + totalUpSpeed = + DecimalFormat("0.0").format(bytes / 1048576).toFloat() + unit = "MB/s" + } else { + totalUpSpeed = + DecimalFormat("0.0").format(bytes / 1024).toFloat() + unit = "KB/s" + } + + //保存当前的流量总和和上次的时间戳 + mLastTotalUp = currentTotalTxBytes + lastTimeStampTotalUp = nowTimeStampTotalUp + + if (totalUpSpeed >= 100) { + return "" + totalUpSpeed.toInt() + unit + } else { + return "" + totalUpSpeed + unit + } + } + + //获取总的下行速度 + fun getTotalDownloadSpeed(): String { + var totalDownSpeed = 0F + val currentTotalRxBytes = TrafficStats.getTotalRxBytes() + val nowTimeStampTotalDown = System.currentTimeMillis() + + //计算下行速度 + val bytes = + (currentTotalRxBytes - mLastTotalDown) * 1000 / (nowTimeStampTotalDown - lastTimeStampTotalDown).toFloat() + + var unit = "" + + if (bytes >= 1048576) { + totalDownSpeed = + DecimalFormat("0.0").format(bytes / 1048576).toFloat() + unit = "MB/s" + } else { + totalDownSpeed = + DecimalFormat("0.0").format(bytes / 1024).toFloat() + unit = "KB/s" + } + //保存当前的流量总和和上次的时间戳 + mLastTotalDown = currentTotalRxBytes + lastTimeStampTotalDown = nowTimeStampTotalDown + + if (totalDownSpeed >= 100) { + return "" + totalDownSpeed.toInt() + unit + } else { + return "" + totalDownSpeed + unit + } + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt b/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt index 7b5bd829..07ec0b0e 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt @@ -25,6 +25,13 @@ object XSPUtils { } return prefs.getFloat(key, defValue) } + + fun getString(key: String, defValue: String): String? { + if (prefs.hasFileChanged()) { + prefs.reload() + } + return prefs.getString(key, defValue) + } } inline fun hasEnable(key: String, default: Boolean = false, noinline extraCondition: (() -> Boolean)? = null, crossinline block: () -> Unit) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6dc29b62..0cd8f454 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -171,4 +171,12 @@ Rows Columns Rows (horizontal) + Dual row network speed + Up and down network speed display + Status bar network speed + Netwrok speed size (0: do not change) + Dual row size (0: do not change) + Custom size switch + Dual row icon + None