What are some great stories about friendship?

I read this story years ago and never forgot it.

During WW2 the Red Cross set up a program for people to send letters to soldiers in Europe so they would never be lonely and always get mail from someone. During the course of this program a soldier received a letter from a woman he didn't know and had never met. She asked him the typical things and he wrote a return letter with the typical answers. What was the food like? Did he get scared? Was he homesick?, and so on. To his surprise, she wrote him back, and then he wrote her back and a pen-pal friendship was formed.

As their letters became more frequent they realized that they had much in common and a friendship was formed. Through the ever increasing letters they came to know each other more and he looked forward to them as he moved ever forward into combat and danger. He spoke of the hardship and the horror, of missing home and family. She told of the sacrifice they were making at home for the soldiers and how everyone appreciated what the soldiers were doing for them.

Over time their friendship began to blossom into love, but they never exchanged photos. Over the years of warfare, their love blossomed through their letters, though  they never heard each other's voices or knew what the other looked like. Eventually they declared their love for each other and decided to meet when he returned to America. Her letters sustained him despite the war raging around him. His letters touched her heart and she wished she could reach out and comfort him.

Eventually the war ended. He told her he was coming home and would be landing in New York and they made a plan to meet at Grand Central Station. He would look like countless other soldiers so he told her he would hold a bouquet of carnations and she said she would be carrying a particular book and wearing a white beret. If their love was real, they could meet and then, who knows?

As his ship docked in New York, he could think of nothing but her. His feet landed on American soil for the first time in years, but this thoughts were of nothing but getting to Grand Central Station. New York City was bustling with people thrilled the war was over and bubbling with possibility. At the station he bought a bouquet from a vendor and waited under the giant clock, eagerly searching for the beret and the book in the hands of every woman he met.

As the time passed, he began to feel disappointment until a beautiful and stylish woman came up to him and said, "Hi soldier, looking to show a girl a good time?" and winked at him. He looked for the beret and the book, but she had none. She was a streetwalker, he thought, but she was strikingly beautiful. He looked at her for a minute. The time for the meeting was well past. His friend was not going to show up, and maybe spending some time with this woman would be a consolation. But then he said, "Thank you, Miss, but no. I am waiting for someone." and he turned away.

Shortly after, a short, plain and overweight woman appeared wearing a white beret and carrying a book. He knew it was her. He swallowed his disappointment, his hopes for meeting the love of his life dashed. But he put a big smile on his face and called her name. She smiled and came over to him. He bent to kiss her cheek, but she pushed him off. Instead she handed him the book and the beret and walked off. Confused, he took the book and opened it to the fly leaf. Written  inside were the words, "I am right behind you." He stood up, thinking we was the victim of a cruel prank and he turned quickly, his combat instincts ready to pounce. But it was the beautiful woman standing and smiling before him. She took the beret from him and put it on her head.
"I had to be sure," she said to him, "if you were the man of character I dreamed about. And you are." And she came into his arms and they kissed for the first time under the big clock in the center of Grand Central Station as hundreds strode past, oblivious of the love unfolding right in front of them.

Is it Java? Where is OOP?

