fiore@1: package uk.ac.qmul.eecs.ccmi.utilities; fiore@1: fiore@1: import java.io.File; fiore@1: import java.io.IOException; fiore@1: import java.text.SimpleDateFormat; fiore@1: import java.util.Date; fiore@1: import java.util.logging.FileHandler; fiore@1: import java.util.logging.Formatter; fiore@1: import java.util.logging.LogRecord; fiore@1: import java.util.logging.Logger; fiore@1: fiore@1: import android.os.Environment; fiore@1: fiore@1: fiore@1: public class ILogger { fiore@1: private static final Logger LOGGER = Logger.getLogger(ILogger.class.getName()); fiore@1: private static final String LOG_PATH = "/Android/data/uk.ac.qmul.eecs.ccmi/files" ; fiore@1: private static final String LOG_FILE = "/interaction%u.txt" ; fiore@1: private static FileHandler fileHandler; fiore@1: public final static int CLICK_BACK = -1; fiore@1: fiore@1: fiore@1: private static void initHandler() throws IOException{ fiore@1: String state = Environment.getExternalStorageState(); fiore@1: if(!Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){ fiore@1: throw new IOException("Could not find or write on SD Card"); fiore@1: } fiore@1: fiore@1: File logDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+LOG_PATH); fiore@1: if(!logDir.exists()){ fiore@1: if(!logDir.mkdirs()) fiore@1: throw new IOException("Could not create log file directory"); fiore@1: } fiore@1: fiore@1: fileHandler = new FileHandler(logDir.getAbsolutePath()+LOG_FILE,true); fiore@1: fileHandler.setFormatter(new InteractionLogFormatter()); fiore@1: LOGGER.addHandler(fileHandler); fiore@1: } fiore@1: fiore@1: fiore@1: public static void log(String message) { fiore@1: if(fileHandler == null){ fiore@1: try { fiore@1: initHandler(); fiore@1: } catch (IOException e) { fiore@1: e.printStackTrace(); fiore@1: throw new RuntimeException(e); fiore@1: } fiore@1: } fiore@1: LOGGER.info(message+"\n"); fiore@1: } fiore@1: fiore@1: public static void logTap(CharSequence item){ fiore@1: log("user tap on: "+ item); fiore@1: } fiore@1: fiore@1: public static void logLongTap(CharSequence item){ fiore@1: log("user long tap on: "+item); fiore@1: } fiore@1: fiore@1: public static void logDialog(CharSequence dialog){ fiore@1: log("display dialog: "+dialog); fiore@1: } fiore@1: fiore@1: public static void logButton(CharSequence button){ fiore@1: log("user button press: "+button); fiore@1: } fiore@1: fiore@1: public static void logActivity(CharSequence activity){ fiore@1: log("display: "+activity); fiore@1: } fiore@1: fiore@1: public static void logError(String cause ){ fiore@1: log("error: "+cause); fiore@1: } fiore@1: fiore@1: public static void logHover(String text){ fiore@1: log("user hover: "+text); fiore@1: } fiore@1: fiore@1: public static void dispose(){ fiore@1: if(fileHandler != null){ fiore@1: fileHandler.close(); fiore@1: fileHandler = null; fiore@1: } fiore@1: } fiore@1: fiore@1: } fiore@1: fiore@1: class InteractionLogFormatter extends Formatter { fiore@1: private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS"); fiore@1: fiore@1: @Override fiore@1: public String format(LogRecord record) { fiore@1: return DATE_FORMAT.format(new Date(record.getMillis()))+','+record.getMessage(); fiore@1: } fiore@1: fiore@1: }