Skip to content

Commit 19e57e9

Browse files
committed
OpenWifiOnTop
1 parent 9ad2717 commit 19e57e9

File tree

10 files changed

+101
-0
lines changed

10 files changed

+101
-0
lines changed

OpenWifiOnTop/Readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# OpenWifiOnTop
2+
3+
OpenWifiOnTop is an Xposed module that prioritizes open Wi-Fi networks in the Wi-Fi picker.

OpenWifiOnTop/build.gradle.kts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
plugins {
2+
id("com.android.application")
3+
kotlin("android")
4+
}
5+
6+
android {
7+
namespace = "de.binarynoise.openWifiOnTop"
8+
9+
defaultConfig {
10+
minSdk = 29
11+
targetSdk = 34
12+
}
13+
}
14+
15+
dependencies {
16+
implementation(project(":reflection"))
17+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest
3+
xmlns:android="http://schemas.android.com/apk/res/android">
4+
5+
<application android:label="OpenWifiOnTop">
6+
<meta-data
7+
android:name="xposedmodule"
8+
android:value="true"
9+
/>
10+
<meta-data
11+
android:name="xposeddescription"
12+
android:value="Move open WiFi hotspots to the top of the list"
13+
/>
14+
<meta-data
15+
android:name="xposedminversion"
16+
android:value="53"
17+
/>
18+
<meta-data
19+
android:name="xposedscope"
20+
android:resource="@array/scope"
21+
/>
22+
</application>
23+
24+
</manifest>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
de.binarynoise.openWifiOnTop.Hook
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package de.binarynoise.openWifiOnTop
2+
3+
import android.annotation.SuppressLint
4+
import de.binarynoise.reflection.cast
5+
import de.binarynoise.reflection.findDeclaredField
6+
import de.binarynoise.reflection.findDeclaredMethod
7+
import de.robv.android.xposed.IXposedHookLoadPackage
8+
import de.robv.android.xposed.XposedBridge
9+
import de.robv.android.xposed.XposedHelpers
10+
import de.robv.android.xposed.callbacks.XC_LoadPackage
11+
import de.robv.android.xposed.XC_MethodHook as MethodHook
12+
13+
@SuppressLint("PrivateApi", "MissingPermission")
14+
class Hook : IXposedHookLoadPackage {
15+
16+
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
17+
val WifiEntryClass = lpparam.classLoader.loadClass("com.android.wifitrackerlib.WifiEntry")
18+
val getSecurityTypes = WifiEntryClass.findDeclaredMethod("getSecurityTypes")
19+
20+
val WifiPickerTrackerClass = lpparam.classLoader.loadClass("com.android.wifitrackerlib.WifiPickerTracker")
21+
22+
try {
23+
XposedHelpers.findAndHookMethod(WifiPickerTrackerClass, "getWifiEntries", object : MethodHook() {
24+
override fun afterHookedMethod(param: MethodHookParam) = with(param) {
25+
result = result.cast<List<*>>().sortedByDescending {
26+
getSecurityTypes.invoke(it)!!.cast<List<Int>>().minOrNull() == 0
27+
}
28+
}
29+
})
30+
} catch (_: Throwable) {
31+
}
32+
33+
try {
34+
XposedBridge.hookAllMethods(WifiPickerTrackerClass, "updateWifiEntries", object : MethodHook() {
35+
override fun afterHookedMethod(param: MethodHookParam): Unit = with(param) {
36+
val mWifiEntries = WifiPickerTrackerClass.findDeclaredField("mWifiEntries")
37+
mWifiEntries.set(param.thisObject, mWifiEntries.get(thisObject)!!.cast<List<*>>().sortedByDescending {
38+
getSecurityTypes.invoke(it)?.cast<List<Int>>()?.minOrNull() == 0
39+
}.let(::ArrayList)) // convert java.util.Arrays$ArrayList to java.util.ArrayList
40+
}
41+
})
42+
} catch (_: Throwable) {
43+
}
44+
}
45+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<string-array name="scope">
4+
<item>com.android.systemui</item>
5+
<item>com.android.settings</item>
6+
</string-array>
7+
</resources>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OpenWifiOnTop is an Xposed module that prioritizes open Wi-Fi networks in the Wi-Fi picker.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Prioritize open Wi-Fi networks in the Wi-Fi picker
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OpenWifiOnTop

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ include(":DontResetIfBootedAndConnected")
2626
include(":FreeNotifications")
2727
include(":MotionEventMod")
2828
include(":MuteSlf4jWarnings")
29+
include(":OpenWifiOnTop")
2930
include(":PersistentForegroundServiceNotifications")
3031
include(":ResetAllNotificationChannels")
3132
include(":RotationControl")

0 commit comments

Comments
 (0)