package moe.yuuta.workmode.utils; import android.os.BaseBundle; import android.os.Bundle; import android.os.PersistableBundle; public class BundleUtils { /** * Creates a new {@link Bundle} based on the specified {@link PersistableBundle}. */ public static Bundle toBundle(PersistableBundle persistableBundle) { if (persistableBundle == null) { return null; } Bundle bundle = new Bundle(); bundle.putAll(persistableBundle); return bundle; } /** * Creates a new {@link PersistableBundle} from the specified {@link Bundle}. * Will ignore all values that are not persistable, according * to {@link #isPersistableBundleType(Object)}. */ public static PersistableBundle toPersistableBundle(Bundle bundle) { if (bundle == null) { return null; } PersistableBundle persistableBundle = new PersistableBundle(); for (String key : bundle.keySet()) { Object value = bundle.get(key); if (isPersistableBundleType(value)) { putIntoBundle(persistableBundle, key, value); } } return persistableBundle; } /** * Checks if the specified object can be put into a {@link PersistableBundle}. * * @see PersistableBundle Implementation */ public static boolean isPersistableBundleType(Object value) { return ((value instanceof PersistableBundle) || (value instanceof Integer) || (value instanceof int[]) || (value instanceof Long) || (value instanceof long[]) || (value instanceof Double) || (value instanceof double[]) || (value instanceof String) || (value instanceof String[]) || (value instanceof Boolean) || (value instanceof boolean[]) ); } /** * Attempts to insert the specified key value pair into the specified bundle. * * @throws IllegalArgumentException if the value type can not be put into the bundle. */ public static void putIntoBundle(BaseBundle baseBundle, String key, Object value) throws IllegalArgumentException { if (value == null) { throw new IllegalArgumentException("Unable to determine type of null values"); } else if (value instanceof Integer) { baseBundle.putInt(key, (int) value); } else if (value instanceof int[]) { baseBundle.putIntArray(key, (int[]) value); } else if (value instanceof Long) { baseBundle.putLong(key, (long) value); } else if (value instanceof long[]) { baseBundle.putLongArray(key, (long[]) value); } else if (value instanceof Double) { baseBundle.putDouble(key, (double) value); } else if (value instanceof double[]) { baseBundle.putDoubleArray(key, (double[]) value); } else if (value instanceof String) { baseBundle.putString(key, (String) value); } else if (value instanceof String[]) { baseBundle.putStringArray(key, (String[]) value); } else if (value instanceof Boolean) { baseBundle.putBoolean(key, (boolean) value); } else if (value instanceof boolean[]) { baseBundle.putBooleanArray(key, (boolean[]) value); } else if (value instanceof PersistableBundle) { baseBundle.putAll((PersistableBundle) value); } else { throw new IllegalArgumentException("Objects of type " + value.getClass().getSimpleName() + " can not be put into a " + BaseBundle.class.getSimpleName()); } } }