Android: Backport changes from stable-0.4
authorLoic Blot <loic.blot@unix-experience.fr>
Sat, 14 Mar 2015 18:59:14 +0000 (19:59 +0100)
committerLoic Blot <loic.blot@unix-experience.fr>
Sat, 14 Mar 2015 18:59:14 +0000 (19:59 +0100)
build/android/Makefile
build/android/src/net/minetest/minetest/MinetestAssetCopy.java [new file with mode: 0644]
build/android/src/net/minetest/minetest/MinetestTextEntry.java [new file with mode: 0644]
build/android/src/net/minetest/minetest/MtNativeActivity.java [new file with mode: 0644]
build/android/src/org/minetest/minetest/MinetestAssetCopy.java [deleted file]
build/android/src/org/minetest/minetest/MinetestTextEntry.java [deleted file]
build/android/src/org/minetest/minetest/MtNativeActivity.java [deleted file]
src/porting_android.cpp

index 4c371afeacc4825e049365b91162fc55a34f50b8..785ba3e7e594638223b9240e8914e291cc48c22f 100644 (file)
@@ -26,7 +26,7 @@ GAMES_TO_COPY = minetest_game
 # Android Version code
 # Increase for each build!
 ################################################################################
-ANDROID_VERSION_CODE = 7
+ANDROID_VERSION_CODE = 10
 
 ################################################################################
 # toolchain config for arm old processors
