Compare commits

7 Commits

Author SHA1 Message Date
乌堆小透明
8bcb89b04d 新增大移动类型图标 2022-03-21 17:55:16 +08:00
乌堆小透明
f2df033393 Merge remote-tracking branch 'origin/main' 2022-03-21 15:52:46 +08:00
乌堆小透明
ab41dea173 Update version to 1.5.1 2022-03-21 15:52:37 +08:00
乌堆小透明
7d9f45b92f New Crowdin updates (#100)
* New translations strings.xml (Spanish)
[ci skip] New translations from Crowdin

* New translations strings.xml (Spanish)
[ci skip] New translations from Crowdin

* New translations strings.xml (French)
[ci skip] New translations from Crowdin

* New translations strings.xml (French)
[ci skip] New translations from Crowdin

* New translations strings.xml (Chinese Simplified)
[ci skip] New translations from Crowdin
2022-03-21 15:52:25 +08:00
乌堆小透明
8c08466ed6 修复网速单位KB/MB显示错误 2022-03-21 15:47:51 +08:00
乌堆小透明
801ade5859 优化双排网速,使用主题提供单位 2022-03-21 15:41:28 +08:00
乌堆小透明
984b909197 新增双排网速对齐切换 2022-03-21 15:31:25 +08:00
10 changed files with 213 additions and 25 deletions

View File

@@ -12,8 +12,8 @@ android {
applicationId = "com.lt2333.simplicitytools" applicationId = "com.lt2333.simplicitytools"
minSdk = 31 minSdk = 31
targetSdk = 32 targetSdk = 32
versionCode = 51 versionCode = 52
versionName = "1.5.0" versionName = "1.5.1"
} }
buildTypes { buildTypes {

View File

@@ -498,6 +498,14 @@ class SettingsActivity : MIUIActivity() {
menuButton.visibility = View.VISIBLE menuButton.visibility = View.VISIBLE
return ArrayList<BaseView>().apply { return ArrayList<BaseView>().apply {
add(TitleTextV(resId = R.string.statusbar)) add(TitleTextV(resId = R.string.statusbar))
add(
TextSummaryWithSwitchV(
TextSummaryV(
textId = R.string.big_mobile_type_icon
),
SwitchV("big_mobile_type_icon")
)
)
add( add(
TextSummaryWithSwitchV( TextSummaryWithSwitchV(
TextSummaryV( TextSummaryV(
@@ -768,6 +776,40 @@ class SettingsActivity : MIUIActivity() {
) )
) )
) )
val align: HashMap<Int, String> = hashMapOf()
align[0] = getString(R.string.left)
align[1] = getString(R.string.right)
add(
TextWithSpinnerV(
TextV(resId = R.string.status_bar_network_speed_dual_row_gravity),
SpinnerV(
arrayListOf<MIUIPopupData>().apply {
add(MIUIPopupData(getString(R.string.left)) {
OwnSP.ownSP.edit().run {
putInt(
"status_bar_network_speed_dual_row_gravity",
0
)
apply()
}
})
add(MIUIPopupData(getString(R.string.right)) {
OwnSP.ownSP.edit().run {
putInt(
"status_bar_network_speed_dual_row_gravity",
1
)
apply()
}
})
}, currentValue = align[OwnSP.ownSP.getInt(
"status_bar_network_speed_dual_row_gravity",
0
)].toString()
),
dataBindingRecv = status_bar_dual_row_network_speed_binding.binding.getRecv(2)
)
)
add( add(
TextWithSpinnerV( TextWithSpinnerV(
TextV(resId = R.string.status_bar_network_speed_dual_row_icon), TextV(resId = R.string.status_bar_network_speed_dual_row_icon),

View File

@@ -58,6 +58,8 @@ class SystemUI : IXposedHookLoadPackage {
OldQSCustom().handleLoadPackage(lpparam) OldQSCustom().handleLoadPackage(lpparam)
//双排网速 //双排网速
DoubleLineNetworkSpeed().handleLoadPackage(lpparam) DoubleLineNetworkSpeed().handleLoadPackage(lpparam)
StatusBarBigMobileTypeIcon().handleLoadPackage(lpparam)
} }
} }

View File

@@ -25,6 +25,7 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
private var downIcon = "" private var downIcon = ""
private val getDualSize = XSPUtils.getInt("status_bar_network_speed_dual_row_size", 0) private val getDualSize = XSPUtils.getInt("status_bar_network_speed_dual_row_size", 0)
private val getDualAlign = XSPUtils.getInt("status_bar_network_speed_dual_row_gravity", 0)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
@@ -32,9 +33,9 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
if (XSPUtils.getString("status_bar_network_speed_dual_row_icon", none) != none) { if (XSPUtils.getString("status_bar_network_speed_dual_row_icon", none) != none) {
upIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", none) upIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", none)
?.firstOrNull()?.plus(" ") ?: String() ?.firstOrNull().toString()
downIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", none) downIcon = XSPUtils.getString("status_bar_network_speed_dual_row_icon", none)
?.lastOrNull()?.plus(" ") ?: String() ?.lastOrNull().toString()
} }
hasEnable("status_bar_dual_row_network_speed") { hasEnable("status_bar_dual_row_network_speed") {
@@ -42,12 +43,16 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
.hookAfterConstructor(Context::class.java, AttributeSet::class.java) { .hookAfterConstructor(Context::class.java, AttributeSet::class.java) {
val mView = it.thisObject as TextView val mView = it.thisObject as TextView
mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f) mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 7f)
if (getDualSize!=0){ if (getDualSize != 0) {
mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, getDualSize.toFloat()) mView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, getDualSize.toFloat())
} }
mView.isSingleLine = false mView.isSingleLine = false
mView.setLineSpacing(0F, 0.8F) mView.setLineSpacing(0F, 0.8F)
if (getDualAlign == 0) {
mView.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL mView.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL
} else {
mView.gravity = Gravity.RIGHT or Gravity.CENTER_VERTICAL
}
} }
"com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod( "com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(
@@ -56,13 +61,19 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
Context::class.java, Context::class.java,
Long::class.java Long::class.java
) { ) {
it.result = "${upIcon}${getTotalUpSpeed()}\n${downIcon}${getTotalDownloadSpeed()}" if (getDualAlign == 0) {
it.result =
"${upIcon} ${getTotalUpSpeed(it.args[0]as Context)}\n${downIcon} ${getTotalDownloadSpeed(it.args[0]as Context)}"
} else {
it.result =
"${getTotalUpSpeed(it.args[0]as Context)} ${upIcon}\n${getTotalDownloadSpeed(it.args[0]as Context)} ${downIcon}"
}
} }
} }
} }
//获取总的上行速度 //获取总的上行速度
fun getTotalUpSpeed(): String { fun getTotalUpSpeed(context: Context): String {
var totalUpSpeed = 0F var totalUpSpeed = 0F
val currentTotalTxBytes = TrafficStats.getTotalTxBytes() val currentTotalTxBytes = TrafficStats.getTotalTxBytes()
@@ -76,11 +87,11 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
if (bytes >= 1048576) { if (bytes >= 1048576) {
totalUpSpeed = totalUpSpeed =
DecimalFormat("0.0").format(bytes / 1048576).toFloat() DecimalFormat("0.0").format(bytes / 1048576).toFloat()
unit = "MB/s" unit = context.resources.getString(context.resources.getIdentifier("megabyte_per_second","string",context.packageName))
} else { } else {
totalUpSpeed = totalUpSpeed =
DecimalFormat("0.0").format(bytes / 1024).toFloat() DecimalFormat("0.0").format(bytes / 1024).toFloat()
unit = "KB/s" unit = context.resources.getString(context.resources.getIdentifier("kilobyte_per_second","string",context.packageName))
} }
//保存当前的流量总和和上次的时间戳 //保存当前的流量总和和上次的时间戳
@@ -95,7 +106,7 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
} }
//获取总的下行速度 //获取总的下行速度
fun getTotalDownloadSpeed(): String { fun getTotalDownloadSpeed(context: Context): String {
var totalDownSpeed = 0F var totalDownSpeed = 0F
val currentTotalRxBytes = TrafficStats.getTotalRxBytes() val currentTotalRxBytes = TrafficStats.getTotalRxBytes()
val nowTimeStampTotalDown = System.currentTimeMillis() val nowTimeStampTotalDown = System.currentTimeMillis()
@@ -109,11 +120,11 @@ class DoubleLineNetworkSpeed : IXposedHookLoadPackage {
if (bytes >= 1048576) { if (bytes >= 1048576) {
totalDownSpeed = totalDownSpeed =
DecimalFormat("0.0").format(bytes / 1048576).toFloat() DecimalFormat("0.0").format(bytes / 1048576).toFloat()
unit = "MB/s" unit = context.resources.getString(context.resources.getIdentifier("megabyte_per_second","string",context.packageName))
} else { } else {
totalDownSpeed = totalDownSpeed =
DecimalFormat("0.0").format(bytes / 1024).toFloat() DecimalFormat("0.0").format(bytes / 1024).toFloat()
unit = "KB/s" unit = context.resources.getString(context.resources.getIdentifier("kilobyte_per_second","string",context.packageName))
} }
//保存当前的流量总和和上次的时间戳 //保存当前的流量总和和上次的时间戳
mLastTotalDown = currentTotalRxBytes mLastTotalDown = currentTotalRxBytes

View File

@@ -3,29 +3,54 @@ package com.lt2333.simplicitytools.hook.app.systemui
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.lt2333.simplicitytools.util.XSPUtils
import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.getObjectField
import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
class HideMobileTypeIcon : IXposedHookLoadPackage { class HideMobileTypeIcon : IXposedHookLoadPackage {
val isBigType=XSPUtils.getBoolean("big_mobile_type_icon", false)
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" val iconState =
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState"
hasEnable("hide_mobile_type_icon") { "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
(it.thisObject.getObjectField("mMobileType") as TextView).visibility = View.INVISIBLE lpparam.classLoader,
(it.thisObject.getObjectField("mMobileTypeImage") as ImageView).visibility = View.INVISIBLE "initViewState",
(it.thisObject.getObjectField("mMobileTypeSingle") as TextView).visibility = View.INVISIBLE iconState
) {
hideMobileTypeIcon(it)
}
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader,
"updateState",
iconState
) {
hideMobileTypeIcon(it)
} }
} }
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { fun hideMobileTypeIcon(it: XC_MethodHook.MethodHookParam) {
hasEnable("hide_mobile_type_icon") { hasEnable("hide_mobile_type_icon") {
(it.thisObject.getObjectField("mMobileType") as TextView).visibility = View.INVISIBLE if (isBigType) {
(it.thisObject.getObjectField("mMobileTypeImage") as ImageView).visibility = View.INVISIBLE (it.thisObject.getObjectField("mMobileType") as TextView).visibility =
(it.thisObject.getObjectField("mMobileTypeSingle") as TextView).visibility = View.INVISIBLE View.GONE
(it.thisObject.getObjectField("mMobileTypeImage") as ImageView).visibility =
View.GONE
(it.thisObject.getObjectField("mMobileTypeSingle") as TextView).visibility =
View.GONE
} else {
(it.thisObject.getObjectField("mMobileType") as TextView).visibility =
View.INVISIBLE
(it.thisObject.getObjectField("mMobileTypeImage") as ImageView).visibility =
View.INVISIBLE
(it.thisObject.getObjectField("mMobileTypeSingle") as TextView).visibility =
View.INVISIBLE
} }
} }
} }
} }

