4 Commits

Author SHA1 Message Date
LittleTurtle2333
1af8e0605b Update StatusBarLayoutForT.kt 2023-03-06 15:44:23 +08:00
LittleTurtle2333
29fa75cca0 优化写法 2023-03-06 15:44:02 +08:00
LittleTurtle2333
84f826fc31 Update SystemUIHooker.kt 2023-03-06 15:41:21 +08:00
LittleTurtle2333
719e7dfac1 Update AGP to 7.4.2 2023-03-06 15:41:06 +08:00
11 changed files with 543 additions and 23 deletions

View File

@@ -16,6 +16,7 @@ import com.lt2333.simplicitytools.hooks.rules.t.systemui.NotificationWeatherForT
import com.lt2333.simplicitytools.hooks.rules.t.systemui.OldNotificationWeatherForT import com.lt2333.simplicitytools.hooks.rules.t.systemui.OldNotificationWeatherForT
import com.lt2333.simplicitytools.hooks.rules.t.systemui.RemoveLockScreenCameraForT import com.lt2333.simplicitytools.hooks.rules.t.systemui.RemoveLockScreenCameraForT
import com.lt2333.simplicitytools.hooks.rules.t.systemui.RemoveTheLeftSideOfTheLockScreenForT import com.lt2333.simplicitytools.hooks.rules.t.systemui.RemoveTheLeftSideOfTheLockScreenForT
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarLayoutForT
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarNetworkSpeedRefreshSpeedForT import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarNetworkSpeedRefreshSpeedForT
import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarTimeCustomizationForT import com.lt2333.simplicitytools.hooks.rules.t.systemui.StatusBarTimeCustomizationForT
@@ -39,6 +40,7 @@ object SystemUIHooker : YukiBaseHooker() {
loadHooker(NotificationWeatherForT) //通知面板天气 loadHooker(NotificationWeatherForT) //通知面板天气
loadHooker(NewControlCenterWeatherForT) //新控制中心天气 loadHooker(NewControlCenterWeatherForT) //新控制中心天气
loadHooker(OldNotificationWeatherForT) //经典通知天气 loadHooker(OldNotificationWeatherForT) //经典通知天气
loadHooker(StatusBarLayoutForT) //状态栏布局
} }
Build.VERSION_CODES.S -> { Build.VERSION_CODES.S -> {

View File

@@ -24,7 +24,7 @@ object DisableFlagSecureForAll : YukiBaseHooker() {
method { name = "setSecure" } method { name = "setSecure" }
beforeHook { beforeHook {
hasEnable("disable_flag_secure") { hasEnable("disable_flag_secure") {
this.args[0] = false args[0] = false
} }
} }
} }
@@ -32,10 +32,10 @@ object DisableFlagSecureForAll : YukiBaseHooker() {
allMembers(MembersType.CONSTRUCTOR) allMembers(MembersType.CONSTRUCTOR)
beforeHook { beforeHook {
hasEnable("disable_flag_secure") { hasEnable("disable_flag_secure") {
var flags = this.args[2] as Int var flags = args[2] as Int
val secureFlag = 128 val secureFlag = 128
flags = flags and secureFlag.inv() flags = flags and secureFlag.inv()
this.args[2] = flags args[2] = flags
} }
} }
} }

View File

