From b03303c73ac3f77191a79a56979ddaa4236d9d32 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sat, 24 Jul 2021 20:33:30 -0400 Subject: [PATCH] Drop support for old Android 12 betas --- .../vpnhotspot/client/ClientViewModel.kt | 6 +-- .../vpnhotspot/manage/BluetoothTethering.kt | 3 +- .../mygod/vpnhotspot/manage/TetherManager.kt | 11 ++--- .../net/wifi/SoftApConfigurationCompat.kt | 46 +++++++++---------- .../net/wifi/WifiApDialogFragment.kt | 11 ++--- .../vpnhotspot/net/wifi/WifiApManager.kt | 2 +- .../mygod/vpnhotspot/root/WifiApCommands.kt | 4 +- 7 files changed, 40 insertions(+), 43 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientViewModel.kt b/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientViewModel.kt index 53a848dd..69d08aad 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientViewModel.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientViewModel.kt @@ -4,10 +4,10 @@ import android.content.ComponentName import android.content.IntentFilter import android.content.ServiceConnection import android.net.wifi.p2p.WifiP2pDevice +import android.os.Build import android.os.IBinder import android.os.Parcelable import androidx.annotation.RequiresApi -import androidx.core.os.BuildCompat import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData @@ -87,10 +87,10 @@ class ClientViewModel : ViewModel(), ServiceConnection, IpNeighbourMonitor.Callb override fun onStart(owner: LifecycleOwner) { app.registerReceiver(receiver, IntentFilter(TetheringManager.ACTION_TETHER_STATE_CHANGED)) IpNeighbourMonitor.registerCallback(this, false) - if (BuildCompat.isAtLeastS()) WifiApCommands.registerSoftApCallback(this) + if (Build.VERSION.SDK_INT >= 31) WifiApCommands.registerSoftApCallback(this) } override fun onStop(owner: LifecycleOwner) { - if (BuildCompat.isAtLeastS()) WifiApCommands.unregisterSoftApCallback(this) + if (Build.VERSION.SDK_INT >= 31) WifiApCommands.unregisterSoftApCallback(this) IpNeighbourMonitor.unregisterCallback(this) app.unregisterReceiver(receiver) } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/BluetoothTethering.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/BluetoothTethering.kt index 1dce98e2..bbb9e823 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/BluetoothTethering.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/BluetoothTethering.kt @@ -12,7 +12,6 @@ import android.content.IntentFilter import android.os.Build import androidx.annotation.RequiresApi import androidx.core.content.getSystemService -import androidx.core.os.BuildCompat import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.net.TetheringManager import be.mygod.vpnhotspot.util.broadcastReceiver @@ -91,7 +90,7 @@ class BluetoothTethering(context: Context, val stateListener: () -> Unit) : check(adapter.getProfileProxy(context, this, PAN)) proxyCreated = true } catch (e: SecurityException) { - if (BuildCompat.isAtLeastS()) Timber.d(e.readableMessage) else Timber.w(e) + if (Build.VERSION.SDK_INT >= 31) Timber.d(e.readableMessage) else Timber.w(e) activeFailureCause = e } } 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 93caf1c3..2b9ee1ff 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt @@ -15,7 +15,6 @@ import android.view.View import android.widget.Toast import androidx.annotation.RequiresApi import androidx.core.net.toUri -import androidx.core.os.BuildCompat import androidx.core.view.updatePaddingRelative import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner @@ -198,7 +197,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(), val numClients = numClients val maxClients = capability.maxSupportedClients var features = capability.supportedFeatures - if (BuildCompat.isAtLeastS()) for ((flag, band) in arrayOf( + if (Build.VERSION.SDK_INT >= 31) for ((flag, band) in arrayOf( SoftApCapability.SOFTAP_FEATURE_BAND_24G_SUPPORTED to SoftApConfigurationCompat.BAND_2GHZ, SoftApCapability.SOFTAP_FEATURE_BAND_5G_SUPPORTED to SoftApConfigurationCompat.BAND_5GHZ, SoftApCapability.SOFTAP_FEATURE_BAND_6G_SUPPORTED to SoftApConfigurationCompat.BAND_6GHZ, @@ -214,7 +213,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(), R.string.tethering_manage_wifi_feature_ap_mac_randomization)) if (Services.wifi.isStaApConcurrencySupported) yield(parent.getText( R.string.tethering_manage_wifi_feature_sta_ap_concurrency)) - if (BuildCompat.isAtLeastS()) { + if (Build.VERSION.SDK_INT >= 31) { if (Services.wifi.isBridgedApConcurrencySupported) yield(parent.getText( R.string.tethering_manage_wifi_feature_bridged_ap_concurrency)) if (Services.wifi.isStaBridgedApConcurrencySupported) yield(parent.getText( @@ -228,7 +227,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(), }.joinToSpanned().let { if (it.isEmpty()) parent.getText(R.string.tethering_manage_wifi_no_features) else it }) - if (BuildCompat.isAtLeastS()) { + if (Build.VERSION.SDK_INT >= 31) { val list = SoftApConfigurationCompat.BAND_TYPES.map { band -> val channels = capability.getSupportedChannelList(band) if (channels.isNotEmpty()) StringBuilder().apply { @@ -272,7 +271,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(), val frequency = info.frequency val channel = SoftApConfigurationCompat.frequencyToChannel(frequency) val bandwidth = SoftApInfo.channelWidthLookup(info.bandwidth, true) - if (BuildCompat.isAtLeastS()) { + if (Build.VERSION.SDK_INT >= 31) { var bssid = makeMacSpan(info.bssid.toString()) info.apInstanceIdentifier?.let { // take the fast route if possible bssid = if (bssid is String) "$bssid%$it" else SpannableStringBuilder(bssid).append("%$it") @@ -315,7 +314,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(), onTetheringStarted() // force flush } override fun onResume(owner: LifecycleOwner) { - if (!BuildCompat.isAtLeastS() || parent.requireContext().checkSelfPermission( + if (Build.VERSION.SDK_INT < 31 || parent.requireContext().checkSelfPermission( Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) { tethering.ensureInit(parent.requireContext()) } else if (parent.shouldShowRequestPermissionRationale(Manifest.permission.BLUETOOTH_CONNECT)) { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/SoftApConfigurationCompat.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/SoftApConfigurationCompat.kt index 97b18594..fc4ee751 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/SoftApConfigurationCompat.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/SoftApConfigurationCompat.kt @@ -8,7 +8,6 @@ import android.os.Build import android.os.Parcelable import android.util.SparseIntArray import androidx.annotation.RequiresApi -import androidx.core.os.BuildCompat import be.mygod.vpnhotspot.net.MacAddressCompat import be.mygod.vpnhotspot.net.MacAddressCompat.Companion.toCompat import be.mygod.vpnhotspot.net.monitor.TetherTimeoutMonitor @@ -64,7 +63,7 @@ data class SoftApConfigurationCompat( const val BAND_60GHZ = 8 const val BAND_LEGACY = BAND_2GHZ or BAND_5GHZ val BAND_TYPES by lazy { - if (BuildCompat.isAtLeastS()) try { + if (Build.VERSION.SDK_INT >= 31) try { return@lazy UnblockCentral.SoftApConfiguration_BAND_TYPES } catch (e: ReflectiveOperationException) { Timber.w(e) @@ -314,25 +313,26 @@ data class SoftApConfigurationCompat( @RequiresApi(30) @Suppress("UNCHECKED_CAST") fun SoftApConfiguration.toCompat() = SoftApConfigurationCompat( - ssid, - bssid?.toCompat()?.addr, - passphrase, - isHiddenSsid, - if (BuildCompat.isAtLeastS()) getChannels(this) as SparseIntArray else SparseIntArray(1).also { - it.append(getBand(this) as Int, getChannel(this) as Int) - }, - securityType, - getMaxNumberOfClients(this) as Int, - isAutoShutdownEnabled(this) as Boolean, - getShutdownTimeoutMillis(this) as Long, - isClientControlByUserEnabled(this) as Boolean, - getBlockedClientList(this) as List, - getAllowedClientList(this) as List, - if (BuildCompat.isAtLeastS()) getMacRandomizationSetting(this) as Int else RANDOMIZATION_PERSISTENT, - !BuildCompat.isAtLeastS() || isBridgedModeOpportunisticShutdownEnabled(this) as Boolean, - !BuildCompat.isAtLeastS() || isIeee80211axEnabled(this) as Boolean, - !BuildCompat.isAtLeastS() || isUserConfiguration(this) as Boolean, - this) + ssid, + bssid?.toCompat()?.addr, + passphrase, + isHiddenSsid, + if (Build.VERSION.SDK_INT >= 31) getChannels(this) as SparseIntArray else SparseIntArray(1).also { + it.append(getBand(this) as Int, getChannel(this) as Int) + }, + securityType, + getMaxNumberOfClients(this) as Int, + isAutoShutdownEnabled(this) as Boolean, + getShutdownTimeoutMillis(this) as Long, + isClientControlByUserEnabled(this) as Boolean, + getBlockedClientList(this) as List, + getAllowedClientList(this) as List, + if (Build.VERSION.SDK_INT >= 31) getMacRandomizationSetting(this) as Int else RANDOMIZATION_PERSISTENT, + Build.VERSION.SDK_INT < 31 || isBridgedModeOpportunisticShutdownEnabled(this) as Boolean, + Build.VERSION.SDK_INT < 31 || isIeee80211axEnabled(this) as Boolean, + Build.VERSION.SDK_INT < 31 || isUserConfiguration(this) as Boolean, + this, + ) } @Suppress("DEPRECATION") @@ -438,7 +438,7 @@ data class SoftApConfigurationCompat( setSsid(builder, ssid) setPassphrase(builder, if (securityType == SoftApConfiguration.SECURITY_TYPE_OPEN) null else passphrase, securityType) - if (BuildCompat.isAtLeastS()) setChannels(builder, channels) else { + if (Build.VERSION.SDK_INT >= 31) setChannels(builder, channels) else { val (band, channel) = requireSingleBand() if (channel == 0) setBand(builder, band) else setChannel(builder, channel, band) } @@ -450,7 +450,7 @@ data class SoftApConfigurationCompat( setHiddenSsid(builder, isHiddenSsid) setAllowedClientList(builder, allowedClientList) setBlockedClientList(builder, blockedClientList) - if (BuildCompat.isAtLeastS()) { + if (Build.VERSION.SDK_INT >= 31) { setMacRandomizationSetting(builder, macRandomizationSetting) setBridgedModeOpportunisticShutdownEnabled(builder, isBridgedModeOpportunisticShutdownEnabled) setIeee80211axEnabled(builder, isIeee80211axEnabled) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt index 4a280766..0f68d590 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt @@ -20,7 +20,6 @@ import android.widget.Toast import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.Toolbar -import androidx.core.os.BuildCompat import androidx.core.view.isGone import be.mygod.librootkotlinx.toByteArray import be.mygod.librootkotlinx.toParcelable @@ -117,7 +116,7 @@ class WifiApDialogFragment : AlertDialogFragment= 0) channels.append(band, channel) } - if (!arg.p2pMode && BuildCompat.isAtLeastS() && dialogView.bridgedMode.isChecked) { + if (!arg.p2pMode && Build.VERSION.SDK_INT >= 31 && dialogView.bridgedMode.isChecked) { this.channels = channels } else optimizeChannels(channels) } @@ -179,7 +178,7 @@ class WifiApDialogFragment : AlertDialogFragment= 30 && !arg.p2pMode) dialogView.band6G.configure(channels6G) else dialogView.bandWrapper6G.isGone = true - if (BuildCompat.isAtLeastS() && !arg.p2pMode) dialogView.band60G.configure(channels60G) else { + if (Build.VERSION.SDK_INT >= 31 && !arg.p2pMode) dialogView.band60G.configure(channels60G) else { dialogView.bandWrapper60G.isGone = true dialogView.bridgedMode.isGone = true dialogView.bridgedModeOpportunisticShutdown.isGone = true @@ -193,8 +192,8 @@ class WifiApDialogFragment : AlertDialogFragment= 29) dialogView.macRandomization.isEnabled = false - else if (arg.p2pMode || !BuildCompat.isAtLeastS()) dialogView.macRandomization.isGone = true - if (arg.p2pMode || !BuildCompat.isAtLeastS()) { + else if (arg.p2pMode || Build.VERSION.SDK_INT < 31) dialogView.macRandomization.isGone = true + if (arg.p2pMode || Build.VERSION.SDK_INT < 31) { dialogView.ieee80211ax.isGone = true dialogView.userConfig.isGone = true } @@ -302,7 +301,7 @@ class WifiApDialogFragment : AlertDialogFragment option5G is ChannelOption.Disabled } } - Build.VERSION.SDK_INT == 30 && !BuildCompat.isAtLeastS() -> { + Build.VERSION.SDK_INT == 30 -> { var expected = 1 var set = 0 for (s in arrayOf(dialogView.band2G, dialogView.band5G, dialogView.band6G)) when (s.selectedItem) { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApManager.kt index 5bef6e2d..0a83397f 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApManager.kt @@ -287,7 +287,7 @@ object WifiApManager { if (noArgs != 1) Timber.w("Unexpected args for $name: ${args?.contentToString()}") val arg = args!![0] if (arg is List<*>) { - if (!BuildCompat.isAtLeastS()) Timber.w(Exception("Unexpected onInfoChanged API 31+")) + if (Build.VERSION.SDK_INT < 31) Timber.w(Exception("Unexpected onInfoChanged API 31+")) @Suppress("UNCHECKED_CAST") callback.onInfoChanged(arg as List) } else { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/root/WifiApCommands.kt b/mobile/src/main/java/be/mygod/vpnhotspot/root/WifiApCommands.kt index e05e7f10..e7db4c6d 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/root/WifiApCommands.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/root/WifiApCommands.kt @@ -2,9 +2,9 @@ package be.mygod.vpnhotspot.root import android.annotation.TargetApi import android.content.ClipData +import android.os.Build import android.os.Parcelable import androidx.annotation.RequiresApi -import androidx.core.os.BuildCompat import be.mygod.librootkotlinx.ParcelableBoolean import be.mygod.librootkotlinx.RootCommand import be.mygod.librootkotlinx.RootCommandChannel @@ -129,7 +129,7 @@ object WifiApCommands { val client = WifiClient(parcel.client) val macAddress = client.macAddress var name = macAddress.toString() - if (BuildCompat.isAtLeastS()) client.apInstanceIdentifier?.let { name += "%$it" } + if (Build.VERSION.SDK_INT >= 31) client.apInstanceIdentifier?.let { name += "%$it" } val reason = WifiApManager.clientBlockLookup(parcel.blockedReason, true) Timber.i("$name blocked from connecting: $reason (${parcel.blockedReason})") SmartSnackbar.make(app.getString(R.string.tethering_manage_wifi_client_blocked, name, reason)).apply {