From 3986883bc73d8416407a39e14d3db5fc1d03688c Mon Sep 17 00:00:00 2001 From: Albert Vaca Cintora Date: Sat, 4 Mar 2023 15:39:37 +0100 Subject: [PATCH] Use NEARBY_WIFI_DEVICES instead of ACCESS_FINE_LOCATION In Android 13+, this permission is enough EDIT: DO NOT MERGE, the new permission doesn't allow wifiInfo.getSSID() --- AndroidManifest.xml | 5 +++-- res/values/strings.xml | 1 + src/org/kde/kdeconnect/Helpers/TrustedNetworkHelper.java | 6 +++++- .../kdeconnect/UserInterface/TrustedNetworksActivity.java | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d8a02fb8..66656ce2 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -24,6 +24,7 @@ + @@ -39,8 +40,8 @@ - - + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 83c4ebcc..4a1e8255 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -403,6 +403,7 @@ Permission required KDE Connect needs the background location permission to know the WiFi network you are connected to even when the app is in the background. This is because the name of the WiFi networks around you could be used to find your location, even when this is not what KDE Connect does. + KDE Connect needs permission to know the WiFi network you are connected to. Android 10 has removed clipboard access to all apps. This plugin will be disabled. Continue playing here Can\'t open URL to continue playing diff --git a/src/org/kde/kdeconnect/Helpers/TrustedNetworkHelper.java b/src/org/kde/kdeconnect/Helpers/TrustedNetworkHelper.java index f3195b17..68d3ca88 100644 --- a/src/org/kde/kdeconnect/Helpers/TrustedNetworkHelper.java +++ b/src/org/kde/kdeconnect/Helpers/TrustedNetworkHelper.java @@ -6,6 +6,7 @@ import android.content.pm.PackageManager; import android.net.wifi.SupplicantState; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.os.Build; import android.preference.PreferenceManager; import android.text.TextUtils; import android.util.Log; @@ -13,6 +14,7 @@ import android.util.Log; import androidx.core.content.ContextCompat; import org.apache.commons.lang3.ArrayUtils; +import org.kde.kdeconnect_tp.R; import java.util.List; @@ -23,6 +25,8 @@ public class TrustedNetworkHelper { private static final String NETWORK_SSID_DELIMITER = "#_#"; private static final String NOT_AVAILABLE_SSID_RESULT = ""; + public static final String ACCESS_WIFI_NETWORKS_PERMISSION = Build.VERSION.SDK_INT >= 33? Manifest.permission.NEARBY_WIFI_DEVICES : Manifest.permission.ACCESS_FINE_LOCATION; + public static final int ACCESS_WIFI_NETWORKS_PERMISSION_EXPLANATION = Build.VERSION.SDK_INT >= 33? R.string.wifi_permission_needed_desc : R.string.location_permission_needed_desc; private final Context context; @@ -62,7 +66,7 @@ public class TrustedNetworkHelper { } public boolean hasPermissions() { - int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION); + int result = ContextCompat.checkSelfPermission(context, ACCESS_WIFI_NETWORKS_PERMISSION); return (result == PackageManager.PERMISSION_GRANTED); } diff --git a/src/org/kde/kdeconnect/UserInterface/TrustedNetworksActivity.java b/src/org/kde/kdeconnect/UserInterface/TrustedNetworksActivity.java index 13b35acf..3e4ff9e3 100644 --- a/src/org/kde/kdeconnect/UserInterface/TrustedNetworksActivity.java +++ b/src/org/kde/kdeconnect/UserInterface/TrustedNetworksActivity.java @@ -67,10 +67,10 @@ public class TrustedNetworksActivity extends AppCompatActivity { allowAllCheckBox.setChecked(true); // Disable unchecking it new PermissionsAlertDialogFragment.Builder() .setTitle(R.string.location_permission_needed_title) - .setMessage(R.string.location_permission_needed_desc) + .setMessage(TrustedNetworkHelper.ACCESS_WIFI_NETWORKS_PERMISSION_EXPLANATION) .setPositiveButton(R.string.ok) .setNegativeButton(R.string.cancel) - .setPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}) + .setPermissions(new String[]{TrustedNetworkHelper.ACCESS_WIFI_NETWORKS_PERMISSION}) .setRequestCode(0) .create().show(getSupportFragmentManager(), null); }