@@ -9,10 +9,8 @@ import android.view.View
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
import com.highcapable.yukihookapi.hook.factory.current import com.highcapable.yukihookapi.hook.factory.current
import com.highcapable.yukihookapi.hook.factory.field import com.highcapable.yukihookapi.hook.factory.field
import com.highcapable.yukihookapi.hook.factory.toClass
import com.lt2333.simplicitytools.R import com.lt2333.simplicitytools.R
import com.lt2333.simplicitytools.utils.hasEnable import com.lt2333.simplicitytools.utils.hasEnable
import de.robv.android.xposed.XposedHelpers
object ShortcutAddSmallWindowForAll : YukiBaseHooker() { object ShortcutAddSmallWindowForAll : YukiBaseHooker() {
override fun onHook() = hasEnable("miuihome_shortcut_add_small_window") { override fun onHook() = hasEnable("miuihome_shortcut_add_small_window") {
@@ -51,8 +49,8 @@ object ShortcutAddSmallWindowForAll : YukiBaseHooker() {
paramCount = 2 paramCount = 2
} }
beforeHook { beforeHook {
val obj = this.args[0] val obj = args[0]
val view: View = this.args[1] as View val view: View = args[1] as View
val mShortTitle = obj?.current { val mShortTitle = obj?.current {
method { name = "getShortTitle" }.invoke<CharSequence>() method { name = "getShortTitle" }.invoke<CharSequence>()
} }

View File

@@ -12,7 +12,7 @@ object HideSimIconForT:YukiBaseHooker() {
param(MutableList::class.java) param(MutableList::class.java)
} }
beforeHook { beforeHook {
val list = this.args[0] as MutableList<*> val list = args[0] as MutableList<*>
val size = list.size val size = list.size
hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) { hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) {
list.removeAt(1) list.removeAt(1)

View File

@@ -13,13 +13,13 @@ object HideStatusBarNetworkSpeedSecondForT : YukiBaseHooker() {
} }
beforeHook { beforeHook {
hasEnable("hide_status_bar_network_speed_second") { hasEnable("hide_status_bar_network_speed_second") {
if (this.args[0] != null) { if (args[0] != null) {
val mText = (this.args[0] as String) val mText = (args[0] as String)
.replace("/", "") .replace("/", "")
.replace("s", "") .replace("s", "")
.replace("\'", "") .replace("\'", "")
.replace("วิ", "") .replace("วิ", "")
this.args[0] = mText args[0] = mText
} }
} }
} }

View File

@@ -3,7 +3,6 @@ package com.lt2333.simplicitytools.hooks.rules.t.systemui
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
import com.highcapable.yukihookapi.hook.factory.current import com.highcapable.yukihookapi.hook.factory.current
import com.lt2333.simplicitytools.utils.XSPUtils import com.lt2333.simplicitytools.utils.XSPUtils
import java.lang.reflect.Method
object MaximumNumberOfNotificationIconsForT: YukiBaseHooker() { object MaximumNumberOfNotificationIconsForT: YukiBaseHooker() {
override fun onHook() { override fun onHook() {
@@ -16,7 +15,7 @@ object MaximumNumberOfNotificationIconsForT: YukiBaseHooker() {
paramCount = 1 paramCount = 1
} }
replaceUnit { replaceUnit {
if (this.args[0] as Boolean) { if (args[0] as Boolean) {
instance.current().field { name = "MAX_DOTS" }.set(dots) instance.current().field { name = "MAX_DOTS" }.set(dots)
instance.current().field { name = "MAX_STATIC_ICONS" }.set(icons) instance.current().field { name = "MAX_STATIC_ICONS" }.set(icons)
instance.current().field { name = "MAX_ICONS_ON_LOCKSCREEN" }.set(icons) instance.current().field { name = "MAX_ICONS_ON_LOCKSCREEN" }.set(icons)

View File

@@ -35,10 +35,10 @@ object NewControlCenterWeatherForT : YukiBaseHooker() {
superClass(true) superClass(true)
} }
beforeHook { beforeHook {
val time = this.args[0]?.toString() val time = args[0]?.toString()
val view = instance<TextView>() val view = instance<TextView>()
if (view.id == clockId && time != null) { if (view.id == clockId && time != null) {
this.args[0] = "${weather.weatherData}$time" args[0] = "${weather.weatherData}$time"
} }
} }
} }
@@ -50,7 +50,7 @@ object NewControlCenterWeatherForT : YukiBaseHooker() {
name = "getClassLoader" name = "getClassLoader"
} }
afterHook { afterHook {
val appInfo = this.args[0] as ApplicationInfo val appInfo = args[0] as ApplicationInfo
val classLoader = this.result as ClassLoader val classLoader = this.result as ClassLoader
if (appInfo.packageName == "miui.systemui.plugin") { if (appInfo.packageName == "miui.systemui.plugin") {
"miui.systemui.controlcenter.windowview.MainPanelHeaderController".hook { "miui.systemui.controlcenter.windowview.MainPanelHeaderController".hook {

View File

@@ -0,0 +1,521 @@
package com.lt2333.simplicitytools.hooks.rules.t.systemui
import android.app.KeyguardManager
import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import cn.fkj233.ui.activity.dp2px
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
import com.highcapable.yukihookapi.hook.factory.current
import com.lt2333.simplicitytools.utils.XSPUtils
import com.lt2333.simplicitytools.utils.hasEnable
object StatusBarLayoutForT : YukiBaseHooker() {
private val getMode = XSPUtils.getInt("status_bar_layout_mode", 0)
private val isCompatibilityMode = XSPUtils.getBoolean("layout_compatibility_mode", false)
private var statusBarLeft = 0
private var statusBarTop = 0
private var statusBarRight = 0
private var statusBarBottom = 0
override fun onHook() {
var mLeftLayout: LinearLayout? = null
var mRightLayout: LinearLayout? = null
var mCenterLayout: LinearLayout?
var statusBar: ViewGroup? = null
//判断屏幕状态更新布局 mode: 1正常布局 2居中布局
fun updateLayout(context: Context, mode: Int) {
runCatching {
when (mode) {
1 -> {
val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { //横屏
statusBar!!.setPadding(statusBarLeft, statusBarTop, statusBarRight, statusBarBottom)
}
}
2 -> {
val mConfiguration: Configuration = context.resources.configuration
if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { //横屏
mLeftLayout!!.setPadding(statusBarLeft, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, statusBarRight, 0)
statusBar!!.setPadding(0, statusBarTop, 0, statusBarBottom)
} else { //竖屏
mLeftLayout!!.setPadding(0, 0, 0, 0)
mRightLayout!!.setPadding(0, 0, 0, 0)
}
}
}
}.getOrNull()
}
//判断是否开启挖孔兼容模式
if (isCompatibilityMode) {
"com.android.systemui.ScreenDecorations".hook {
injectMember {
method {
name = "boundsFromDirection"
paramCount = 3
}
beforeHook {
args[1] = 0
}
}
}
}
//修改对应布局
when (getMode) {
//默认
0 -> {
"com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment".hook {
injectMember {
method {
name = "onViewCreated"
paramCount = 2
}
afterHook {
val miuiPhoneStatusBarView =args(0).cast<ViewGroup>()!!
val context: Context = miuiPhoneStatusBarView.context
val res: Resources = miuiPhoneStatusBarView.resources
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
if (statusBar == null) return@afterHook
statusBarLeft = statusBar!!.paddingLeft
statusBarTop = statusBar!!.paddingTop
statusBarRight = statusBar!!.paddingRight
statusBarBottom = statusBar!!.paddingBottom
if (isCompatibilityMode) {
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (customLeftMargin != 0) {
statusBarLeft = customLeftMargin
}
val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
if (customRightMargin != 0) {
statusBarRight = customRightMargin
}
updateLayout(context, 1)
}
}
}
}
//兼容模式
"com.android.systemui.statusbar.phone.PhoneStatusBarView".hook {
injectMember {
method {
name = "updateLayoutForCutout"
}
afterHook {
if (isCompatibilityMode) {
val context = instance<ViewGroup>().context
updateLayout(context, 1)
}
}
}
}
}
//时钟居中
1 -> {
"com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment".hook {
injectMember {
method {
name = "onViewCreated"
paramCount = 2
}
afterHook {
val miuiPhoneStatusBarView = args(0).cast<ViewGroup>()!!
val context: Context = miuiPhoneStatusBarView.context
val res: Resources = miuiPhoneStatusBarView.resources
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
val statusBarContentsId: Int = res.getIdentifier(
"status_bar_contents", "id", "com.android.systemui"
)
val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "id", "com.android.systemui")
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val phoneStatusBarLeftContainerId: Int = res.getIdentifier(
"phone_status_bar_left_container", "id", "com.android.systemui"
)
val notificationIconAreaInnerId: Int = res.getIdentifier(
"notification_icon_area_inner", "id", "com.android.systemui"
)
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
val statusBarContents: ViewGroup = miuiPhoneStatusBarView.findViewById(statusBarContentsId)
if (statusBar == null) return@afterHook
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
val phoneStatusBarLeftContainer: ViewGroup = miuiPhoneStatusBarView.findViewById(
phoneStatusBarLeftContainerId
)
val notificationIconAreaInner: ViewGroup = miuiPhoneStatusBarView.findViewById(
notificationIconAreaInnerId
)
val systemIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconAreaId)
(clock.parent as ViewGroup).removeView(clock)
(phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
phoneStatusBarLeftContainer
)
(notificationIconAreaInner.parent as ViewGroup).removeView(
notificationIconAreaInner
)
(systemIconArea.parent as ViewGroup).removeView(systemIconArea)
val mConstraintLayout = ConstraintLayout(context).also {
it.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
)
}
mConstraintLayout.addView(notificationIconAreaInner)
val fullscreenNotificationIconAreaLp = LinearLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
)
notificationIconAreaInner.layoutParams = fullscreenNotificationIconAreaLp
//增加一个左对齐布局
mLeftLayout = LinearLayout(context)
val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mLeftLayout!!.layoutParams = leftLp
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
//增加一个居中布局
mCenterLayout = LinearLayout(context)
val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
)
mCenterLayout!!.layoutParams = centerLp
mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL
mRightLayout = LinearLayout(context)
val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mRightLayout!!.layoutParams = rightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
mLeftLayout!!.addView(phoneStatusBarLeftContainer)
mLeftLayout!!.addView(mConstraintLayout)
mCenterLayout!!.addView(clock)
mRightLayout!!.addView(systemIconArea)
statusBarContents.addView(mLeftLayout, 0)
statusBarContents.addView(mCenterLayout)
statusBarContents.addView(mRightLayout)
statusBarLeft = statusBar!!.paddingLeft
statusBarTop = statusBar!!.paddingTop
statusBarRight = statusBar!!.paddingRight
statusBarBottom = statusBar!!.paddingBottom
if (isCompatibilityMode) {
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (customLeftMargin != 0) {
statusBarLeft = customLeftMargin
}
val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
if (customRightMargin != 0) {
statusBarRight = customRightMargin
}
updateLayout(context, 2)
}
}
}
}
//兼容模式
"com.android.systemui.statusbar.phone.PhoneStatusBarView".hook {
injectMember {
method {
name = "updateLayoutForCutout"
}
afterHook {
hasEnable("layout_compatibility_mode") {
val context = instance<ViewGroup>().context
updateLayout(context, 2)
}
}
}
}
}
//时钟居右
2 -> {
"com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment".hook {
injectMember {
method {
name = "onViewCreated"
paramCount = 2
}
afterHook {
val miuiPhoneStatusBarView = args(0).cast<ViewGroup>()!!
val context: Context = miuiPhoneStatusBarView.context
val res: Resources = miuiPhoneStatusBarView.resources
//组件ID
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val batteryId: Int = res.getIdentifier("battery", "id", "com.android.systemui")
//查找组件
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
if (statusBar == null) return@afterHook
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
val battery: ViewGroup = miuiPhoneStatusBarView.findViewById(batteryId)
//新建布局
val rightLp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
).also {
it.marginStart = dp2px(context, 5f)
}
mRightLayout = LinearLayout(context).also {
it.layoutParams = rightLp
}
//添加布局与组件
battery.addView(mRightLayout)
(clock.parent as ViewGroup).removeView(clock)
mRightLayout!!.addView(clock)
statusBarLeft = statusBar!!.paddingLeft
statusBarTop = statusBar!!.paddingTop
statusBarRight = statusBar!!.paddingRight
statusBarBottom = statusBar!!.paddingBottom
if (isCompatibilityMode) {
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (customLeftMargin != 0) {
statusBarLeft = customLeftMargin
}
val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
if (customRightMargin != 0) {
statusBarRight = customRightMargin
}
updateLayout(context, 1)
}
}
}
}
//兼容模式
"com.android.systemui.statusbar.phone.PhoneStatusBarView".hook {
injectMember {
method {
name = "updateLayoutForCutout"
}
afterHook {
if (isCompatibilityMode) {
val context = instance<ViewGroup>().context
updateLayout(context, 1)
}
}
}
}
}
//时钟居中+图标居左
3 -> {
"com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment".hook {
injectMember {
method {
name = "onViewCreated"
paramCount = 2
}
afterHook {
val miuiPhoneStatusBarView = args(0).cast<ViewGroup>()!!
val context: Context = miuiPhoneStatusBarView.context
val res: Resources = miuiPhoneStatusBarView.resources
val statusBarId: Int = res.getIdentifier("status_bar", "id", "com.android.systemui")
val statusBarContentsId: Int = res.getIdentifier(
"status_bar_contents", "id", "com.android.systemui"
)
val systemIconAreaId: Int = res.getIdentifier("system_icon_area", "id", "com.android.systemui")
val clockId: Int = res.getIdentifier("clock", "id", "com.android.systemui")
val phoneStatusBarLeftContainerId: Int = res.getIdentifier(
"phone_status_bar_left_container", "id", "com.android.systemui"
)
val fullscreenNotificationIconAreaId: Int = res.getIdentifier(
"fullscreen_notification_icon_area", "id", "com.android.systemui"
)
val statusIconsId: Int = res.getIdentifier(
"statusIcons", "id", "com.android.systemui"
)
val systemIconsId: Int = res.getIdentifier(
"system_icons", "id", "com.android.systemui"
)
val batteryId: Int = res.getIdentifier(
"battery", "id", "com.android.systemui"
)
statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)
val statusBarContents: ViewGroup = miuiPhoneStatusBarView.findViewById(statusBarContentsId)
if (statusBar == null) return@afterHook
val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)
val phoneStatusBarLeftContainer: ViewGroup = miuiPhoneStatusBarView.findViewById(
phoneStatusBarLeftContainerId
)
val fullscreenNotificationIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(
fullscreenNotificationIconAreaId
)
val systemIconArea: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconAreaId)
val statusIcons: ViewGroup = miuiPhoneStatusBarView.findViewById(statusIconsId)
val systemIcons: ViewGroup = miuiPhoneStatusBarView.findViewById(systemIconsId)
val battery: ViewGroup = miuiPhoneStatusBarView.findViewById(batteryId)
(clock.parent as ViewGroup).removeView(clock)
(phoneStatusBarLeftContainer.parent as ViewGroup).removeView(
phoneStatusBarLeftContainer
)
(systemIconArea.parent as ViewGroup).removeView(systemIconArea)
(statusIcons.parent as ViewGroup).removeView(statusIcons)
(systemIcons.parent as ViewGroup).removeView(systemIcons)
(battery.parent as ViewGroup).removeView(battery)
(fullscreenNotificationIconArea.parent as ViewGroup).removeView(
fullscreenNotificationIconArea
)
val mConstraintLayout = ConstraintLayout(context).also {
it.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT
)
}
mConstraintLayout.addView(fullscreenNotificationIconArea)
mConstraintLayout.addView(battery)
battery.layoutParams = ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.MATCH_PARENT
).also {
it.endToEnd = 0
}
fullscreenNotificationIconArea.layoutParams = ConstraintLayout.LayoutParams(
0, ConstraintLayout.LayoutParams.MATCH_PARENT
).also {
it.startToEnd = batteryId
it.endToEnd = 0
}
fullscreenNotificationIconArea.layoutDirection = View.LAYOUT_DIRECTION_RTL
//增加一个左对齐布局
mLeftLayout = LinearLayout(context)
val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mLeftLayout!!.layoutParams = leftLp
mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL
//增加一个居中布局
mCenterLayout = LinearLayout(context)
val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT
)
mCenterLayout!!.layoutParams = centerLp
mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL
//增加一个右布局
mRightLayout = LinearLayout(context)
val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
)
mRightLayout!!.layoutParams = rightLp
mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL
mLeftLayout!!.addView(phoneStatusBarLeftContainer)
mLeftLayout!!.addView(statusIcons)
statusIcons.layoutDirection = View.LAYOUT_DIRECTION_RTL
mCenterLayout!!.addView(clock)
mRightLayout!!.addView(mConstraintLayout)
fullscreenNotificationIconArea.layoutDirection = View.LAYOUT_DIRECTION_RTL
statusBarContents.addView(mLeftLayout, 0)
statusBarContents.addView(mCenterLayout)
statusBarContents.addView(mRightLayout)
statusBarLeft = statusBar!!.paddingLeft
statusBarTop = statusBar!!.paddingTop
statusBarRight = statusBar!!.paddingRight
statusBarBottom = statusBar!!.paddingBottom
if (isCompatibilityMode) {
val customLeftMargin = XSPUtils.getInt("status_bar_left_margin", 0)
if (customLeftMargin != 0) {
statusBarLeft = customLeftMargin
}
val customRightMargin = XSPUtils.getInt("status_bar_right_margin", 0)
if (customRightMargin != 0) {
statusBarRight = customRightMargin
}
updateLayout(context, 2)
}
}
}
}
//兼容模式
"com.android.systemui.statusbar.phone.PhoneStatusBarView".hook {
injectMember {
method {
name = "updateLayoutForCutout"
}
afterHook {
if (isCompatibilityMode) {
val context = instance<ViewGroup>().context
updateLayout(context, 2)
}
}
}
}
//解决重叠
"com.android.systemui.statusbar.phone.MiuiCollapsedStatusBarFragment".hook {
injectMember {
method {
name = "showClock"
param { it[0] == Boolean::class.java }
}
afterHook {
val miuiPhoneStatusBarView = instance.current().field {
name = "mStatusBar"
superClass(true)
}.cast<ViewGroup>()!!
val res = miuiPhoneStatusBarView.resources
val statusBarId = res.getIdentifier("status_bar", "id", "com.android.systemui")
val statusBar1 = miuiPhoneStatusBarView.findViewById<ViewGroup>(statusBarId)
//非锁屏下整个状态栏布局
val keyguardMgr = statusBar1.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
if (keyguardMgr.isKeyguardLocked) {
statusBar1!!.visibility = View.GONE
} else {
statusBar1!!.visibility = View.VISIBLE
}
}
}
}
}
}
}
}

View File

@@ -13,7 +13,7 @@ object StatusBarNetworkSpeedRefreshSpeedForT : YukiBaseHooker() {
} }
beforeHook { beforeHook {
hasEnable("status_bar_network_speed_refresh_speed") { hasEnable("status_bar_network_speed_refresh_speed") {
this.args[0] = 1000L args[0] = 1000L
} }
} }
} }

