From 8bcb89b04de3f6c9e01b7dfa65fa505ae44ce2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=8C=E5=A0=86=E5=B0=8F=E9=80=8F=E6=98=8E?= Date: Mon, 21 Mar 2022 17:55:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=A7=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/SettingsActivity.kt | 8 ++ .../simplicitytools/hook/app/SystemUI.kt | 2 + .../hook/app/systemui/HideMobileTypeIcon.kt | 49 ++++++++--- .../systemui/StatusBarBigMobileTypeIcon.kt | 83 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarBigMobileTypeIcon.kt 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 0f1306ac..191c2fe6 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt @@ -498,6 +498,14 @@ class SettingsActivity : MIUIActivity() { menuButton.visibility = View.VISIBLE return ArrayList().apply { add(TitleTextV(resId = R.string.statusbar)) + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.big_mobile_type_icon + ), + SwitchV("big_mobile_type_icon") + ) + ) add( TextSummaryWithSwitchV( TextSummaryV( 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 e471712c..7beaddaa 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 @@ -58,6 +58,8 @@ class SystemUI : IXposedHookLoadPackage { OldQSCustom().handleLoadPackage(lpparam) //双排网速 DoubleLineNetworkSpeed().handleLoadPackage(lpparam) + + StatusBarBigMobileTypeIcon().handleLoadPackage(lpparam) } } diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt index 43a1da14..6ecf2213 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt @@ -3,29 +3,54 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.view.View import android.widget.ImageView import android.widget.TextView +import com.lt2333.simplicitytools.util.XSPUtils import com.lt2333.simplicitytools.util.getObjectField import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hookAfterMethod import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.callbacks.XC_LoadPackage class HideMobileTypeIcon : IXposedHookLoadPackage { + val isBigType=XSPUtils.getBoolean("big_mobile_type_icon", false) override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" - "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { - hasEnable("hide_mobile_type_icon") { - (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 - } + val iconState = + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( + lpparam.classLoader, + "initViewState", + iconState + ) { + hideMobileTypeIcon(it) } - "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { - hasEnable("hide_mobile_type_icon") { - (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 + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod( + lpparam.classLoader, + "updateState", + iconState + ) { + hideMobileTypeIcon(it) + } + } + + fun hideMobileTypeIcon(it: XC_MethodHook.MethodHookParam) { + hasEnable("hide_mobile_type_icon") { + if (isBigType) { + (it.thisObject.getObjectField("mMobileType") as TextView).visibility = + 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 } } } + } \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarBigMobileTypeIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarBigMobileTypeIcon.kt new file mode 100644 index 00000000..8798b66d --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarBigMobileTypeIcon.kt @@ -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(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(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(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(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 + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f4471526..7f7629ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -180,4 +180,5 @@ Dual row align Left Right + Big Mobile Type Icon