package com.kedzie.vbox.app;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import com.google.common.base.Objects;
/**
* Description of a fragment. Also has methods to instantiate and track a reference.
*/
public class FragmentElement implements Parcelable {
public final static String BUNDLE = "info";
public static final Parcelable.Creator<FragmentElement> CREATOR = new Parcelable.Creator<FragmentElement>() {
public FragmentElement createFromParcel(Parcel in) {
return new FragmentElement(in.readString(), in.readInt(), (Class<?>)in.readSerializable(), in.readBundle());
}
public FragmentElement[] newArray(int size) {
return new FragmentElement[size];
}
};
public final String name;
public final int icon;
public Class<?> clazz;
public final Bundle args;
public Fragment fragment;
public FragmentElement(String name, Class<?> clazz, Bundle args) {
this(name, -1, clazz, args);
}
public FragmentElement(String name, int icon, Class<?> clazz, Bundle args) {
this.name=name;
this.icon=icon;
this.clazz = clazz;
this.args = args;
}
/**
* Instantiate the {@link Fragment} and keep a reference
* @param context Android {@ Context}
* @return the instantiated {@link Fragment}
*/
public Fragment instantiate(Context context) {
fragment = Fragment.instantiate(context, clazz.getName(), args);
return fragment;
}
public String getFragmentClass() {
return clazz.getName();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(icon);
dest.writeSerializable(clazz);
dest.writeBundle(args);
}
public boolean equals(Object obj) {
if (obj==this) return true;
if(obj==null) return false;
if(!getClass().equals(obj.getClass())) return false;
final FragmentElement that = (FragmentElement)obj;
return Objects.equal(this.name, that.name) && Objects.equal(this.clazz,that.clazz);
}
public int hashCode() {
return Objects.hashCode(name, clazz);
}
}