package su.xash.engine; import android.annotation.SuppressLint; import android.content.pm.ActivityInfo; import android.content.res.AssetManager; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings.Secure; import android.util.Log; import android.view.KeyEvent; import android.view.WindowManager; import org.libsdl.app.SDLActivity; import su.xash.engine.util.AndroidBug5497Workaround; import java.util.Arrays; import java.util.List; public class XashActivity extends SDLActivity { private boolean mUseVolumeKeys; private String mPackageName; private static final String TAG = "XashActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { //getWindow().addFlags(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES); getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; } AndroidBug5497Workaround.assistActivity(this); } @Override public void onDestroy() { super.onDestroy(); // Now that we don't exit from native code, we need to exit here, resetting // application state (actually global variables that we don't cleanup on exit) // // When the issue with global variables will be resolved, remove that exit() call System.exit(0); } @Override protected String[] getLibraries() { return new String[]{"SDL2", "xash"}; } @SuppressLint("HardwareIds") private String getAndroidID() { return Secure.getString(getContentResolver(), Secure.ANDROID_ID); } @SuppressLint("ApplySharedPref") private void saveAndroidID(String id) { getSharedPreferences("xash_preferences", MODE_PRIVATE).edit().putString("xash_id", id).commit(); } private String loadAndroidID() { return getSharedPreferences("xash_preferences", MODE_PRIVATE).getString("xash_id", ""); } @Override public String getCallingPackage() { if (mPackageName != null) { return mPackageName; } return super.getCallingPackage(); } private AssetManager getAssets(boolean isEngine) { AssetManager am = null; if (isEngine) { am = getAssets(); } else { try { am = getPackageManager().getResourcesForApplication(getCallingPackage()).getAssets(); } catch (Exception e) { Log.e(TAG, "Unable to load mod assets!"); e.printStackTrace(); } } return am; } private String[] getAssetsList(boolean isEngine, String path) { AssetManager am = getAssets(isEngine); try { return am.list(path); } catch (Exception e) { e.printStackTrace(); } return new String[]{}; } @Override public boolean dispatchKeyEvent(KeyEvent event) { if (SDLActivity.mBrokenLibraries) { return false; } int keyCode = event.getKeyCode(); if (!mUseVolumeKeys) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_CAMERA || keyCode == KeyEvent.KEYCODE_ZOOM_IN || keyCode == KeyEvent.KEYCODE_ZOOM_OUT) { return false; } } return getWindow().superDispatchKeyEvent(event); } // TODO: REMOVE LATER, temporary launchers support? @Override protected String[] getArguments() { String gamedir = getIntent().getStringExtra("gamedir"); if (gamedir == null) gamedir = "valve"; nativeSetenv("XASH3D_GAME", gamedir); String gamelibdir = getIntent().getStringExtra("gamelibdir"); if (gamelibdir != null) nativeSetenv("XASH3D_GAMELIBDIR", gamelibdir); String pakfile = getIntent().getStringExtra("pakfile"); if (pakfile != null) nativeSetenv("XASH3D_EXTRAS_PAK2", pakfile); String basedir = getIntent().getStringExtra("basedir"); if (basedir != null) { nativeSetenv("XASH3D_BASEDIR", basedir); } else { String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/xash"; nativeSetenv("XASH3D_BASEDIR", rootPath); } mUseVolumeKeys = getIntent().getBooleanExtra("usevolume", false); mPackageName = getIntent().getStringExtra("package"); String[] env = getIntent().getStringArrayExtra("env"); if (env != null) { for (int i = 0; i < env.length; i += 2) nativeSetenv(env[i], env[i + 1]); } String argv = getIntent().getStringExtra("argv"); if (argv == null) argv = "-console -log"; return argv.split(" "); } }