package org.schtief.partybolle; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import org.schtief.partybolle.event.EventOverlayItem; import org.schtief.partybolle.foursquare.FoursquareOverlayItem; import org.schtief.util.json.JSONArray; import org.schtief.util.json.JSONObject; import org.schtief.util.json.JSONTokener; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Handler; import android.util.Log; import com.joelapenna.foursquare.types.Venue; /** Copyright by Stefan Lischke a.k.a Mister Schtief started in 2010 in Berlin Germany This file is part of PartyBolle. PartyBolle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PartyBolle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PartyBolle. If not, see <http://www.gnu.org/licenses/>. */ public class FavoriteManager { private PartyBolle app; private SharedPreferences preferences; private Map<String,Object> favorites; private FavoriteOverlay favoriteOverlay; private Handler handler; // private boolean loaded = false; public FavoriteManager(PartyBolle partyBolle, SharedPreferences preferences, FavoriteOverlay favOverlay, Handler handler) { this.app=partyBolle; this.preferences=preferences; this.favoriteOverlay=favOverlay; this.favorites=new HashMap<String,Object>(); this.handler=handler; } private class LoadFavoritesThread extends Thread { @Override public void run() { loadFavs(); } } public void loadFavorites() { new LoadFavoritesThread().start(); } private void loadFavs() { try { Thread.sleep(500); FileInputStream fis = app.openFileInput("favorites"); // BufferedReader in = new BufferedReader(new InputStreamReader(fis)); // String json = in.readLine(); JSONObject jsonObject = new JSONObject(new JSONTokener( new InputStreamReader(fis,"ISO-8859-1"))); JSONArray favs = jsonObject.getJSONArray("favs"); for (int i = 0; i < favs.length(); i++) { JSONObject fav = favs.getJSONObject(i); //foursquare oder event? if("foursquare".equals(fav.getString("type"))){ favorites.put(fav.getString("id"),fav.getString("type")); Log.i(PartyBolle.LOG_TAG," favorite foursquare "+fav.getString("id")); Venue venue = app.foursquareManager.getVenue(fav.getString("id")); if(null!=venue){ PartyBolleOverlayItem item = new FoursquareOverlayItem(venue); favoriteOverlay.addPartyBolleOverlayItem(item); } }else if("event".equals(fav.getString("type"))){ Log.i(PartyBolle.LOG_TAG," favorite Event"+fav.getString("id")); // JSONObject location =app.eventManager.getEvent(fav.getString("id")); // if(null!=location){ PartyBolleOverlayItem item = new EventOverlayItem(app, fav.getJSONObject("event")); favorites.put(item.getId(),fav.getJSONObject("event")); favoriteOverlay.addPartyBolleOverlayItem(item); // } } } // loaded=true; handler.post(new Runnable() { public void run() { app.mapView.invalidate(); } }); }catch(FileNotFoundException e){ Log.e(PartyBolle.LOG_TAG,"coud not find favorites, maybe first time"); // loaded=true; } catch (Exception e) { handler.post(new Runnable() { public void run() { AlertDialog.Builder builder = new AlertDialog.Builder(FavoriteManager.this.app); builder.setMessage("Alder ick konnte deine Favoriten nich laden! Kein Netz? Foursquare down?") .setCancelable(false) .setPositiveButton("Mir doch ejal", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); } }); Log.e(PartyBolle.LOG_TAG,"coud not load favorites",e); } } private class SaveFavoritesThread extends Thread { @Override public void run() { saveFavs(); } } public void saveFavorites() { new SaveFavoritesThread().start(); } public void saveFavs() { // if(!loaded){ // Log.i(PartyBolle.LOG_TAG,"did not save favorites !loaded"); // return; // } try { JSONObject jsonObject= new JSONObject(); JSONArray favs = new JSONArray(); for (String id : favorites.keySet()) { JSONObject fav = new JSONObject(); Object o = favorites.get(id); if (o instanceof String) { fav.put("type", "foursquare"); }else{ fav.put("type", "event"); fav.put("event", (JSONObject)o); } fav.put("id",id); favs.put(fav); } jsonObject.put("favs", favs); FileOutputStream fos = app.openFileOutput("favorites",0); fos.write(jsonObject.toString().getBytes("ISO-8859-1")); fos.close(); } catch (Exception e) { Log.e(PartyBolle.LOG_TAG,"coud not save favorites",e); } Log.i(PartyBolle.LOG_TAG,"saved favorites"); } public boolean isFavorite(String id){ return favorites.containsKey(id); } public void toggleFavorite(PartyBolleOverlayItem overlayItem) { if(isFavorite(overlayItem.getId())){ favorites.remove(overlayItem.getId()); favoriteOverlay.removePartyBolleOverlayItem(overlayItem); app.infoOverlay.showInfo(null); }else{ if(overlayItem.getType().equals("foursquare")) favorites.put(overlayItem.getId(),overlayItem.getType()); else favorites.put(overlayItem.getId(),((EventOverlayItem)overlayItem).getLocation()); favoriteOverlay.addPartyBolleOverlayItem(overlayItem); } app.mapView.invalidate(); saveFavorites(); } }