/*
* Copyright (C) 2011 The Android Open Source Project
*
* 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
*
*      Page on apache.org
*
* 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.Parcel;
import android.os.Parcelable;
import android.support.v4.util.LogWriter;
import android.text.TextUtils;
import android.util.Log;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;

final class BackStackState implements Parcelable {
    final int[] mOps;
    final int mTransition;
    final int mTransitionStyle;
    final String mName;
    final int mIndex;
    final int mBreadCrumbTitleRes;
    final CharSequence mBreadCrumbTitleText;
    final int mBreadCrumbShortTitleRes;
    final CharSequence mBreadCrumbShortTitleText;

    public BackStackState(FragmentManagerImpl fm, BackStackRecord bse) {
        int numRemoved = 0;
        BackStackRecord.Op op = bse.mHead;
        while (op != null) {
            if (op.removed != null) numRemoved += op.removed.size();
            op = op.next;
        }
        mOps = new int[bse.mNumOp*7 + numRemoved];

        if (!bse.mAddToBackStack) {
            throw new IllegalStateException("Not on back stack");
        }

        op = bse.mHead;
        int pos = 0;
        while (op != null) {
            mOps[pos++] = op.cmd;
            mOps[pos++] = op.fragment != null ? op.fragment.mIndex : 1;
            mOps[pos++] = op.enterAnim;
            mOps[pos++] = op.exitAnim;
            mOps[pos++] = op.popEnterAnim;
            mOps[pos++] = op.popExitAnim;
            if (op.removed != null) {
                final int N = op.removed.size();
                mOps[pos++] = N;
                for (int i=0; i<N; i++) {
                    mOps[pos++] = op.removed.get(i).mIndex;
                }
            } else {
                mOps[pos++] = 0;
            }
            op = op.next;
        }
        mTransition = bse.mTransition;
        mTransitionStyle = bse.mTransitionStyle;
        mName = bse.mName;
        mIndex = bse.mIndex;
        mBreadCrumbTitleRes = bse.mBreadCrumbTitleRes;
        mBreadCrumbTitleText = bse.mBreadCrumbTitleText;
        mBreadCrumbShortTitleRes = bse.mBreadCrumbShortTitleRes;
        mBreadCrumbShortTitleText = bse.mBreadCrumbShortTitleText;
    }

    public BackStackState(Parcel in) {
        mOps = in.createIntArray();
        mTransition = in.readInt();
        mTransitionStyle = in.readInt();
        mName = in.readString();
        mIndex = in.readInt();
        mBreadCrumbTitleRes = in.readInt();
        mBreadCrumbTitleText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
        mBreadCrumbShortTitleRes = in.readInt();
        mBreadCrumbShortTitleText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
    }

    public BackStackRecord instantiate(FragmentManagerImpl fm) {
        BackStackRecord bse = new BackStackRecord(fm);
        int pos = 0;
        int num = 0;
        while (pos < mOps.length) {
            BackStackRecord.Op op = new BackStackRecord.Op();
            op.cmd = mOps[pos++];
            if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG,
                    "Instantiate " + bse + " op #" + num + " base fragment #" + mOps[pos]);
            int findex = mOps[pos++];
            if (findex >= 0) {
                Fragment f = fm.mActive.get(findex);
                op.fragment = f;
            } else {
                op.fragment = null;
            }
            op.enterAnim = mOps[pos++];
            op.exitAnim = mOps[pos++];
            op.popEnterAnim = mOps[pos++];
            op.popExitAnim = mOps[pos++];
            final int N = mOps[pos++];
            if (N > 0) {
                op.removed = new ArrayList<Fragment>(N);
                for (int i=0; i<N; i++) {
                    if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG,
                            "Instantiate " + bse + " set remove fragment #" + mOps[pos]);
                    Fragment r = fm.mActive.get(mOps[pos++]);
                    op.removed.add(r);
                }
            }
            bse.addOp(op);
            num++;
        }
        bse.mTransition = mTransition;
        bse.mTransitionStyle = mTransitionStyle;
        bse.mName = mName;
        bse.mIndex = mIndex;
        bse.mAddToBackStack = true;
        bse.mBreadCrumbTitleRes = mBreadCrumbTitleRes;
        bse.mBreadCrumbTitleText = mBreadCrumbTitleText;
        bse.mBreadCrumbShortTitleRes = mBreadCrumbShortTitleRes;
        bse.mBreadCrumbShortTitleText = mBreadCrumbShortTitleText;
        bse.bumpBackStackNesting(1);
        return bse;
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        dest.writeIntArray(mOps);
        dest.writeInt(mTransition);
        dest.writeInt(mTransitionStyle);
        dest.writeString(mName);
        dest.writeInt(mIndex);
        dest.writeInt(mBreadCrumbTitleRes);
        TextUtils.writeToParcel(mBreadCrumbTitleText, dest, 0);
        dest.writeInt(mBreadCrumbShortTitleRes);
        TextUtils.writeToParcel(mBreadCrumbShortTitleText, dest, 0);
    }

    public static final Parcelable.Creator<BackStackState> CREATOR
            = new Parcelable.Creator<BackStackState>() {
        public BackStackState createFromParcel(Parcel in) {
            return new BackStackState(in);
        }

        public BackStackState[] newArray(int size) {
            return new BackStackState[size];
        }
    };
}

/**
* @hide Entry of an operation on the fragment back stack.
*/
final class BackStackRecord extends FragmentTransaction implements
        FragmentManager.BackStackEntry, Runnable {
    static final String TAG = FragmentManagerImpl.TAG;

    final FragmentManagerImpl mManager;

    static final int OP_NULL = 0;
    static final int OP_ADD = 1;
    static final int OP_REPLACE = 2;
    static final int OP_REMOVE = 3;
    static final int OP_HIDE = 4;
    static final int OP_SHOW = 5;
    static final int OP_DETACH = 6;
    static final int OP_ATTACH = 7;

    static final class Op {
        Op next;
        Op prev;
        int cmd;
        Fragment fragment;
        int enterAnim;
        int exitAnim;
        int popEnterAnim;
        int popExitAnim;
        ArrayList<Fragment> removed;
    }

    Op mHead;
    Op mTail;
    int mNumOp;
    int mEnterAnim;
    int mExitAnim;
    int mPopEnterAnim;
    int mPopExitAnim;
    int mTransition;
    int mTransitionStyle;
    boolean mAddToBackStack;
    boolean mAllowAddToBackStack = true;
    String mName;
    boolean mCommitted;
    int mIndex = 1;

    int mBreadCrumbTitleRes;
    CharSequence mBreadCrumbTitleText;
    int mBreadCrumbShortTitleRes;
    CharSequence mBreadCrumbShortTitleText;

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder(128);
        sb.append("BackStackEntry{");
        sb.append(Integer.toHexString(System.identityHashCode(this)));
        if (mIndex >= 0) {
            sb.append(" #");
            sb.append(mIndex);
        }
        if (mName != null) {
            sb.append(" ");
            sb.append(mName);
        }
        sb.append("}");
        return sb.toString();
    }

    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
        dump(prefix, writer, true);
    }

    public void dump(String prefix, PrintWriter writer, boolean full) {
        if (full) {
            writer.print(prefix); writer.print("mName="); writer.print(mName);
                    writer.print(" mIndex="); writer.print(mIndex);
                    writer.print(" mCommitted="); writer.println(mCommitted);
            if (mTransition != FragmentTransaction.TRANSIT_NONE) {
                writer.print(prefix); writer.print("mTransition=#");
                        writer.print(Integer.toHexString(mTransition));
                        writer.print(" mTransitionStyle=#");
                        writer.println(Integer.toHexString(mTransitionStyle));
            }
            if (mEnterAnim != 0 || mExitAnim !=0) {
                writer.print(prefix); writer.print("mEnterAnim=#");
                        writer.print(Integer.toHexString(mEnterAnim));
                        writer.print(" mExitAnim=#");
                        writer.println(Integer.toHexString(mExitAnim));
            }
            if (mPopEnterAnim != 0 || mPopExitAnim !=0) {
                writer.print(prefix); writer.print("mPopEnterAnim=#");
                        writer.print(Integer.toHexString(mPopEnterAnim));
                        writer.print(" mPopExitAnim=#");
                        writer.println(Integer.toHexString(mPopExitAnim));
            }
            if (mBreadCrumbTitleRes != 0 || mBreadCrumbTitleText != null) {
                writer.print(prefix); writer.print("mBreadCrumbTitleRes=#");
                        writer.print(Integer.toHexString(mBreadCrumbTitleRes));
                        writer.print(" mBreadCrumbTitleText=");
                        writer.println(mBreadCrumbTitleText);
            }
            if (mBreadCrumbShortTitleRes != 0 || mBreadCrumbShortTitleText != null) {
                writer.print(prefix); writer.print("mBreadCrumbShortTitleRes=#");
                        writer.print(Integer.toHexString(mBreadCrumbShortTitleRes));
                        writer.print(" mBreadCrumbShortTitleText=");
                        writer.println(mBreadCrumbShortTitleText);
            }
        }

        if (mHead != null) {
            writer.print(prefix); writer.println("Operations:");
            String innerPrefix = prefix + "    ";
            Op op = mHead;
            int num = 0;
            while (op != null) {
                String cmdStr;
                switch (op.cmd) {
                    case OP_NULL: cmdStr="NULL"; break;
                    case OP_ADD: cmdStr="ADD"; break;
                    case OP_REPLACE: cmdStr="REPLACE"; break;
                    case OP_REMOVE: cmdStr="REMOVE"; break;
                    case OP_HIDE: cmdStr="HIDE"; break;
                    case OP_SHOW: cmdStr="SHOW"; break;
                    case OP_DETACH: cmdStr="DETACH"; break;
                    case OP_ATTACH: cmdStr="ATTACH"; break;
                    default: cmdStr="cmd=" + op.cmd; break;
                }
                writer.print(prefix); writer.print("  Op #"); writer.print(num);
                        writer.print(": "); writer.print(cmdStr);
                        writer.print(" "); writer.println(op.fragment);
                if (full) {
                    if (op.enterAnim != 0 || op.exitAnim != 0) {
                        writer.print(prefix); writer.print("enterAnim=#");
                                writer.print(Integer.toHexString(op.enterAnim));
                                writer.print(" exitAnim=#");
                                writer.println(Integer.toHexString(op.exitAnim));
                    }
                    if (op.popEnterAnim != 0 || op.popExitAnim != 0) {
                        writer.print(prefix); writer.print("popEnterAnim=#");
                                writer.print(Integer.toHexString(op.popEnterAnim));
                                writer.print(" popExitAnim=#");
                                writer.println(Integer.toHexString(op.popExitAnim));
                    }
                }
                if (op.removed != null && op.removed.size() > 0) {
                    for (int i=0; i<op.removed.size(); i++) {
                        writer.print(innerPrefix);
                        if (op.removed.size() == 1) {
                            writer.print("Removed: ");
                        } else {
                            if (i == 0) {
                                writer.println("Removed:");
                            }
                            writer.print(innerPrefix); writer.print("  #"); writer.print(i);
                                    writer.print(": ");
                        }
                        writer.println(op.removed.get(i));
                    }
                }
                op = op.next;
                num++;
            }
        }
    }

    public BackStackRecord(FragmentManagerImpl manager) {
        mManager = manager;
    }

    public int getId() {
        return mIndex;
    }

    public int getBreadCrumbTitleRes() {
        return mBreadCrumbTitleRes;
    }

    public int getBreadCrumbShortTitleRes() {
        return mBreadCrumbShortTitleRes;
    }

    public CharSequence getBreadCrumbTitle() {
        if (mBreadCrumbTitleRes != 0) {
            return mManager.mActivity.getText(mBreadCrumbTitleRes);
        }
        return mBreadCrumbTitleText;
    }

    public CharSequence getBreadCrumbShortTitle() {
        if (mBreadCrumbShortTitleRes != 0) {
            return mManager.mActivity.getText(mBreadCrumbShortTitleRes);
        }
        return mBreadCrumbShortTitleText;
    }

    void addOp(Op op) {
        if (mHead == null) {
            mHead = mTail = op;
        } else {
            op.prev = mTail;
            mTail.next = op;
            mTail = op;
        }
        op.enterAnim = mEnterAnim;
        op.exitAnim = mExitAnim;
        op.popEnterAnim = mPopEnterAnim;
        op.popExitAnim = mPopExitAnim;
        mNumOp++;
    }

    public FragmentTransaction add(Fragment fragment, String tag) {
        doAddOp(0, fragment, tag, OP_ADD);
        return this;
    }

    public FragmentTransaction add(int containerViewId, Fragment fragment) {
        doAddOp(containerViewId, fragment, null, OP_ADD);
        return this;
    }

    public FragmentTransaction add(int containerViewId, Fragment fragment, String tag) {
        doAddOp(containerViewId, fragment, tag, OP_ADD);
        return this;
    }

    private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) {
        fragment.mFragmentManager = mManager;

        if (tag != null) {
            if (fragment.mTag != null && !tag.equals(fragment.mTag)) {
                throw new IllegalStateException("Can't change tag of fragment "
                        + fragment + ": was " + fragment.mTag
                        + " now " + tag);
            }
            fragment.mTag = tag;
        }

        if (containerViewId != 0) {
            if (fragment.mFragmentId != 0 && fragment.mFragmentId != containerViewId) {
                throw new IllegalStateException("Can't change container ID of fragment "
                        + fragment + ": was " + fragment.mFragmentId
                        + " now " + containerViewId);
            }
            fragment.mContainerId = fragment.mFragmentId = containerViewId;
        }

        Op op = new Op();
        op.cmd = opcmd;
        op.fragment = fragment;
        addOp(op);
    }

    public FragmentTransaction replace(int containerViewId, Fragment fragment) {
        return replace(containerViewId, fragment, null);
    }

    public FragmentTransaction replace(int containerViewId, Fragment fragment, String tag) {
        if (containerViewId == 0) {
            throw new IllegalArgumentException("Must use non-zero containerViewId");
        }

        doAddOp(containerViewId, fragment, tag, OP_REPLACE);
        return this;
    }

    public FragmentTransaction remove(Fragment fragment) {
        Op op = new Op();
        op.cmd = OP_REMOVE;
        op.fragment = fragment;
        addOp(op);

        return this;
    }

    public FragmentTransaction hide(Fragment fragment) {
        Op op = new Op();
        op.cmd = OP_HIDE;
        op.fragment = fragment;
        addOp(op);

        return this;
    }

    public FragmentTransaction show(Fragment fragment) {
        Op op = new Op();
        op.cmd = OP_SHOW;
        op.fragment = fragment;
        addOp(op);

        return this;
    }

    public FragmentTransaction detach(Fragment fragment) {
        Op op = new Op();
        op.cmd = OP_DETACH;
        op.fragment = fragment;
        addOp(op);

        return this;
    }

    public FragmentTransaction attach(Fragment fragment) {
        Op op = new Op();
        op.cmd = OP_ATTACH;
        op.fragment = fragment;
        addOp(op);

        return this;
    }

    public FragmentTransaction setCustomAnimations(int enter, int exit) {
        return setCustomAnimations(enter, exit, 0, 0);
    }

    public FragmentTransaction setCustomAnimations(int enter, int exit,
            int popEnter, int popExit) {
        mEnterAnim = enter;
        mExitAnim = exit;
        mPopEnterAnim = popEnter;
        mPopExitAnim = popExit;
        return this;
    }

    public FragmentTransaction setTransition(int transition) {
        mTransition = transition;
        return this;
    }

    public FragmentTransaction setTransitionStyle(int styleRes) {
        mTransitionStyle = styleRes;
        return this;
    }

    public FragmentTransaction addToBackStack(String name) {
        if (!mAllowAddToBackStack) {
            throw new IllegalStateException(
                    "This FragmentTransaction is not allowed to be added to the back stack.");
        }
        mAddToBackStack = true;
        mName = name;
        return this;
    }

    public boolean isAddToBackStackAllowed() {
        return mAllowAddToBackStack;
    }

    public FragmentTransaction disallowAddToBackStack() {
        if (mAddToBackStack) {
            throw new IllegalStateException(
                    "This transaction is already being added to the back stack");
        }
        mAllowAddToBackStack = false;
        return this;
    }

    public FragmentTransaction setBreadCrumbTitle(int res) {
        mBreadCrumbTitleRes = res;
        mBreadCrumbTitleText = null;
        return this;
    }

    public FragmentTransaction setBreadCrumbTitle(CharSequence text) {
        mBreadCrumbTitleRes = 0;
        mBreadCrumbTitleText = text;
        return this;
    }

    public FragmentTransaction setBreadCrumbShortTitle(int res) {
        mBreadCrumbShortTitleRes = res;
        mBreadCrumbShortTitleText = null;
        return this;
    }

    public FragmentTransaction setBreadCrumbShortTitle(CharSequence text) {
        mBreadCrumbShortTitleRes = 0;
        mBreadCrumbShortTitleText = text;
        return this;
    }

    void bumpBackStackNesting(int amt) {
        if (!mAddToBackStack) {
            return;
        }
        if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting in " + this
                + " by " + amt);
        Op op = mHead;
        while (op != null) {
            if (op.fragment != null) {
                op.fragment.mBackStackNesting += amt;
                if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of "
                        + op.fragment + " to " + op.fragment.mBackStackNesting);
            }
            if (op.removed != null) {
                for (int i=op.removed.size()-1; i>=0; i–) {
                    Fragment r = op.removed.get(i);
                    r.mBackStackNesting += amt;
                    if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of "
                            + r + " to " + r.mBackStackNesting);
                }
            }
            op = op.next;
        }
    }

    public int commit() {
        return commitInternal(false);
    }

    public int commitAllowingStateLoss() {
        return commitInternal(true);
    }
   
    int commitInternal(boolean allowStateLoss) {
        if (mCommitted) throw new IllegalStateException("commit already called");
        if (FragmentManagerImpl.DEBUG) {
            Log.v(TAG, "Commit: " + this);
            LogWriter logw = new LogWriter(TAG);
            PrintWriter pw = new PrintWriter(logw);
            dump("  ", null, pw, null);
        }
        mCommitted = true;
        if (mAddToBackStack) {
            mIndex = mManager.allocBackStackIndex(this);
        } else {
            mIndex = 1;
        }
        mManager.enqueueAction(this, allowStateLoss);
        return mIndex;
    }
   
    public void run() {
        if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Run: " + this);

        if (mAddToBackStack) {
            if (mIndex < 0) {
                throw new IllegalStateException("addToBackStack() called after commit()");
            }
        }

        bumpBackStackNesting(1);

        Op op = mHead;
        while (op != null) {
            switch (op.cmd) {
                case OP_ADD: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.enterAnim;
                    mManager.addFragment(f, false);
                } break;
                case OP_REPLACE: {
                    Fragment f = op.fragment;
                    if (mManager.mAdded != null) {
                        for (int i=0; i<mManager.mAdded.size(); i++) {
                            Fragment old = mManager.mAdded.get(i);
                            if (FragmentManagerImpl.DEBUG) Log.v(TAG,
                                    "OP_REPLACE: adding=" + f + " old=" + old);
                            if (f == null || old.mContainerId == f.mContainerId) {
                                if (old == f) {
                                    op.fragment = f = null;
                                } else {
                                    if (op.removed == null) {
                                        op.removed = new ArrayList<Fragment>();
                                    }
                                    op.removed.add(old);
                                    old.mNextAnim = op.exitAnim;
                                    if (mAddToBackStack) {
                                        old.mBackStackNesting += 1;
                                        if (FragmentManagerImpl.DEBUG) Log.v(TAG, "Bump nesting of "
                                                + old + " to " + old.mBackStackNesting);
                                    }
                                    mManager.removeFragment(old, mTransition, mTransitionStyle);
                                }
                            }
                        }
                    }
                    if (f != null) {
                        f.mNextAnim = op.enterAnim;
                        mManager.addFragment(f, false);
                    }
                } break;
                case OP_REMOVE: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.exitAnim;
                    mManager.removeFragment(f, mTransition, mTransitionStyle);
                } break;
                case OP_HIDE: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.exitAnim;
                    mManager.hideFragment(f, mTransition, mTransitionStyle);
                } break;
                case OP_SHOW: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.enterAnim;
                    mManager.showFragment(f, mTransition, mTransitionStyle);
                } break;
                case OP_DETACH: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.exitAnim;
                    mManager.detachFragment(f, mTransition, mTransitionStyle);
                } break;
                case OP_ATTACH: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.enterAnim;
                    mManager.attachFragment(f, mTransition, mTransitionStyle);
                } break;
                default: {
                    throw new IllegalArgumentException("Unknown cmd: " + op.cmd);
                }
            }

            op = op.next;
        }

        mManager.moveToState(mManager.mCurState, mTransition,
                mTransitionStyle, true);

        if (mAddToBackStack) {
            mManager.addBackStackState(this);
        }
    }

    public void popFromBackStack(boolean doStateMove) {
        if (FragmentManagerImpl.DEBUG) {
            Log.v(TAG, "popFromBackStack: " + this);
            LogWriter logw = new LogWriter(TAG);
            PrintWriter pw = new PrintWriter(logw);
            dump("  ", null, pw, null);
        }

        bumpBackStackNesting(-1);

        Op op = mTail;
        while (op != null) {
            switch (op.cmd) {
                case OP_ADD: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.popExitAnim;
                    mManager.removeFragment(f,
                            FragmentManagerImpl.reverseTransit(mTransition),
                            mTransitionStyle);
                } break;
                case OP_REPLACE: {
                    Fragment f = op.fragment;
                    if (f != null) {
                        f.mNextAnim = op.popExitAnim;
                        mManager.removeFragment(f,
                                FragmentManagerImpl.reverseTransit(mTransition),
                                mTransitionStyle);
                    }
                    if (op.removed != null) {
                        for (int i=0; i<op.removed.size(); i++) {
                            Fragment old = op.removed.get(i);
                            old.mNextAnim = op.popEnterAnim;
                            mManager.addFragment(old, false);
                        }
                    }
                } break;
                case OP_REMOVE: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.popEnterAnim;
                    mManager.addFragment(f, false);
                } break;
                case OP_HIDE: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.popEnterAnim;
                    mManager.showFragment(f,
                            FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle);
                } break;
                case OP_SHOW: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.popExitAnim;
                    mManager.hideFragment(f,
                            FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle);
                } break;
                case OP_DETACH: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.popEnterAnim;
                    mManager.attachFragment(f,
                            FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle);
                } break;
                case OP_ATTACH: {
                    Fragment f = op.fragment;
                    f.mNextAnim = op.popEnterAnim;
                    mManager.detachFragment(f,
                            FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle);
                } break;
                default: {
                    throw new IllegalArgumentException("Unknown cmd: " + op.cmd);
                }
            }

            op = op.prev;
        }

        if (doStateMove) {
            mManager.moveToState(mManager.mCurState,
                    FragmentManagerImpl.reverseTransit(mTransition), mTransitionStyle, true);
        }

        if (mIndex >= 0) {
            mManager.freeBackStackIndex(mIndex);
            mIndex = 1;
        }
    }

    public String getName() {
        return mName;
    }

    public int getTransition() {
        return mTransition;
    }

    public int getTransitionStyle() {
        return mTransitionStyle;
    }

    public boolean isEmpty() {
        return mNumOp == 0;
    }
}