diff --git a/build/android/src/net/minetest/minetest/MinetestAssetCopy.java b/build/android/src/net/minetest/minetest/MinetestAssetCopy.java
new file mode 100644 (file)
index 0000000..5776e77
--- /dev/null
@@ -0,0 +1,456 @@
+package net.minetest.minetest;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.util.Vector;
+import java.util.Iterator;
+import java.lang.Object;
+
+import android.app.Activity;
+import android.content.res.AssetFileDescriptor;
+
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.view.Display;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.graphics.Rect;
+import android.graphics.Paint;
+import android.text.TextPaint;
+
+public class MinetestAssetCopy extends Activity
+{
+       @Override
+       public void onCreate(Bundle savedInstanceState)
+       {
+               super.onCreate(savedInstanceState);
+               
+               setContentView(R.layout.assetcopy);
+               
+               m_ProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
+               m_Filename = (TextView) findViewById(R.id.textView1);
+               
+               Display display = getWindowManager().getDefaultDisplay();
+               m_ProgressBar.getLayoutParams().width = (int) (display.getWidth() * 0.8);
+               m_ProgressBar.invalidate();
+               
+               /* check if there's already a copy in progress and reuse in case it is*/
+               MinetestAssetCopy prevActivity = 
+                               (MinetestAssetCopy) getLastNonConfigurationInstance();
+               if(prevActivity!= null) {
+                       m_AssetCopy = prevActivity.m_AssetCopy;
+               }
+               else {
+                       m_AssetCopy = new copyAssetTask();
+                       m_AssetCopy.execute();
+               }
+       }
+       
+       /* preserve asset copy background task to prevent restart of copying */
+       /* this way of doing it is not recommended for latest android version */
+       /* but the recommended way isn't available on android 2.x */
+       public Object onRetainNonConfigurationInstance()
+       {
+               return this;
+       }
+       
+       ProgressBar m_ProgressBar;
+       TextView m_Filename;
+       
+       copyAssetTask m_AssetCopy;
+       
+       private class copyAssetTask extends AsyncTask<String, Integer, String>
+       {
+               private long getFullSize(String filename)
+               {
+                       long size = 0;
+                       try {
+                               InputStream src = getAssets().open(filename);
+                               byte[] buf = new byte[4096];
+                               
+                               int len = 0;
+                               while ((len = src.read(buf)) > 0)
+                               {
+                                       size += len;
+                               }
+                       }
+                       catch (IOException e)
+                       {
+                               e.printStackTrace();
+                       }
+                       return size;
+               }
+
+               @Override
+               protected String doInBackground(String... files)
+               {
+                       m_foldernames  = new Vector<String>();
+                       m_filenames    = new Vector<String>();
+                       m_tocopy       = new Vector<String>();
+                       m_asset_size_unknown = new Vector<String>();
+                       String baseDir = 
+                                       Environment.getExternalStorageDirectory().getAbsolutePath()
+                                       + "/";
+                       
+                       
+                       // prepare temp folder
+                       File TempFolder = new File(baseDir + "Minetest/tmp/");
+                       
+                       if (!TempFolder.exists())
+                       {
+                               TempFolder.mkdir();
+                       }
+                       else {
+                               File[] todel = TempFolder.listFiles();
+                               
+                               for(int i=0; i < todel.length; i++)
+                               {
+                                       Log.v("MinetestAssetCopy","deleting: " + todel[i].getAbsolutePath());
+                                       todel[i].delete();
+                               }
+                       }
+                       
+                       // add a .nomedia file
+                       try {
+                               OutputStream dst = new FileOutputStream(baseDir + "Minetest/.nomedia");
+                               dst.close();
+                       } catch (IOException e) {
+                               Log.e("MinetestAssetCopy","Failed to create .nomedia file");
+                               e.printStackTrace();
+                       }
+                       
+                       
+                       // build lists from prepared data
+                       BuildFolderList();
+                       BuildFileList();
+                       
+                       // scan filelist
+                       ProcessFileList();
+                       
+                       // doing work
+                       m_copy_started = true;
+                       m_ProgressBar.setMax(m_tocopy.size());
+                       
+                       for (int i = 0; i < m_tocopy.size(); i++)
+                       {
+                               try
+                               {
+                                       String filename = m_tocopy.get(i);
+                                       publishProgress(i);
+                                       
+                                       boolean asset_size_unknown = false;
+                                       long filesize = -1;
+                                       
+                                       if (m_asset_size_unknown.contains(filename))
+                                       {
+                                               File testme = new File(baseDir + "/" + filename);
+                                               
+                                               if(testme.exists())
+                                               {
+                                                       filesize = testme.length();
+                                               }
+                                               asset_size_unknown = true;
+                                       }
+                                       
+                                       InputStream src;
+                                       try
+                                       {
+                                               src = getAssets().open(filename);
+                                       } catch (IOException e) {
+                                               Log.e("MinetestAssetCopy","Copying file: " + filename + " FAILED (not in assets)");
+                                               e.printStackTrace();
+                                               continue;
+                                       }
+                                       
+                                       // Transfer bytes from in to out
+                                       byte[] buf = new byte[1*1024];
+                                       int len = src.read(buf, 0, 1024);
+                                       
+                                       /* following handling is crazy but we need to deal with    */
+                                       /* compressed assets.Flash chips limited livetime due to   */
+                                       /* write operations, we can't allow large files to destroy */
+                                       /* users flash.                                            */
+                                       if (asset_size_unknown)
+                                       {
+                                               if ( (len > 0) && (len < buf.length) && (len == filesize))
+                                               {
+                                                       src.close();
+                                                       continue;
+                                               }
+                                               
+                                               if (len == buf.length)
+                                               {
+                                                       src.close();
+                                                       long size = getFullSize(filename);
+                                                       if ( size == filesize)
+                                                       {
+                                                               continue;
+                                                       }
+                                                       src = getAssets().open(filename);
+                                                       len = src.read(buf, 0, 1024);
+                                               }
+                                       }
+                                       if (len > 0)
+                                       {
+                                               int total_filesize = 0;
+                                               OutputStream dst;
+                                               try
+                                               {
+                                                       dst = new FileOutputStream(baseDir + "/" + filename);
+                                               } catch (IOException e) {
+                                                       Log.e("MinetestAssetCopy","Copying file: " + baseDir +
+                                                       "/" + filename + " FAILED (couldn't open output file)");
+                                                       e.printStackTrace();
+                                                       src.close();
+                                                       continue;
+                                               }
+                                               dst.write(buf, 0, len);
+                                               total_filesize += len;
+                                               
+                                               while ((len = src.read(buf)) > 0)
+                                               {
+                                                       dst.write(buf, 0, len);
+                                                       total_filesize += len;
+                                               }
+                                               
+                                               dst.close();
+                                               Log.v("MinetestAssetCopy","Copied file: " +
+                                                                       m_tocopy.get(i) + " (" + total_filesize +
+                                                                       " bytes)");
+                                       }
+                                       else if (len < 0)
+                                       {
+                                               Log.e("MinetestAssetCopy","Copying file: " +
+                                                               m_tocopy.get(i) + " failed, size < 0");
+                                       }
+                                       src.close();
+                               } 
+                               catch (IOException e)
+                               {
+                                       Log.e("MinetestAssetCopy","Copying file: " +
+                                                       m_tocopy.get(i) + " failed");
+                                       e.printStackTrace();
+                               }
+                       }
+                       return "";
+               }
+               
+               
+               /**
+                * update progress bar
+                */
+               protected void onProgressUpdate(Integer... progress)
+               {
+                       
+                       if (m_copy_started)
+                       {
+                               boolean shortened = false;
+                               String todisplay = m_tocopy.get(progress[0]);
+                               m_ProgressBar.setProgress(progress[0]);
+                               
+                               // make sure our text doesn't exceed our layout width
+                               Rect bounds = new Rect();
+                               Paint textPaint = m_Filename.getPaint();
+                               textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds);
+                               
+                               while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) {
+                                       if (todisplay.length() < 2) {
+                                               break;
+                                       }
+                                       todisplay = todisplay.substring(1);
+                                       textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds);
+                                       shortened = true;
+                               }
+                               
+                               if (! shortened) {
+                                       m_Filename.setText(todisplay);
+                               }
+                               else {
+                                       m_Filename.setText(".." + todisplay);
+                               }
+                       }
+                       else
+                       {
+                               boolean shortened = false;
+                               String todisplay = m_Foldername;
+                               String full_text = "scanning " + todisplay + " ...";
+                               // make sure our text doesn't exceed our layout width
+                               Rect bounds = new Rect();
+                               Paint textPaint = m_Filename.getPaint();
+                               textPaint.getTextBounds(full_text, 0, full_text.length(), bounds);
+                               
+                               while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) {
+                                       if (todisplay.length() < 2) {
+                                               break;
+                                       }
+                                       todisplay = todisplay.substring(1);
+                                       full_text = "scanning " + todisplay + " ...";
+                                       textPaint.getTextBounds(full_text, 0, full_text.length(), bounds);
+                                       shortened = true;
+                               }
+                               
+                               if (! shortened) {
+                                       m_Filename.setText(full_text);
+                               }
+                               else {
+                                       m_Filename.setText("scanning .." + todisplay + " ...");
+                               }
+                       }
+               }
+               
+               /**
+                * check al files and folders in filelist
+                */
+               protected void ProcessFileList()
+               {
+                       String FlashBaseDir = 
+                                       Environment.getExternalStorageDirectory().getAbsolutePath();
+                       
+                       Iterator itr = m_filenames.iterator();
+                       
+                       while (itr.hasNext())
+                       {
+                               String current_path = (String) itr.next();
+                               String FlashPath = FlashBaseDir + "/" + current_path;
+                               
+                               if (isAssetFolder(current_path))
+                               {
+                                       /* store information and update gui */
+                                       m_Foldername = current_path;
+                                       publishProgress(0);
+                                       
+                                       /* open file in order to check if it's a folder */
+                                       File current_folder = new File(FlashPath);
+                                       if (!current_folder.exists())
+                                        {
+                                               if (!current_folder.mkdirs())
+                                               {
+                                                       Log.e("MinetestAssetCopy","\t failed create folder: " +
+                                                                       FlashPath);
+                                               }
+                                               else
+                                               {
+                                                       Log.v("MinetestAssetCopy","\t created folder: " +
+                                                                       FlashPath);
+                                               }
+                                       }
+                                       
+                                       continue;
+                               }
+                               
+                               /* if it's not a folder it's most likely a file */
+                               boolean refresh = true;
+                               
+                               File testme = new File(FlashPath);
+                               
+                               long asset_filesize = -1;
+                               long stored_filesize = -1;
+                               
+                               if (testme.exists())
+                               {
+                                       try
+                                       {
+                                               AssetFileDescriptor fd = getAssets().openFd(current_path);
+                                               asset_filesize         = fd.getLength();
+                                               fd.close();
+                                       } 
+                                       catch (IOException e)
+                                       {
+                                               refresh = true;
+                                               m_asset_size_unknown.add(current_path);
+                                               Log.e("MinetestAssetCopy","Failed to open asset file \"" +
+                                                               FlashPath + "\" for size check");
+                                       }
+                                       
+                                       stored_filesize = testme.length();
+                                       
+                                       if (asset_filesize == stored_filesize)
+                                       {
+                                               refresh = false;
+                                       }
+                                       
+                               }
+                               
+                               if (refresh)
+                               {
+                                       m_tocopy.add(current_path);
+                               }
+                       }
+               }
+               
+               /**
+                * read list of folders prepared on package build
+                */
+               protected void BuildFolderList()
+               {
+                       try
+                       {
+                               InputStream is = getAssets().open("index.txt");
+                               BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+               
+                               String line = reader.readLine();
+                               while (line != null)
+                               {
+                                       m_foldernames.add(line);
+                                       line = reader.readLine();
+                               }
+                               is.close();
+                       } catch (IOException e1)
+                       {
+                               Log.e("MinetestAssetCopy","Error on processing index.txt");
+                               e1.printStackTrace();
+                       }
+               }
+               
+               /**
+                * read list of asset files prepared on package build
+                */
+               protected void BuildFileList()
+               {
+                       long entrycount = 0;
+                       try
+                       {
+                               InputStream is = getAssets().open("filelist.txt");
+                               BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+               
+                               String line = reader.readLine();
+                               while (line != null)
+                               {
+                                       m_filenames.add(line);
+                                       line = reader.readLine();
+                                       entrycount ++;
+                               }
+                               is.close();
+                       }
+                       catch (IOException e1)
+                       {
+                               Log.e("MinetestAssetCopy","Error on processing filelist.txt");
+                               e1.printStackTrace();
+                       }
+               }
+               
+               protected void onPostExecute (String result)
+               {
+                       finish();
+               }
+               
+               protected boolean isAssetFolder(String path)
+               {
+                       return m_foldernames.contains(path);
+               }
+               
+               boolean m_copy_started = false;
+               String m_Foldername = "media";
+               Vector<String> m_foldernames;
+               Vector<String> m_filenames;
+               Vector<String> m_tocopy;
+               Vector<String> m_asset_size_unknown;
+       }
+}
diff --git a/build/android/src/net/minetest/minetest/MinetestTextEntry.java b/build/android/src/net/minetest/minetest/MinetestTextEntry.java
new file mode 100644 (file)
index 0000000..68dc732
--- /dev/null
@@ -0,0 +1,91 @@
+package net.minetest.minetest;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.InputType;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnKeyListener;
+import android.widget.EditText;
+
+public class MinetestTextEntry extends Activity {
+       public AlertDialog mTextInputDialog;
+       public EditText mTextInputWidget;
+       
+       private final int MultiLineTextInput              = 1;
+       private final int SingleLineTextInput             = 2;
+       private final int SingleLinePasswordInput         = 3;
+       
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               
+               Bundle b = getIntent().getExtras();
+               String acceptButton = b.getString("EnterButton");
+               String hint         = b.getString("hint");
+               String current      = b.getString("current");
+               int    editType     = b.getInt("editType");
+               
+               AlertDialog.Builder builder = new AlertDialog.Builder(this);
+               mTextInputWidget = new EditText(this);
+               mTextInputWidget.setHint(hint);
+               mTextInputWidget.setText(current);
+               mTextInputWidget.setMinWidth(300);
+               if (editType == SingleLinePasswordInput) {
+                       mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT | 
+                                       InputType.TYPE_TEXT_VARIATION_PASSWORD);
+               }
+               else {
+                       mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT);
+               }
+               
+               
+               builder.setView(mTextInputWidget);
+               
+               if (editType == MultiLineTextInput) {
+                       builder.setPositiveButton(acceptButton, new DialogInterface.OnClickListener() {
+                               public void onClick(DialogInterface dialog, int whichButton) 
+                               { pushResult(mTextInputWidget.getText().toString()); }
+                               });
+               }
+               
+               builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
+                       public void onCancel(DialogInterface dialog) {
+                               cancelDialog();
+                       }
+               });
+               
+               mTextInputWidget.setOnKeyListener(new OnKeyListener() {
+                       @Override
+                       public boolean onKey(View view, int KeyCode, KeyEvent event) {
+                               if ( KeyCode == KeyEvent.KEYCODE_ENTER){
+
+                                       pushResult(mTextInputWidget.getText().toString());
+                                       return true;
+                               }
+                               return false;
+                       }
+               });
+               
+               mTextInputDialog = builder.create();
+               mTextInputDialog.show();
+       }
+       
+       public void pushResult(String text) {
+               Intent resultData = new Intent();
+               resultData.putExtra("text", text);
+               setResult(Activity.RESULT_OK,resultData);
+               mTextInputDialog.dismiss();
+               finish();
+       }
+       
+       public void cancelDialog() {
+               setResult(Activity.RESULT_CANCELED);
+               mTextInputDialog.dismiss();
+               finish();
+       }
+}
diff --git a/build/android/src/net/minetest/minetest/MtNativeActivity.java b/build/android/src/net/minetest/minetest/MtNativeActivity.java
new file mode 100644 (file)
index 0000000..2bfcef9
--- /dev/null
@@ -0,0 +1,93 @@
+package net.minetest.minetest;
+
+import android.app.NativeActivity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.WindowManager;
+
+public class MtNativeActivity extends NativeActivity {
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               m_MessagReturnCode = -1;
+               m_MessageReturnValue = "";
+               
+       }
+
+       @Override
+       public void onDestroy() {
+               super.onDestroy();
+       }
+       
+       
+       public void copyAssets() {
+               Intent intent = new Intent(this, MinetestAssetCopy.class);
+               startActivity(intent);
+       }
+       
+       public void showDialog(String acceptButton, String hint, String current,
+                       int editType) {
+               
+               Intent intent = new Intent(this, MinetestTextEntry.class);
+               Bundle params = new Bundle();
+               params.putString("acceptButton", acceptButton);
+               params.putString("hint", hint);
+               params.putString("current", current);
+               params.putInt("editType", editType);
+               intent.putExtras(params);
+               startActivityForResult(intent, 101);
+               m_MessageReturnValue = "";
+               m_MessagReturnCode   = -1;
+       }
+       
+       public static native void putMessageBoxResult(String text);
+       
+       /* ugly code to workaround putMessageBoxResult not beeing found */
+       public int getDialogState() {
+               return m_MessagReturnCode;
+       }
+       
+       public String getDialogValue() {
+               m_MessagReturnCode = -1;
+               return m_MessageReturnValue;
+       }
+       
+       public float getDensity() {
+               return getResources().getDisplayMetrics().density;
+       }
+       
+       public int getDisplayWidth() {
+               return getResources().getDisplayMetrics().widthPixels;
+       }
+       
+       public int getDisplayHeight() {
+               return getResources().getDisplayMetrics().heightPixels;
+       }
+       
+       @Override
+       protected void onActivityResult(int requestCode, int resultCode,
+                       Intent data) {
+               if (requestCode == 101) {
+                       if (resultCode == RESULT_OK) {
+                               String text = data.getStringExtra("text"); 
+                               m_MessagReturnCode = 0;
+                               m_MessageReturnValue = text;
+                       }
+                       else {
+                               m_MessagReturnCode = 1;
+                       }
+               }
+       }
+       
+       static {
+               System.loadLibrary("openal");
+               System.loadLibrary("ogg");
+               System.loadLibrary("vorbis");
+               System.loadLibrary("ssl");
+               System.loadLibrary("crypto");
+       }
+       
+       private int m_MessagReturnCode;
+       private String m_MessageReturnValue;
+}
diff --git a/build/android/src/org/minetest/minetest/MinetestAssetCopy.java b/build/android/src/org/minetest/minetest/MinetestAssetCopy.java
deleted file mode 100644 (file)
index 5776e77..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-package net.minetest.minetest;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.util.Vector;
-import java.util.Iterator;
-import java.lang.Object;
-
-import android.app.Activity;
-import android.content.res.AssetFileDescriptor;
-
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Environment;
-import android.util.Log;
-import android.view.Display;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.graphics.Rect;
-import android.graphics.Paint;
-import android.text.TextPaint;
-
-public class MinetestAssetCopy extends Activity
-{
-       @Override
-       public void onCreate(Bundle savedInstanceState)
-       {
-               super.onCreate(savedInstanceState);
-               
-               setContentView(R.layout.assetcopy);
-               
-               m_ProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
-               m_Filename = (TextView) findViewById(R.id.textView1);
-               
-               Display display = getWindowManager().getDefaultDisplay();
-               m_ProgressBar.getLayoutParams().width = (int) (display.getWidth() * 0.8);
-               m_ProgressBar.invalidate();
-               
-               /* check if there's already a copy in progress and reuse in case it is*/
-               MinetestAssetCopy prevActivity = 
-                               (MinetestAssetCopy) getLastNonConfigurationInstance();
-               if(prevActivity!= null) {
-                       m_AssetCopy = prevActivity.m_AssetCopy;
-               }
-               else {
-                       m_AssetCopy = new copyAssetTask();
-                       m_AssetCopy.execute();
-               }
-       }
-       
-       /* preserve asset copy background task to prevent restart of copying */
-       /* this way of doing it is not recommended for latest android version */
-       /* but the recommended way isn't available on android 2.x */
-       public Object onRetainNonConfigurationInstance()
-       {
-               return this;
-       }
-       
-       ProgressBar m_ProgressBar;
-       TextView m_Filename;
-       
-       copyAssetTask m_AssetCopy;
-       
-       private class copyAssetTask extends AsyncTask<String, Integer, String>
-       {
-               private long getFullSize(String filename)
-               {
-                       long size = 0;
-                       try {
-                               InputStream src = getAssets().open(filename);
-                               byte[] buf = new byte[4096];
-                               
-                               int len = 0;
-                               while ((len = src.read(buf)) > 0)
-                               {
-                                       size += len;
-                               }
-                       }
-                       catch (IOException e)
-                       {
-                               e.printStackTrace();
-                       }
-                       return size;
-               }
-
-               @Override
-               protected String doInBackground(String... files)
-               {
-                       m_foldernames  = new Vector<String>();
-                       m_filenames    = new Vector<String>();
-                       m_tocopy       = new Vector<String>();
-                       m_asset_size_unknown = new Vector<String>();
-                       String baseDir = 
-                                       Environment.getExternalStorageDirectory().getAbsolutePath()
-                                       + "/";
-                       
-                       
-                       // prepare temp folder
-                       File TempFolder = new File(baseDir + "Minetest/tmp/");
-                       
-                       if (!TempFolder.exists())
-                       {
-                               TempFolder.mkdir();
-                       }
-                       else {
-                               File[] todel = TempFolder.listFiles();
-                               
-                               for(int i=0; i < todel.length; i++)
-                               {
-                                       Log.v("MinetestAssetCopy","deleting: " + todel[i].getAbsolutePath());
-                                       todel[i].delete();
-                               }
-                       }
-                       
-                       // add a .nomedia file
-                       try {
-                               OutputStream dst = new FileOutputStream(baseDir + "Minetest/.nomedia");
-                               dst.close();
-                       } catch (IOException e) {
-                               Log.e("MinetestAssetCopy","Failed to create .nomedia file");
-                               e.printStackTrace();
-                       }
-                       
-                       
-                       // build lists from prepared data
-                       BuildFolderList();
-                       BuildFileList();
-                       
-                       // scan filelist
-                       ProcessFileList();
-                       
-                       // doing work
-                       m_copy_started = true;
-                       m_ProgressBar.setMax(m_tocopy.size());
-                       
-                       for (int i = 0; i < m_tocopy.size(); i++)
-                       {
-                               try
-                               {
-                                       String filename = m_tocopy.get(i);
-                                       publishProgress(i);
-                                       
-                                       boolean asset_size_unknown = false;
-                                       long filesize = -1;
-                                       
-                                       if (m_asset_size_unknown.contains(filename))
-                                       {
-                                               File testme = new File(baseDir + "/" + filename);
-                                               
-                                               if(testme.exists())
-                                               {
-                                                       filesize = testme.length();
-                                               }
-                                               asset_size_unknown = true;
-                                       }
-                                       
-                                       InputStream src;
-                                       try
-                                       {
-                                               src = getAssets().open(filename);
-                                       } catch (IOException e) {
-                                               Log.e("MinetestAssetCopy","Copying file: " + filename + " FAILED (not in assets)");
-                                               e.printStackTrace();
-                                               continue;
-                                       }
-                                       
-                                       // Transfer bytes from in to out
-                                       byte[] buf = new byte[1*1024];
-                                       int len = src.read(buf, 0, 1024);
-                                       
-                                       /* following handling is crazy but we need to deal with    */
-                                       /* compressed assets.Flash chips limited livetime due to   */
-                                       /* write operations, we can't allow large files to destroy */
-                                       /* users flash.                                            */
-                                       if (asset_size_unknown)
-                                       {
-                                               if ( (len > 0) && (len < buf.length) && (len == filesize))
-                                               {
-                                                       src.close();
-                                                       continue;
-                                               }
-                                               
-                                               if (len == buf.length)
-                                               {
-                                                       src.close();
-                                                       long size = getFullSize(filename);
-                                                       if ( size == filesize)
-                                                       {
-                                                               continue;
-                                                       }
-                                                       src = getAssets().open(filename);
-                                                       len = src.read(buf, 0, 1024);
-                                               }
-                                       }
-                                       if (len > 0)
-                                       {
-                                               int total_filesize = 0;
-                                               OutputStream dst;
-                                               try
-                                               {
-                                                       dst = new FileOutputStream(baseDir + "/" + filename);
-                                               } catch (IOException e) {
-                                                       Log.e("MinetestAssetCopy","Copying file: " + baseDir +
-                                                       "/" + filename + " FAILED (couldn't open output file)");
-                                                       e.printStackTrace();
-                                                       src.close();
-                                                       continue;
-                                               }
-                                               dst.write(buf, 0, len);
-                                               total_filesize += len;
-                                               
-                                               while ((len = src.read(buf)) > 0)
-                                               {
-                                                       dst.write(buf, 0, len);
-                                                       total_filesize += len;
-                                               }
-                                               
-                                               dst.close();
-                                               Log.v("MinetestAssetCopy","Copied file: " +
-                                                                       m_tocopy.get(i) + " (" + total_filesize +
-                                                                       " bytes)");
-                                       }
-                                       else if (len < 0)
-                                       {
-                                               Log.e("MinetestAssetCopy","Copying file: " +
-                                                               m_tocopy.get(i) + " failed, size < 0");
-                                       }
-                                       src.close();
-                               } 
-                               catch (IOException e)
-                               {
-                                       Log.e("MinetestAssetCopy","Copying file: " +
-                                                       m_tocopy.get(i) + " failed");
-                                       e.printStackTrace();
-                               }
-                       }
-                       return "";
-               }
-               
-               
-               /**
-                * update progress bar
-                */
-               protected void onProgressUpdate(Integer... progress)
-               {
-                       
-                       if (m_copy_started)
-                       {
-                               boolean shortened = false;
-                               String todisplay = m_tocopy.get(progress[0]);
-                               m_ProgressBar.setProgress(progress[0]);
-                               
-                               // make sure our text doesn't exceed our layout width
-                               Rect bounds = new Rect();
-                               Paint textPaint = m_Filename.getPaint();
-                               textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds);
-                               
-                               while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) {
-                                       if (todisplay.length() < 2) {
-                                               break;
-                                       }
-                                       todisplay = todisplay.substring(1);
-                                       textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds);
-                                       shortened = true;
-                               }
-                               
-                               if (! shortened) {
-                                       m_Filename.setText(todisplay);
-                               }
-                               else {
-                                       m_Filename.setText(".." + todisplay);
-                               }
-                       }
-                       else
-                       {
-                               boolean shortened = false;
-                               String todisplay = m_Foldername;
-                               String full_text = "scanning " + todisplay + " ...";
-                               // make sure our text doesn't exceed our layout width
-                               Rect bounds = new Rect();
-                               Paint textPaint = m_Filename.getPaint();
-                               textPaint.getTextBounds(full_text, 0, full_text.length(), bounds);
-                               
-                               while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) {
-                                       if (todisplay.length() < 2) {
-                                               break;
-                                       }
-                                       todisplay = todisplay.substring(1);
-                                       full_text = "scanning " + todisplay + " ...";
-                                       textPaint.getTextBounds(full_text, 0, full_text.length(), bounds);
-                                       shortened = true;
-                               }
-                               
-                               if (! shortened) {
-                                       m_Filename.setText(full_text);
-                               }
-                               else {
-                                       m_Filename.setText("scanning .." + todisplay + " ...");
-                               }
-                       }
-               }
-               
-               /**
-                * check al files and folders in filelist
-                */
-               protected void ProcessFileList()
-               {
-                       String FlashBaseDir = 
-                                       Environment.getExternalStorageDirectory().getAbsolutePath();
-                       
-                       Iterator itr = m_filenames.iterator();
-                       
-                       while (itr.hasNext())
-                       {
-                               String current_path = (String) itr.next();
-                               String FlashPath = FlashBaseDir + "/" + current_path;
-                               
-                               if (isAssetFolder(current_path))
-                               {
-                                       /* store information and update gui */
-                                       m_Foldername = current_path;
-                                       publishProgress(0);
-                                       
-                                       /* open file in order to check if it's a folder */
-                                       File current_folder = new File(FlashPath);
-                                       if (!current_folder.exists())
-                                        {
-                                               if (!current_folder.mkdirs())
-                                               {
-                                                       Log.e("MinetestAssetCopy","\t failed create folder: " +
-                                                                       FlashPath);
-                                               }
-                                               else
-                                               {
-                                                       Log.v("MinetestAssetCopy","\t created folder: " +
-                                                                       FlashPath);
-                                               }
-                                       }
-                                       
-                                       continue;
-                               }
-                               
-                               /* if it's not a folder it's most likely a file */
-                               boolean refresh = true;
-                               
-                               File testme = new File(FlashPath);
-                               
-                               long asset_filesize = -1;
-                               long stored_filesize = -1;
-                               
-                               if (testme.exists())
-                               {
-                                       try
-                                       {
-                                               AssetFileDescriptor fd = getAssets().openFd(current_path);
-                                               asset_filesize         = fd.getLength();
-                                               fd.close();
-                                       } 
-                                       catch (IOException e)
-                                       {
-                                               refresh = true;
-                                               m_asset_size_unknown.add(current_path);
-                                               Log.e("MinetestAssetCopy","Failed to open asset file \"" +
-                                                               FlashPath + "\" for size check");
-                                       }
-                                       
-                                       stored_filesize = testme.length();
-                                       
-                                       if (asset_filesize == stored_filesize)
-                                       {
-                                               refresh = false;
-                                       }
-                                       
-                               }
-                               
-                               if (refresh)
-                               {
-                                       m_tocopy.add(current_path);
-                               }
-                       }
-               }
-               
-               /**
-                * read list of folders prepared on package build
-                */
-               protected void BuildFolderList()
-               {
-                       try
-                       {
-                               InputStream is = getAssets().open("index.txt");
-                               BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-               
-                               String line = reader.readLine();
-                               while (line != null)
-                               {
-                                       m_foldernames.add(line);
-                                       line = reader.readLine();
-                               }
-                               is.close();
-                       } catch (IOException e1)
-                       {
-                               Log.e("MinetestAssetCopy","Error on processing index.txt");
-                               e1.printStackTrace();
-                       }
-               }
-               
-               /**
-                * read list of asset files prepared on package build
-                */
-               protected void BuildFileList()
-               {
-                       long entrycount = 0;
-                       try
-                       {
-                               InputStream is = getAssets().open("filelist.txt");
-                               BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-               
-                               String line = reader.readLine();
-                               while (line != null)
-                               {
-                                       m_filenames.add(line);
-                                       line = reader.readLine();
-                                       entrycount ++;
-                               }
-                               is.close();
-                       }
-                       catch (IOException e1)
-                       {
-                               Log.e("MinetestAssetCopy","Error on processing filelist.txt");
-                               e1.printStackTrace();
-                       }
-               }
-               
-               protected void onPostExecute (String result)
-               {
-                       finish();
-               }
-               
-               protected boolean isAssetFolder(String path)
-               {
-                       return m_foldernames.contains(path);
-               }
-               
-               boolean m_copy_started = false;
-               String m_Foldername = "media";
-               Vector<String> m_foldernames;
-               Vector<String> m_filenames;
-               Vector<String> m_tocopy;
-               Vector<String> m_asset_size_unknown;
-       }
-}
diff --git a/build/android/src/org/minetest/minetest/MinetestTextEntry.java b/build/android/src/org/minetest/minetest/MinetestTextEntry.java
deleted file mode 100644 (file)
index 68dc732..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-package net.minetest.minetest;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.InputType;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnKeyListener;
-import android.widget.EditText;
-
-public class MinetestTextEntry extends Activity {
-       public AlertDialog mTextInputDialog;
-       public EditText mTextInputWidget;
-       
-       private final int MultiLineTextInput              = 1;
-       private final int SingleLineTextInput             = 2;
-       private final int SingleLinePasswordInput         = 3;
-       
-       @Override
-       public void onCreate(Bundle savedInstanceState) {
-               super.onCreate(savedInstanceState);
-               
-               Bundle b = getIntent().getExtras();
-               String acceptButton = b.getString("EnterButton");
-               String hint         = b.getString("hint");
-               String current      = b.getString("current");
-               int    editType     = b.getInt("editType");
-               
-               AlertDialog.Builder builder = new AlertDialog.Builder(this);
-               mTextInputWidget = new EditText(this);
-               mTextInputWidget.setHint(hint);
-               mTextInputWidget.setText(current);
-               mTextInputWidget.setMinWidth(300);
-               if (editType == SingleLinePasswordInput) {
-                       mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT | 
-                                       InputType.TYPE_TEXT_VARIATION_PASSWORD);
-               }
-               else {
-                       mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT);
-               }
-               
-               
-               builder.setView(mTextInputWidget);
-               
-               if (editType == MultiLineTextInput) {
-                       builder.setPositiveButton(acceptButton, new DialogInterface.OnClickListener() {
-                               public void onClick(DialogInterface dialog, int whichButton) 
-                               { pushResult(mTextInputWidget.getText().toString()); }
-                               });
-               }
-               
-               builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
-                       public void onCancel(DialogInterface dialog) {
-                               cancelDialog();
-                       }
-               });
-               
-               mTextInputWidget.setOnKeyListener(new OnKeyListener() {
-                       @Override
-                       public boolean onKey(View view, int KeyCode, KeyEvent event) {
-                               if ( KeyCode == KeyEvent.KEYCODE_ENTER){
-
-                                       pushResult(mTextInputWidget.getText().toString());
-                                       return true;
-                               }
-                               return false;
-                       }
-               });
-               
-               mTextInputDialog = builder.create();
-               mTextInputDialog.show();
-       }
-       
-       public void pushResult(String text) {
-               Intent resultData = new Intent();
-               resultData.putExtra("text", text);
-               setResult(Activity.RESULT_OK,resultData);
-               mTextInputDialog.dismiss();
-               finish();
-       }
-       
-       public void cancelDialog() {
-               setResult(Activity.RESULT_CANCELED);
-               mTextInputDialog.dismiss();
-               finish();
-       }
-}
diff --git a/build/android/src/org/minetest/minetest/MtNativeActivity.java b/build/android/src/org/minetest/minetest/MtNativeActivity.java
deleted file mode 100644 (file)
index 2bfcef9..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-package net.minetest.minetest;
-
-import android.app.NativeActivity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.WindowManager;
-
-public class MtNativeActivity extends NativeActivity {
-       @Override
-       public void onCreate(Bundle savedInstanceState) {
-               super.onCreate(savedInstanceState);
-               m_MessagReturnCode = -1;
-               m_MessageReturnValue = "";
-               
-       }
-
-       @Override
-       public void onDestroy() {
-               super.onDestroy();
-       }
-       
-       
-       public void copyAssets() {
-               Intent intent = new Intent(this, MinetestAssetCopy.class);
-               startActivity(intent);
-       }
-       
-       public void showDialog(String acceptButton, String hint, String current,
-                       int editType) {
-               
-               Intent intent = new Intent(this, MinetestTextEntry.class);
-               Bundle params = new Bundle();
-               params.putString("acceptButton", acceptButton);
-               params.putString("hint", hint);
-               params.putString("current", current);
-               params.putInt("editType", editType);
-               intent.putExtras(params);
-               startActivityForResult(intent, 101);
-               m_MessageReturnValue = "";
-               m_MessagReturnCode   = -1;
-       }
-       
-       public static native void putMessageBoxResult(String text);
-       
-       /* ugly code to workaround putMessageBoxResult not beeing found */
-       public int getDialogState() {
-               return m_MessagReturnCode;
-       }
-       
-       public String getDialogValue() {
-               m_MessagReturnCode = -1;
-               return m_MessageReturnValue;
-       }
-       
-       public float getDensity() {
-               return getResources().getDisplayMetrics().density;
-       }
-       
-       public int getDisplayWidth() {
-               return getResources().getDisplayMetrics().widthPixels;
-       }
-       
-       public int getDisplayHeight() {
-               return getResources().getDisplayMetrics().heightPixels;
-       }
-       
-       @Override
-       protected void onActivityResult(int requestCode, int resultCode,
-                       Intent data) {
-               if (requestCode == 101) {
-                       if (resultCode == RESULT_OK) {
-                               String text = data.getStringExtra("text"); 
-                               m_MessagReturnCode = 0;
-                               m_MessageReturnValue = text;
-                       }
-                       else {
-                               m_MessagReturnCode = 1;
-                       }
-               }
-       }
-       
-       static {
-               System.loadLibrary("openal");
-               System.loadLibrary("ogg");
-               System.loadLibrary("vorbis");
-               System.loadLibrary("ssl");
-               System.loadLibrary("crypto");
-       }
-       
-       private int m_MessagReturnCode;
-       private String m_MessageReturnValue;
-}
index 96c9385a683960b49aba8203c0d2397f009530b7..6871ce465b7cfac9a2c0e16e028e047a80407024 100644 (file)
@@ -71,10 +71,10 @@ void android_main(android_app *app)
 /* TODO this doesn't work as expected, no idea why but there's a workaround   */
 /* for it right now */
 extern "C" {
-       JNIEXPORT void JNICALL Java_org_minetest_MtNativeActivity_putMessageBoxResult(
+       JNIEXPORT void JNICALL Java_net_minetest_MtNativeActivity_putMessageBoxResult(
                        JNIEnv * env, jclass thiz, jstring text)
        {
-               errorstream << "Java_org_minetest_MtNativeActivity_putMessageBoxResult got: "
+               errorstream << "Java_net_minetest_MtNativeActivity_putMessageBoxResult got: "
                                << std::string((const char*)env->GetStringChars(text,0))
                                << std::endl;
        }
@@ -138,7 +138,7 @@ void initAndroid()
                exit(-1);
        }
 
-       nativeActivity = findClass("org/minetest/minetest/MtNativeActivity");
+       nativeActivity = findClass("net/minetest/minetest/MtNativeActivity");
        if (nativeActivity == 0) {
                errorstream <<
                        "porting::initAndroid unable to find java native activity class" <<