/** DR Radio 2 is developed by Jacob Nordfalk, Hanafi Mughrabi and Frederik Aagaard. Some parts of the code are loosely based on Sveriges Radio Play for Android. DR Radio 2 for Android is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. DR Radio 2 for Android 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 DR Radio 2 for Android. If not, see <http://www.gnu.org/licenses/>. */ package dk.dr.radio.diverse; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.content.DialogInterface; import android.os.Build; import com.bugsense.trace.BugSenseHandler; /** * Loggerklasse * - hvor man slipper for at angive tag * - man kan logge objekter (få kaldt toString) * - cirkulær buffer tillader at man kan gemme loggen til fejlrapportering * * @author j */ public class Log { public static final String TAG = "DRRadio"; public static final boolean EMULATOR = Build.PRODUCT.contains("sdk") || Build.MODEL.contains("Emulator"); // false; private static final StringBuilder log = new StringBuilder(18000); /** * Føjer data til loggen. * Er loggen blevet for lang trimmes den. * Er synkroniseret da der enkelte gange er blevet set crashes fordi der blev skrevet * loggen samtidig med at den var ved at blive trimmet. * Af performancehensyn bør logning nok begrænses til kun at omfatte det vi som udviklere * tror vil afhjælpe en evt senere fejlfinding */ private static synchronized void logappend(String s) { if (log.length() > 57500) { log.delete(0, 10000); } // Roterende log int n = s.length(); if (n > 10000) n = 10000; log.append(s, 0, n); log.append('\n'); } public static synchronized String getLog() { return log.toString(); } /** * Logfunktion uden TAG som tager et objekt. Sparer bytekode og tid */ public static void d(Object o) { String s = String.valueOf(o); android.util.Log.d(TAG, s); logappend(s); } public static void e(Exception e) { e("fejl", e); } public static void e(String tekst, Exception e) { android.util.Log.e(TAG, tekst, e); //e.printStackTrace(); logappend(android.util.Log.getStackTraceString(e)); } public static void rapporterFejl(final Exception e) { if (!EMULATOR) BugSenseHandler.sendException(e); Log.e(e); } public static void rapporterOgvisFejl(final Activity akt, final Exception e) { if (!EMULATOR) BugSenseHandler.sendException(e); Log.e(e); Builder ab = new AlertDialog.Builder(akt); ab.setTitle("Beklager, der skete en fejl"); ab.setMessage(e.toString()); ab.setNegativeButton("Fortsæt", null); ab.setPositiveButton("Indsend fejl", new Dialog.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { String brødtekst = "Skriv, hvad der skete:\n\n\n---\n"; brødtekst += "\nFejlspor;\n" + android.util.Log.getStackTraceString(e); brødtekst += "\n\n" + new MedieafspillerInfo().lavTelefoninfo(akt); App.kontakt(akt, "Fejl DR Radio", brødtekst, Log.log.toString()); } }); ab.create().show(); } }