How do iPhone users feel when switching to an Android phone?

As the other two people have said it depended on why you switched and what you wanted to do when you switched from iOS to Android. I mention the operating systems instead of the phones since in my experience a person switching from an IPhone to an Android phone will pass through a similar process when switching from an IPad to an Android Tablet.
Here are the feelings I and my wife felt when switching from iOS to Android:

1) Disorientation: Android will need getting used to. From having an icon where all your aps reside, to having a dedicated options buttons the new interface will be daunting at first. Learning to use the "back" button will be a blessing.

2) Frustration: It's a new operating system, therefore there are things you are already used to doing a certain way that you cannot do the same way anymore. That can cause stress and frustration specially the first time you want to transfer all your contacts and notes from iOS to Android. Here it is iOS that is making your life difficult but you will end up blaming your Android phone. One of the hardest things for me to get used to was the "Home Button" function. I was used to pressing the button to get Siri and double tap it to get to my first screen of apps. In Android you press it to see the open apps and you double click it to get voice commands.

3) Distrust: The AppStore in iOS "appears" to be a meticulously curated site. It might just be marketing but that is the impression. For some reason, the Google Play store did not inspire the same confidence. It didn't help that upon downloading an app Android would give you a list of all the permissions the app will ask of you. I am sure the same apps on my iPhone will need the same thing but the wording and presentation of the information in Android is jarring at first.

