/** * * 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.util; import static edu.mit.media.funf.util.LogUtil.TAG; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import edu.mit.media.funf.probe.ProbeExceptions.UnstorableTypeException; import android.os.Bundle; import android.os.Parcelable; import android.util.Log; public class BundleUtil { private BundleUtil() { } public static Bundle[] copyBundleArray(Parcelable[] parcelables) { if (parcelables == null) { return new Bundle[0]; } Bundle[] bundles = new Bundle[parcelables.length]; System.arraycopy(parcelables, 0, bundles, 0, parcelables.length); return bundles; } public static Map<String,Object> getValues(final Bundle bundle) { HashMap<String, Object> values = new HashMap<String, Object>(); if (bundle == null) { return values; } for (String key : bundle.keySet()) { values.put(key, bundle.get(key)); } return values; } @SuppressWarnings("unchecked") public static <T extends Parcelable> ArrayList<T> getArrayList(Bundle bundle, String key) { if (bundle == null) { return null; } Object o = bundle.get(key); try { return (ArrayList<T>) o; } catch (ClassCastException e) { try { return new ArrayList<T>(Arrays.asList((T[])o)); } catch (ClassCastException e2) { Log.w(TAG, "Unable to succesfully parse ArrayList from '" + key + "'"); return null; } } } /** * Convenience function for putting the object form of primitives into a Bundle * @param bundle * @param key * @param value Must be Boolean, Float, Integer, Long, or String * @throws UnstorableTypeException */ public static void putInBundle(Bundle bundle, String key, Object value) throws UnstorableTypeException { Class<?> valueClass = value.getClass(); if (Boolean.class.isAssignableFrom(valueClass)) { bundle.putBoolean(key, ((Boolean)value).booleanValue()); } else if (Short.class.isAssignableFrom(valueClass)) { bundle.putShort(key, ((Short) value).shortValue()); } else if (Integer.class.isAssignableFrom(valueClass)) { bundle.putInt(key, ((Integer) value).intValue()); } else if (Long.class.isAssignableFrom(valueClass)) { bundle.putLong(key, ((Long) value).longValue()); } else if (Float.class.isAssignableFrom(valueClass)) { bundle.putFloat(key, ((Float) value).floatValue()); } else if (Double.class.isAssignableFrom(valueClass)) { bundle.putDouble(key, ((Double) value).doubleValue()); } else if (String.class.isAssignableFrom(valueClass)) { bundle.putString(key, ((String) value)); } else { throw new UnstorableTypeException(valueClass); } } /** * Useful function to coerce value to a long, no matter what type of object is in the bundle * @param bundle * @param key * @param defaultValue * @return */ public static long getLong(Bundle bundle, String key, long defaultValue) { Object value = bundle.get(key); if (value instanceof Long) { return (Long)value; } else if (value instanceof Integer) { return ((Integer)value).longValue(); } else if (value instanceof String) { try { return Long.valueOf((String)value); } catch (NumberFormatException e) { // We did our best, value is not a long } } return defaultValue; } }