package org.zirco.ui.runnables; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.URLEncoder; import org.zirco.R; import org.zirco.utils.ApplicationUtils; import org.zirco.utils.IOUtils; import android.app.ProgressDialog; import android.content.Context; import android.database.Cursor; import android.os.Handler; import android.os.Message; import android.provider.Browser; import android.util.Log; /** * Runnable to export history and bookmarks to an XML file. */ public class XmlHistoryBookmarksExporter implements Runnable { private Context mContext; private ProgressDialog mProgressDialog; private String mFileName; private Cursor mCursor; private File mFile; private String mErrorMessage = null; /** * Constructor. * @param context The current context. * @param fileName The output file. * @param cursor The cursor to history and bookmarks. * @param progressDialog The progress dialog shown during export. */ public XmlHistoryBookmarksExporter(Context context, String fileName, Cursor cursor, ProgressDialog progressDialog) { mContext = context; mFileName = fileName; mCursor = cursor; mProgressDialog = progressDialog; } @Override public void run() { try { mFile = new File(IOUtils.getBookmarksExportFolder(), mFileName); FileWriter writer = new FileWriter(mFile); writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); writer.write("<itemlist>\n"); if (mCursor.moveToFirst()) { int titleIndex = mCursor.getColumnIndex(Browser.BookmarkColumns.TITLE); int urlIndex = mCursor.getColumnIndex(Browser.BookmarkColumns.URL); int visitsIndex = mCursor.getColumnIndex(Browser.BookmarkColumns.VISITS); int dateIndex = mCursor.getColumnIndex(Browser.BookmarkColumns.DATE); int createdIndex = mCursor.getColumnIndex(Browser.BookmarkColumns.CREATED); int bookmarkIndex = mCursor.getColumnIndex(Browser.BookmarkColumns.BOOKMARK); while (!mCursor.isAfterLast()) { writer.write("<item>\n"); String title = mCursor.getString(titleIndex); writer.write(String.format("<title>%s</title>\n", title != null ? URLEncoder.encode(title) : "")); String url = mCursor.getString(urlIndex); writer.write(String.format("<url>%s</url>\n", url != null ? URLEncoder.encode(url) : "")); writer.write(String.format("<created>%s</created>\n", mCursor.getLong(createdIndex))); writer.write(String.format("<visits>%s</visits>\n", mCursor.getInt(visitsIndex))); writer.write(String.format("<date>%s</date>\n", mCursor.getLong(dateIndex))); writer.write(String.format("<bookmark>%s</bookmark>\n", mCursor.getInt(bookmarkIndex))); writer.write("</item>\n"); mCursor.moveToNext(); } } writer.write("</itemlist>\n"); writer.flush(); writer.close(); } catch (IOException e1) { Log.w("Bookmark export failed", e1.toString()); mErrorMessage = e1.toString(); } mHandler.sendEmptyMessage(0); } private Handler mHandler = new Handler() { public void handleMessage(Message msg) { if (mProgressDialog != null) { mProgressDialog.dismiss(); } if (mContext != null) { if (mErrorMessage == null) { ApplicationUtils.showOkDialog(mContext, android.R.drawable.ic_dialog_info, mContext.getResources().getString(R.string.Commons_HistoryBookmarksExportSDCardDoneTitle), String.format(mContext.getResources().getString(R.string.Commons_HistoryBookmarksExportSDCardDoneMessage), mFile.getAbsolutePath())); } else { ApplicationUtils.showOkDialog(mContext, android.R.drawable.ic_dialog_alert, mContext.getResources().getString(R.string.Commons_HistoryBookmarksExportSDCardFailedTitle), String.format(mContext.getResources().getString(R.string.Commons_HistoryBookmarksFailedMessage), mErrorMessage)); } } } }; }