Java tutorial
/***************************************************************************** * Util.java ***************************************************************************** * Copyright 2011-2014 VLC authors and VideoLAN * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ package com.mmclass.libsiren; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Locale; import org.json.JSONArray; import org.json.JSONException; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.widget.Toast; public class Util { public final static String TAG = "MMClass/Util"; /** A set of utility functions for the VLC application */ public static LibSiren getLibSirenInstance() throws LibSirenException { LibSiren instance = LibSiren.getExistingInstance(); return instance; } public static float[] getFloatArray(SharedPreferences pref, String key) { float[] array = null; String s = pref.getString(key, null); if (s != null) { try { JSONArray json = new JSONArray(s); array = new float[json.length()]; for (int i = 0; i < array.length; i++) array[i] = (float) json.getDouble(i); } catch (JSONException e) { e.printStackTrace(); } } return array; } public static void putFloatArray(Editor editor, String key, float[] array) { try { JSONArray json = new JSONArray(); for (float f : array) json.put(f); editor.putString("equalizer_values", json.toString()); } catch (JSONException e) { e.printStackTrace(); } } /** Print an on-screen message to alert the user */ public static void toaster(Context context, int stringId, int duration) { Toast.makeText(context, stringId, duration).show(); } public static void toaster(Context context, int stringId) { toaster(context, stringId, Toast.LENGTH_SHORT); } public static String stripTrailingSlash(String s) { if (s.endsWith("/") && s.length() > 1) return s.substring(0, s.length() - 1); return s; } /** * Writes the current app logcat to a file. * * @param filename The filename to save it as * @throws IOException */ public static void writeLogcat(String filename) throws IOException { String[] args = { "logcat", "-v", "time", "-d" }; Process process = Runtime.getRuntime().exec(args); InputStreamReader input = new InputStreamReader(process.getInputStream()); OutputStreamWriter output = new OutputStreamWriter(new FileOutputStream(filename)); BufferedReader br = new BufferedReader(input); BufferedWriter bw = new BufferedWriter(output); String line; while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); } bw.close(); output.close(); br.close(); input.close(); } /** * Convert time to a string * @param millis e.g.time/length from file * @return formated string (hh:)mm:ss */ public static String millisToString(long millis) { return millisToString(millis, false); } /** * Convert time to a string * @param millis e.g.time/length from file * @return formated string "[hh]h[mm]min" / "[mm]min[s]s" */ public static String millisToText(long millis) { return millisToString(millis, true); } private static String millisToString(long millis, boolean text) { boolean negative = millis < 0; millis = java.lang.Math.abs(millis); millis /= 1000; int sec = (int) (millis % 60); millis /= 60; int min = (int) (millis % 60); millis /= 60; int hours = (int) millis; String time; DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.US); format.applyPattern("00"); if (text) { if (millis > 0) time = (negative ? "-" : "") + hours + "h" + format.format(min) + "min"; else if (min > 0) time = (negative ? "-" : "") + min + "min"; else time = (negative ? "-" : "") + sec + "s"; } else { if (millis > 0) time = (negative ? "-" : "") + hours + ":" + format.format(min) + ":" + format.format(sec); else time = (negative ? "-" : "") + min + ":" + format.format(sec); } return time; } public static Bitmap scaleDownBitmap(Context context, Bitmap bitmap, int width) { /* * This method can lead to OutOfMemoryError! * If the source size is more than twice the target size use * the optimized version available in AudioUtil::readCoverBitmap */ if (bitmap != null) { final float densityMultiplier = context.getResources().getDisplayMetrics().density; int w = (int) (width * densityMultiplier); int h = (int) (w * bitmap.getHeight() / ((double) bitmap.getWidth())); bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true); } return bitmap; } public static Bitmap cropBorders(Bitmap bitmap, int width, int height) { int top = 0; for (int i = 0; i < height / 2; i++) { int pixel1 = bitmap.getPixel(width / 2, i); int pixel2 = bitmap.getPixel(width / 2, height - i - 1); if ((pixel1 == 0 || pixel1 == -16777216) && (pixel2 == 0 || pixel2 == -16777216)) { top = i; } else { break; } } int left = 0; for (int i = 0; i < width / 2; i++) { int pixel1 = bitmap.getPixel(i, height / 2); int pixel2 = bitmap.getPixel(width - i - 1, height / 2); if ((pixel1 == 0 || pixel1 == -16777216) && (pixel2 == 0 || pixel2 == -16777216)) { left = i; } else { break; } } if (left >= width / 2 - 10 || top >= height / 2 - 10) return bitmap; // Cut off the transparency on the borders return Bitmap.createBitmap(bitmap, left, top, (width - (2 * left)), (height - (2 * top))); } /** * Get the formatted current playback speed in the form of 1.00x */ public static String formatRateString(float rate) { return String.format(java.util.Locale.US, "%.2fx", rate); } /** * equals() with two strings where either could be null */ public static boolean nullEquals(String s1, String s2) { return (s1 == null ? s2 == null : s1.equals(s2)); } /** * Get a resource id from an attribute id. * @param context * @param attrId * @return the resource id */ public static int getResourceFromAttribute(Context context, int attrId) { TypedArray a = context.getTheme().obtainStyledAttributes(new int[] { attrId }); int resId = a.getResourceId(0, 0); a.recycle(); return resId; } }