view src/uk/ac/qmul/eecs/ccmi/utilities/ILogger.java @ 1:66b3a838feca logging tip

Added logging of user interaction
author Fiore Martin <fiore@eecs.qmul.ac.uk>
date Tue, 12 Feb 2013 15:31:48 +0000
parents
children
line wrap: on
line source
package uk.ac.qmul.eecs.ccmi.utilities;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import android.os.Environment;


public class ILogger {
	private static final Logger LOGGER = Logger.getLogger(ILogger.class.getName());
	private static final String LOG_PATH = "/Android/data/uk.ac.qmul.eecs.ccmi/files" ;
	private static final String LOG_FILE = "/interaction%u.txt" ;
	private static FileHandler fileHandler;
	public final static int CLICK_BACK = -1;
	
	
	private static void initHandler() throws IOException{
		String state = Environment.getExternalStorageState();
		if(!Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
			throw new IOException("Could not find or write on SD Card");
		}
		
		File logDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+LOG_PATH);
		if(!logDir.exists()){
			if(!logDir.mkdirs())
				throw new IOException("Could not create log file directory");
		}
		
		fileHandler = new FileHandler(logDir.getAbsolutePath()+LOG_FILE,true);
		fileHandler.setFormatter(new InteractionLogFormatter());
		LOGGER.addHandler(fileHandler);		
	}

	
	public static void log(String message) {
		if(fileHandler == null){
			try {
				initHandler();
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException(e);	
			}
		}
		LOGGER.info(message+"\n");
	}
	
	public static void logTap(CharSequence item){
		log("user tap on: "+ item);
	}
	
	public static void logLongTap(CharSequence item){
		log("user long tap on: "+item);
	}
	
	public static void logDialog(CharSequence dialog){
		log("display dialog: "+dialog);
	}
	
	public static void logButton(CharSequence button){
		log("user button press: "+button);
	}
	
	public static void logActivity(CharSequence activity){
		log("display: "+activity);
	}
	
	public static void logError(String cause ){
		log("error: "+cause);
	}
	
	public static void logHover(String text){
		log("user hover: "+text);
	}
	
	public static  void dispose(){
		if(fileHandler != null){
			fileHandler.close();
			fileHandler = null;
		}
	}

}

class InteractionLogFormatter extends Formatter {
	private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS");
	
	@Override
	public String format(LogRecord record) {
		return DATE_FORMAT.format(new Date(record.getMillis()))+','+record.getMessage();
	}
	
}