Project: CityBikes
package net.homelinux.penecoptero.android.citybikes.app;
 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.util.Log; 
 
public class BookmarkManager { 
 /*
  * WARNING! 
  * This class is not persistent. Use it, and then destroy it. 
  */
 
 private SharedPreferences settings; 
 private String netnick; 
 private JSONObject bookmarks; 
 private JSONArray stations; 
  
 public BookmarkManager(Context ctx) throws Exception{ 
  settings = ctx.getSharedPreferences(CityBikes.PREFERENCES_NAME,0); 
  netnick = settings.getString("network_name""error"); 
  if (netnick == "error"){ 
   //Try to guess it.. lol 
   Log.i("CityBikes","FATAL: Guessing network name, this sucks"); 
   NetworksDBAdapter nDbAdapter = new NetworksDBAdapter(ctx); 
   try
    nDbAdapter.load(); 
    if (nDbAdapter.getStored().equals(new JSONArray("[]"))){ 
     nDbAdapter.update(); 
    
    JSONObject net = nDbAdapter.getNetworks(settings.getInt("network_id", -1)); 
    netnick = net.getString("name"); 
    Editor editor = settings.edit(); 
    editor.putString("network_name", netnick); 
    editor.commit(); 
    editor = null
   catch (Exception e){ 
    Log.i("CityBikes","Unable to load networks"); 
   
  
  Log.i("CityBikes",netnick); 
  load(); 
 
  
 public void setBookmarked(Station station, boolean bookmarked) throws Exception{ 
  if (bookmarked){ 
   //Unset 
   try
    JSONArray tmp = new JSONArray("[]"); 
    for (int i = 0; i < stations.length(); i++){ 
     if (stations.getInt(i) != station.getHash()){ 
      tmp.put(stations.getInt(i)); 
     
    
    stations = tmp; 
    store(); 
   }catch (Exception e){ 
    //Not in the list, or error. Who cares, not there :) 
   
  }else
   //Find, and if not, set 
   if (!isBookmarked(station)){ 
    stations.put(station.getHash()); 
    store(); 
   
  
 
  
 public int getIndex(Station station) throws Exception{ 
  for (int i = 0; i < stations.length(); i++){ 
   /* Can we assume ids will be always the same? .. damn
    * better use a hash of lat,lng, for example. 
    */
 
   if (stations.getInt(i) == station.getHash()) 
     return i; 
  
  return -1;  
 
  
 public boolean isBookmarked(Station station){ 
  try
   if (getIndex(station) < 0
    return false
   else 
    return true
  catch (Exception e){ 
   Log.i("CityBikes""Error checking if bookmarked"); 
   e.printStackTrace(); 
  
  return false
 
  
 private void load() throws Exception{ 
  bookmarks = new JSONObject(settings.getString("bookmarks""{}")); 
  try
   stations = bookmarks.getJSONArray(netnick); 
  catch (Exception e){ 
   //Doesn't exist, create it! 
   stations = new JSONArray("[]"); 
  
 
  
 private void store(){ 
  Editor editor = settings.edit(); 
  try { 
   bookmarks.put(netnick, stations); 
   editor.putString("bookmarks", bookmarks.toString()); 
   editor.commit(); 
  catch (JSONException e) { 
   //Unable to store bookmarks.. What should we do? 
   Log.i("CityBikes","Unable to store bookmarks"); 
   e.printStackTrace(); 
  
  editor = null
 
  
  
}