summaryrefslogtreecommitdiff
path: root/build/android/src
diff options
context:
space:
mode:
authorMaksim <MoNTE48@mail.ua>2018-12-03 00:39:35 +0100
committerParamat <paramat@users.noreply.github.com>2018-12-02 23:39:35 +0000
commitf70f7875e2a2e49f80470832ae97e73f171d6460 (patch)
tree6620b45d2e0dd0b5e910120d6f17bcb471370c46 /build/android/src
parent1b0fd195c614ffa1b04d687e7793fb5bb266c535 (diff)
downloadminetest-f70f7875e2a2e49f80470832ae97e73f171d6460.tar.gz
minetest-f70f7875e2a2e49f80470832ae97e73f171d6460.tar.bz2
minetest-f70f7875e2a2e49f80470832ae97e73f171d6460.zip
Update Android java code (#7820)
Targets SDK 26 as required by the playstore. Fixes screen auto-rotation closing game. Hides on-screen navigation bar if present. Update gradlew. Fix display aspect on 18+/:9 displays (like a Samsung Galaxy S9). Remove small app icons, not required. Fix xml in unpacking activity. Support Android permission: On Android 6.0+ you need to manually give write permission (as required by google). Background during unpacking (just a demo for now). Material Design: no more Android 2 interface. Immersive mode (Android 4.4+ - hide NavBar for fullscreen mode).
Diffstat (limited to 'build/android/src')
-rw-r--r--build/android/src/debug/AndroidManifest.xml3
-rw-r--r--build/android/src/main/AndroidManifest.xml67
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MainActivity.java79
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java381
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java50
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java65
-rw-r--r--build/android/src/main/res/drawable-hdpi/irr_icon.pngbin5490 -> 0 bytes
-rw-r--r--build/android/src/main/res/drawable-ldpi/irr_icon.pngbin2262 -> 0 bytes
-rw-r--r--build/android/src/main/res/drawable-mdpi/irr_icon.pngbin3110 -> 0 bytes
-rw-r--r--build/android/src/main/res/drawable-xhdpi/irr_icon.pngbin7610 -> 0 bytes
-rw-r--r--build/android/src/main/res/drawable/background.pngbin0 -> 83 bytes
-rw-r--r--build/android/src/main/res/drawable/bg.xml4
-rw-r--r--build/android/src/main/res/layout/assetcopy.xml40
-rw-r--r--build/android/src/main/res/mipmap/ic_launcher.pngbin0 -> 5780 bytes
-rw-r--r--build/android/src/main/res/values-v21/styles.xml12
-rw-r--r--build/android/src/main/res/values/strings.xml6
-rw-r--r--build/android/src/main/res/values/styles.xml13
17 files changed, 404 insertions, 316 deletions
diff --git a/build/android/src/debug/AndroidManifest.xml b/build/android/src/debug/AndroidManifest.xml
index a3815b9f8..ee04d1d03 100644
--- a/build/android/src/debug/AndroidManifest.xml
+++ b/build/android/src/debug/AndroidManifest.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
- <uses-permission android:name="android.permission.SET_DEBUG_APP" />
+
+ <uses-permission android:name="android.permission.SET_DEBUG_APP" />
</manifest>
diff --git a/build/android/src/main/AndroidManifest.xml b/build/android/src/main/AndroidManifest.xml
index df218fb33..7f61cda38 100644
--- a/build/android/src/main/AndroidManifest.xml
+++ b/build/android/src/main/AndroidManifest.xml
@@ -1,34 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="net.minetest.minetest"
- android:installLocation="auto">
- <uses-feature android:glEsVersion="0x00010000" android:required="true"/>
+ package="net.minetest.minetest"
+ android:installLocation="auto">
+
+ <uses-feature
+ android:glEsVersion="0x00010000"
+ android:required="true" />
+
<uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <application android:icon="@drawable/irr_icon"
+
+ <application
+ android:allowBackup="true"
+ android:icon="@mipmap/ic_launcher"
+ android:label="${project}"
+ android:resizeableActivity="false">
+
+ <meta-data
+ android:name="android.max_aspect"
+ android:value="2.1" />
+
+ <activity
+ android:name=".MainActivity"
+ android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:label="${project}"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
- android:allowBackup="true">
- <activity android:name=".MtNativeActivity"
- android:label="${project}"
- android:launchMode="singleTask"
- android:configChanges="orientation|keyboard|keyboardHidden|navigation"
- android:screenOrientation="sensorLandscape"
- android:clearTaskOnLaunch="true">
+ android:launchMode="singleTask"
+ android:screenOrientation="sensorLandscape"
+ android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
- <meta-data android:name="android.app.lib_name" android:value="minetest" />
</activity>
- <activity android:name=".MinetestTextEntry"
- android:theme="@style/Theme.Transparent"
- android:excludeFromRecents="true">
- </activity>
- <activity android:name=".MinetestAssetCopy"
- android:theme="@style/Theme.Transparent"
- android:excludeFromRecents="true">
+ <activity
+ android:name=".MtNativeActivity"
+ android:configChanges="orientation|keyboard|keyboardHidden|navigation|screenSize|smallestScreenSize"
+ android:hardwareAccelerated="true"
+ android:launchMode="singleTask"
+ android:screenOrientation="sensorLandscape"
+ android:theme="@style/AppTheme">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ </intent-filter>
+ <meta-data
+ android:name="android.app.lib_name"
+ android:value="minetest" />
</activity>
+ <activity
+ android:name=".MinetestTextEntry"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:theme="@style/Theme.Dialog"
+ android:windowSoftInputMode="stateAlwaysHidden"/>
+ <activity
+ android:name=".MinetestAssetCopy"
+ android:screenOrientation="sensorLandscape"
+ android:theme="@style/AppTheme"/>
</application>
</manifest>
diff --git a/build/android/src/main/java/net.minetest.minetest/MainActivity.java b/build/android/src/main/java/net.minetest.minetest/MainActivity.java
new file mode 100644
index 000000000..1baa71668
--- /dev/null
+++ b/build/android/src/main/java/net.minetest.minetest/MainActivity.java
@@ -0,0 +1,79 @@
+package net.minetest.minetest;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class MainActivity extends Activity {
+
+ private final static int PERMISSIONS = 1;
+ private static final String[] REQUIRED_SDK_PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ checkPermission();
+ } else {
+ next();
+ }
+ }
+
+ protected void checkPermission() {
+ final List<String> missingPermissions = new ArrayList<String>();
+ // check required permission
+ for (final String permission : REQUIRED_SDK_PERMISSIONS) {
+ final int result = ContextCompat.checkSelfPermission(this, permission);
+ if (result != PackageManager.PERMISSION_GRANTED) {
+ missingPermissions.add(permission);
+ }
+ }
+ if (!missingPermissions.isEmpty()) {
+ // request permission
+ final String[] permissions = missingPermissions
+ .toArray(new String[missingPermissions.size()]);
+ ActivityCompat.requestPermissions(this, permissions, PERMISSIONS);
+ } else {
+ final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
+ Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
+ onRequestPermissionsResult(PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
+ grantResults);
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
+ @NonNull int[] grantResults) {
+ switch (requestCode) {
+ case PERMISSIONS:
+ for (int index = 0; index < permissions.length; index++) {
+ if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
+ // permission not granted - toast and exit
+ Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show();
+ finish();
+ return;
+ }
+ }
+ // permission were granted - run
+ next();
+ break;
+ }
+ }
+
+ public void next() {
+ Intent intent = new Intent(this, MtNativeActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ startActivity(intent);
+ }
+}
diff --git a/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java b/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java
index eb92acb63..b570fe61a 100644
--- a/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java
+++ b/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java
@@ -1,416 +1,373 @@
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.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Display;
+import android.view.View;
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
-{
+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.Iterator;
+import java.util.Vector;
+
+public class MinetestAssetCopy extends Activity {
+ ProgressBar m_ProgressBar;
+ TextView m_Filename;
+ copyAssetTask m_AssetCopy;
+
@Override
- public void onCreate(Bundle savedInstanceState)
- {
+ 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);
-
+ m_ProgressBar = findViewById(R.id.progressBar1);
+ m_Filename = 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 prevActivity =
(MinetestAssetCopy) getLastNonConfigurationInstance();
- if(prevActivity!= null) {
+ if (prevActivity != null) {
m_AssetCopy = prevActivity.m_AssetCopy;
- }
- else {
+ } else {
m_AssetCopy = new copyAssetTask();
m_AssetCopy.execute();
}
}
-
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ makeFullScreen();
+ }
+
+ public void makeFullScreen() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ this.getWindow().getDecorView().setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ );
+ }
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (hasFocus) {
+ makeFullScreen();
+ }
+ }
+
/* 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()
- {
+ 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)
- {
+
+ private class copyAssetTask extends AsyncTask<String, Integer, String> {
+ 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;
+
+ 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)
- {
+ while ((len = src.read(buf)) > 0) {
size += len;
}
- }
- catch (IOException e)
- {
+ } 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>();
+ 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 =
+ String baseDir =
Environment.getExternalStorageDirectory().getAbsolutePath()
- + "/";
-
-
+ + "/";
+
+
// prepare temp folder
File TempFolder = new File(baseDir + "Minetest/tmp/");
-
- if (!TempFolder.exists())
- {
+
+ if (!TempFolder.exists()) {
TempFolder.mkdir();
- }
- else {
+ } else {
File[] todel = TempFolder.listFiles();
-
- for(int i=0; i < todel.length; i++)
- {
- Log.v("MinetestAssetCopy","deleting: " + todel[i].getAbsolutePath());
+
+ 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");
+ 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
- {
+
+ 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))
- {
+
+ if (m_asset_size_unknown.contains(filename)) {
File testme = new File(baseDir + "/" + filename);
-
- if(testme.exists())
- {
+
+ if (testme.exists()) {
filesize = testme.length();
}
asset_size_unknown = true;
}
-
+
InputStream src;
- try
- {
+ try {
src = getAssets().open(filename);
} catch (IOException e) {
- Log.e("MinetestAssetCopy","Copying file: " + filename + " FAILED (not in assets)");
+ 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];
+ byte[] buf = new byte[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))
- {
+ if (asset_size_unknown) {
+ if ((len > 0) && (len < buf.length) && (len == filesize)) {
src.close();
continue;
}
-
- if (len == buf.length)
- {
+
+ if (len == buf.length) {
src.close();
long size = getFullSize(filename);
- if ( size == filesize)
- {
+ if (size == filesize) {
continue;
}
src = getAssets().open(filename);
len = src.read(buf, 0, 1024);
}
}
- if (len > 0)
- {
+ if (len > 0) {
int total_filesize = 0;
OutputStream dst;
- try
- {
+ try {
dst = new FileOutputStream(baseDir + "/" + filename);
} catch (IOException e) {
- Log.e("MinetestAssetCopy","Copying file: " + baseDir +
- "/" + filename + " FAILED (couldn't open output file)");
+ 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)
- {
+
+ 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: " +
+ 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: " +
+ } 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)
- {
+ protected void onProgressUpdate(Integer... progress) {
+
+ if (m_copy_started) {
boolean shortened = false;
String todisplay = m_tocopy.get(progress[0]);
m_ProgressBar.setProgress(progress[0]);
m_Filename.setText(todisplay);
- }
- else
- {
+ } else {
boolean shortened = false;
String todisplay = m_Foldername;
String full_text = "scanning " + todisplay + " ...";
m_Filename.setText(full_text);
}
}
-
+
/**
- * check al files and folders in filelist
+ * check all files and folders in filelist
*/
- protected void ProcessFileList()
- {
- String FlashBaseDir =
+ protected void ProcessFileList() {
+ String FlashBaseDir =
Environment.getExternalStorageDirectory().getAbsolutePath();
-
+
Iterator itr = m_filenames.iterator();
-
- while (itr.hasNext())
- {
+
+ while (itr.hasNext()) {
String current_path = (String) itr.next();
String FlashPath = FlashBaseDir + "/" + current_path;
-
- if (isAssetFolder(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: " +
+ if (!current_folder.exists()) {
+ if (!current_folder.mkdirs()) {
+ Log.e("MinetestAssetCopy", "\t failed create folder: " +
FlashPath);
- }
- else
- {
- Log.v("MinetestAssetCopy","\t created folder: " +
+ } 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
- {
+
+ if (testme.exists()) {
+ try {
AssetFileDescriptor fd = getAssets().openFd(current_path);
- asset_filesize = fd.getLength();
+ asset_filesize = fd.getLength();
fd.close();
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
refresh = true;
m_asset_size_unknown.add(current_path);
- Log.e("MinetestAssetCopy","Failed to open asset file \"" +
+ Log.e("MinetestAssetCopy", "Failed to open asset file \"" +
FlashPath + "\" for size check");
}
-
+
stored_filesize = testme.length();
-
- if (asset_filesize == stored_filesize)
- {
+
+ if (asset_filesize == stored_filesize) {
refresh = false;
}
-
+
}
-
- if (refresh)
- {
+
+ if (refresh) {
m_tocopy.add(current_path);
}
}
}
-
+
/**
* read list of folders prepared on package build
*/
- protected void BuildFolderList()
- {
- try
- {
+ protected void BuildFolderList() {
+ try {
InputStream is = getAssets().open("index.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-
+
String line = reader.readLine();
- while (line != null)
- {
+ while (line != null) {
m_foldernames.add(line);
line = reader.readLine();
}
is.close();
- } catch (IOException e1)
- {
- Log.e("MinetestAssetCopy","Error on processing index.txt");
+ } 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()
- {
+ protected void BuildFileList() {
long entrycount = 0;
- try
- {
+ try {
InputStream is = getAssets().open("filelist.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-
+
String line = reader.readLine();
- while (line != null)
- {
+ while (line != null) {
m_filenames.add(line);
line = reader.readLine();
- entrycount ++;
+ entrycount++;
}
is.close();
- }
- catch (IOException e1)
- {
- Log.e("MinetestAssetCopy","Error on processing filelist.txt");
+ } catch (IOException e1) {
+ Log.e("MinetestAssetCopy", "Error on processing filelist.txt");
e1.printStackTrace();
}
}
-
- protected void onPostExecute (String result)
- {
+
+ protected void onPostExecute(String result) {
finish();
}
-
- protected boolean isAssetFolder(String path)
- {
+
+ 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/main/java/net.minetest.minetest/MinetestTextEntry.java b/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java
index 68dc73274..4cd899025 100644
--- a/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java
+++ b/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java
@@ -6,63 +6,59 @@ 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 {
+ private final int MultiLineTextInput = 1;
+ private final int SingleLineTextInput = 2;
+ private final int SingleLinePasswordInput = 3;
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");
-
+ 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 |
+ mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
- }
- else {
+ } 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()); }
- });
+ 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){
+ if (KeyCode == KeyEvent.KEYCODE_ENTER) {
pushResult(mTextInputWidget.getText().toString());
return true;
@@ -70,19 +66,19 @@ public class MinetestTextEntry extends Activity {
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);
+ setResult(Activity.RESULT_OK, resultData);
mTextInputDialog.dismiss();
finish();
}
-
+
public void cancelDialog() {
setResult(Activity.RESULT_CANCELED);
mTextInputDialog.dismiss();
diff --git a/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java b/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java
index dd611158f..f76634c20 100644
--- a/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java
+++ b/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java
@@ -2,23 +2,55 @@ package net.minetest.minetest;
import android.app.NativeActivity;
import android.content.Intent;
+import android.os.Build;
import android.os.Bundle;
-import android.util.Log;
+import android.view.View;
import android.view.WindowManager;
public class MtNativeActivity extends NativeActivity {
+
+ static {
+ System.loadLibrary("openal");
+ System.loadLibrary("ogg");
+ System.loadLibrary("vorbis");
+ System.loadLibrary("gmp");
+ System.loadLibrary("iconv");
+ System.loadLibrary("minetest");
+ }
+
+ private int m_MessagReturnCode;
+ private String m_MessageReturnValue;
+
+ public static native void putMessageBoxResult(String text);
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
m_MessagReturnCode = -1;
m_MessageReturnValue = "";
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ makeFullScreen();
+ }
+ public void makeFullScreen() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ this.getWindow().getDecorView().setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ );
+ }
}
@Override
- public void onDestroy() {
- super.onDestroy();
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (hasFocus) {
+ makeFullScreen();
+ }
}
public void copyAssets() {
@@ -27,7 +59,7 @@ public class MtNativeActivity extends NativeActivity {
}
public void showDialog(String acceptButton, String hint, String current,
- int editType) {
+ int editType) {
Intent intent = new Intent(this, MinetestTextEntry.class);
Bundle params = new Bundle();
@@ -38,11 +70,9 @@ public class MtNativeActivity extends NativeActivity {
intent.putExtras(params);
startActivityForResult(intent, 101);
m_MessageReturnValue = "";
- m_MessagReturnCode = -1;
+ m_MessagReturnCode = -1;
}
- public static native void putMessageBoxResult(String text);
-
/* ugly code to workaround putMessageBoxResult not beeing found */
public int getDialogState() {
return m_MessagReturnCode;
@@ -67,32 +97,15 @@ public class MtNativeActivity extends NativeActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode,
- Intent data) {
+ Intent data) {
if (requestCode == 101) {
if (resultCode == RESULT_OK) {
String text = data.getStringExtra("text");
m_MessagReturnCode = 0;
m_MessageReturnValue = text;
- }
- else {
+ } else {
m_MessagReturnCode = 1;
}
}
}
-
- static {
- System.loadLibrary("openal");
- System.loadLibrary("ogg");
- System.loadLibrary("vorbis");
- System.loadLibrary("gmp");
- System.loadLibrary("iconv");
-
- // We don't have to load libminetest.so ourselves,
- // but if we do, we get nicer logcat errors when
- // loading fails.
- System.loadLibrary("minetest");
- }
-
- private int m_MessagReturnCode;
- private String m_MessageReturnValue;
}
diff --git a/build/android/src/main/res/drawable-hdpi/irr_icon.png b/build/android/src/main/res/drawable-hdpi/irr_icon.png
deleted file mode 100644
index 0b6861a0d..000000000
--- a/build/android/src/main/res/drawable-hdpi/irr_icon.png
+++ /dev/null
Binary files differ
diff --git a/build/android/src/main/res/drawable-ldpi/irr_icon.png b/build/android/src/main/res/drawable-ldpi/irr_icon.png
deleted file mode 100644
index b8c5d0177..000000000
--- a/build/android/src/main/res/drawable-ldpi/irr_icon.png
+++ /dev/null
Binary files differ
diff --git a/build/android/src/main/res/drawable-mdpi/irr_icon.png b/build/android/src/main/res/drawable-mdpi/irr_icon.png
deleted file mode 100644
index 951a7f8c1..000000000
--- a/build/android/src/main/res/drawable-mdpi/irr_icon.png
+++ /dev/null
Binary files differ
diff --git a/build/android/src/main/res/drawable-xhdpi/irr_icon.png b/build/android/src/main/res/drawable-xhdpi/irr_icon.png
deleted file mode 100644
index 2ec528ef7..000000000
--- a/build/android/src/main/res/drawable-xhdpi/irr_icon.png
+++ /dev/null
Binary files differ
diff --git a/build/android/src/main/res/drawable/background.png b/build/android/src/main/res/drawable/background.png
new file mode 100644
index 000000000..43bd6089e
--- /dev/null
+++ b/build/android/src/main/res/drawable/background.png
Binary files differ
diff --git a/build/android/src/main/res/drawable/bg.xml b/build/android/src/main/res/drawable/bg.xml
new file mode 100644
index 000000000..c76ec372d
--- /dev/null
+++ b/build/android/src/main/res/drawable/bg.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/background"
+ android:tileMode="repeat" /> \ No newline at end of file
diff --git a/build/android/src/main/res/layout/assetcopy.xml b/build/android/src/main/res/layout/assetcopy.xml
index 1fcfffd65..b3da2f027 100644
--- a/build/android/src/main/res/layout/assetcopy.xml
+++ b/build/android/src/main/res/layout/assetcopy.xml
@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/activity_main"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
- <ProgressBar
- android:id="@+id/progressBar1"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical" />
+ <ProgressBar
+ android:id="@+id/progressBar1"
+ style="?android:attr/progressBarStyleHorizontal"
+ android:layout_width="match_parent"
+ android:layout_height="30dp"
+ android:layout_centerInParent="true"
+ android:layout_marginLeft="90dp"
+ android:layout_marginRight="90dp" />
- <TextView
- android:id="@+id/textView1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:ellipsize="middle"
- android:singleLine="true"
- android:layout_gravity="center_horizontal"
- android:text="@string/preparing_media"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ <TextView
+ android:id="@+id/textView1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/progressBar1"
+ android:layout_centerInParent="true"
+ android:text="@string/preparing_media" />
-</LinearLayout>
+</RelativeLayout>
diff --git a/build/android/src/main/res/mipmap/ic_launcher.png b/build/android/src/main/res/mipmap/ic_launcher.png
new file mode 100644
index 000000000..88a83782c
--- /dev/null
+++ b/build/android/src/main/res/mipmap/ic_launcher.png
Binary files differ
diff --git a/build/android/src/main/res/values-v21/styles.xml b/build/android/src/main/res/values-v21/styles.xml
new file mode 100644
index 000000000..efd09d274
--- /dev/null
+++ b/build/android/src/main/res/values-v21/styles.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <style name="AppTheme" parent="@android:style/android:Theme.Material.Light.NoActionBar.Fullscreen">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowAnimationStyle">@null</item>
+ <item name="android:background">@drawable/bg</item>
+ </style>
+
+ <style name="Theme.Dialog" parent="@android:style/Theme.Material.Light.Dialog.NoActionBar"/>
+
+</resources> \ No newline at end of file
diff --git a/build/android/src/main/res/values/strings.xml b/build/android/src/main/res/values/strings.xml
index b407a77c6..a5eaef5d1 100644
--- a/build/android/src/main/res/values/strings.xml
+++ b/build/android/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <string name="preparing_media">Preparing media...</string>
-</resources>
-
+ <string name="preparing_media">Preparing media&#8230;</string>
+ <string name="not_granted">Required permission wasn\'t granted, Minetest can\'t run without it</string>
+</resources> \ No newline at end of file
diff --git a/build/android/src/main/res/values/styles.xml b/build/android/src/main/res/values/styles.xml
index 25b8df5a3..8b52472a5 100644
--- a/build/android/src/main/res/values/styles.xml
+++ b/build/android/src/main/res/values/styles.xml
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <style name="Theme.Transparent" parent="android:Theme">
- <item name="android:windowIsTranslucent">true</item>
- <item name="android:windowBackground">@android:color/transparent</item>
- <item name="android:windowContentOverlay">@null</item>
+
+ <style name="AppTheme" parent="@android:style/android:Theme.Holo.Light.NoActionBar.Fullscreen">
<item name="android:windowNoTitle">true</item>
- <item name="android:windowIsFloating">true</item>
- <item name="android:backgroundDimEnabled">false</item>
+ <item name="android:windowAnimationStyle">@null</item>
+ <item name="android:background">@drawable/bg</item>
</style>
+
+ <style name="Theme.Dialog" parent="@android:style/android:Theme.Holo.Light.Dialog.NoActionBar"/>
+
</resources> \ No newline at end of file