View File

@@ -55,7 +55,7 @@ object StatusBarTimeCustomizationForT : YukiBaseHooker() {
} }
afterHook { afterHook {
try { try {
c = this.args[0] as Context c = args[0] as Context
val textV = instance<TextView>() val textV = instance<TextView>()
if (textV.resources.getResourceEntryName(textV.id) != "clock") return@afterHook if (textV.resources.getResourceEntryName(textV.id) != "clock") return@afterHook
textV.isSingleLine = false textV.isSingleLine = false
@@ -94,7 +94,7 @@ object StatusBarTimeCustomizationForT : YukiBaseHooker() {
if (isCenterAlign) { if (isCenterAlign) {
try { try {
if (textV.resources.getResourceEntryName(textV.id) == "clock") { if (textV.resources.getResourceEntryName(textV.id) == "clock") {
c = this.args[0] as Context c = args[0] as Context
textV.gravity = Gravity.CENTER textV.gravity = Gravity.CENTER
} }
} catch (_: Exception) { } catch (_: Exception) {
@@ -131,7 +131,7 @@ object StatusBarTimeCustomizationForT : YukiBaseHooker() {
constructor { paramCount = 3 } constructor { paramCount = 3 }
afterHook { afterHook {
try { try {
c = this.args[0] as Context c = args[0] as Context
val textV = instance<TextView>() val textV = instance<TextView>()
if (textV.resources.getResourceEntryName(textV.id) != "clock") return@afterHook if (textV.resources.getResourceEntryName(textV.id) != "clock") return@afterHook
textV.isSingleLine = false textV.isSingleLine = false
@@ -159,7 +159,7 @@ object StatusBarTimeCustomizationForT : YukiBaseHooker() {
if (isGeekCenterAlign) { if (isGeekCenterAlign) {
try { try {
if (textV.resources.getResourceEntryName(textV.id) == "clock") { if (textV.resources.getResourceEntryName(textV.id) == "clock") {
c = this.args[0] as Context c = args[0] as Context
textV.gravity = Gravity.CENTER textV.gravity = Gravity.CENTER
} }
} catch (_: Exception) { } catch (_: Exception) {

View File

@@ -1,6 +1,6 @@
plugins { plugins {
id 'com.android.application' version '7.4.1' apply false id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.1' apply false id 'com.android.library' version '7.4.2' apply false
id 'org.jetbrains.kotlin.android' version '1.8.10' apply false id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
} }