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.util.Log; import android.util.Xml; public class MessageManager implements DataManager { private static final String READ_TAG = "read", BODY_TAG = "body", NUMBER_TAG = "number", MESSAGE_TAG = "message", MESSAGES_TAG = "messages", NUM_TAG = "address", TYPE_TAG = "type", DATE_TAG = "date", TOTAL_MESSAGES_TAG = "totalmessages"; private final Uri URI = Uri.parse("content://mms-sms/conversations"), MURI = Uri.parse("content://sms"); private ContentResolver resolver; private XmlSerializer serializer; private StringWriter writer; public MessageManager(Context context){ resolver = context.getContentResolver(); serializer = Xml.newSerializer(); writer = new StringWriter(); } public String read() { Cursor cs = resolver.query(MURI, new String[] { "*" }, null, null, null); try { if (cs.moveToFirst()) { serializer.setOutput(writer); serializer.startDocument("UTF-8", true); serializer.startTag("", MESSAGES_TAG); serializer.startTag("", TOTAL_MESSAGES_TAG); serializer.text(cs.getCount() + ""); serializer.endTag("", TOTAL_MESSAGES_TAG); while (cs.moveToNext()) { serializer.startTag("", MESSAGE_TAG); serializer.startTag("", NUMBER_TAG); serializer .text(cs.getString(cs.getColumnIndex(NUM_TAG))); serializer.endTag("", NUMBER_TAG); serializer.startTag("", BODY_TAG); serializer.text(cs.getString(cs .getColumnIndex(BODY_TAG))); serializer.endTag("", BODY_TAG); serializer.startTag("", DATE_TAG); serializer.text(cs.getString(cs .getColumnIndex(DATE_TAG))); serializer.endTag("", DATE_TAG); serializer.startTag("", TYPE_TAG); serializer.text(cs.getString(cs .getColumnIndex(TYPE_TAG))); serializer.endTag("", TYPE_TAG); serializer.startTag("", READ_TAG); serializer.text(cs.getString(cs .getColumnIndex(READ_TAG))); serializer.endTag("", READ_TAG); serializer.endTag("", MESSAGE_TAG); } serializer.endTag("", MESSAGES_TAG); serializer.endDocument(); } } catch (IOException e) { e.printStackTrace(); } finally { cs.close(); } return writer.toString(); } public void write(XmlPullParser parser) throws XmlPullParserException, IOException { ContentValues message = null; int totalMessages = 0, eventType = parser.getEventType(); String tagName = ""; Log.w("Developer", "Restoring message ..."); 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(MESSAGE_TAG)) { message = new ContentValues(); } else if (tagName.equals(TOTAL_MESSAGES_TAG)) { totalMessages = Integer.parseInt(Utils .readTag(parser, TOTAL_MESSAGES_TAG)); } else if (tagName.equals(NUMBER_TAG)) { message.put(NUMBER_TAG, Utils.readTag(parser, NUMBER_TAG)); } else if (tagName.equals(BODY_TAG)) { message.put(BODY_TAG, Utils.readTag(parser, BODY_TAG)); } else if (tagName.equals(DATE_TAG)) { message.put(DATE_TAG, Utils.readTag(parser, DATE_TAG)); } else if (tagName.equals(TYPE_TAG)) { message.put(TYPE_TAG, Utils.readTag(parser, TYPE_TAG)); } else if (tagName.equals(READ_TAG)) { message.put(READ_TAG, Utils.readTag(parser, READ_TAG)); } break; case XmlPullParser.END_TAG: tagName = parser.getName(); if (tagName.equals(MESSAGE_TAG)) { try { resolver.insert(URI, message); } catch (Exception e) { e.printStackTrace(); } } break; } eventType = parser.next(); } Log.w("Developer", "File reading complete..."); Log.w("Developer", "Message restore successfull..."); Log.w("Developer", "Total " + totalMessages + " messages restored."); } }