// Path: src/org/emergent/android/weave/persistence/Weaves.java
// public class Weaves {
// 
//   public static void setBasicContentValues(ContentValues values, Record info) throws JSONException {
//     boolean isDeleted = info.isDeleted();
//     putColumnValue(values, Columns.UUID, info.getId());
//     putColumnValue(values, Columns.IS_DELETED, isDeleted);
//     putColumnValue(values, Columns.LAST_MODIFIED, info.getModifiedInSeconds());
//   }
// 
//   public static void putColumnValue(ContentValues values, String colName, String value) {
//     values.put(colName, value);
//   }
// 
//   public static void putColumnValue(ContentValues values, String colName, long value) {
//     values.put(colName, value);
//   }
// 
//   public static void putColumnValue(ContentValues values, String colName, boolean value) {
//     values.put(colName, value);
//   }
// 
//   public static class Columns implements BaseColumns {
// 
//     // BaseColumn contains _id.
// 
//     public static final String UUID = "uuid";
//     public static final String SORT_INDEX = "sortIndex";
//     public static final String LAST_MODIFIED = "lastModified";
//     public static final String IS_DELETED = "isDeleted";
//   }
// 
//   public static abstract class Updater {
// 
//     private final Uri m_authority;
//     private final CollectionNode m_collectionNode;
// 
//     Updater(Uri authority, CollectionNode colNode) {
//       m_authority = authority;
//       m_collectionNode = colNode;
//     }
// 
//     public Uri getAuthority() {
//       return m_authority;
//     }
// 
//     public String getNodePath() {
//       return m_collectionNode.nodePath;
//     }
// 
//     public String getEngineName() {
//       return m_collectionNode.engineName;
//     }
// 
//     public int deleteRecords(ContentResolver cResolver) {
//       return cResolver.delete(m_authority, "", new String[] {} );
//     }
// 
//     public void insertRecord(ContentResolver cResolver, Record info) throws JSONException {
//       ContentValues values = new ContentValues();
//       setContentValues(values, info);
//       cResolver.insert(m_authority, values);
//     }
// 
//     public int insertRecords(ContentResolver cResolver, List<Record> infos) throws JSONException {
//       ContentValues[] valuesArray = new ContentValues[infos.size()];
//       int ii = 0;
//       for (Record info : infos) {
//         ContentValues values = new ContentValues();
//         setContentValues(values, info);
//         valuesArray[ii++] = values;
//       }
//       return cResolver.bulkInsert(m_authority, valuesArray);
//     }
// 
//     protected abstract void setContentValues(ContentValues values, Record info) throws JSONException;
//   }
// 
//   /**
//    * @author Patrick Woodworth
//    */
//   public static class Record {
// 
//     private WeaveBasicObject m_wbo;
//     private JSONObject m_decryptedPayload;
// 
//     public Record(WeaveBasicObject wbo, JSONObject decryptedPayload) {
//       m_wbo = wbo;
//       m_decryptedPayload = decryptedPayload;
//     }
// 
//     public String getId() throws JSONException {
//       return getProperty("id");
//     }
// 
// 
//     public boolean isDeleted() throws JSONException {
//       return m_decryptedPayload.has("deleted") && m_decryptedPayload.getBoolean("deleted");
//     }
// 
//     public String getModified() throws JSONException {
//       return m_wbo.getModified();
//     }
// 
//     public long getModifiedInSeconds() {
//       long mod = 0;
//       try {
//         double modDouble = Double.parseDouble(getModified()) * 1000;
//         mod = Math.round(modDouble) / 1000;
//       } catch (Exception ignored) {
//       }
//       return mod;
//     }
// 
//     public Date getModifiedDate() throws JSONException {
//       return toModifiedTimeDate(getModified());
//     }
// 
//     public String getProperty(String key) throws JSONException {
//       if (m_decryptedPayload.has(key))
//         return m_decryptedPayload.getString(key);
//       return null;
//     }
// 
//     /**
//      * Inline of <code>WeaveUtil.toModifiedTimeDate(String)</code>
//      * @todo stop inline
//      */
//     private static Date toModifiedTimeDate(String modified) {
//       long now = System.currentTimeMillis();
//       try {
//         double modDouble = Double.parseDouble(modified) * 1000;
//         long mod = Math.round(modDouble);
//         return new Date(mod);
//       } catch (Exception e) {
//         return new Date(); // todo buggy ?
//       }
//     }
//   }
// }