However, all these feelings will be temporary if you switched for the right reasons. Millions of people use these two operating systems everyday and both are trustworthy and efficient.

How will a girl feel if I play guitar on her birthday?

All women are not the same you know. You'll have to ask one of her friends.
It also depends on how much she likes you and how good you are at playing guitar. But if she likes you and it's the sort of thing she likes, then she'll probably like it even if you're a bit crap.

Any freelancer wants to sell his/her well established profile now unused?

I have also account with 42 Review all are 5/5 Ratting :), And i also like to sell my account, My account since 2009 and 5 Recommendations in my account.

  • 85%Jobs Completed
  • 98%On Budget
  • 98%On Time
  • 24%Repeat Hire Rate

Certifications :

  • US English Level 1 : 78%
  • HTML Level 1 : 75%

Top Skills :

Website Design : 18

Magento : 18

HTML : 16

PHP : 15

WordPress : 13

CSS : 12

Graphic Design : 6

PSD to HTML : 4

Android : 3

Javascript : 2

HTML5 : 2

AJAX : 1

Joomla : 1

vTiger : 1

Amazon Web Services : 1

What are the best colleges in Chennai?

Depends

  1. If you want less fee, less options for enjoyment and quality education then SASTRA would be good option.
  2. If fee doesn't matter and you want more options for enjoyment and freedom then SRM would be better
  3. Second point but with less options for enjoyment then VIT.

What's the easiest way to make money online?

Blogging, writing books, clicking photographs, marking your art and craft work are all skilled jobs. Similarly, investing online in stocks and doing affiliate marketing require an entrepreneurial streak as well as a knack for investment, and sales & marketing. Not everyone’s cup of tea.

3 sneaky tips to make money online (based on statistics) you all seem to have missed here are:

  1. You can make $1.5 to $4 per 1,000 views on YouTube

It means that to make a substantial amount, your YT videos need to go viral – which is not at all an easy task. There are some lucky oddballs like the 17-year old Fred Pye who made £24,000 a year by making walk-through videos of Grand Theft Auto V or Howard Davies-Carr who nailed more than £100,000 by uploading the video of his 1-year old son biting the finger of his 3-year old son.

But for us mortals, instructional videos, funny videos and music videos are usually the best bet to go viral. HD videos perform better. Do not forget to configure your videos for SEO and turn on Google Adsense for your channel. Promoting your videos on your FB, Twitter, Google+ and other social media accounts is almost as important as aggressive big screen movie promotions these days. Go for it!

Click here to read about some of the millionaire YouTube stars!

  1. Active + Passive income of $1,000 to $5,000 per month for College Students or those looking for Side Income online

You know what’s so great about blogging or creating YouTube videos? They keep generating passive income for you – long after you have created the content piece. But if you are a college student or looking for something you can do in just 1 or 2 hours a day, you can’t possibly sit around all day researching and producing top-class content. Plus, there is no guarantee that your content will be read or viewed enough to earn you money.