View File

@@ -0,0 +1,83 @@
package com.lt2333.simplicitytools.hook.app.systemui
import android.content.Context
import android.content.res.Resources
import android.view.Gravity
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import cn.fkj233.ui.activity.dp2px
import com.lt2333.simplicitytools.util.hasEnable
import com.lt2333.simplicitytools.util.hookAfterMethod
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.callbacks.XC_LoadPackage
class StatusBarBigMobileTypeIcon : IXposedHookLoadPackage {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
hasEnable("big_mobile_type_icon") {
"com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(
lpparam.classLoader,
"init"
) {
val StatusBarMobileView = it.thisObject as ViewGroup
val context: Context = StatusBarMobileView.context
val res: Resources = context.resources
val mobile_container_left_ID: Int =
res.getIdentifier("mobile_container_left", "id", "com.android.systemui")
val mobile_left_mobile_inout_ID: Int = res.getIdentifier(
"mobile_left_mobile_inout",
"id",
"com.android.systemui"
)
val mobile_container_right_ID: Int = res.getIdentifier(
"mobile_container_right",
"id",
"com.android.systemui"
)
val mobile_type_ID: Int =
res.getIdentifier("mobile_type", "id", "com.android.systemui")
val TextAppearance_StatusBar_Carrier_ID: Int = res.getIdentifier(
"TextAppearance.StatusBar.Carrier",
"style",
"com.android.systemui"
)
//获取mobile_container_left并在父布局中删除
val mobile_container_left =
StatusBarMobileView.findViewById<ViewGroup>(mobile_container_left_ID)
val mobile_container_left_fl =
mobile_container_left.layoutParams as LinearLayout.LayoutParams
(mobile_container_left.parent as ViewGroup).removeView(mobile_container_left)
//获取mobile_container_right的父布局并在mobile_container_right前添加mobile_container_left
val mobile_container_right =
StatusBarMobileView.findViewById<ViewGroup>(mobile_container_right_ID)
val RightParentLayout = mobile_container_right.parent as ViewGroup
val mobile_container_right_Index =
RightParentLayout.indexOfChild(mobile_container_left)
RightParentLayout.addView(
mobile_container_left,
mobile_container_right_Index - 1
)
mobile_container_left_fl.topMargin = dp2px(context, 3f)
mobile_container_left.layoutParams = mobile_container_left_fl
val mobile_type = StatusBarMobileView.findViewById<TextView>(mobile_type_ID)
mobile_type.setTextAppearance(TextAppearance_StatusBar_Carrier_ID)
val mobile_type_fl = mobile_type.layoutParams as FrameLayout.LayoutParams
mobile_type_fl.width = dp2px(context, 30f)
mobile_type_fl.gravity = Gravity.CENTER or Gravity.START or Gravity.TOP
mobile_type.layoutParams = mobile_type_fl
val mobile_left_mobile_inout =
StatusBarMobileView.findViewById<ImageView>(mobile_left_mobile_inout_ID)
val mobile_left_mobile_inout_fl =
mobile_left_mobile_inout.layoutParams as FrameLayout.LayoutParams
mobile_left_mobile_inout_fl.width = dp2px(context, 8f)
mobile_left_mobile_inout_fl.marginStart = dp2px(context, 16f)
mobile_left_mobile_inout_fl.bottomMargin = dp2px(context, 3f)
mobile_left_mobile_inout.layoutParams = mobile_left_mobile_inout_fl
}
}
}
}

