/** * */ package com.photoshare.command; import android.app.Activity; import android.app.FragmentTransaction; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.photoshare.camera.CameraFragment; import com.photoshare.camera.DecoratedPhotoFragment; import com.photoshare.camera.DecoratedPhotoShareFragment; import com.photoshare.fragments.BaseFragment; import com.photoshare.fragments.MainFragment; import com.photoshare.fragments.PhotoBarFragment; import com.photoshare.fragments.stacktrace.TraceConfig; import com.photoshare.fragments.stacktrace.TraceElement; import com.photoshare.fragments.stacktrace.TraceStack; import com.photoshare.service.comments.views.CommentsFragment; import com.photoshare.service.findfriends.views.FindFriendsFragment; import com.photoshare.service.follow.views.FollowsInfoFragment; import com.photoshare.service.likes.view.LikesFragment; import com.photoshare.service.news.view.NewsFragment; import com.photoshare.service.photos.views.FeedsFragment; import com.photoshare.service.photos.views.FeedsItemFragment; import com.photoshare.service.photos.views.PopularPhotosFragment; import com.photoshare.service.share.views.DecoratedSharingPreferencesFragment; import com.photoshare.service.share.views.PreferenceSettingsFragment; import com.photoshare.service.share.views.SharePreferencesFragment; import com.photoshare.service.share.views.ShareSettingsFragment; import com.photoshare.service.signin.view.SignInFragment; import com.photoshare.service.signup.view.SignUpFragment; import com.photoshare.service.users.views.OtherHomeTitleBarFragment; import com.photoshare.service.users.views.PersonalProfileFragment; import com.photoshare.service.users.views.UserHomeFragment; import com.photoshare.service.users.views.UserHomeTitleBarFragment; import com.photoshare.service.users.views.UserProfileFragment; import com.photoshare.tabHost.MainActivity; import com.photoshare.tabHost.R; import com.photoshare.tabHost.TabHostActivity; import com.photoshare.utils.Utils; /** * @author Aron * * The Command Class used to pass the activity and fragment from the * origin to the destination, respectively. * */ public final class Command { private Command() { } public static void TabHost(Context orig) { orig.startActivity(new Intent(orig, TabHostActivity.class)); } public static void Main(Context orig) { orig.startActivity(new Intent(orig, MainActivity.class)); } public static void invoke(Activity activity, String invokeName) { } public static void forwardTab(BaseFragment base, String invokeName, Bundle args) { int fragmentViewId = base.getFragmentViewId(); BaseFragment target = invoke(base, invokeName, args); TraceStack stack = TraceStack.getInstance(); if (target != null) { target.setCanonicalTag(invokeName); FragmentTransaction ft = base.getFragmentManager() .beginTransaction(); if (args == null) { args = new Bundle(); } TraceElement element = new TraceElement(base.getCanonicalTag(), args, invokeName); stack.forward(element); args.putBoolean(TraceConfig.getTrackBackward(), true); target.setArguments(args); ft.replace(fragmentViewId, target); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } Utils.logger(invokeName); } public static void forward(BaseFragment base, String invokeName, Bundle args) { int fragmentViewId; // 如果有Wrapper Id的话,替换Wrapper Id if (args != null && args.containsKey(BaseFragment.KEY_WRAPPER_ID)) { fragmentViewId = args.getInt(BaseFragment.KEY_WRAPPER_ID); args.remove(BaseFragment.KEY_WRAPPER_ID); } else { fragmentViewId = base.getFragmentViewId(); } BaseFragment target = invoke(base, invokeName, args); TraceStack stack = TraceStack.getInstance(); if (target != null) { target.setCanonicalTag(invokeName); FragmentTransaction ft = base.getFragmentManager() .beginTransaction(); if (args == null) { args = new Bundle(); } TraceElement element = new TraceElement(base.getCanonicalTag(), args, invokeName); stack.forward(element); target.setArguments(args); if (args.containsKey(BaseFragment.KEY_WRAPPED_ID)) { int[] wrappedIds = args .getIntArray(BaseFragment.KEY_WRAPPED_ID); for (int wrappedId : wrappedIds) { ft.remove(base.getFragmentManager().findFragmentById( wrappedId)); } args.remove(BaseFragment.KEY_WRAPPED_ID); } ft.replace(fragmentViewId, target); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } Utils.logger(invokeName); } public static void backward(BaseFragment base, Bundle args) { int fragmentViewId = base.getFragmentViewId(); TraceStack stack = TraceStack.getInstance(); TraceElement element = stack.backward(); BaseFragment target = invoke(base, element.getOriginFragment(), args); if (target != null) { FragmentTransaction ft = base.getFragmentManager() .beginTransaction(); target.setCanonicalTag(element.getOriginFragment()); target.setArguments(element.getParams()); ft.replace(fragmentViewId, target); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } Utils.logger(element.getOriginFragment()); } private static BaseFragment invoke(BaseFragment base, String invokeName, Bundle args) { int fragmentViewId = base.getFragmentViewId(); BaseFragment target = null; if (invokeName.equals(base.getString(R.string.fcameraPhotoFragment))) { target = CameraFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fcommentsFragment) .equals(invokeName)) { target = CommentsFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fdecoratedPhotoFragment).equals( invokeName)) { target = DecoratedPhotoFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fdecoratedPhotoShareFragment) .equals(invokeName)) { target = DecoratedPhotoShareFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fdecoratedSharingPreferenceFragment) .equals(invokeName)) { target = DecoratedSharingPreferencesFragment .newInstance(fragmentViewId); } else if (base.getString(R.string.ffeedsFragment).equals(invokeName)) { target = FeedsFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.ffeedsItemFragment).equals( invokeName)) { target = FeedsItemFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.ffindFriendsFragment).equals( invokeName)) { target = FindFriendsFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.ffollowInfoFragment).equals( invokeName)) { target = FollowsInfoFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.flikeFragment).equals(invokeName)) { target = LikesFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fmainFragment).equals(invokeName)) { target = MainFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fnewsFragment).equals(invokeName)) { target = NewsFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fotherHomeTitleBarFragment).equals( invokeName)) { target = OtherHomeTitleBarFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fpersonalProfileFragment).equals( invokeName)) { target = PersonalProfileFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fphotoBarFragment) .equals(invokeName)) { target = PhotoBarFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fpopularPhotosFragment).equals( invokeName)) { target = PopularPhotosFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fpreferenceSettingsFragment).equals( invokeName)) { target = PreferenceSettingsFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fsharePreferenceFragment).equals( invokeName)) { target = SharePreferencesFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fshareSettingsFragment).equals( invokeName)) { target = ShareSettingsFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fsignInFragment).equals(invokeName)) { target = SignInFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fsignUpFragment).equals(invokeName)) { target = SignUpFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fuserHomeFragment) .equals(invokeName)) { target = UserHomeFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fuserHomeTitleBarFragment).equals( invokeName)) { target = UserHomeTitleBarFragment.newInstance(fragmentViewId); } else if (base.getString(R.string.fuserProfileFragment).equals( invokeName)) { target = UserProfileFragment.newInstance(fragmentViewId); } return target; } }