All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.parceler.NonParcelRepository Maven / Gradle / Ivy

There is a newer version: 1.1.13
Show newest version
/**
 * Copyright 2011-2015 John Ericksen
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.parceler;

import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import org.parceler.converter.*;

import java.util.*;

final class NonParcelRepository implements Repository {

    private static final NonParcelRepository INSTANCE = new NonParcelRepository();
    private final Map parcelableCollectionFactories = new HashMap();

    private NonParcelRepository() {
        //private singleton constructor
        parcelableCollectionFactories.put(Collection.class, new CollectionParcelableFactory());
        parcelableCollectionFactories.put(List.class, new ListParcelableFactory());
        parcelableCollectionFactories.put(ArrayList.class, new ListParcelableFactory());
        parcelableCollectionFactories.put(Set.class, new SetParcelableFactory());
        parcelableCollectionFactories.put(HashSet.class, new SetParcelableFactory());
        parcelableCollectionFactories.put(TreeSet.class, new TreeSetParcelableFactory());
        parcelableCollectionFactories.put(SparseArray.class, new SparseArrayParcelableFactory());
        parcelableCollectionFactories.put(Map.class, new MapParcelableFactory());
        parcelableCollectionFactories.put(HashMap.class, new MapParcelableFactory());
        parcelableCollectionFactories.put(TreeMap.class, new TreeMapParcelableFactory());
        parcelableCollectionFactories.put(Integer.class, new IntegerParcelableFactory());
        parcelableCollectionFactories.put(Long.class, new LongParcelableFactory());
        parcelableCollectionFactories.put(Double.class, new DoubleParcelableFactory());
        parcelableCollectionFactories.put(Float.class, new FloatParcelableFactory());
        parcelableCollectionFactories.put(Byte.class, new ByteParcelableFactory());
        parcelableCollectionFactories.put(String.class, new StringParcelableFactory());
        parcelableCollectionFactories.put(Character.class, new CharacterParcelableFactory());
        parcelableCollectionFactories.put(Boolean.class, new BooleanParcelableFactory());
        parcelableCollectionFactories.put(byte[].class, new ByteArrayParcelableFactory());
        parcelableCollectionFactories.put(char[].class, new CharArrayParcelableFactory());
        parcelableCollectionFactories.put(boolean[].class, new BooleanArrayParcelableFactory());
        parcelableCollectionFactories.put(IBinder.class, new IBinderParcelableFactory());
        parcelableCollectionFactories.put(Bundle.class, new BundleParcelableFactory());
        parcelableCollectionFactories.put(SparseBooleanArray.class, new SparseBooleanArrayParcelableFactory());
        parcelableCollectionFactories.put(LinkedList.class, new LinkedListParcelableFactory());
        parcelableCollectionFactories.put(LinkedHashMap.class, new LinkedHashMapParcelableFactory());
        parcelableCollectionFactories.put(SortedMap.class, new TreeMapParcelableFactory());
        parcelableCollectionFactories.put(SortedSet.class, new TreeSetParcelableFactory());
        parcelableCollectionFactories.put(LinkedHashSet.class, new LinkedHashSetParcelableFactory());

    }

    public static NonParcelRepository getInstance() {
        return INSTANCE;
    }

    @Override
    public Map get() {
        return parcelableCollectionFactories;
    }

    private static class ListParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(List input) {
            return new ListParcelable(input);
        }
    }

    private static class CharacterParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Character input) {
            return new CharacterParcelable(input);
        }
    }

    private static class BooleanParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Boolean input) {
            return new BooleanParcelable(input);
        }
    }

    private static class ByteArrayParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(byte[] input) {
            return new ByteArrayParcelable(input);
        }
    }

    private static class CharArrayParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(char[] input) {
            return new CharArrayParcelable(input);
        }
    }

    private static class BooleanArrayParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(boolean[] input) {
            return new BooleanArrayParcelable(input);
        }
    }

    private static class IBinderParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(IBinder input) {
            return new IBinderParcelable(input);
        }
    }

    private static class BundleParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Bundle input) {
            return input;
        }
    }

    private static class SparseBooleanArrayParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(SparseBooleanArray input) {
            return new SparseBooleanArrayParcelable(input);
        }
    }

    private static class LinkedListParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(LinkedList input) {
            return new LinkedListParcelable(input);
        }
    }

    private static class LinkedHashMapParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(LinkedHashMap input) {
            return new LinkedHashMapParcelable(input);
        }
    }

    private static class LinkedHashSetParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(LinkedHashSet input) {
            return new LinkedHashSetParcelable(input);
        }
    }

    private static class SetParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Set input) {
            return new SetParcelable(input);
        }
    }

    private static class TreeSetParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Set input) {
            return new TreeSetParcelable(input);
        }
    }

    private static class MapParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Map input) {
            return new MapParcelable(input);
        }
    }

    private static class TreeMapParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Map input) {
            return new TreeMapParcelable(input);
        }
    }

    private static class CollectionParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(Collection input) {
            return new CollectionParcelable(input);
        }
    }

    private static class SparseArrayParcelableFactory implements Parcels.ParcelableFactory {

        @Override
        public Parcelable buildParcelable(SparseArray input) {
            return new SparseArrayParcelable(input);
        }
    }

    private static class IntegerParcelableFactory implements Parcels.ParcelableFactory{

        @Override
        public Parcelable buildParcelable(Integer input) {
            return new IntegerParcelable(input);
        }
    }

    private static class LongParcelableFactory implements Parcels.ParcelableFactory{

        @Override
        public Parcelable buildParcelable(Long input) {
            return new LongParcelable(input);
        }
    }

    private static class DoubleParcelableFactory implements Parcels.ParcelableFactory{

        @Override
        public Parcelable buildParcelable(Double input) {
            return new DoubleParcelable(input);
        }
    }

    private static class FloatParcelableFactory implements Parcels.ParcelableFactory{

        @Override
        public Parcelable buildParcelable(Float input) {
            return new FloatParcelable(input);
        }
    }

    private static class ByteParcelableFactory implements Parcels.ParcelableFactory{

        @Override
        public Parcelable buildParcelable(Byte input) {
            return new ByteParcelable(input);
        }
    }

    private static class StringParcelableFactory implements Parcels.ParcelableFactory{

        @Override
        public Parcelable buildParcelable(String input) {
            return new StringParcelable(input);
        }
    }

    static class ParcelableParcelableFactory implements Parcels.ParcelableFactory{

        @Override
        public Parcelable buildParcelable(Parcelable input) {
            return new ParcelableParcelable(input);
        }
    }


    public static final class ListParcelable extends ConverterParcelable{

        private static final ArrayListParcelConverter CONVERTER = new ArrayListParcelConverter() {

            @Override
            public Object itemFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(ListParcelable.class.getClassLoader()));
            }

            @Override
            public void itemToParcel(Object input, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(input), 0);
            }
        };

        public ListParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public ListParcelable(List value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final ListParcelableCreator CREATOR = new ListParcelableCreator();

        private static final class ListParcelableCreator implements Creator {

            @Override
            public ListParcelable createFromParcel(android.os.Parcel parcel) {
                return new ListParcelable(parcel);
            }

            @Override
            public ListParcelable[] newArray(int size) {
                return new ListParcelable[size];
            }
        }
    }

    public static final class LinkedListParcelable extends ConverterParcelable{

        private static final LinkedListParcelConverter CONVERTER = new LinkedListParcelConverter() {

            @Override
            public Object itemFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(LinkedListParcelable.class.getClassLoader()));
            }

            @Override
            public void itemToParcel(Object input, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(input), 0);
            }
        };

        public LinkedListParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public LinkedListParcelable(LinkedList value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final LinkedListParcelableCreator CREATOR = new LinkedListParcelableCreator();

        private static final class LinkedListParcelableCreator implements Creator {

            @Override
            public LinkedListParcelable createFromParcel(android.os.Parcel parcel) {
                return new LinkedListParcelable(parcel);
            }

            @Override
            public LinkedListParcelable[] newArray(int size) {
                return new LinkedListParcelable[size];
            }
        }
    }

    public static final class MapParcelable extends ConverterParcelable {

        private static final HashMapParcelConverter CONVERTER = new HashMapParcelConverter() {

            @Override
            public void mapKeyToParcel(Object key, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(key), 0);
            }

            @Override
            public void mapValueToParcel(Object value, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(value), 0);
            }

            @Override
            public Object mapKeyFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(MapParcelable.class.getClassLoader()));
            }

            @Override
            public Object mapValueFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(MapParcelable.class.getClassLoader()));
            }
        };

        public MapParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public MapParcelable(Map value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final MapParcelableCreator CREATOR = new MapParcelableCreator();

        private static final class MapParcelableCreator implements Creator {

            @Override
            public MapParcelable createFromParcel(android.os.Parcel parcel$$17) {
                return new MapParcelable(parcel$$17);
            }

            @Override
            public MapParcelable[] newArray(int size) {
                return new MapParcelable[size];
            }

        }
    }

    public static final class LinkedHashMapParcelable extends ConverterParcelable {

        private static final LinkedHashMapParcelConverter CONVERTER = new LinkedHashMapParcelConverter() {

            @Override
            public void mapKeyToParcel(Object key, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(key), 0);
            }

            @Override
            public void mapValueToParcel(Object value, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(value), 0);
            }

            @Override
            public Object mapKeyFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(MapParcelable.class.getClassLoader()));
            }

            @Override
            public Object mapValueFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(MapParcelable.class.getClassLoader()));
            }
        };

        public LinkedHashMapParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public LinkedHashMapParcelable(LinkedHashMap value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final LinkedHashMapParcelableCreator CREATOR = new LinkedHashMapParcelableCreator();

        private static final class LinkedHashMapParcelableCreator implements Creator {

            @Override
            public LinkedHashMapParcelable createFromParcel(android.os.Parcel parcel$$17) {
                return new LinkedHashMapParcelable(parcel$$17);
            }

            @Override
            public LinkedHashMapParcelable[] newArray(int size) {
                return new LinkedHashMapParcelable[size];
            }

        }
    }

    public static final class TreeMapParcelable extends ConverterParcelable {

        private static final TreeMapParcelConverter CONVERTER = new TreeMapParcelConverter() {

            @Override
            public void mapKeyToParcel(Object key, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(key), 0);
            }

            @Override
            public void mapValueToParcel(Object value, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(value), 0);
            }

            @Override
            public Object mapKeyFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(MapParcelable.class.getClassLoader()));
            }

            @Override
            public Object mapValueFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(MapParcelable.class.getClassLoader()));
            }
        };

        public TreeMapParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public TreeMapParcelable(Map value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final TreeMapParcelableCreator CREATOR = new TreeMapParcelableCreator();

        private static final class TreeMapParcelableCreator implements Creator {

            @Override
            public TreeMapParcelable createFromParcel(android.os.Parcel parcel$$17) {
                return new TreeMapParcelable(parcel$$17);
            }

            @Override
            public TreeMapParcelable[] newArray(int size) {
                return new TreeMapParcelable[size];
            }

        }
    }

    public static final class SetParcelable extends ConverterParcelable {

        private static final HashSetParcelConverter CONVERTER = new HashSetParcelConverter() {

            @Override
            public Object itemFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(SetParcelable.class.getClassLoader()));
            }

            @Override
            public void itemToParcel(Object input, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(input), 0);
            }
        };

        public SetParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public SetParcelable(Set value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final SetParcelableCreator CREATOR = new SetParcelableCreator();

        private static final class SetParcelableCreator implements Creator {

            @Override
            public SetParcelable createFromParcel(android.os.Parcel parcel) {
                return new SetParcelable(parcel);
            }

            @Override
            public SetParcelable[] newArray(int size) {
                return new SetParcelable[size];
            }
        }
    }

    public static final class TreeSetParcelable extends ConverterParcelable {

        private static final TreeSetParcelConverter CONVERTER = new TreeSetParcelConverter() {

            @Override
            public Object itemFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(TreeSetParcelable.class.getClassLoader()));
            }

            @Override
            public void itemToParcel(Object input, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(input), 0);
            }
        };

        public TreeSetParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public TreeSetParcelable(Set value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final TreeSetParcelableCreator CREATOR = new TreeSetParcelableCreator();

        private static final class TreeSetParcelableCreator implements Creator {

            @Override
            public TreeSetParcelable createFromParcel(android.os.Parcel parcel) {
                return new TreeSetParcelable(parcel);
            }

            @Override
            public TreeSetParcelable[] newArray(int size) {
                return new TreeSetParcelable[size];
            }
        }
    }

    public static final class LinkedHashSetParcelable extends ConverterParcelable {

        private static final LinkedHashSetParcelConverter CONVERTER = new LinkedHashSetParcelConverter() {

            @Override
            public Object itemFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(LinkedHashSetParcelable.class.getClassLoader()));
            }

            @Override
            public void itemToParcel(Object input, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(input), 0);
            }
        };

        public LinkedHashSetParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public LinkedHashSetParcelable(LinkedHashSet value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final LinkedHashSetParcelableCreator CREATOR = new LinkedHashSetParcelableCreator();

        private static final class LinkedHashSetParcelableCreator implements Creator {

            @Override
            public LinkedHashSetParcelable createFromParcel(android.os.Parcel parcel) {
                return new LinkedHashSetParcelable(parcel);
            }

            @Override
            public LinkedHashSetParcelable[] newArray(int size) {
                return new LinkedHashSetParcelable[size];
            }
        }
    }

    public static final class CollectionParcelable extends ConverterParcelable {

        private static final CollectionParcelConverter CONVERTER = new ArrayListParcelConverter() {

            @Override
            public Object itemFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(CollectionParcelable.class.getClassLoader()));
            }

            @Override
            public void itemToParcel(Object input, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(input), 0);
            }
        };

        public CollectionParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public CollectionParcelable(Collection value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final CollectionParcelableCreator CREATOR = new CollectionParcelableCreator();

        private static final class CollectionParcelableCreator implements Creator {

            @Override
            public CollectionParcelable createFromParcel(android.os.Parcel parcel) {
                return new CollectionParcelable(parcel);
            }

            @Override
            public CollectionParcelable[] newArray(int size) {
                return new CollectionParcelable[size];
            }
        }
    }

    public static final class SparseArrayParcelable extends ConverterParcelable {

        private static final SparseArrayParcelConverter CONVERTER = new SparseArrayParcelConverter() {

            @Override
            public Object itemFromParcel(Parcel parcel) {
                return Parcels.unwrap(parcel.readParcelable(SparseArrayParcelable.class.getClassLoader()));
            }

            @Override
            public void itemToParcel(Object input, Parcel parcel) {
                parcel.writeParcelable(Parcels.wrap(input), 0);
            }
        };

        public SparseArrayParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public SparseArrayParcelable(SparseArray value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final SparseArrayCreator CREATOR = new SparseArrayCreator();

        private static final class SparseArrayCreator implements Creator {

            @Override
            public SparseArrayParcelable createFromParcel(android.os.Parcel parcel) {
                return new SparseArrayParcelable(parcel);
            }

            @Override
            public SparseArrayParcelable[] newArray(int size) {
                return new SparseArrayParcelable[size];
            }
        }
    }

    public static final class SparseBooleanArrayParcelable extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public SparseBooleanArray nullSafeFromParcel(Parcel parcel) {
                return parcel.readSparseBooleanArray();
            }

            @Override
            public void nullSafeToParcel(SparseBooleanArray input, Parcel parcel) {
                parcel.writeSparseBooleanArray(input);
            }
        };

        public SparseBooleanArrayParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public SparseBooleanArrayParcelable(SparseBooleanArray value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final SparseBooleanArrayCreator CREATOR = new SparseBooleanArrayCreator();

        private static final class SparseBooleanArrayCreator implements Creator {

            @Override
            public SparseBooleanArrayParcelable createFromParcel(android.os.Parcel parcel) {
                return new SparseBooleanArrayParcelable(parcel);
            }

            @Override
            public SparseBooleanArrayParcelable[] newArray(int size) {
                return new SparseBooleanArrayParcelable[size];
            }
        }
    }

    public static final class IntegerParcelable extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public Integer nullSafeFromParcel(Parcel parcel) {
                return parcel.readInt();
            }

            @Override
            public void nullSafeToParcel(Integer input, Parcel parcel) {
                parcel.writeInt(input);
            }
        };

        public IntegerParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public IntegerParcelable(Integer value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final IntegerParcelableCreator CREATOR = new IntegerParcelableCreator();

        private static final class IntegerParcelableCreator implements Creator {

            @Override
            public IntegerParcelable createFromParcel(android.os.Parcel parcel) {
                return new IntegerParcelable(parcel);
            }

            @Override
            public IntegerParcelable[] newArray(int size) {
                return new IntegerParcelable[size];
            }
        }
    }

    public static final class LongParcelable  extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public Long nullSafeFromParcel(Parcel parcel) {
                return parcel.readLong();
            }

            @Override
            public void nullSafeToParcel(Long input, Parcel parcel) {
                parcel.writeLong(input);
            }
        };

        public LongParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public LongParcelable(Long value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final LongParcelableCreator CREATOR = new LongParcelableCreator();

        private static final class LongParcelableCreator implements Creator {

            @Override
            public LongParcelable createFromParcel(android.os.Parcel parcel) {
                return new LongParcelable(parcel);
            }

            @Override
            public LongParcelable[] newArray(int size) {
                return new LongParcelable[size];
            }
        }
    }

    public static final class DoubleParcelable  extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public Double nullSafeFromParcel(Parcel parcel) {
                return parcel.readDouble();
            }

            @Override
            public void nullSafeToParcel(Double input, Parcel parcel) {
                parcel.writeDouble(input);
            }
        };

        public DoubleParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public DoubleParcelable(Double value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final DoubleParcelableCreator CREATOR = new DoubleParcelableCreator();

        private static final class DoubleParcelableCreator implements Creator {

            @Override
            public DoubleParcelable createFromParcel(android.os.Parcel parcel) {
                return new DoubleParcelable(parcel);
            }

            @Override
            public DoubleParcelable[] newArray(int size) {
                return new DoubleParcelable[size];
            }
        }
    }

    public static final class FloatParcelable  extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public Float nullSafeFromParcel(Parcel parcel) {
                return parcel.readFloat();
            }

            @Override
            public void nullSafeToParcel(Float input, Parcel parcel) {
                parcel.writeFloat(input);
            }
        };

        public FloatParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public FloatParcelable(Float value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final FloatParcelableCreator CREATOR = new FloatParcelableCreator();

        private static final class FloatParcelableCreator implements Creator {

            @Override
            public FloatParcelable createFromParcel(android.os.Parcel parcel) {
                return new FloatParcelable(parcel);
            }

            @Override
            public FloatParcelable[] newArray(int size) {
                return new FloatParcelable[size];
            }
        }
    }

    public static final class ByteParcelable extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public Byte nullSafeFromParcel(Parcel parcel) {
                return parcel.readByte();
            }

            @Override
            public void nullSafeToParcel(Byte input, Parcel parcel) {
                parcel.writeByte(input);
            }
        };

        public ByteParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public ByteParcelable(Byte value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final ByteParcelableCreator CREATOR = new ByteParcelableCreator();

        private static final class ByteParcelableCreator implements Creator {

            @Override
            public ByteParcelable createFromParcel(android.os.Parcel parcel) {
                return new ByteParcelable(parcel);
            }

            @Override
            public ByteParcelable[] newArray(int size) {
                return new ByteParcelable[size];
            }
        }
    }

    public static final class IBinderParcelable extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public IBinder nullSafeFromParcel(Parcel parcel) {
                return parcel.readStrongBinder();
            }

            @Override
            public void nullSafeToParcel(IBinder input, Parcel parcel) {
                parcel.writeStrongBinder(input);
            }
        };

        public IBinderParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public IBinderParcelable(IBinder value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final IBinderParcelableCreator CREATOR = new IBinderParcelableCreator();

        private static final class IBinderParcelableCreator implements Creator {

            @Override
            public IBinderParcelable createFromParcel(android.os.Parcel parcel) {
                return new IBinderParcelable(parcel);
            }

            @Override
            public IBinderParcelable[] newArray(int size) {
                return new IBinderParcelable[size];
            }
        }
    }

    public static final class ByteArrayParcelable extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public byte[] nullSafeFromParcel(Parcel parcel) {
                return parcel.createByteArray();
            }

            @Override
            public void nullSafeToParcel(byte[] input, Parcel parcel) {
                parcel.writeByteArray(input);
            }
        };

        public ByteArrayParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public ByteArrayParcelable(byte[] value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final ByteArrayParcelableCreator CREATOR = new ByteArrayParcelableCreator();

        private static final class ByteArrayParcelableCreator implements Creator {

            @Override
            public ByteArrayParcelable createFromParcel(android.os.Parcel parcel) {
                return new ByteArrayParcelable(parcel);
            }

            @Override
            public ByteArrayParcelable[] newArray(int size) {
                return new ByteArrayParcelable[size];
            }
        }
    }

    public static final class BooleanArrayParcelable extends ConverterParcelable {

        private static final BooleanArrayParcelConverter CONVERTER = new BooleanArrayParcelConverter();

        public BooleanArrayParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public BooleanArrayParcelable(boolean[] value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final BooleanArrayParcelableCreator CREATOR = new BooleanArrayParcelableCreator();

        private static final class BooleanArrayParcelableCreator implements Creator {

            @Override
            public BooleanArrayParcelable createFromParcel(android.os.Parcel parcel) {
                return new BooleanArrayParcelable(parcel);
            }

            @Override
            public BooleanArrayParcelable[] newArray(int size) {
                return new BooleanArrayParcelable[size];
            }
        }
    }

    public static final class BooleanParcelable extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public Boolean nullSafeFromParcel(Parcel parcel) {
                return parcel.createBooleanArray()[0];
            }

            @Override
            public void nullSafeToParcel(Boolean input, Parcel parcel) {
                parcel.writeBooleanArray(new boolean[]{input});
            }
        };

        public BooleanParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public BooleanParcelable(boolean value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final BooleanParcelableCreator CREATOR = new BooleanParcelableCreator();

        private static final class BooleanParcelableCreator implements Creator {

            @Override
            public BooleanParcelable createFromParcel(android.os.Parcel parcel) {
                return new BooleanParcelable(parcel);
            }

            @Override
            public BooleanParcelable[] newArray(int size) {
                return new BooleanParcelable[size];
            }
        }
    }

    public static final class CharArrayParcelable extends ConverterParcelable {

        private static final CharArrayParcelConverter CONVERTER = new CharArrayParcelConverter();

        public CharArrayParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public CharArrayParcelable(char[] value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final CharArrayParcelableCreator CREATOR = new CharArrayParcelableCreator();

        private static final class CharArrayParcelableCreator implements Creator {

            @Override
            public CharArrayParcelable createFromParcel(android.os.Parcel parcel) {
                return new CharArrayParcelable(parcel);
            }

            @Override
            public CharArrayParcelable[] newArray(int size) {
                return new CharArrayParcelable[size];
            }
        }
    }

    public static final class CharacterParcelable extends ConverterParcelable {

        private static final NullableParcelConverter CONVERTER = new NullableParcelConverter() {

            @Override
            public Character nullSafeFromParcel(Parcel parcel) {
                return parcel.createCharArray()[0];
            }

            @Override
            public void nullSafeToParcel(Character input, Parcel parcel) {
                parcel.writeCharArray(new char[]{input});
            }
        };

        public CharacterParcelable(Parcel parcel) {
            super(parcel, CONVERTER);
        }

        public CharacterParcelable(Character value) {
            super(value, CONVERTER);
        }

        @SuppressWarnings("UnusedDeclaration")
        public static final CharacterParcelableCreator CREATOR = new CharacterParcelableCreator();

        private static final class CharacterParcelableCreator implements Creator {

            @Override
            public CharacterParcelable createFromParcel(android.os.Parcel parcel) {
                return new CharacterParcelable(parcel);
            }

            @Override
            public CharacterParcelable[] newArray(int size) {
                return new CharacterParcelable[size];
            }
        }
    }

    public static final class StringParcelable implements Parcelable, ParcelWrapper {

        private String contents;

        @SuppressWarnings("UnusedDeclaration")
        public static final StringParcelableCreator CREATOR = new StringParcelableCreator();

        @SuppressWarnings("unchecked")
        private StringParcelable(android.os.Parcel parcel) {
            contents = parcel.readString();
        }

        private StringParcelable(String contents) {
            this.contents = contents;
        }

        @Override
        public void writeToParcel(android.os.Parcel parcel, int flags) {
            parcel.writeString(contents);
        }

        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public String getParcel() {
            return contents;
        }

        private static final class StringParcelableCreator implements Creator {

            @Override
            public StringParcelable createFromParcel(android.os.Parcel parcel) {
                return new StringParcelable(parcel);
            }

            @Override
            public StringParcelable[] newArray(int size) {
                return new StringParcelable[size];
            }
        }
    }

    private static class ConverterParcelable implements Parcelable, ParcelWrapper {

        private final T value;
        private final TypeRangeParcelConverter converter;

        @SuppressWarnings("unchecked")
        private ConverterParcelable(android.os.Parcel parcel, TypeRangeParcelConverter converter) {
            this(converter.fromParcel(parcel), converter);
        }

        private ConverterParcelable(T value, TypeRangeParcelConverter converter) {
            this.converter = converter;
            this.value = value;
        }

        @Override
        public void writeToParcel(android.os.Parcel parcel, int flags) {
            converter.toParcel(value, parcel);
        }

        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public T getParcel() {
            return value;
        }
    }

    public static final class ParcelableParcelable implements Parcelable, ParcelWrapper {

        private Parcelable parcelable;

        private ParcelableParcelable(android.os.Parcel parcel) {
            parcelable = parcel.readParcelable(ParcelableParcelable.class.getClassLoader());
        }

        private ParcelableParcelable(Parcelable parcelable) {
            this.parcelable = parcelable;
        }

        @Override
        public void writeToParcel(android.os.Parcel parcel, int flags) {
            parcel.writeParcelable(parcelable, flags);
        }

        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public Parcelable getParcel() {
            return parcelable;
        }

        public static final ParcelableParcelableCreator CREATOR = new ParcelableParcelableCreator();

        private static final class ParcelableParcelableCreator implements Creator {

            @Override
            public ParcelableParcelable createFromParcel(android.os.Parcel parcel) {
                return new ParcelableParcelable(parcel);
            }

            @Override
            public ParcelableParcelable[] newArray(int size) {
                return new ParcelableParcelable[size];
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy