package org.commcare.android.logging;
import android.os.Build;
import org.commcare.CommCareApplication;
import org.commcare.android.javarosa.AndroidLogEntry;
import org.commcare.logging.AndroidLogger;
import org.commcare.preferences.DevSessionRestorer;
import org.javarosa.core.util.externalizable.DeserializationException;
import org.javarosa.core.util.externalizable.ExtUtil;
import org.javarosa.core.util.externalizable.PrototypeFactory;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Date;
/**
* Log entry for force closes, capturing the app build number, android version, device model,
* readable session string, and serialized session string.
*
* @author Aliza Stone
*/
public class ForceCloseLogEntry extends AndroidLogEntry {
public static final String STORAGE_KEY = "forcecloses";
private int appBuildNumber;
private String androidVersion;
private String deviceModel;
private String readableSessionString;
private String serializedSessionString;
private String appId;
private String userId;
/**
* Serialization only
*/
public ForceCloseLogEntry() {
}
public ForceCloseLogEntry(String stackTrace) {
super(AndroidLogger.TYPE_FORCECLOSE, stackTrace, new Date());
appBuildNumber = ReportingUtils.getAppBuildNumber();
androidVersion = Build.VERSION.RELEASE;
deviceModel = Build.MODEL;
readableSessionString = ReportingUtils.getCurrentSession();
serializedSessionString = DevSessionRestorer.getSerializedSessionString();
appId = ReportingUtils.getAppId();
userId = CommCareApplication.instance().getCurrentUserId();
}
public int getAppBuildNumber() {
return appBuildNumber;
}
public String getAndroidVersion() {
return androidVersion;
}
public String getDeviceModel() {
return deviceModel;
}
public String getReadableSession() {
return readableSessionString;
}
public String getSerializedSessionString() {
return serializedSessionString;
}
public String getAppId() {
return appId;
}
public String getUserId() {
return userId;
}
@Override
public void readExternal(DataInputStream in, PrototypeFactory pf)
throws IOException, DeserializationException {
super.readExternal(in, pf);
appBuildNumber = ExtUtil.readInt(in);
androidVersion = ExtUtil.readString(in);
deviceModel = ExtUtil.readString(in);
readableSessionString = ExtUtil.readString(in);
serializedSessionString = ExtUtil.readString(in);
appId = ExtUtil.readString(in);
userId = ExtUtil.readString(in);
}
@Override
public void writeExternal(DataOutputStream out) throws IOException {
super.writeExternal(out);
ExtUtil.writeNumeric(out, appBuildNumber);
ExtUtil.writeString(out, androidVersion);
ExtUtil.writeString(out, deviceModel);
ExtUtil.writeString(out, readableSessionString);
ExtUtil.writeString(out, serializedSessionString);
ExtUtil.writeString(out, appId);
ExtUtil.writeString(out, userId);
}
}