/** * * Funf: Open Sensing Framework * Copyright (C) 2010-2011 Nadav Aharony, Wei Pan, Alex Pentland. * Acknowledgments: Alan Gardner * Contact: nadav@media.mit.edu * * This file is part of Funf. * * Funf is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * Funf 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with Funf. If not, see <http://www.gnu.org/licenses/>. * */ package edu.mit.media.funf.json; import java.io.IOException; import android.os.Bundle; import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; public class BundleTypeAdapter extends TypeAdapter<Bundle> { public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() { @SuppressWarnings("unchecked") @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { if (Bundle.class.isAssignableFrom(type.getRawType())) { return (TypeAdapter<T>)new BundleTypeAdapter(gson); } return null; } }; private Gson gson; public BundleTypeAdapter(Gson gson) { this.gson = gson; } @Override public void write(JsonWriter out, Bundle value) throws IOException { if (value == null) { out.nullValue(); } else { out.beginObject(); for (String key : value.keySet()) { out.name(key); Object innerValue = value.get(key); if (innerValue == null) { out.nullValue(); } else { gson.toJson(innerValue, innerValue.getClass(), out); } } out.endObject(); } } @Override public Bundle read(JsonReader in) throws IOException { throw new IOException("Bundle reading not implemented"); } /* @Override public JsonElement serialize(Bundle src, Type typeOfSrc, JsonSerializationContext context) { if (src == null) { return JsonNull.INSTANCE; } else { JsonObject jsonObject = new JsonObject(); for (String key : src.keySet()) { Object innerValue = src.get(key); jsonObject.add(key, gson.toJsonTree(innerValue)); } return jsonObject; } } */ }