package in.ceeq.home.backup;
import in.ceeq.commons.Utils;
import java.io.IOException;
import java.io.StringWriter;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.CallLog;
import android.util.Log;
import android.util.Xml;
public class CallManager implements DataManager {
public static final String NUMBER = CallLog.Calls.NUMBER;
public static final String TYPE = CallLog.Calls.TYPE;
public static final String DATE = CallLog.Calls.DATE;
public static final String DURATION = CallLog.Calls.DURATION;
public static final String CALL_TAG = "call";
public static final String CALLLOGS_TAG = "calllogs";
public static final String DURATION_TAG = "duration";
public static final String DATE_TAG = "date";
public static final String TYPE_TAG = "type";
public static final String NUMBER_TAG = "number";
public static final String TOTAL_CALLS_TAG = "totalcalls";
private final Uri URI = CallLog.Calls.CONTENT_URI;
private ContentResolver resolver;
private XmlSerializer serializer;
private StringWriter writer;
public CallManager(Context context){
resolver = context.getContentResolver();
serializer = Xml.newSerializer();
writer = new StringWriter();
}
public String read() {
Cursor cs = resolver.query(URI, null, null, null, null);
try {
if (cs.moveToFirst()) {
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag("", CALLLOGS_TAG);
serializer.startTag("", TOTAL_CALLS_TAG);
serializer.text(cs.getCount() + "");
serializer.endTag("", TOTAL_CALLS_TAG);
do {
serializer.startTag("", CALL_TAG);
serializer.startTag("", NUMBER_TAG);
serializer
.text(cs.getString(cs.getColumnIndex(NUMBER)));
serializer.endTag("", NUMBER_TAG);
serializer.startTag("", TYPE_TAG);
serializer.text(cs.getString(cs.getColumnIndex(TYPE)));
serializer.endTag("", TYPE_TAG);
serializer.startTag("", DATE_TAG);
serializer.text(cs.getString(cs.getColumnIndex(DATE)));
serializer.endTag("", DATE_TAG);
serializer.startTag("", DURATION_TAG);
serializer.text(cs.getString(cs
.getColumnIndex(DURATION_TAG)));
serializer.endTag("", DURATION);
serializer.endTag("", CALL_TAG);
} while (cs.moveToNext());
serializer.endTag("", CALLLOGS_TAG);
serializer.endDocument();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
cs.close();
}
return writer.toString();
}
public void write(XmlPullParser parser)
throws XmlPullParserException, IOException {
ContentValues call = null;
int totalCalls = 0, eventType = parser.getEventType();
String tagName = "";
Log.w("Developer", "Restoring call logs ...");
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
Log.w("Developer", "Reading backup file...");
break;
case XmlPullParser.START_TAG:
tagName = parser.getName();
if (tagName.equals(CALL_TAG)) {
call = new ContentValues();
} else if (tagName.equals(TOTAL_CALLS_TAG)) {
totalCalls = Integer.parseInt(Utils
.readTag(parser, TOTAL_CALLS_TAG));
} else if (tagName.equals(NUMBER_TAG)) {
call.put(NUMBER,
Utils.readTag(parser, NUMBER_TAG));
} else if (tagName.equals(TYPE_TAG)) {
call.put(TYPE,
Utils.readTag(parser, TYPE_TAG));
} else if (tagName.equals(DATE_TAG)) {
call.put(DATE,
Utils.readTag(parser, DATE_TAG));
} else if (tagName.equals(DURATION_TAG)) {
call.put(DURATION, Utils.readTag(parser,
DURATION_TAG));
}
break;
case XmlPullParser.END_TAG:
tagName = parser.getName();
if (tagName.equals(CALL_TAG)) {
try {
resolver.insert(URI, call);
} catch (Exception e) {
e.printStackTrace();
}
}
break;
}
eventType = parser.next();
}
Log.w("Developer", "File reading complete...");
Log.w("Developer", "Call logs restore successfull...");
Log.w("Developer", "Total " + totalCalls + " calls restored.");
}
}