View File

@@ -167,4 +167,10 @@
<string name="qs_custom_rows">Filas</string> <string name="qs_custom_rows">Filas</string>
<string name="qs_custom_columns">Columnas</string> <string name="qs_custom_columns">Columnas</string>
<string name="qs_custom_rows_horizontal">Filas (horizontal)</string> <string name="qs_custom_rows_horizontal">Filas (horizontal)</string>
<string name="status_bar_dual_row_network_speed">Velocidad de red en fila dual</string>
<string name="status_bar_dual_row_network_speed_summary">Mostrar velocidad de subida y bajada</string>
<string name="status_bar_network_speed">Velocidad de red en barra de estado</string>
<string name="status_bar_network_speed_dual_row_size">Tamaño de fila dual (0: no cambiar)</string>
<string name="status_bar_network_speed_dual_row_icon">Icono de fila dual</string>
<string name="none">Ninguno</string>
</resources> </resources>

View File

@@ -161,4 +161,16 @@
<string name="hide_icon">Masquer l\'icône</string> <string name="hide_icon">Masquer l\'icône</string>
<string name="double_tap_to_sleep">Double tapper pour veille</string> <string name="double_tap_to_sleep">Double tapper pour veille</string>
<string name="home_double_tap_to_sleep_summary">Double-tapez l\'espace vide pour mettre en veille</string> <string name="home_double_tap_to_sleep_summary">Double-tapez l\'espace vide pour mettre en veille</string>
<string name="old_quick_settings_panel">Vieux panneau de réglages rapide</string>
<string name="old_qs_custom_switch">Lignes et colonnes personnalisés</string>
<string name="qs_custom_columns_unexpanded">Colonnes (Inexpansé)</string>
<string name="qs_custom_rows">Lignes</string>
<string name="qs_custom_columns">Colonnes</string>
<string name="qs_custom_rows_horizontal">Lignes (horizontal)</string>
<string name="status_bar_dual_row_network_speed">Vitesse du réseau à double ligne</string>
<string name="status_bar_dual_row_network_speed_summary">Affichage de download et upload en vitesse de réseau</string>
<string name="status_bar_network_speed">Vitesse du réseau en barre d\'état</string>
<string name="status_bar_network_speed_dual_row_size">Taille de double ligne (0: ne pas changer)</string>
<string name="status_bar_network_speed_dual_row_icon">Icône de double ligne</string>
<string name="none">Aucune</string>
</resources> </resources>

View File

@@ -173,4 +173,7 @@
<string name="status_bar_network_speed_dual_row_size">双排大小0不更改</string> <string name="status_bar_network_speed_dual_row_size">双排大小0不更改</string>
<string name="status_bar_network_speed_dual_row_icon">双排图标</string> <string name="status_bar_network_speed_dual_row_icon">双排图标</string>
<string name="none"></string> <string name="none"></string>
<string name="status_bar_network_speed_dual_row_gravity">双排对齐</string>
<string name="left">左边</string>
<string name="right">右边</string>
</resources> </resources>

View File

@@ -177,4 +177,8 @@
<string name="status_bar_network_speed_dual_row_size">Dual row size (0: do not change)</string> <string name="status_bar_network_speed_dual_row_size">Dual row size (0: do not change)</string>
<string name="status_bar_network_speed_dual_row_icon">Dual row icon</string> <string name="status_bar_network_speed_dual_row_icon">Dual row icon</string>
<string name="none">None</string> <string name="none">None</string>
<string name="status_bar_network_speed_dual_row_gravity">Dual row align</string>
<string name="left">Left</string>
<string name="right">Right</string>
<string name="big_mobile_type_icon">Big Mobile Type Icon</string>
</resources> </resources>