Transtutors offers you a better opportunity. Register here as an online tutor by taking subject tests – and you can start answering questions of college students worldwide straightaway. As soon as you answer a question, you get some money upfront (as mentioned in your Dashboard). And you keep earning Royalty on your answers for a lifetime.

This is better than making traditional online tutoring comments where you have to be punctual about teaching a student for fixed hours per month.

You must have seen professors or heard about people who write books (textbooks or other subject-related books) and keep earning royalty on its sales. Well, here you just have to write one answer at a time. Isn’t it neat? If you answer 1 question a day, you should be able to answer about 1,000 questions during your college years and secure a neat secondary income for yourself for a lifetime.

TT Cheat Tip: Pose as a student and ask questions. Answer your own question to kickstart your tutor account.

  1. Install ChampCash on your Smart Phone and earn up to Rs 10,000 a month

Like all MLM schemes, all you have to do is to download this app and refer it to your friends. You earn money for direct references as well as referrals of your friends. This app seems to be a genuine one as there is no negative review on it on Google Play.

You can join it for free. Lately, it allows you to do shopping on Flipkart, Paytm etc. through it – and earn some extra cash whenever you or your team buy something.

For more information :Simple Ways To Earn Money Online From Home

How does a gearless scooter/scooty engine work?

Hell yeah, you are right !! Your old HONDA Activa can of course do a speeder 60 kph than your uncle’s CB Shine. And , that’s absolutely because of the awesomeness of CVT (Continually Variable transmission) used in Activa. Compared to the conventional Manual transmission (MT), the CVTs are highly beneficial for its awesome and quick torque delivery required at the output (wheels), based on your accelerator position. And in MT , you will also have to lose time to depress your clutch to change between gears, whereas in CVT, based on the amount of centrifugal force produced at the sleeve the belt easily travels through the sleeve, and gives the required power and torque , without any time delay of changing gears or to depress and release your clutch. This time delay is present in your CB Shine. That’s why your Activa is quicker than your CB shine.

