Добавил mpcore

This commit is contained in:
2025-04-06 20:23:24 +03:00
parent ea29c5a3fc
commit 6dd4612a88
24 changed files with 280 additions and 456 deletions
@@ -68,6 +68,8 @@ import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import org.fmod.FMODAudioDevice;
import nfs.mod.mpcore.MultiplayerCore;
/* loaded from: classes.dex */
public class GameActivityMain extends AppCompatActivity implements DrawFrameListener {
private static final String DOWNLOAD_PROPERTIES = "downloadcontent/config.properties";
@@ -310,6 +312,7 @@ public class GameActivityMain extends AppCompatActivity implements DrawFrameList
System.loadLibrary("c++_shared");
System.loadLibrary(Global.NIMBLE_ID);
System.loadLibrary("app");
MultiplayerCore.INSTANCE.loadCore();
Log.d(TAG, "Init EAIO/EAMIO");
EAIO.Startup(this);
StorageDirectory.Startup(this);
@@ -1,112 +1,167 @@
package com.ea.ironmonkey;
import static android.os.Build.VERSION_CODES.R;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.view.KeyEvent;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.os.Build;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
/* loaded from: classes.dex */
public class PermissionsActivity extends Activity {
private static final int PERMISSIONS_REQUEST = 3;
import java.util.ArrayList;
import java.util.List;
protected void onCreate() {
public class PermissionsActivity extends AppCompatActivity {
private static final int SETTINGS_REQUEST_CODE = 100;
private final ActivityResultLauncher<String[]> requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), result -> {
if (areAllPermissionsGranted()) {
initActivity();
} else {
handlePermissionsDenied();
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkPermissions();
}
public void checkPermissions() {
if (ContextCompat.checkSelfPermission(this, "android.permission.WRITE_EXTERNAL_STORAGE") != 0) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, "android.permission.WRITE_EXTERNAL_STORAGE")) {
showPermissionDialog(false);
} else {
requestSecurityPermissions();
}
return;
}
initActivity();
return;
}
@Override // android.app.Activity
public void onRequestPermissionsResult(int i, String[] strArr, int[] iArr) {
if (i != 3) {
return;
}
if (iArr.length == 1 && iArr[0] == 0) {
private void checkPermissions() {
if (areAllPermissionsGranted()) {
initActivity();
} else {
showPermissionDialog(true);
requestPermissions();
}
}
private void showPermissionDialog(final boolean z) {
Context context = this;
runOnUiThread(new Runnable() { // from class: com.ea.ironmonkey.PermissionsActivity.1
@Override // java.lang.Runnable
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("DIALOG");
builder.setPositiveButton("OK", (dialogInterface, i) -> {
if (!z) {
PermissionsActivity.this.requestSecurityPermissions();
return;
}
Intent intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS", Uri.parse("package:" + PermissionsActivity.this.getPackageName()));
private boolean areAllPermissionsGranted() {
for (String permission : getRequiredPermissions()) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
PermissionsActivity.this.startActivityForResult(intent, 3);
});
private String[] getRequiredPermissions() {
List<String> permissions = new ArrayList<>();
builder.setNegativeButton("DIALOG", (dialogInterface, i) -> PermissionsActivity.this.finish());
AlertDialog create = builder.create();
create.setCanceledOnTouchOutside(false);
create.setOnKeyListener((dialogInterface, i, keyEvent) -> {
if (i != 4) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
// Android 9 (Pie) и ниже - нужны оба разрешения
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
} else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
// Android 10 (Q) - только чтение
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ - новые раздельные разрешения для медиа
permissions.add(Manifest.permission.READ_MEDIA_IMAGES);
permissions.add(Manifest.permission.READ_MEDIA_VIDEO);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
// Android 14+ - дополнительно для аудио
permissions.add(Manifest.permission.READ_MEDIA_AUDIO);
}
} else {
// Android 11-12 - только чтение
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
return permissions.toArray(new String[0]);
}
private void requestPermissions() {
String[] permissions = getRequiredPermissions();
boolean shouldShowRationale = false;
for (String permission : permissions) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
shouldShowRationale = true;
break;
}
}
if (shouldShowRationale) {
showPermissionRationaleDialog();
} else {
requestPermissionLauncher.launch(permissions);
}
}
private void showPermissionRationaleDialog() {
new AlertDialog.Builder(this)
.setTitle("Требуются разрешения")
.setMessage("Для корректной работы приложения необходимы разрешения на доступ к хранилищу. Пожалуйста, предоставьте запрашиваемые разрешения.")
.setPositiveButton("OK", (dialog, which) -> requestPermissionLauncher.launch(getRequiredPermissions()))
.setNegativeButton("Отмена", (dialog, which) -> finish())
.setCancelable(false)
.setOnKeyListener((dialog, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
PermissionsActivity.this.finish();
dialogInterface.dismiss();
return true;
});
create.show();
}
});
return false;
})
.show();
}
public void requestSecurityPermissions() {
ActivityCompat.requestPermissions(this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, 3);
ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_EXTERNAL_STORAGE"}, 3);
private void handlePermissionsDenied() {
if (areSomePermissionsPermanentlyDenied()) {
showPermanentlyDeniedDialog();
} else {
Toast.makeText(this, "Разрешения необходимы для работы приложения", Toast.LENGTH_SHORT).show();
finish();
}
}
@Override // android.app.Activity
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
onCreate();
private boolean areSomePermissionsPermanentlyDenied() {
for (String permission : getRequiredPermissions()) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permission) &&
ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
return true;
}
}
return false;
}
@Override // android.app.Activity
public void onActivityResult(int i, int i2, Intent intent) {
super.onActivityResult(i, i2, intent);
if (i == 3) {
if (ContextCompat.checkSelfPermission(this, "android.permission.WRITE_EXTERNAL_STORAGE") == 0
&& ContextCompat.checkSelfPermission(this, "android.permission.READ_EXTERNAL_STORAGE") == 0
) {
private void showPermanentlyDeniedDialog() {
new AlertDialog.Builder(this)
.setTitle("Разрешения отклонены")
.setMessage("Вы навсегда отклонили некоторые разрешения. Чтобы использовать приложение, предоставьте разрешения в настройках.")
.setPositiveButton("Настройки", (dialog, which) -> openAppSettings())
.setNegativeButton("Выход", (dialog, which) -> finish())
.setCancelable(false)
.show();
}
private void openAppSettings() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, SETTINGS_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SETTINGS_REQUEST_CODE) {
if (areAllPermissionsGranted()) {
initActivity();
return;
} else {
showPermissionDialog(true);
return;
handlePermissionsDenied();
}
}
initActivity();
}
private void initActivity() {
@@ -115,6 +170,8 @@ public class PermissionsActivity extends Activity {
finish();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "Ошибка запуска приложения", Toast.LENGTH_SHORT).show();
finish();
}
}
}
}