package com.tencent.wstt.gt.log.logcat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
public class LogcatReaderLoader implements Parcelable {
private Map<String,String> lastLines = new HashMap<String, String>();
private boolean recordingMode;
private boolean multiple;
private LogcatReaderLoader(Parcel in) {
this.recordingMode = in.readInt() == 1;
this.multiple = in.readInt() == 1;
Bundle bundle = in.readBundle();
for (String key : bundle.keySet()) {
lastLines.put(key, bundle.getString(key));
}
}
private LogcatReaderLoader(List<String> buffers, boolean recordingMode) {
this.recordingMode = recordingMode;
this.multiple = buffers.size() > 1;
for (String buffer : buffers) {
// no need to grab the last line if this isn't recording mode
String lastLine = recordingMode ? LogcatHelper.getLastLogLine(buffer) : null;
lastLines.put(buffer, lastLine);
}
}
public LogcatReader loadReader() throws IOException {
LogcatReader reader;
if (!multiple) {
// single reader
String buffer = lastLines.keySet().iterator().next();
String lastLine = lastLines.values().iterator().next();
reader = new SingleLogcatReader(recordingMode, buffer, lastLine);
} else {
// multiple reader
reader = new MultipleLogcatReader(recordingMode, lastLines);
}
return reader;
}
public static LogcatReaderLoader create(Context context, boolean recordingMode) {
List<String> buffers = new ArrayList<String>();
buffers.add("main");
LogcatReaderLoader loader = new LogcatReaderLoader(buffers, recordingMode);
return loader;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(recordingMode ? 1 : 0);
dest.writeInt(multiple ? 1 : 0);
Bundle bundle = new Bundle();
for (Entry<String,String> entry : lastLines.entrySet()) {
bundle.putString(entry.getKey(), entry.getValue());
}
dest.writeBundle(bundle);
}
public static final Parcelable.Creator<LogcatReaderLoader> CREATOR = new Parcelable.Creator<LogcatReaderLoader>() {
public LogcatReaderLoader createFromParcel(Parcel in) {
return new LogcatReaderLoader(in);
}
public LogcatReaderLoader[] newArray(int size) {
return new LogcatReaderLoader[size];
}
};
}