MainActivity.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package com.sdlpal.sdlpal;
  2. import android.Manifest;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.content.pm.PackageManager;
  6. import android.os.*;
  7. import android.support.annotation.NonNull;
  8. import android.support.v4.app.ActivityCompat;
  9. import android.support.v4.content.ContextCompat;
  10. import android.support.v7.app.AlertDialog;
  11. import android.support.v7.app.AppCompatActivity;
  12. import android.provider.Settings;
  13. import android.net.Uri;
  14. import java.io.*;
  15. public class MainActivity extends AppCompatActivity {
  16. private static final String TAG = "sdlpal-debug";
  17. public static native void setAppPath(String basepath, String datapath, String cachepath);
  18. public static boolean crashed = false;
  19. private final static int REQUEST_FILESYSTEM_ACCESS_CODE = 101;
  20. private final AppCompatActivity mActivity = this;
  21. interface RequestForPermissions {
  22. void request();
  23. }
  24. private void requestForPermissions() {
  25. // Since granting writing permission implicitly grants reading permission, no need to explicitly add reading permission here
  26. ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_FILESYSTEM_ACCESS_CODE);
  27. }
  28. private void alertUser(int id, final RequestForPermissions req) {
  29. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  30. builder.setMessage(id);
  31. builder.setCancelable(false);
  32. builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
  33. @Override
  34. public void onClick(DialogInterface dialogInterface, int i) {
  35. req.request();
  36. }
  37. });
  38. builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
  39. @Override
  40. public void onClick(DialogInterface dialogInterface, int i) {
  41. System.exit(1);
  42. }
  43. });
  44. builder.create().show();
  45. }
  46. @Override
  47. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  48. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  49. switch (requestCode) {
  50. case REQUEST_FILESYSTEM_ACCESS_CODE:
  51. for(int i = 0; i < permissions.length; i++) {
  52. switch(permissions[i]) {
  53. case Manifest.permission.WRITE_EXTERNAL_STORAGE:
  54. if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
  55. StartGame();
  56. break;
  57. }
  58. if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity, permissions[i])) {
  59. alertUser(R.string.toast_requestpermission, new RequestForPermissions() {
  60. @Override
  61. public void request() {
  62. requestForPermissions();
  63. }
  64. });
  65. } else {
  66. alertUser(R.string.toast_grantpermission, new RequestForPermissions() {
  67. @Override
  68. public void request() {
  69. Intent intent = new Intent();
  70. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  71. Uri uri = Uri.fromParts("package", getPackageName(), null);
  72. intent.setData(uri);
  73. startActivity(intent);
  74. }
  75. });
  76. }
  77. }
  78. }
  79. break;
  80. }
  81. }
  82. public void onStart() {
  83. super.onStart();
  84. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED ) {
  85. StartGame();
  86. } else {
  87. requestForPermissions();
  88. }
  89. }
  90. public void StartGame() {
  91. System.loadLibrary("SDL2");
  92. System.loadLibrary("main");
  93. String dataPath = getApplicationContext().getFilesDir().getPath();
  94. String cachePath = getApplicationContext().getCacheDir().getPath();
  95. String sdcardState = Environment.getExternalStorageState();
  96. if (sdcardState.equals(Environment.MEDIA_MOUNTED)){
  97. setAppPath(Environment.getExternalStorageDirectory().getPath() + "/sdlpal/", dataPath, cachePath);
  98. } else {
  99. setAppPath("/sdcard/sdlpal/", dataPath, cachePath);
  100. }
  101. File runningFile = new File(cachePath + "/running");
  102. crashed = runningFile.exists();
  103. Intent intent;
  104. if (SettingsActivity.loadConfigFile() || crashed) {
  105. runningFile.delete();
  106. intent = new Intent(this, SettingsActivity.class);
  107. } else {
  108. intent = new Intent(this, PalActivity.class);
  109. }
  110. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  111. startActivity(intent);
  112. finish();
  113. }
  114. @Override
  115. public void onDestroy() {
  116. super.onDestroy();
  117. }
  118. }