mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 01:25:07 +02:00
Add some plumbing for the Android 17 local network access permission
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
|
||||
enum SystemPermission {
|
||||
SYSTEM_PERMISSION_STORAGE,
|
||||
SYSTEM_PERMISSION_LOCAL_NETWORK,
|
||||
};
|
||||
|
||||
enum PermissionStatus {
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
<uses-permission-sdk-23 android:name="android.permission.TRANSMIT_IR" />
|
||||
<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
|
||||
<uses-permission-sdk-23 android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.ACCESS_LOCAL_NETWORK" />
|
||||
|
||||
<!-- AndroidX minimum SDK workaround. We don't care if it's broken on older versions. -->
|
||||
<uses-sdk tools:overrideLibrary="androidx.appcompat.resources,androidx.appcompat,androidx.fragment,androidx.drawerlayout,androidx.vectordrawable.animated,androidx.vectordrawable,androidx.viewpager,androidx.loader,androidx.activity,androidx.annotation,androidx.customview,androidx.cursoradapter,androidx.arch,androidx.collection,androidx.core,androidx.versionedparcelable,androidx.interpolator,androidx.lifecycle,androidx.loader,androidx.savedstate,androidx.lifecycle.viewmodel,androidx.lifecycle.livedata,androidx.lifecycle.livedata.core,androidx.arch.core,androidx.documentfile"/>
|
||||
|
||||
+24
-10
@@ -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;
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user