From b1d9585438a555720151ba3a1dfb04b4ea248eab Mon Sep 17 00:00:00 2001 From: berkut Date: Sat, 30 Apr 2016 17:03:00 +0300 Subject: [PATCH] Migrate to Gradle build system --- build/android/src/main/AndroidManifest.xml | 54 +++ .../java/mobi/MultiCraft/GameActivity.java | 113 ++++++ .../mobi/MultiCraft/InputDialogActivity.java | 75 ++++ .../java/mobi/MultiCraft/MainActivity.java | 370 ++++++++++++++++++ .../mobi/MultiCraft/PreferencesHelper.java | 40 ++ .../java/mobi/MultiCraft/Transliteration.java | 72 ++++ .../java/mobi/MultiCraft/UnzipService.java | 113 ++++++ .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 17245 bytes .../src/main/res/drawable-xhdpi/update.png | Bin 0 -> 940 bytes .../src/main/res/drawable/background.png | Bin 0 -> 7388 bytes build/android/src/main/res/drawable/bg.xml | 4 + .../main/res/drawable/custom_progress_bar.xml | 14 + build/android/src/main/res/drawable/logo.png | Bin 0 -> 39221 bytes .../src/main/res/layout/activity_main.xml | 44 +++ build/android/src/main/res/layout/dialog.xml | 5 + .../src/main/res/values-ru/strings.xml | 11 + .../src/main/res/values-v21/styles.xml | 10 + build/android/src/main/res/values/strings.xml | 19 + build/android/src/main/res/values/styles.xml | 10 + 19 files changed, 954 insertions(+) create mode 100644 build/android/src/main/AndroidManifest.xml create mode 100644 build/android/src/main/java/mobi/MultiCraft/GameActivity.java create mode 100644 build/android/src/main/java/mobi/MultiCraft/InputDialogActivity.java create mode 100644 build/android/src/main/java/mobi/MultiCraft/MainActivity.java create mode 100644 build/android/src/main/java/mobi/MultiCraft/PreferencesHelper.java create mode 100644 build/android/src/main/java/mobi/MultiCraft/Transliteration.java create mode 100644 build/android/src/main/java/mobi/MultiCraft/UnzipService.java create mode 100644 build/android/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 build/android/src/main/res/drawable-xhdpi/update.png create mode 100644 build/android/src/main/res/drawable/background.png create mode 100644 build/android/src/main/res/drawable/bg.xml create mode 100644 build/android/src/main/res/drawable/custom_progress_bar.xml create mode 100644 build/android/src/main/res/drawable/logo.png create mode 100644 build/android/src/main/res/layout/activity_main.xml create mode 100644 build/android/src/main/res/layout/dialog.xml create mode 100644 build/android/src/main/res/values-ru/strings.xml create mode 100644 build/android/src/main/res/values-v21/styles.xml create mode 100644 build/android/src/main/res/values/strings.xml create mode 100644 build/android/src/main/res/values/styles.xml diff --git a/build/android/src/main/AndroidManifest.xml b/build/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000..751587a4 --- /dev/null +++ b/build/android/src/main/AndroidManifest.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/android/src/main/java/mobi/MultiCraft/GameActivity.java b/build/android/src/main/java/mobi/MultiCraft/GameActivity.java new file mode 100644 index 00000000..ddd4c7f9 --- /dev/null +++ b/build/android/src/main/java/mobi/MultiCraft/GameActivity.java @@ -0,0 +1,113 @@ +package mobi.MultiCraft; + +import android.app.NativeActivity; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.view.WindowManager; + +public class GameActivity extends NativeActivity { + static { + System.loadLibrary("gmp"); + System.loadLibrary("multicraft"); + } + + private int messageReturnCode; + private String 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); +// startAd(this, true); + messageReturnCode = -1; + messageReturnValue = ""; + makeFullScreen(); + } + + + public void makeFullScreen() { + if (Build.VERSION.SDK_INT >= 19) { + this.getWindow().getDecorView() + .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + } + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) { + makeFullScreen(); + } + } + + @Override + protected void onRestart() { + super.onRestart(); +// startAd(this, false); + } + + @Override + protected void onResume() { + super.onResume(); + makeFullScreen(); + } + + @Override + protected void onStop() { + super.onStop(); +// stopAd(); + } + + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == 101) { + if (resultCode == RESULT_OK) { + String text = data.getStringExtra("text"); + messageReturnCode = 0; + messageReturnValue = text; + } else { + messageReturnCode = 1; + } + } + } + + public void copyAssets() { + } + + public void showDialog(String acceptButton, String hint, String current, int editType) { + Intent intent = new Intent(this, InputDialogActivity.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); + messageReturnValue = ""; + messageReturnCode = -1; + } + + public int getDialogState() { + return messageReturnCode; + } + + public String getDialogValue() { + messageReturnCode = -1; + return messageReturnValue; + } + + public float getDensity() { + return getResources().getDisplayMetrics().density; + } + + public int getDisplayWidth() { + return getResources().getDisplayMetrics().widthPixels; + } + + public int getDisplayHeight() { + return getResources().getDisplayMetrics().heightPixels; + } +} \ No newline at end of file diff --git a/build/android/src/main/java/mobi/MultiCraft/InputDialogActivity.java b/build/android/src/main/java/mobi/MultiCraft/InputDialogActivity.java new file mode 100644 index 00000000..823dddd3 --- /dev/null +++ b/build/android/src/main/java/mobi/MultiCraft/InputDialogActivity.java @@ -0,0 +1,75 @@ +package mobi.MultiCraft; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.text.InputType; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnKeyListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + + +public class InputDialogActivity extends Activity { + private AlertDialog alertDialog; + + @SuppressLint("InflateParams") + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle b = getIntent().getExtras(); + int editType = b.getInt("editType"); + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + LayoutInflater inflater = this.getLayoutInflater(); + View dialogView = inflater.inflate(R.layout.dialog, null); + builder.setView(dialogView); + final EditText editText = (EditText) dialogView.findViewById(R.id.editText); + final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); + if (editType == 3) { + editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } else { + editText.setInputType(InputType.TYPE_CLASS_TEXT); + } + editText.setOnKeyListener(new OnKeyListener() { + @Override + public boolean onKey(View view, int KeyCode, KeyEvent event) { + if (KeyCode == KeyEvent.KEYCODE_ENTER) { + imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); + pushResult(editText.getText().toString()); + return true; + } + return false; + } + }); + alertDialog = builder.create(); + alertDialog.show(); + alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + pushResult(editText.getText().toString()); + setResult(Activity.RESULT_CANCELED); + alertDialog.dismiss(); + finish(); + } + }); + } + + public void pushResult(String text) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && text.matches(".*[А-я].*")) { + text = Transliteration.toLatin(text); + } + Intent resultData = new Intent(); + resultData.putExtra("text", text); + setResult(Activity.RESULT_OK, resultData); + alertDialog.dismiss(); + finish(); + } +} \ No newline at end of file diff --git a/build/android/src/main/java/mobi/MultiCraft/MainActivity.java b/build/android/src/main/java/mobi/MultiCraft/MainActivity.java new file mode 100644 index 00000000..6dee623b --- /dev/null +++ b/build/android/src/main/java/mobi/MultiCraft/MainActivity.java @@ -0,0 +1,370 @@ +package mobi.MultiCraft; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.StatFs; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.util.Log; +import android.view.View; +import android.view.WindowManager; +import android.widget.ProgressBar; +import android.widget.Toast; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import static mobi.MultiCraft.PreferencesHelper.TAG_BUILD_NUMBER; +import static mobi.MultiCraft.PreferencesHelper.TAG_SHORTCUT_CREATED; +import static mobi.MultiCraft.PreferencesHelper.getBuildNumber; +import static mobi.MultiCraft.PreferencesHelper.isCreateShortcut; +import static mobi.MultiCraft.PreferencesHelper.loadSettings; +import static mobi.MultiCraft.PreferencesHelper.saveSettings; + +public class MainActivity extends Activity { + public final static String TAG = "Error"; + public final static String CREATE_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT"; + public final static String FILES = Environment.getExternalStorageDirectory() + "/Files.zip"; + public final static String WORLDS = Environment.getExternalStorageDirectory() + "/worlds.zip"; + public final static String GAMES = Environment.getExternalStorageDirectory() + "/games.zip"; + public final static String NOMEDIA = ".nomedia"; + private final static int REQUEST_STORAGE = 0; + private ProgressDialog mProgressDialog; + private String dataFolder = "/Android/data/mobi.MultiCraft/files/"; + private String unzipLocation = Environment.getExternalStorageDirectory() + dataFolder; + private ProgressBar mProgressBar; + private Utilities util; + private BroadcastReceiver myReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + int progress = intent.getIntExtra(UnzipService.ACTION_PROGRESS, 0); + if (progress >= 0) { + mProgressBar.setVisibility(View.VISIBLE); + mProgressBar.setProgress(progress); + } else { + util.createNomedia(); + runGame(); + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + loadSettings(this); + IntentFilter filter = new IntentFilter(UnzipService.ACTION_UPDATE); + registerReceiver(myReceiver, filter); + if (!isTaskRoot()) { + finish(); + return; + } + + + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + requestStoragePermission(); + } else { + init(); + } + } + + public void makeFullScreen() { + if (Build.VERSION.SDK_INT >= 19) { + this.getWindow().getDecorView() + .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + } + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) { + makeFullScreen(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + dismissProgressDialog(); + unregisterReceiver(myReceiver); + } + + @Override + protected void onResume() { + super.onResume(); + makeFullScreen(); + } + + private void addShortcut() { + saveSettings(TAG_SHORTCUT_CREATED, false); + Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class); + shortcutIntent.setAction(Intent.ACTION_MAIN); + Intent addIntent = new Intent(); + addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); + addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); + addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, + Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher)); + addIntent.setAction(CREATE_SHORTCUT); + getApplicationContext().sendBroadcast(addIntent); + } + + @SuppressWarnings("deprecation") + public void init() { + setContentView(R.layout.activity_main); + if (isCreateShortcut()) + addShortcut(); + mProgressBar = (ProgressBar) findViewById(R.id.PB1); + Drawable draw; + draw = getResources().getDrawable(R.drawable.custom_progress_bar); + mProgressBar.setProgressDrawable(draw); + util = new Utilities(); + util.createDataFolder(); + util.checkVersion(); + } + + private void requestPermissionAfterExplain() { + Toast.makeText(this, R.string.explain, Toast.LENGTH_LONG).show(); + ActivityCompat.requestPermissions(MainActivity.this, + new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE); + } + + private void requestStoragePermission() { + if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + requestPermissionAfterExplain(); + } else { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, + REQUEST_STORAGE); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults) { + + // Check if the only required permission has been granted + if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + init(); + } else { + requestStoragePermission(); + } + } + + private void showSpinnerDialog(int message) { + if (mProgressDialog == null) { + mProgressDialog = new ProgressDialog(MainActivity.this); + mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + mProgressDialog.setCancelable(false); + } + mProgressDialog.setMessage(getString(message)); + mProgressDialog.show(); + } + + private void dismissProgressDialog() { + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + } + } + + public void runGame() { + util.deleteZip(FILES); + util.deleteZip(WORLDS); + util.deleteZip(GAMES); + Intent intent = new Intent(MainActivity.this, GameActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + } + + private void startUnzipService(String[] file) throws IOException { + // Start MyIntentService + Intent intentMyIntentService = new Intent(this, UnzipService.class); + intentMyIntentService.putExtra(UnzipService.EXTRA_KEY_IN_FILE, file); + intentMyIntentService.putExtra(UnzipService.EXTRA_KEY_IN_LOCATION, unzipLocation); + startService(intentMyIntentService); + + } + + private class DeleteTask extends AsyncTask { + String location; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + showSpinnerDialog(R.string.rm_old); + } + + @Override + protected Void doInBackground(String... params) { + location = params[0]; + for (String p : params) { + util.deleteFiles(p); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + if (isFinishing()) + return; + dismissProgressDialog(); + if (unzipLocation.equals(location)) { + new CopyZip().execute(FILES, WORLDS, GAMES); + } else { + new CopyZip().execute(FILES, GAMES); + } + } + + + } + + private class CopyZip extends AsyncTask { + String[] zips; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + } + + @Override + protected String doInBackground(String... params) { + zips = params; + for (String s : zips) { + copyAssets(s); + } + return "Done"; + + } + + @Override + protected void onPostExecute(String result) { + if (util.getAvailableSpaceInMB() > 15) { + try { + startUnzipService(zips); + } catch (IOException e) { + Log.e(TAG, "unzip failed: " + e.getMessage()); + } + } else + Toast.makeText(MainActivity.this, R.string.not_enough_space, Toast.LENGTH_LONG).show(); + } + + private void copyAssets(String zipName) { + String filename = zipName.substring(zipName.lastIndexOf("/") + 1); + InputStream in; + OutputStream out; + try { + in = getAssets().open(filename); + out = new FileOutputStream(zipName); + copyFile(in, out); + in.close(); + out.flush(); + out.close(); + } catch (IOException e) { + Log.e(TAG, "Failed to copy asset file: " + e.getMessage()); + } + } + + private void copyFile(InputStream in, OutputStream out) throws IOException { + byte[] buffer = new byte[1024]; + int read; + while ((read = in.read(buffer)) != -1) { + out.write(buffer, 0, read); + } + } + } + + private class Utilities { + + private void createDataFolder() { + File folder = new File(unzipLocation); + if (!(folder.exists())) + folder.mkdirs(); + } + + private void deleteZip(String fileName) { + File file = new File(fileName); + if (file.exists()) + file.delete(); + } + + private void startDeletion(boolean isAll) { + if (isAll) { + new DeleteTask().execute(unzipLocation); + } else { + new DeleteTask().execute(unzipLocation + "textures", unzipLocation + "games/MultiCraft", unzipLocation + "builtin", + unzipLocation + "fonts", unzipLocation + "debug.txt"); + } + } + + @SuppressWarnings("deprecation") + @SuppressLint("NewApi") + private long getAvailableSpaceInMB() { + final long SIZE_KB = 1024L; + final long SIZE_MB = SIZE_KB * SIZE_KB; + long availableSpace; + StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); + if (Build.VERSION.SDK_INT > 17) { + availableSpace = stat.getAvailableBlocksLong() * stat.getBlockSizeLong(); + } else { + availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize(); + } + return availableSpace / SIZE_MB; + } + + private boolean isFolderEmpty(String folder) { + File location = new File(folder); + File[] contents = location.listFiles(); + return contents == null || contents.length == 0; + } + + public void checkVersion() { + if (isFolderEmpty(unzipLocation)) { + saveSettings(TAG_BUILD_NUMBER, getString(R.string.ver)); + startDeletion(true); + } else if (getBuildNumber().equals(getString(R.string.ver))) { + runGame(); + } else { + saveSettings(TAG_BUILD_NUMBER, getString(R.string.ver)); + startDeletion(false); + } + } + + private void deleteFiles(String path) { + File file = new File(path); + if (file.exists()) { + String deleteCmd = "rm -r " + path; + Runtime runtime = Runtime.getRuntime(); + try { + runtime.exec(deleteCmd); + } catch (IOException e) { + Log.e(TAG, "delete files failed: " + e.getLocalizedMessage()); + } + } + } + + public void createNomedia() { + File myFile = new File(unzipLocation, NOMEDIA); + if (!myFile.exists()) + try { + myFile.createNewFile(); + } catch (IOException e) { + Log.e(TAG, "nomedia has not been created: " + e.getMessage()); + } + } + } +} \ No newline at end of file diff --git a/build/android/src/main/java/mobi/MultiCraft/PreferencesHelper.java b/build/android/src/main/java/mobi/MultiCraft/PreferencesHelper.java new file mode 100644 index 00000000..4329e215 --- /dev/null +++ b/build/android/src/main/java/mobi/MultiCraft/PreferencesHelper.java @@ -0,0 +1,40 @@ +package mobi.MultiCraft; + +import android.content.Context; +import android.content.SharedPreferences; + +public class PreferencesHelper { + public static final String SETTINGS = "settings"; + public static final String TAG_SHORTCUT_CREATED = "createShortcut"; + public static final String TAG_BUILD_NUMBER = "buildNumber"; + private static boolean createShortcut; + private static String buildNumber; + private static SharedPreferences settings; + + public static boolean isCreateShortcut() { + return createShortcut; + } + + public static String getBuildNumber() { + return buildNumber; + } + + public static void loadSettings(final Context context) { + settings = context.getSharedPreferences(SETTINGS, Context.MODE_PRIVATE); + createShortcut = settings.getBoolean(TAG_SHORTCUT_CREATED, true); + buildNumber = settings.getString(TAG_BUILD_NUMBER, "0"); + } + + public static void saveSettings(String tag, boolean bool) { + SharedPreferences.Editor editor = settings.edit(); + editor.putBoolean(tag, bool); + editor.apply(); + } + + public static void saveSettings(String tag, String value) { + SharedPreferences.Editor editor = settings.edit(); + editor.putString(tag, value); + editor.apply(); + } + +} \ No newline at end of file diff --git a/build/android/src/main/java/mobi/MultiCraft/Transliteration.java b/build/android/src/main/java/mobi/MultiCraft/Transliteration.java new file mode 100644 index 00000000..27ceeb1b --- /dev/null +++ b/build/android/src/main/java/mobi/MultiCraft/Transliteration.java @@ -0,0 +1,72 @@ +package mobi.MultiCraft; + +public class Transliteration { + + private static final String[] CHAR_TABLE = new String[81]; + private static final char START_CHAR = 'Ё'; + + + static { + CHAR_TABLE['А' - START_CHAR] = "A"; + CHAR_TABLE['Б' - START_CHAR] = "B"; + CHAR_TABLE['В' - START_CHAR] = "V"; + CHAR_TABLE['Г' - START_CHAR] = "G"; + CHAR_TABLE['Д' - START_CHAR] = "D"; + CHAR_TABLE['Е' - START_CHAR] = "E"; + CHAR_TABLE['Ё' - START_CHAR] = "E"; + CHAR_TABLE['Ж' - START_CHAR] = "ZH"; + CHAR_TABLE['З' - START_CHAR] = "Z"; + CHAR_TABLE['И' - START_CHAR] = "I"; + CHAR_TABLE['Й' - START_CHAR] = "J"; + CHAR_TABLE['К' - START_CHAR] = "K"; + CHAR_TABLE['Л' - START_CHAR] = "L"; + CHAR_TABLE['М' - START_CHAR] = "M"; + CHAR_TABLE['Н' - START_CHAR] = "N"; + CHAR_TABLE['О' - START_CHAR] = "O"; + CHAR_TABLE['П' - START_CHAR] = "P"; + CHAR_TABLE['Р' - START_CHAR] = "R"; + CHAR_TABLE['С' - START_CHAR] = "TS"; + CHAR_TABLE['Т' - START_CHAR] = "T"; + CHAR_TABLE['У' - START_CHAR] = "U"; + CHAR_TABLE['Ф' - START_CHAR] = "F"; + CHAR_TABLE['Х' - START_CHAR] = "H"; + CHAR_TABLE['Ц' - START_CHAR] = "C"; + CHAR_TABLE['Ч' - START_CHAR] = "CH"; + CHAR_TABLE['Ш' - START_CHAR] = "SH"; + CHAR_TABLE['Щ' - START_CHAR] = "SHCH"; + CHAR_TABLE['Ъ' - START_CHAR] = ""; + CHAR_TABLE['Ы' - START_CHAR] = "Y"; + CHAR_TABLE['Ь' - START_CHAR] = ""; + CHAR_TABLE['Э' - START_CHAR] = "E"; + CHAR_TABLE['Ю' - START_CHAR] = "U"; + CHAR_TABLE['Я' - START_CHAR] = "YA"; + + for (int i = 0; i < CHAR_TABLE.length; i++) { + char idx = (char) ((char) i + START_CHAR); + char lower = new String(new char[]{idx}).toLowerCase().charAt(0); + if (CHAR_TABLE[i] != null) { + CHAR_TABLE[lower - START_CHAR] = CHAR_TABLE[i].toLowerCase(); + } + } + } + + /** + * Переводит русский текст в транслит. В результирующей строке + * каждая русская буква будет заменена на соответствующую английскую. + * Не русские символы останутся прежними. + */ + public static String toLatin(String text) { + char charBuffer[] = text.toCharArray(); + StringBuilder sb = new StringBuilder(text.length()); + for (char symbol : charBuffer) { + int i = symbol - START_CHAR; + if (i >= 0 && i < CHAR_TABLE.length) { + String replace = CHAR_TABLE[i]; + sb.append(replace == null ? symbol : replace); + } else { + sb.append(symbol); + } + } + return sb.toString(); + } +} diff --git a/build/android/src/main/java/mobi/MultiCraft/UnzipService.java b/build/android/src/main/java/mobi/MultiCraft/UnzipService.java new file mode 100644 index 00000000..d3add5ab --- /dev/null +++ b/build/android/src/main/java/mobi/MultiCraft/UnzipService.java @@ -0,0 +1,113 @@ +package mobi.MultiCraft; + +import android.app.IntentService; +import android.app.Notification; +import android.app.NotificationManager; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +public class UnzipService extends IntentService { + public static final String ACTION_UPDATE = "mobi.MultiCraft.UPDATE"; + public static final String EXTRA_KEY_IN_FILE = "file"; + public static final String EXTRA_KEY_IN_LOCATION = "location"; + public static final String ACTION_PROGRESS = "progress"; + public final String TAG = UnzipService.class.getSimpleName(); + private NotificationManager mNotifyManager; + private int id = 1; + + public UnzipService() { + super("mobi.MultiCraft.UnzipService"); + } + + private void isDir(String dir, String unzipLocation) { + File f = new File(unzipLocation + dir); + + if (!f.isDirectory()) { + f.mkdirs(); + } + } + + @Override + protected void onHandleIntent(Intent intent) { + mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + Notification.Builder mBuilder = new Notification.Builder(this); + mBuilder.setContentTitle(getString(R.string.notification_title)) + .setContentText(getString(R.string.notification_description)).setSmallIcon(R.drawable.update); + String[] file = intent.getStringArrayExtra(EXTRA_KEY_IN_FILE); + String location = intent.getStringExtra(EXTRA_KEY_IN_LOCATION); + + mNotifyManager.notify(id, mBuilder.build()); + int per = 0; + int size = getSummarySize(file); + for (String f : file) { + try { + try { + FileInputStream fin = new FileInputStream(f); + ZipInputStream zin = new ZipInputStream(fin); + ZipEntry ze; + while ((ze = zin.getNextEntry()) != null) { + if (ze.isDirectory()) { + per++; + isDir(ze.getName(), location); + } else { + per++; + int progress = 100 * per / size; + // send update + publishProgress(progress); + FileOutputStream f_out = new FileOutputStream(location + ze.getName()); + byte[] buffer = new byte[8192]; + int len; + while ((len = zin.read(buffer)) != -1) { + f_out.write(buffer, 0, len); + } + f_out.close(); + zin.closeEntry(); + f_out.close(); + } + } + zin.close(); + } catch (FileNotFoundException e) { + Log.e(TAG, e.getMessage()); + } + } catch (IOException e) { + Log.e(TAG, e.getLocalizedMessage()); + } + } + } + + private void publishProgress(int progress) { + Intent intentUpdate = new Intent(ACTION_UPDATE); + intentUpdate.putExtra(ACTION_PROGRESS, progress); + sendBroadcast(intentUpdate); + } + + private int getSummarySize(String[] zips) { + int size = 0; + for (String z : zips) { + try { + ZipFile zipSize = new ZipFile(z); + size += zipSize.size(); + } catch (IOException e) { + Log.e(TAG, e.getLocalizedMessage()); + } + } + return size; + } + + @Override + public void onDestroy() { + super.onDestroy(); + mNotifyManager.cancel(id); + publishProgress(-1); + } +} \ No newline at end of file diff --git a/build/android/src/main/res/drawable-xhdpi/ic_launcher.png b/build/android/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..45760d621877f5549248bd5202495bf6fdc36675 GIT binary patch literal 17245 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 literal 0 HcmV?d00001 diff --git a/build/android/src/main/res/drawable-xhdpi/update.png b/build/android/src/main/res/drawable-xhdpi/update.png new file mode 100644 index 0000000000000000000000000000000000000000..63fe67f220af4545ab606667754a3a45e1ef5d06 GIT binary patch literal 940 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 O0000 + \ No newline at end of file diff --git a/build/android/src/main/res/drawable/custom_progress_bar.xml b/build/android/src/main/res/drawable/custom_progress_bar.xml new file mode 100644 index 00000000..ec233f27 --- /dev/null +++ b/build/android/src/main/res/drawable/custom_progress_bar.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/android/src/main/res/drawable/logo.png b/build/android/src/main/res/drawable/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..218ebd017381cc40428b501359b8974e40390dda GIT binary patch literal 39221 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 + + + + + + + + + + \ No newline at end of file diff --git a/build/android/src/main/res/layout/dialog.xml b/build/android/src/main/res/layout/dialog.xml new file mode 100644 index 00000000..9d0bd333 --- /dev/null +++ b/build/android/src/main/res/layout/dialog.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/build/android/src/main/res/values-ru/strings.xml b/build/android/src/main/res/values-ru/strings.xml new file mode 100644 index 00000000..4107373b --- /dev/null +++ b/build/android/src/main/res/values-ru/strings.xml @@ -0,0 +1,11 @@ + + + + + Подготовка к обновлению… + Загрузка… + Загрузка MultiCraft + Осталось меньше минуты… + Недостаточно места для распаковки.\nОсвободите пространство в памяти устройства! + Для корректной работы, игре требуется разрешение записывать в память устройтсва. + \ No newline at end of file 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 00000000..2417cf7b --- /dev/null +++ b/build/android/src/main/res/values-v21/styles.xml @@ -0,0 +1,10 @@ + + + + + + \ 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 new file mode 100644 index 00000000..bad627b6 --- /dev/null +++ b/build/android/src/main/res/values/strings.xml @@ -0,0 +1,19 @@ + + + + MultiCraft + 1.1.3 + 312077575425 + + + Preparing to update… + Loading… + Loading MultiCraft + Less than 1 minute… + + + Not enough space for unpack game data.\nPlease free some space on the storage memory! + + + Game need permission to write files to storage memory. + \ 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 new file mode 100644 index 00000000..a127de09 --- /dev/null +++ b/build/android/src/main/res/values/styles.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file