Use thisDevice to make sure the group is owned by us
This commit is contained in:
@@ -2,9 +2,11 @@ package be.mygod.vpnhotspot
|
|||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.IntentFilter
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.net.NetworkInfo
|
import android.net.NetworkInfo
|
||||||
import android.net.wifi.WpsInfo
|
import android.net.wifi.WpsInfo
|
||||||
|
import android.net.wifi.p2p.WifiP2pDevice
|
||||||
import android.net.wifi.p2p.WifiP2pGroup
|
import android.net.wifi.p2p.WifiP2pGroup
|
||||||
import android.net.wifi.p2p.WifiP2pInfo
|
import android.net.wifi.p2p.WifiP2pInfo
|
||||||
import android.net.wifi.p2p.WifiP2pManager
|
import android.net.wifi.p2p.WifiP2pManager
|
||||||
@@ -94,9 +96,10 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, SharedPrefere
|
|||||||
fun requestGroupUpdate() {
|
fun requestGroupUpdate() {
|
||||||
group = null
|
group = null
|
||||||
val channel = channel ?: return
|
val channel = channel ?: return
|
||||||
|
val device = thisDevice ?: return
|
||||||
try {
|
try {
|
||||||
p2pManager.requestPersistentGroupInfo(channel) {
|
p2pManager.requestPersistentGroupInfo(channel) {
|
||||||
val ownedGroups = it.filter { it.isGroupOwner }
|
val ownedGroups = it.filter { it.isGroupOwner && it.owner.deviceAddress == device.deviceAddress }
|
||||||
val main = ownedGroups.minBy { it.netId }
|
val main = ownedGroups.minBy { it.netId }
|
||||||
group = main
|
group = main
|
||||||
if (main != null) ownedGroups.filter { it.netId != main.netId }.forEach {
|
if (main != null) ownedGroups.filter { it.netId != main.netId }.forEach {
|
||||||
@@ -136,6 +139,11 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, SharedPrefere
|
|||||||
}
|
}
|
||||||
private var routingManager: LocalOnlyInterfaceManager? = null
|
private var routingManager: LocalOnlyInterfaceManager? = null
|
||||||
|
|
||||||
|
private var thisDevice: WifiP2pDevice? = null
|
||||||
|
private val thisDeviceListener = broadcastReceiver { _, intent ->
|
||||||
|
thisDevice = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE)
|
||||||
|
}
|
||||||
|
|
||||||
var status = Status.IDLE
|
var status = Status.IDLE
|
||||||
private set(value) {
|
private set(value) {
|
||||||
if (field == value) return
|
if (field == value) return
|
||||||
@@ -156,6 +164,7 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, SharedPrefere
|
|||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
registerReceiver(thisDeviceListener, IntentFilter(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION))
|
||||||
onChannelDisconnected()
|
onChannelDisconnected()
|
||||||
app.pref.registerOnSharedPreferenceChangeListener(this)
|
app.pref.registerOnSharedPreferenceChangeListener(this)
|
||||||
}
|
}
|
||||||
@@ -297,6 +306,7 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, SharedPrefere
|
|||||||
app.pref.unregisterOnSharedPreferenceChangeListener(this)
|
app.pref.unregisterOnSharedPreferenceChangeListener(this)
|
||||||
status = Status.DESTROYED
|
status = Status.DESTROYED
|
||||||
if (Build.VERSION.SDK_INT >= 27) channel?.close()
|
if (Build.VERSION.SDK_INT >= 27) channel?.close()
|
||||||
|
unregisterReceiver(thisDeviceListener)
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user