import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.emergent.android.weave.persistence.Weaves;
import java.text.SimpleDateFormat;
import java.util.Date;
   * @see android.widget.ListAdapter#getView(int, android.view.View, android.view.ViewGroup)
   */
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);
    TextView urlTextView = (TextView)v.findViewById(R.id.url);
    if (urlTextView != null) {
      String urlVal = urlTextView.getText().toString();
      if (urlVal == null || urlVal.trim().length() < 1) {
        urlTextView.setVisibility(View.GONE);
      } else {
        urlTextView.setVisibility(View.VISIBLE);
      }
    }
    View star = v.findViewById(R.id.star);
    if (star != null)
      star.setVisibility(View.GONE);
    View favicon = v.findViewById(R.id.favicon);
    if (favicon != null)
      favicon.setVisibility(View.GONE);
    return v;
  }

  public static class MyViewBinder implements ViewBinder {

    private final SimpleDateFormat m_dateFormat = new SimpleDateFormat();

    @Override
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
      if (view instanceof TextView &&
// Path: src/org/emergent/android/weave/persistence/Weaves.java
// public class Weaves {
// 
//   public static void setBasicContentValues(ContentValues values, Record info) throws JSONException {
//     boolean isDeleted = info.isDeleted();
//     putColumnValue(values, Columns.UUID, info.getId());
//     putColumnValue(values, Columns.IS_DELETED, isDeleted);
//     putColumnValue(values, Columns.LAST_MODIFIED, info.getModifiedInSeconds());
//   }
// 
//   public static void putColumnValue(ContentValues values, String colName, String value) {
//     values.put(colName, value);
//   }
// 
//   public static void putColumnValue(ContentValues values, String colName, long value) {
//     values.put(colName, value);
//   }
// 
//   public static void putColumnValue(ContentValues values, String colName, boolean value) {
//     values.put(colName, value);
//   }
// 
//   public static class Columns implements BaseColumns {
// 
//     // BaseColumn contains _id.
// 
//     public static final String UUID = "uuid";
//     public static final String SORT_INDEX = "sortIndex";
//     public static final String LAST_MODIFIED = "lastModified";
//     public static final String IS_DELETED = "isDeleted";
//   }
// 
//   public static abstract class Updater {
// 
//     private final Uri m_authority;
//     private final CollectionNode m_collectionNode;
// 
//     Updater(Uri authority, CollectionNode colNode) {
//       m_authority = authority;
//       m_collectionNode = colNode;
//     }
// 
//     public Uri getAuthority() {
//       return m_authority;
//     }
// 
//     public String getNodePath() {
//       return m_collectionNode.nodePath;
//     }
// 
//     public String getEngineName() {
//       return m_collectionNode.engineName;
//     }
// 
//     public int deleteRecords(ContentResolver cResolver) {
//       return cResolver.delete(m_authority, "", new String[] {} );
//     }
// 
//     public void insertRecord(ContentResolver cResolver, Record info) throws JSONException {
//       ContentValues values = new ContentValues();
//       setContentValues(values, info);
//       cResolver.insert(m_authority, values);
//     }
// 
//     public int insertRecords(ContentResolver cResolver, List<Record> infos) throws JSONException {
//       ContentValues[] valuesArray = new ContentValues[infos.size()];
//       int ii = 0;
//       for (Record info : infos) {
//         ContentValues values = new ContentValues();
//         setContentValues(values, info);
//         valuesArray[ii++] = values;
//       }
//       return cResolver.bulkInsert(m_authority, valuesArray);
//     }
// 
//     protected abstract void setContentValues(ContentValues values, Record info) throws JSONException;
//   }
// 
//   /**
//    * @author Patrick Woodworth
//    */
//   public static class Record {
// 
//     private WeaveBasicObject m_wbo;
//     private JSONObject m_decryptedPayload;
// 
//     public Record(WeaveBasicObject wbo, JSONObject decryptedPayload) {
//       m_wbo = wbo;
//       m_decryptedPayload = decryptedPayload;
//     }
// 
//     public String getId() throws JSONException {
//       return getProperty("id");
//     }
// 
// 
//     public boolean isDeleted() throws JSONException {
//       return m_decryptedPayload.has("deleted") && m_decryptedPayload.getBoolean("deleted");
//     }
// 
//     public String getModified() throws JSONException {
//       return m_wbo.getModified();
//     }
// 
//     public long getModifiedInSeconds() {
//       long mod = 0;
//       try {
//         double modDouble = Double.parseDouble(getModified()) * 1000;
//         mod = Math.round(modDouble) / 1000;
//       } catch (Exception ignored) {
//       }
//       return mod;
//     }
// 
//     public Date getModifiedDate() throws JSONException {
//       return toModifiedTimeDate(getModified());
//     }
// 
//     public String getProperty(String key) throws JSONException {
//       if (m_decryptedPayload.has(key))
//         return m_decryptedPayload.getString(key);
//       return null;
//     }
// 
//     /**
//      * Inline of <code>WeaveUtil.toModifiedTimeDate(String)</code>
//      * @todo stop inline
//      */
//     private static Date toModifiedTimeDate(String modified) {
//       long now = System.currentTimeMillis();
//       try {
//         double modDouble = Double.parseDouble(modified) * 1000;
//         long mod = Math.round(modDouble);
//         return new Date(mod);
//       } catch (Exception e) {
//         return new Date(); // todo buggy ?
//       }
//     }
//   }
// }


// Path: src/org/emergent/android/weave/WeaveListCursorAdapter.java
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.emergent.android.weave.persistence.Weaves;
import java.text.SimpleDateFormat;
import java.util.Date;

   * @see android.widget.ListAdapter#getView(int, android.view.View, android.view.ViewGroup)
   */
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);
    TextView urlTextView = (TextView)v.findViewById(R.id.url);
    if (urlTextView != null) {
      String urlVal = urlTextView.getText().toString();
      if (urlVal == null || urlVal.trim().length() < 1) {
        urlTextView.setVisibility(View.GONE);
      } else {
        urlTextView.setVisibility(View.VISIBLE);
      }
    }
    View star = v.findViewById(R.id.star);
    if (star != null)
      star.setVisibility(View.GONE);
    View favicon = v.findViewById(R.id.favicon);
    if (favicon != null)
      favicon.setVisibility(View.GONE);
    return v;
  }

  public static class MyViewBinder implements ViewBinder {

    private final SimpleDateFormat m_dateFormat = new SimpleDateFormat();

    @Override
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
      if (view instanceof TextView &&
          Weaves.Columns.LAST_MODIFIED.equals(cursor.getColumnName(columnIndex))) {