From 9400d765f07f57adb775518c5b66d8001893a7c4 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 2 Jul 2020 16:09:07 -0300 Subject: [wallet] Try to connect to open Wi-Fi if included in fragment of scanned/opened taler:// URI --- .idea/dictionaries/user.xml | 1 + wallet/src/main/AndroidManifest.xml | 3 ++ .../src/main/java/net/taler/wallet/MainActivity.kt | 6 +++ wallet/src/main/java/net/taler/wallet/Utils.kt | 63 ++++++++++++++++++++++ wallet/src/main/res/values/strings.xml | 2 + 5 files changed, 75 insertions(+) diff --git a/.idea/dictionaries/user.xml b/.idea/dictionaries/user.xml index 0609fdc..1bcab63 100644 --- a/.idea/dictionaries/user.xml +++ b/.idea/dictionaries/user.xml @@ -9,6 +9,7 @@ markwon servicedesc snackbar + ssid taler testkudos diff --git a/wallet/src/main/AndroidManifest.xml b/wallet/src/main/AndroidManifest.xml index 5d86a77..e2a79da 100644 --- a/wallet/src/main/AndroidManifest.xml +++ b/wallet/src/main/AndroidManifest.xml @@ -18,6 +18,9 @@ xmlns:tools="http://schemas.android.com/tools" package="net.taler.wallet"> + + + { Log.v(TAG, "navigating!") diff --git a/wallet/src/main/java/net/taler/wallet/Utils.kt b/wallet/src/main/java/net/taler/wallet/Utils.kt index b41a202..e299245 100644 --- a/wallet/src/main/java/net/taler/wallet/Utils.kt +++ b/wallet/src/main/java/net/taler/wallet/Utils.kt @@ -17,6 +17,18 @@ package net.taler.wallet import android.app.Activity +import android.content.Context +import android.net.ConnectivityManager +import android.net.ConnectivityManager.NetworkCallback +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.wifi.WifiConfiguration +import android.net.wifi.WifiManager +import android.net.wifi.WifiNetworkSpecifier +import android.os.Build.VERSION.SDK_INT +import android.widget.Toast +import android.widget.Toast.LENGTH_LONG +import androidx.annotation.RequiresApi import com.google.zxing.integration.android.IntentIntegrator fun scanQrCode(activity: Activity) { @@ -27,6 +39,57 @@ fun scanQrCode(activity: Activity) { }.initiateScan(listOf(IntentIntegrator.QR_CODE)) } +fun connectToWifi(context: Context, ssid: String) { + if (SDK_INT >= 29) { + connectToWifi29(context, ssid) + } else { + connectToWifiDeprecated(context, ssid) + } +} + +@RequiresApi(29) +private fun connectToWifi29(context: Context, ssid: String) { + val wifiManager = context.getSystemService(WifiManager::class.java) + if (wifiManager?.isWifiEnabled == false) { + // we are not allowed to enable the WiFi anymore, so show at least a hint about it + Toast.makeText(context, R.string.wifi_disabled_error, LENGTH_LONG).show() + } + + val specifier = WifiNetworkSpecifier.Builder() + .setSsid(ssid) + .build() + val request = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .setNetworkSpecifier(specifier) + .build() + val connectivityManager = context.getSystemService(ConnectivityManager::class.java) + connectivityManager?.requestNetwork(request, NetworkCallback()) +} + +@Suppress("DEPRECATION") +private fun connectToWifiDeprecated(context: Context, ssid: String) { + context.getSystemService(WifiManager::class.java)?.apply { + if (!isWifiEnabled) { + val enabledResult = setWifiEnabled(true) + while (enabledResult && !isWifiEnabled) Thread.sleep(25) + } + val wifiConfig = WifiConfiguration().apply { + SSID = "\"$ssid\"" + allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE) + } + addNetwork(wifiConfig).let { netId -> + if (netId == -1) { + val str = context.getString(R.string.wifi_connect_error, ssid) + Toast.makeText(context, str, LENGTH_LONG).show() + } else { + disconnect() + enableNetwork(netId, true) + reconnect() + } + } + } +} + fun cleanExchange(exchange: String) = exchange.let { if (it.startsWith("https://")) it.substring(8) else it }.trimEnd('/') diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml index c856345..fec5948 100644 --- a/wallet/src/main/res/values/strings.xml +++ b/wallet/src/main/res/values/strings.xml @@ -155,5 +155,7 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card Refund received Tip + Turn on Wi-Fi to get free Wi-Fi + Could not connect to free Wi-Fi: %s -- cgit v1.2.3