Добавил mpcore
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user