diff --git a/README.md b/README.md
index 13d6c733..bc3a2348 100644
--- a/README.md
+++ b/README.md
@@ -222,7 +222,6 @@ Greylisted/blacklisted APIs or internal constants: (some constants are hardcoded
* `Landroid/net/TetheringManager;->EXTRA_ERRORED_TETHER:Ljava/lang/String;,sdk,system-api,test-api`
* (since API 24) `Landroid/net/TetheringManager;->TETHERING_BLUETOOTH:I,sdk,system-api,test-api`
* (since API 30) `Landroid/net/TetheringManager;->TETHERING_ETHERNET:I,sdk,system-api,test-api`
-* (since API 30) `Landroid/net/TetheringManager;->TETHERING_NCM:I,sdk,system-api,test-api`
* (since API 24) `Landroid/net/TetheringManager;->TETHERING_USB:I,sdk,system-api,test-api`
* (since API 24) `Landroid/net/TetheringManager;->TETHERING_WIFI:I,sdk,system-api,test-api`
* `Landroid/net/TetheringManager;->TETHER_ERROR_*:I,sdk,system-api,test-api`
diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml
index e801d194..96963632 100644
--- a/mobile/src/main/AndroidManifest.xml
+++ b/mobile/src/main/AndroidManifest.xml
@@ -193,22 +193,6 @@
android:name="android.service.quicksettings.TOGGLEABLE_TILE"
android:value="true" />
-
-
-
-
-
-
{
TetherManager.ViewHolder(ListitemInterfaceBinding.inflate(inflater, parent, false))
}
diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt
index b209b2e0..4747b459 100644
--- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt
+++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt
@@ -90,7 +90,8 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(),
val data = Data()
abstract val title: CharSequence
abstract val tetherType: TetherType
- open val isStarted: Boolean? get() = parent.enabledTypes.contains(tetherType)
+ open val isStarted: Boolean? get() = parent.enabledTypes.contains(tetherType) ||
+ tetherType == TetherType.USB && parent.enabledTypes.contains(TetherType.NCM)
protected open val text: CharSequence get() = baseError ?: ""
protected var baseError: String? = null
@@ -126,7 +127,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(),
}
fun updateErrorMessage(errored: List, lastErrors: Map) {
- val interested = errored.filter { TetherType.ofInterface(it) == tetherType }
+ val interested = errored.filter { TetherType.ofInterface(it).isA(tetherType) }
baseError = if (interested.isEmpty()) null else interested.joinToString("\n") { iface ->
"$iface: " + try {
TetheringManager.tetherErrorLookup(if (Build.VERSION.SDK_INT < 30) @Suppress("DEPRECATION") {
@@ -331,15 +332,6 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(),
override fun start() = TetheringManager.startTethering(TetheringManager.TETHERING_ETHERNET, true, this)
override fun stop() = TetheringManager.stopTethering(TetheringManager.TETHERING_ETHERNET, this::onException)
}
- @RequiresApi(30)
- class Ncm(parent: TetheringFragment) : TetherManager(parent) {
- override val title get() = parent.getString(R.string.tethering_manage_ncm)
- override val tetherType get() = TetherType.NCM
- override val type get() = VIEW_TYPE_NCM
-
- override fun start() = TetheringManager.startTethering(TetheringManager.TETHERING_NCM, true, this)
- override fun stop() = TetheringManager.stopTethering(TetheringManager.TETHERING_NCM, this::onException)
- }
@Suppress("DEPRECATION")
@Deprecated("Not usable since API 26, malfunctioning on API 25")
diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt
index 17d0d230..5a264a9b 100644
--- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt
+++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt
@@ -68,9 +68,7 @@ class TetheringFragment : Fragment(), ServiceConnection, Toolbar.OnMenuItemClick
)
}
@get:RequiresApi(30)
- private val tetherManagers30 by lazy @TargetApi(30) {
- listOf(TetherManager.Ethernet(this@TetheringFragment), TetherManager.Ncm(this@TetheringFragment))
- }
+ private val ethernetManager by lazy @TargetApi(30) { TetherManager.Ethernet(this@TetheringFragment) }
private val wifiManagerLegacy by lazy { TetherManager.WifiLegacy(this@TetheringFragment) }
var activeIfaces = emptyList()
@@ -119,8 +117,8 @@ class TetheringFragment : Fragment(), ServiceConnection, Toolbar.OnMenuItemClick
tetherManagers.forEach { it.updateErrorMessage(erroredIfaces, lastErrors) }
}
if (Build.VERSION.SDK_INT >= 30) {
- list.addAll(tetherManagers30)
- tetherManagers30.forEach { it.updateErrorMessage(erroredIfaces, lastErrors) }
+ list.add(ethernetManager)
+ ethernetManager.updateErrorMessage(erroredIfaces, lastErrors)
}
if (Build.VERSION.SDK_INT < 26) {
list.add(wifiManagerLegacy)
diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringTileService.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringTileService.kt
index b79f1e79..df622ad7 100644
--- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringTileService.kt
+++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringTileService.kt
@@ -36,7 +36,7 @@ sealed class TetheringTileService : IpNeighbourMonitoringTileService(), Tetherin
protected abstract val tetherType: TetherType
protected open val icon get() = tetherType.icon
private var tethered: List? = null
- protected val interested get() = tethered?.filter { TetherType.ofInterface(it) == tetherType }
+ protected val interested get() = tethered?.filter { TetherType.ofInterface(it).isA(tetherType) }
protected var binder: TetheringService.Binder? = null
private val receiver = broadcastReceiver { _, intent ->
@@ -228,14 +228,6 @@ sealed class TetheringTileService : IpNeighbourMonitoringTileService(), Tetherin
override fun start() = TetheringManager.startTethering(TetheringManager.TETHERING_ETHERNET, true, this)
override fun stop() = TetheringManager.stopTethering(TetheringManager.TETHERING_ETHERNET, this::onException)
}
- @RequiresApi(30)
- class Ncm : TetheringTileService() {
- override val labelString get() = R.string.tethering_manage_ncm
- override val tetherType get() = TetherType.NCM
-
- override fun start() = TetheringManager.startTethering(TetheringManager.TETHERING_NCM, true, this)
- override fun stop() = TetheringManager.stopTethering(TetheringManager.TETHERING_NCM, this::onException)
- }
@Suppress("DEPRECATION")
@Deprecated("Not usable since API 25")
diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/TetherType.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/TetherType.kt
index b6bb2092..2bdd1549 100644
--- a/mobile/src/main/java/be/mygod/vpnhotspot/net/TetherType.kt
+++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/TetherType.kt
@@ -28,6 +28,8 @@ enum class TetherType(@DrawableRes val icon: Int) {
else -> false
}
+ fun isA(other: TetherType) = this == other || other == USB && this == NCM
+
companion object : TetheringManager.TetheringEventCallback {
private lateinit var usbRegexs: List
private lateinit var wifiRegexs: List
diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/TetheringManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/TetheringManager.kt
index a701556f..e8b75748 100644
--- a/mobile/src/main/java/be/mygod/vpnhotspot/net/TetheringManager.kt
+++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/TetheringManager.kt
@@ -151,13 +151,6 @@ object TetheringManager {
*/
@RequiresApi(24)
const val TETHERING_BLUETOOTH = 2
- /**
- * Ncm local tethering type.
- *
- * @see startTethering
- */
- @RequiresApi(30)
- const val TETHERING_NCM = 4
/**
* Ethernet tethering type.
*