android.support.v4.app.FragmentStateTrojanHorse.java Source code

Java tutorial

Introduction

Here is the source code for android.support.v4.app.FragmentStateTrojanHorse.java

Source

/*
 * Copyright (C) 2012 uPhyca Inc.
 *
 * 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 android.support.v4.app;

import android.os.Bundle;
import android.os.Parcel;

public class FragmentStateTrojanHorse {

    private static final int DEACTIVATED = -1;
    private static final int FALSE = 0;
    private static final int OTHER = 1;

    private String mClassName;
    private int mIndex = DEACTIVATED;
    private boolean mFromLayout;
    private int mFragmentId;
    private int mContainerId;
    private String mTag;
    private boolean mRetainInstance;
    private boolean mDetached;
    private Bundle mArguments;
    private Bundle mSavedFragmentState;

    private static final int boolToInt(boolean b) {
        return b ? OTHER : FALSE;
    }

    /**
     * @param activity
     * @return
     * @see android.support.v4.app.FragmentState#instantiate(android.support.v4.app.FragmentActivity)
     */
    @SuppressWarnings("unchecked")
    public <T extends Fragment> T instantiate(FragmentActivity activity) {
        Parcel in = buildParcel();
        FragmentState fragmentState = FragmentState.CREATOR.createFromParcel(in);
        //FragmentState fragmentState = new FragmentState(in);
        in.recycle();
        return (T) fragmentState.instantiate(activity);
    }

    private Parcel buildParcel() {
        Parcel out = Parcel.obtain();
        out.writeString(mClassName);
        out.writeInt(mIndex);
        out.writeInt(boolToInt(mFromLayout));
        out.writeInt(mFragmentId);
        out.writeInt(mContainerId);
        out.writeString(mTag);
        out.writeInt(boolToInt(mRetainInstance));
        out.writeInt(boolToInt(mDetached));
        out.writeBundle(mArguments);
        out.writeBundle(mSavedFragmentState);
        out.setDataPosition(0);
        return out;
    }

    /**
     * @param className the className to set
     */
    public void setClassName(String className) {
        mClassName = className;
    }

    /**
     * @param index the index to set
     */
    public void setIndex(int index) {
        mIndex = index;
    }

    /**
     * @param fromLayout the fromLayout to set
     */
    public void setFromLayout(boolean fromLayout) {
        mFromLayout = fromLayout;
    }

    /**
     * @param fragmentId the fragmentId to set
     */
    public void setFragmentId(int fragmentId) {
        mFragmentId = fragmentId;
    }

    /**
     * @param containerId the containerId to set
     */
    public void setContainerId(int containerId) {
        mContainerId = containerId;
    }

    /**
     * @param tag the tag to set
     */
    public void setTag(String tag) {
        mTag = tag;
    }

    /**
     * @param retainInstance the retainInstance to set
     */
    public void setRetainInstance(boolean retainInstance) {
        mRetainInstance = retainInstance;
    }

    /**
     * @param detached the detached to set
     */
    public void setDetached(boolean detached) {
        mDetached = detached;
    }

    /**
     * @param arguments the arguments to set
     */
    public void setArguments(Bundle arguments) {
        mArguments = arguments;
    }

    /**
     * @param savedFragmentState the savedFragmentState to set
     */
    public void setSavedFragmentState(Bundle savedFragmentState) {
        mSavedFragmentState = savedFragmentState;
    }
}