aboutsummaryrefslogtreecommitdiff
path: root/src/org/happysanta/gd/Helpers.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/happysanta/gd/Helpers.java')
-rwxr-xr-xsrc/org/happysanta/gd/Helpers.java309
1 files changed, 309 insertions, 0 deletions
diff --git a/src/org/happysanta/gd/Helpers.java b/src/org/happysanta/gd/Helpers.java
new file mode 100755
index 0000000..667a880
--- /dev/null
+++ b/src/org/happysanta/gd/Helpers.java
@@ -0,0 +1,309 @@
+package org.happysanta.gd;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Build;
+import android.util.Log;
+import org.happysanta.gd.Game.GameView;
+import org.happysanta.gd.Levels.Loader;
+import org.happysanta.gd.Menu.Menu;
+import org.happysanta.gd.Storage.LevelsManager;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class Helpers {
+
+ private static char[] cp1251Map = new char[]{
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005', '\u0006', '\u0007',
+ '\u0008', '\u0009', '\n', '\u000B', '\u000C', '\r', '\u000E', '\u000F',
+ '\u0010', '\u0011', '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D', '\u001E', '\u001F',
+ '\u0020', '\u0021', '\u0022', '\u0023', '\u0024', '\u0025', '\u0026', '\'',
+ '\u0028', '\u0029', '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035', '\u0036', '\u0037',
+ '\u0038', '\u0039', '\u003A', '\u003B', '\u003C', '\u003D', '\u003E', '\u003F',
+ '\u0040', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D', '\u004E', '\u004F',
+ '\u0050', '\u0051', '\u0052', '\u0053', '\u0054', '\u0055', '\u0056', '\u0057',
+ '\u0058', '\u0059', '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065', '\u0066', '\u0067',
+ '\u0068', '\u0069', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E', '\u006F',
+ '\u0070', '\u0071', '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D', '\u007E', '\u007F',
+ '\u0402', '\u0403', '\u201A', '\u0453', '\u201E', '\u2026', '\u2020', '\u2021',
+ '\u20AC', '\u2030', '\u0409', '\u2039', '\u040A', '\u040C', '\u040B', '\u040F',
+ '\u0452', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022', '\u2013', '\u2014',
+ '\uFFFD', '\u2122', '\u0459', '\u203A', '\u045A', '\u045C', '\u045B', '\u045F',
+ '\u00A0', '\u040E', '\u045E', '\u0408', '\u00A4', '\u0490', '\u00A6', '\u00A7',
+ '\u0401', '\u00A9', '\u0404', '\u00AB', '\u00AC', '\u00AD', '\u00AE', '\u0407',
+ '\u00B0', '\u00B1', '\u0406', '\u0456', '\u0491', '\u00B5', '\u00B6', '\u00B7',
+ '\u0451', '\u2116', '\u0454', '\u00BB', '\u0458', '\u0405', '\u0455', '\u0457',
+ '\u0410', '\u0411', '\u0412', '\u0413', '\u0414', '\u0415', '\u0416', '\u0417',
+ '\u0418', '\u0419', '\u041A', '\u041B', '\u041C', '\u041D', '\u041E', '\u041F',
+ '\u0420', '\u0421', '\u0422', '\u0423', '\u0424', '\u0425', '\u0426', '\u0427',
+ '\u0428', '\u0429', '\u042A', '\u042B', '\u042C', '\u042D', '\u042E', '\u042F',
+ '\u0430', '\u0431', '\u0432', '\u0433', '\u0434', '\u0435', '\u0436', '\u0437',
+ '\u0438', '\u0439', '\u043A', '\u043B', '\u043C', '\u043D', '\u043E', '\u043F',
+ '\u0440', '\u0441', '\u0442', '\u0443', '\u0444', '\u0445', '\u0446', '\u0447',
+ '\u0448', '\u0449', '\u044A', '\u044B', '\u044C', '\u044D', '\u044E', '\u044F'
+ };
+
+ public static GDActivity getGDActivity() {
+ return GDActivity.shared;
+ }
+
+ public static GameView getGDView() {
+ return GDActivity.shared.gameView;
+ }
+
+ public static Menu getGameMenu() {
+ return GDActivity.shared.menu;
+ }
+
+ public static Loader getLevelLoader() {
+ return GDActivity.shared.levelLoader;
+ }
+
+ public static LevelsManager getLevelsManager() {
+ return GDActivity.shared.levelsManager;
+ }
+
+ public static int getDp(int px) {
+ return Math.round(px * Global.density);
+ }
+
+ public static int getDp(float px) {
+ return Math.round(px * Global.density);
+ }
+
+ public static String getCurrentStackTrace() {
+ String del = "\n";
+ StringBuilder sb = new StringBuilder();
+ StackTraceElement[] list = Thread.currentThread().getStackTrace();
+ // for (StackTraceElement e: list) {
+ for (int i = 0; i < list.length; i++) {
+ sb.append(list[i].toString() + (i < list.length - 1 ? del : ""));
+ }
+ return sb.toString();
+ }
+
+ public static Bitmap loadBitmapFromDrawable(int id) {
+ BitmapFactory.Options options = null;
+ if (!isSDK11OrHigher()) {
+ options = new BitmapFactory.Options();
+ options.inPreferredConfig = Bitmap.Config.ARGB_8888;
+ }
+ return BitmapFactory.decodeResource(getGDActivity().getResources(), id);
+ }
+
+ public static Bitmap loadBitmapFromAsset(String name) throws IOException {
+ if (name.startsWith("/")) name = name.substring(1);
+ Bitmap bmp = null;
+ InputStream s = getGDActivity().getAssets().open(name);
+ bmp = BitmapFactory.decodeStream(s);
+ s.close();
+ return bmp;
+ }
+
+ public static void logDebug(String s) {
+ Log.d("AGDTR<" + Thread.currentThread().getName() + ">", s);
+ }
+
+ public static void logDebug(Object s) {
+ Log.d("AGDTR<" + Thread.currentThread().getName() + ">", s.toString());
+ }
+
+ public static boolean isOnline() {
+ ConnectivityManager cm = (ConnectivityManager) getGDActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo netInfo = cm.getActiveNetworkInfo();
+ return netInfo != null && netInfo.isConnectedOrConnecting();
+ }
+
+ /*public static String trimLine(String s, Paint f, int w) {
+ // logDebug("trimLine; s = " + s + ", w = " + w + "; measure = " + f.measureText(s));
+ String points = "...", result = s;
+ float avgWidth = f.measureText("o"), pointsWidth = f.measureText(points);
+ float diff;
+ int i = 0,
+ len = s.length(),
+ half = 0,
+ c = 0,
+ st1 = 0,
+ st2 = len - 1;
+
+ if (s.equals("") || f.measureText(s) <= w) return s;
+
+ w -= pointsWidth;
+
+ int tmpMax = (int)Math.round(Math.floor(w / Math.round(avgWidth / 1.5)) * 2);
+ if (len > tmpMax) {
+ s = s.substring(0, tmpMax);
+ len = s.length();
+ }
+
+ while (true) {
+ i++;
+ // if (i >= 100) return s;
+ if (half == 0) {
+ c = Math.round(len / 2);
+ } else {
+ switch (half) {
+ case 1:
+ st2 = c;
+ c -= (st2 - st1) / 2;
+ break;
+
+ case 2:
+ st1 = c;
+ c += (st2 - st1) / 2;
+ break;
+ }
+ }
+
+ String sub = s.substring(0, c > len - 1 ? len - 1 : c);
+ float subWidth = f.measureText(sub);
+
+ if (subWidth > w + avgWidth) half = 1;
+ else if (subWidth < w - avgWidth) half = 2;
+ else {
+ diff = subWidth - w;
+
+ if (diff > 0) {
+ result = s.substring(0, c - 1);
+ if (!result.equals(s)) result += points;
+ } else {
+ result = s.substring(0, c + 1);
+ if (!result.equals(s)) result += points;
+ }
+
+ return result;
+ }
+ }
+
+ // return s;
+ }*/
+
+ public static String getString(int r) {
+ return GDActivity.shared.getString(r);
+ }
+
+ public static String[] getStringArray(int r) {
+ return GDActivity.shared.getResources().getStringArray(r);
+ }
+
+ public static void runOnUiThread(Runnable runnable) {
+ GDActivity.shared.runOnUiThread(runnable);
+ }
+
+ public static long getTimestamp() {
+ return System.currentTimeMillis() / 1000L;
+ }
+
+ public static void showAlert(String title, String message, final Runnable listener) {
+ Context context = getGDActivity();
+ AlertDialog alertDialog = new AlertDialog.Builder(context)
+ .setTitle(title)
+ .setMessage(message)
+ .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (listener != null) listener.run();
+ }
+ })
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ if (listener != null) listener.run();
+ }
+ })
+ .create();
+ alertDialog.show();
+ }
+
+ public static void showConfirm(String title, String message, final Runnable onOk, final Runnable onCancel) {
+ Context context = getGDActivity();
+ AlertDialog.Builder alert = new AlertDialog.Builder(context)
+ .setTitle(title)
+ .setMessage(message)
+ .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (onOk != null) onOk.run();
+ }
+ })
+ .setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (onCancel != null) onCancel.run();
+ }
+ })
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ if (onCancel != null) onCancel.run();
+ }
+ });
+ alert.show();
+ }
+
+ public static boolean isSDK11OrHigher() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
+ }
+
+ public static boolean isSDK10OrLower() {
+ return Build.VERSION.SDK_INT <= 10;
+ }
+
+ public static String getAppVersion() {
+ String v = "0.0";
+ try {
+ PackageInfo pInfo = GDActivity.shared.getPackageManager().getPackageInfo(GDActivity.shared.getPackageName(), 0);
+ v = pInfo.versionName;
+ } catch (PackageManager.NameNotFoundException e) {
+ }
+ return v;
+ }
+
+ public static String decodeCp1251(byte[] data) {
+ if (data == null) {
+ return "";
+ }
+ StringBuffer sb = new StringBuffer(data.length);
+ for (int i = 0; i < data.length; i++) {
+ if (data[i] == 0) break;
+ sb.append(cp1251Map[data[i] & 0xFF]);
+ }
+ return sb.toString();
+ }
+
+ public static String getDeviceName() {
+ String manufacturer = Build.MANUFACTURER;
+ String model = Build.MODEL;
+ if (model.startsWith(manufacturer)) {
+ return capitalize(model);
+ } else {
+ return capitalize(manufacturer) + " " + model;
+ }
+ }
+
+ private static String capitalize(String s) {
+ if (s == null || s.length() == 0) {
+ return "";
+ }
+ char first = s.charAt(0);
+ if (Character.isUpperCase(first)) {
+ return s;
+ } else {
+ return Character.toUpperCase(first) + s.substring(1);
+ }
+ }
+
+}