2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-22 01:51:47 +00:00

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()
This commit is contained in:
Albert Vaca Cintora 2023-03-04 15:39:37 +01:00
parent 118d8784fa
commit 3986883bc7
4 changed files with 11 additions and 5 deletions

View File

@ -24,6 +24,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
@ -39,8 +40,8 @@
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

View File

@ -403,6 +403,7 @@
<string name="location_permission_needed_title">Permission required</string>
<string name="location_permission_needed_desc">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.</string>
<string name="wifi_permission_needed_desc">KDE Connect needs permission to know the WiFi network you are connected to.</string>
<string name="clipboard_android_x_incompat">Android 10 has removed clipboard access to all apps. This plugin will be disabled.</string>
<string name="mpris_open_url">Continue playing here</string>
<string name="cant_open_url">Can\'t open URL to continue playing</string>

View File

@ -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 = "<unknown ssid>";
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);
}

View File

@ -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);
}