diff --git a/Common/System/System.h b/Common/System/System.h
index 57c118dc8c..a1a10d9dd9 100644
--- a/Common/System/System.h
+++ b/Common/System/System.h
@@ -18,6 +18,7 @@
enum SystemPermission {
SYSTEM_PERMISSION_STORAGE,
+ SYSTEM_PERMISSION_LOCAL_NETWORK,
};
enum PermissionStatus {
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 5ffcdaab7f..849c5856d3 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -31,6 +31,7 @@
+
diff --git a/android/jni/app-android.cpp b/android/jni/app-android.cpp
index 902c04e9f9..3315bb6be4 100644
--- a/android/jni/app-android.cpp
+++ b/android/jni/app-android.cpp
@@ -1246,6 +1246,9 @@ void System_AskForPermission(SystemPermission permission) {
case SYSTEM_PERMISSION_STORAGE:
PushCommand("ask_permission", "storage");
break;
+ case SYSTEM_PERMISSION_LOCAL_NETWORK:
+ PushCommand("ask_permission", "local_network");
+ break;
}
}
@@ -1450,18 +1453,29 @@ extern "C" void JNICALL Java_org_ppsspp_ppsspp_NativeApp_sendMessageFromJava(JNI
if (msg == "moga") {
mogaVersion = prm;
} else if (msg == "permission_pending") {
- INFO_LOG(Log::System, "STORAGE PERMISSION: PENDING");
- // TODO: Add support for other permissions
- permissions[SYSTEM_PERMISSION_STORAGE] = PERMISSION_STATUS_PENDING;
- // Don't need to send along, nothing else is listening.
+ if (prm == "storage") {
+ INFO_LOG(Log::System, "STORAGE PERMISSION: PENDING");
+ permissions[SYSTEM_PERMISSION_STORAGE] = PERMISSION_STATUS_PENDING;
+ } else if (prm == "local_network") {
+ INFO_LOG(Log::System, "LOCAL NETWORK PERMISSION: PENDING");
+ permissions[SYSTEM_PERMISSION_LOCAL_NETWORK] = PERMISSION_STATUS_PENDING;
+ }
} else if (msg == "permission_denied") {
- INFO_LOG(Log::System, "STORAGE PERMISSION: DENIED");
- permissions[SYSTEM_PERMISSION_STORAGE] = PERMISSION_STATUS_DENIED;
- // Don't need to send along, nothing else is listening.
+ if (prm == "storage") {
+ INFO_LOG(Log::System, "STORAGE PERMISSION: DENIED");
+ permissions[SYSTEM_PERMISSION_STORAGE] = PERMISSION_STATUS_DENIED;
+ } else if (prm == "local_network") {
+ INFO_LOG(Log::System, "LOCAL NETWORK PERMISSION: DENIED");
+ permissions[SYSTEM_PERMISSION_LOCAL_NETWORK] = PERMISSION_STATUS_DENIED;
+ }
} else if (msg == "permission_granted") {
- INFO_LOG(Log::System, "STORAGE PERMISSION: GRANTED");
- permissions[SYSTEM_PERMISSION_STORAGE] = PERMISSION_STATUS_GRANTED;
- // Send along.
+ if (prm == "storage") {
+ INFO_LOG(Log::System, "STORAGE PERMISSION: GRANTED");
+ permissions[SYSTEM_PERMISSION_STORAGE] = PERMISSION_STATUS_GRANTED;
+ } else if (prm == "local_network") {
+ INFO_LOG(Log::System, "LOCAL NETWORK PERMISSION: GRANTED");
+ permissions[SYSTEM_PERMISSION_LOCAL_NETWORK] = PERMISSION_STATUS_GRANTED;
+ }
System_PostUIMessage(UIMessage::PERMISSION_GRANTED, prm);
} else if (msg == "sustained_perf_supported") {
sustainedPerfSupported = true;
diff --git a/android/src/org/ppsspp/ppsspp/PpssppActivity.java b/android/src/org/ppsspp/ppsspp/PpssppActivity.java
index 6d9236a665..40652eca41 100644
--- a/android/src/org/ppsspp/ppsspp/PpssppActivity.java
+++ b/android/src/org/ppsspp/ppsspp/PpssppActivity.java
@@ -143,11 +143,15 @@ public class PpssppActivity extends AppCompatActivity implements SensorEventList
private static final String[] permissionsForMicrophone = {
Manifest.permission.RECORD_AUDIO
};
+ private static final String[] permissionsForLocalNetwork = {
+ "android.permission.ACCESS_LOCAL_NETWORK"
+ };
public static final int REQUEST_CODE_STORAGE_PERMISSION = 1;
public static final int REQUEST_CODE_LOCATION_PERMISSION = 2;
public static final int REQUEST_CODE_CAMERA_PERMISSION = 3;
public static final int REQUEST_CODE_MICROPHONE_PERMISSION = 4;
+ public static final int REQUEST_CODE_LOCAL_NETWORK_PERMISSION = 5;
// Once we received a "modern" mouse event, we stop listening to old style mouse
// button events.
@@ -255,6 +259,16 @@ public class PpssppActivity extends AppCompatActivity implements SensorEventList
} else {
NativeApp.sendMessageFromJava("permission_denied", "storage");
}
+
+ if (Build.VERSION.SDK_INT >= 35) {
+ if (this.checkSelfPermission("android.permission.ACCESS_LOCAL_NETWORK") == PackageManager.PERMISSION_GRANTED) {
+ NativeApp.sendMessageFromJava("permission_granted", "local_network");
+ } else {
+ NativeApp.sendMessageFromJava("permission_denied", "local_network");
+ }
+ } else {
+ NativeApp.sendMessageFromJava("permission_granted", "local_network");
+ }
}
}
@@ -292,6 +306,13 @@ public class PpssppActivity extends AppCompatActivity implements SensorEventList
NativeApp.audioRecording_Start();
}
break;
+ case REQUEST_CODE_LOCAL_NETWORK_PERMISSION:
+ if (permissionsGranted(permissions, grantResults)) {
+ NativeApp.sendMessageFromJava("permission_granted", "local_network");
+ } else {
+ NativeApp.sendMessageFromJava("permission_denied", "local_network");
+ }
+ break;
default:
}
}
@@ -1761,6 +1782,17 @@ public class PpssppActivity extends AppCompatActivity implements SensorEventList
NativeApp.sendMessageFromJava("permission_granted", "storage");
}
return true;
+ } else if (command.equals("ask_permission") && params.equals("local_network")) {
+ if (Build.VERSION.SDK_INT >= 35) {
+ if (askForPermissions(permissionsForLocalNetwork, REQUEST_CODE_LOCAL_NETWORK_PERMISSION)) {
+ NativeApp.sendMessageFromJava("permission_pending", "local_network");
+ } else {
+ NativeApp.sendMessageFromJava("permission_granted", "local_network");
+ }
+ } else {
+ NativeApp.sendMessageFromJava("permission_granted", "local_network");
+ }
+ return true;
} else if (command.equals("gps_command")) {
if (params.equals("open")) {
if (!askForPermissions(permissionsForLocation, REQUEST_CODE_LOCATION_PERMISSION)) {