But, remember that may be your CB Shine is a little slower to catch up to 60, but when it comes to the long run, your Activa could never match up with CB Shine. Because, the CVT runs almost with the same torque throughout the ride. And you remember , after getting the required torque to release your vehicle from Inertia, CB Shine goes into an Overdrive[increased gears] which gives less torque but high power output, whereas your Activa couldn’t get rid of that initial torque that offers resistance against high power output always throughout your ride.

Hope this helps. To know how does a CVT in Activa works, you can better watch this video:

What are the health effects, if any, of honey and lemon water?

  • Benefits 🙂
  1. Keeps constipation at bay: Warm water with lemon and honey, when had in the morning, stimulates the digestive system, helps produce intestinal mucus, hydrates the colon and infuses water into dried stool — a common reason for constipation. Apart from that, the warm water helps kick start bowel movements, aiding in regular and constipation free motions. But if you suffer from long-standing constipation woes, you could try some of these home remedies.
  2. Hastens weight loss: Apart from cleansing your stomach, the lemon juice present in the mixture, goes a long way in helping you lose weight. Packed with a type of fibre called pectin, lemon helps you feel full and keep cravings at bay. The warm water, honey and lemon also creates a more alkaline atmosphere in your stomach, helping you lose weight faster. Apart from this, you could also supplement your weight loss efforts with these tips to lose weight in 20 days.
  3. Aids in better digestion: Lemon helps your liver produce more bile that helps your digestive system break down complex foods better and utilise the essential components. Honey, on the other hand, has antibacterial properties that help thwart any infections you might have. Apart from, that it also helps increase the production of mucous in your stomach, which indirectly helps in flushing out toxins from your body. Apart from drinking this healthy drink every day, make sure you avoid these foods that are difficult to digest.
  4. Can improve functioning of the colon: In Ayurveda, it is believed that we tend to have a build up of toxins or ‘ama’ on the inner lining of our stomach, which is the reason for a number of ailments including cancer. This product of undigested food, intestinal cells and dead bacteria often coats the inner lining of our stomach and is thought to lead to diseases. By drinking lemon and honey mixed with warm water, the walls of the intestine – especially the colon – get stimulated; leading to the expulsion of this ama. If understanding Ayurveda is not your thing, allopathy describes this mixture as a potent natural way to cleanse the colon, allowing it to function better by helping your body absorb nutrients, get rid of toxins, stay adequately hydrated and keep bloating at bay. Also, do try the Ayurvedic detox diet on a regular basis to keep your insides clean and functioning well.
  5. Helps cleanse the lymphatic system: According to experts, a dehydrated lymphatic system is one of the leading causes of illness. Lack of water and essential fluids in the lymphatic system can make you feel sluggish, fatigued, lead to constipation, disturbed sleep, high or low blood pressure, stress and an all-around lack in mental function. The benefit of drinking this mixture early in the morning is that it gives your lymphatic system a boost and helps hydrate the entire system.
  6. Can give your energy levels a boost and improve your mood: Not a morning person? Well, this mixture can help beat that lethargy and fatigue you often feel every morning. How? Well, honey is an instant energy booster – minus the calories. Water helps clear your mind by providing fresh blood to your brain, and lemon activates your digestive system, getting to work properly and eliminating toxins that are often the reason for lethargy. Moreover, the scent of lemon is known to be a natural relaxant and can help uplift your mood. If you continue to feel fatigued, even after trying this remedy, there may be other causes for your symptoms. Do not neglect it and visit a doctor.
  7. Aids in cleansing your urinary tract and acts as a diuretic: Honey is a very potent antibacterial agent, that has the capability to beat a number of common infections. When mixed with lemon and water – two agents that act as excellent diuretics (agents that flush out water from your body) – this concoction is the best way to cleanse your urinary tract. For women who suffer from frequent UTI (urinary tract infection), this is a boon and is known to keep recurrent infections at bay.
  8. Helps beat bad breath and improve oral health: The acidic nature of lemon combined with the innate properties of honey and water can help beat bad breath almost instantly. The lemon cleanses your mouth, activating your salivary glands and killing offensive bacteria. When added to honey and water, it helps wash down bacteria and degraded food that is usually present in your mouth and throat early in the morning. Another reason for bad breath is the formation of a white film on your tongue (mainly consisting of decaying food and bacteria), this effectively gets rid of that film, making your breath fresh – naturally. If this doesn’t freshen your breath, you can try these expert tips.
  9. Gives you clear skin and a natural glow: The benefits of lemon on your skin are aplenty, but apart from that, its cleansing action also helps in purifying your blood, also aiding in the production of new blood cells that acts as potent cleaning agents. The water and honey lend a unique restorative, antibacterial and collagen boosting properties to your skin as well.
  • Source :-  This simple drink is making weight loss easy for people!