package com.mm.android.deviceaddmodule.mobilecommon.eventbus.event; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import java.io.Serializable; public final class Event implements Parcelable{ private static final int MAX_POOL_SIZE = 1000; private final static ICachePool cachePool = new DefaultCachePool<>(Event.class, MAX_POOL_SIZE); private int eventId; private int arg1; private int arg2; private Object obj; private String posterId; private Bundle extras; private Bundle data = new Bundle(); public Event() { } public Event(int eventId) { this.eventId = eventId; } public Event(int eventId, int arg1) { this.eventId = eventId; this.arg1 = arg1; } public Event(int eventId, int arg1, int arg2) { this.eventId = eventId; this.arg1 = arg1; this.arg2 = arg2; } public Event(int eventId, int arg1, int arg2, Object obj) { this.eventId = eventId; this.arg1 = arg1; this.arg2 = arg2; this.obj = obj; } public Event(int eventId, Bundle extras) { this.eventId = eventId; this.extras = extras; } public static Event obtain(int eventId) { Event event = cachePool.obtain(); if (event == null) { event = new Event(); } event.setEventId(eventId); return event; } public void recycle() { clearForRecycle(); cachePool.recycle(this); } public void copyFrom(Event e) { this.eventId = e.eventId; this.arg1 = e.arg1; this.arg2 = e.arg2; this.obj = e.obj; this.posterId = e.posterId; this.data = (Bundle)data.clone(); if (e.extras != null) { this.extras = (Bundle) e.extras.clone(); } else { this.extras = null; } } void clearForRecycle() { eventId = 0; arg1 = 0; arg2 = 0; obj = null; posterId = null; if (this.extras != null) { extras.clear(); extras = null; } this.data.clear(); } public void setPosterId(String id) { posterId = id; } public String getPosterId() { return posterId; } public void putString(String key, String value) { data.putString(key, value); } public void putInt(String key, int value) { data.putInt(key, value); } public void putShort(String key, short value) { data.putShort(key, value); } public void putBoolean(String key, boolean value) { data.putBoolean(key, value); } public void putDouble(String key, double value) { data.putDouble(key, value); } public void putParcelable(String key, Parcelable value) { data.putParcelable(key, value); } public void putSerializable(String key, Serializable value) { data.putSerializable(key, value); } public void putBundle(String key, Bundle value) { data.putBundle(key, value); } public String getString(String key) { return data.getString(key); } public int getInt(String key) { return data.getInt(key); } public short getShort(String key) { return data.getShort(key); } public boolean getBoolean(String key) { return data.getBoolean(key); } public double getDouble(String key) { return data.getDouble(key); } public Parcelable getParcelable(String key) { return data.getParcelable(key); } public Serializable getSerializable(String key) { return data.getSerializable(key); } public Bundle getBundle(String key) { return data.getBundle(key); } public Object get(String key) { return data.get(key); } public boolean containsKey(String key) { return data.containsKey(key); } @Override public String toString() { StringBuilder b = new StringBuilder(); b.append("{ eventId="); b.append(eventId); if (arg1 != 0) { b.append(" arg1="); b.append(arg1); } if (arg2 != 0) { b.append(" arg2="); b.append(arg2); } if (obj != null) { b.append(" obj="); b.append(obj); } if (posterId != null) { b.append("posterId ="); b.append(posterId); } if (extras != null) { b.append(" extras="); b.append(extras.toString()); } b.append(" data="); b.append(data.toString()); b.append(" }"); return b.toString(); } public Object getObject() { return obj; } public void setObject(Object object) { this.obj = object; } public Bundle getExtras() { return extras; } public int getEventId() { return eventId; } public int getArg1() { return arg1; } public void setArg1(int arg1) { this.arg1 = arg1; } public int getArg2() { return arg2; } public void setArg2(int arg2) { this.arg2 = arg2; } public void setEventId(int eventId) { this.eventId = eventId; } public void setExtras(Bundle bundle) { this.extras = bundle; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(eventId); dest.writeInt(arg1); dest.writeInt(arg2); Bundle bundle = new Bundle(); if (posterId != null) { dest.writeString(posterId); } if (obj != null) { try { if (obj instanceof Parcelable) { Parcelable p = (Parcelable) obj; bundle.putParcelable("obj", p); } else if (obj instanceof Serializable) { Serializable p = (Serializable) obj; bundle.putSerializable("obj", p); } } catch (ClassCastException e) { throw new RuntimeException("Can't marshal non-Parcelable objects across setObject()."); } } if (extras != null) { bundle.putBundle("extras", extras); } bundle.putBundle("data", data); dest.writeBundle(bundle); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public Event createFromParcel(Parcel source) { Event event = new Event(); event.readFromParcel(source); return event; } public Event[] newArray(int size) { return new Event[size]; } }; private void readFromParcel(Parcel source) { eventId = source.readInt(); arg1 = source.readInt(); arg2 = source.readInt(); posterId = source.readString(); /* if (source.readInt() != 0) { obj = source.readParcelable(getClass().getClassLoader()); }*/ Bundle bundle = source.readBundle(); if (bundle.containsKey("obj")) { obj = bundle.getParcelable("obj"); if (obj == null) { obj = bundle.getSerializable("obj"); } } if (bundle.containsKey("extras")) { extras = bundle.getBundle("extras"); } data = bundle.getBundle("data"); } }