From ae0e6ec634d8ab515ae381145a89d9ce649ba082 Mon Sep 17 00:00:00 2001 From: evgenyzinoviev Date: Fri, 14 Aug 2015 17:11:48 +0300 Subject: initial --- src/org/happysanta/gd/Helpers.java | 309 +++++++++++++++++++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100755 src/org/happysanta/gd/Helpers.java (limited to 'src/org/happysanta/gd/Helpers.java') 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); + } + } + +} -- cgit v1.2.3