|
|
@ -16,10 +16,19 @@ import android.widget.TextView; |
|
|
|
import android.content.ComponentName; |
|
|
|
import android.content.ComponentName; |
|
|
|
import android.content.pm.PackageManager; |
|
|
|
import android.content.pm.PackageManager; |
|
|
|
import android.content.SharedPreferences; |
|
|
|
import android.content.SharedPreferences; |
|
|
|
|
|
|
|
import java.lang.reflect.Method; |
|
|
|
|
|
|
|
import java.io.FileOutputStream; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
import java.io.InputStream; |
|
|
|
|
|
|
|
import android.content.Context; |
|
|
|
|
|
|
|
import android.util.Log; |
|
|
|
|
|
|
|
|
|
|
|
public class LauncherActivity extends Activity { |
|
|
|
public class LauncherActivity extends Activity { |
|
|
|
|
|
|
|
private static final int PAK_VERSION = 1; |
|
|
|
|
|
|
|
static Boolean isExtracting = false; |
|
|
|
static EditText cmdArgs; |
|
|
|
static EditText cmdArgs; |
|
|
|
static SharedPreferences mPref; |
|
|
|
static SharedPreferences mPref; |
|
|
|
|
|
|
|
private static final String TAG = "MOD_LAUNCHER"; |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
|
super.onCreate(savedInstanceState); |
|
|
|
super.onCreate(savedInstanceState); |
|
|
@ -51,6 +60,7 @@ public class LauncherActivity extends Activity { |
|
|
|
launcher.addView(startButton); |
|
|
|
launcher.addView(startButton); |
|
|
|
setContentView(launcher); |
|
|
|
setContentView(launcher); |
|
|
|
mPref = getSharedPreferences("mod", 0); |
|
|
|
mPref = getSharedPreferences("mod", 0); |
|
|
|
|
|
|
|
extractPAK(this, false); |
|
|
|
cmdArgs.setText(mPref.getString("argv","-dev 3 -log")); |
|
|
|
cmdArgs.setText(mPref.getString("argv","-dev 3 -log")); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -68,6 +78,83 @@ public class LauncherActivity extends Activity { |
|
|
|
// Uncomment to set gamedir here
|
|
|
|
// Uncomment to set gamedir here
|
|
|
|
// intent.putExtra("gamedir", "mod" );
|
|
|
|
// intent.putExtra("gamedir", "mod" );
|
|
|
|
intent.putExtra("gamelibdir", getFilesDir().getAbsolutePath().replace("/files","/lib")); |
|
|
|
intent.putExtra("gamelibdir", getFilesDir().getAbsolutePath().replace("/files","/lib")); |
|
|
|
|
|
|
|
intent.putExtra("pakfile", getFilesDir().getAbsolutePath() + "/extras.pak" ); |
|
|
|
startActivity(intent); |
|
|
|
startActivity(intent); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static int chmod(String path, int mode) { |
|
|
|
|
|
|
|
int ret = -1; |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ret = Runtime.getRuntime().exec("chmod " + Integer.toOctalString(mode) + " " + path).waitFor(); |
|
|
|
|
|
|
|
Log.d(TAG, "chmod " + Integer.toOctalString(mode) + " " + path + ": " + ret ); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch(Exception e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ret = -1; |
|
|
|
|
|
|
|
Log.d(TAG, "chmod: Runtime not worked: " + e.toString() ); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Class fileUtils = Class.forName("android.os.FileUtils"); |
|
|
|
|
|
|
|
Method setPermissions = fileUtils.getMethod("setPermissions", |
|
|
|
|
|
|
|
String.class, int.class, int.class, int.class); |
|
|
|
|
|
|
|
ret = (Integer) setPermissions.invoke(null, path, |
|
|
|
|
|
|
|
mode, -1, -1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch(Exception e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ret = -1; |
|
|
|
|
|
|
|
Log.d(TAG, "chmod: FileUtils not worked: " + e.toString() ); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return ret; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static void extractFile(Context context, String path) { |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
InputStream is = null; |
|
|
|
|
|
|
|
FileOutputStream os = null; |
|
|
|
|
|
|
|
is = context.getAssets().open(path); |
|
|
|
|
|
|
|
File out = new File(context.getFilesDir().getPath()+'/'+path); |
|
|
|
|
|
|
|
out.getParentFile().mkdirs(); |
|
|
|
|
|
|
|
chmod( out.getParent(), 0777 ); |
|
|
|
|
|
|
|
os = new FileOutputStream(out); |
|
|
|
|
|
|
|
byte[] buffer = new byte[1024]; |
|
|
|
|
|
|
|
int length; |
|
|
|
|
|
|
|
while ((length = is.read(buffer)) > 0) { |
|
|
|
|
|
|
|
os.write(buffer, 0, length); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
os.close(); |
|
|
|
|
|
|
|
is.close(); |
|
|
|
|
|
|
|
chmod( context.getFilesDir().getPath()+'/'+path, 0777 ); |
|
|
|
|
|
|
|
} catch( Exception e ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Log.e( TAG, "Failed to extract file:" + e.toString() ); |
|
|
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void extractPAK(Context context, Boolean force) { |
|
|
|
|
|
|
|
if(isExtracting) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
isExtracting = true; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
if( mPref == null ) |
|
|
|
|
|
|
|
mPref = context.getSharedPreferences("mod", 0); |
|
|
|
|
|
|
|
if( mPref.getInt( "pakversion", 0 ) == PAK_VERSION && !force ) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
extractFile(context, "extras.pak"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SharedPreferences.Editor editor = mPref.edit(); |
|
|
|
|
|
|
|
editor.putInt( "pakversion", PAK_VERSION ); |
|
|
|
|
|
|
|
editor.commit(); |
|
|
|
|
|
|
|
editor.apply(); |
|
|
|
|
|
|
|
} catch( Exception e ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Log.e( TAG, "Failed to extract PAK:" + e.toString() ); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
isExtracting = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|