package cn.koolcloud.ipos.appstore.fragment; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.LinearLayout; import cn.koolcloud.ipos.appstore.R; import cn.koolcloud.ipos.appstore.constant.Constants; import cn.koolcloud.ipos.appstore.fragment.base.BaseFragment; import cn.koolcloud.ipos.appstore.fragment.tab.AppSettingFragment; import cn.koolcloud.ipos.appstore.fragment.tab.CategoryFragment; import cn.koolcloud.ipos.appstore.fragment.tab.DownloadSettingFragment; import cn.koolcloud.ipos.appstore.fragment.tab.LocalSoftwareManagerFragment; import cn.koolcloud.ipos.appstore.fragment.tab.NoNetworkFragment; import cn.koolcloud.ipos.appstore.utils.NetUtil; import cn.koolcloud.ipos.appstore.utils.ViewUtils; public class LeftNavigationFragment extends BaseFragment implements View.OnClickListener { private LinearLayout leftNavLinearLayout; //obtain every item bar private ImageView indicatorImageView; //navigation indicator //left navigation items private View navfirstPageView; private View navRankingPageView; private View navCategoryPageView; private View navTopicPageView; private View navManagementPageView; //left navigation items in setting page private View navAppSettingPageView; private View navDownloadSettingPageView; private LayoutInflater inflater; //view inflater private int currentNavItem = Constants.NAV_ITEM_FIRST_PAGE; //current navigation item selected tag private boolean isAddedTabs = false; //if the tab is added to the action bar. private static Handler mHandler; private FragmentManager fragManager; private OnTabChangedListener mCallback; // Container Activity must implement this interface public interface OnTabChangedListener { public void disableAllTabs(); public void enableAllTabs(); } public static LeftNavigationFragment getInstance() { LeftNavigationFragment navFragment = new LeftNavigationFragment(); //save params Bundle args = new Bundle(); // args.putInt("index", index); navFragment.setArguments(args); return navFragment; } @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnTabChangedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnTabChangedListener"); } } @Override public View onCreateView(LayoutInflater inflate, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub this.inflater = inflate; return inflate.inflate(R.layout.left_nav, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { // Restore last state for checked position. currentNavItem = savedInstanceState.getInt("curChoice", 0); } leftNavLinearLayout = (LinearLayout) getActivity().findViewById(R.id.left_nav_layout); indicatorImageView = (ImageView) getActivity().findViewById(R.id.indicator); fragManager = getFragmentManager(); boolean isSettingFragment = getArguments().getBoolean(Constants.IS_SETTING_KEY); initLeftNavItem(isSettingFragment); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); Boolean isSettingFragment = getArguments().getBoolean(Constants.IS_SETTING_KEY); if (isSettingFragment) { if (currentNavItem == Constants.NAV_ITEM_APP_SETTING) { showAppSettingFragment(); } else { showDownloadSettingFragment(); } } else { //fix back bug from search or setting activity // showCategoryFragment(); showNavigationContent(); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("curChoice", currentNavItem); } private void initLeftNavItem(Boolean isSettingFragment) { if (isSettingFragment) { navAppSettingPageView = ViewUtils.inflateNavigationBarItem(getActivity(), inflater, R.drawable.left_app_setting, R.string.msg_setting_app_setting_title, Constants.NAV_ITEM_APP_SETTING, leftNavLinearLayout); navAppSettingPageView.setOnClickListener(this); navAppSettingPageView.setSelected(true); this.currentNavItem = Constants.NAV_ITEM_APP_SETTING; navDownloadSettingPageView = ViewUtils.inflateNavigationBarItem(getActivity(), inflater, R.drawable.left_install_selected, R.string.msg_setting_download_title, Constants.NAV_ITEM_DOWNLOAD_SETTING, leftNavLinearLayout); navDownloadSettingPageView.setOnClickListener(this); } else { /* navfirstPageView = ActivityViewUtils.inflateNavigationBarItem(getApplicationContext(), inflater, R.drawable.left_tuijian, R.string.home, Constants.NAV_ITEM_FIRST_PAGE, leftNavLinearLayout); navfirstPageView.setOnClickListener(this); navfirstPageView.setSelected(true); this.currentNavItem = Constants.NAV_ITEM_FIRST_PAGE; navRankingPageView = ActivityViewUtils.inflateNavigationBarItem(getApplicationContext(), inflater, R.drawable.left_paihang, R.string.ranking, Constants.NAV_ITEM_RANKING, leftNavLinearLayout); navRankingPageView.setOnClickListener(this); */ navCategoryPageView = ViewUtils.inflateNavigationBarItem(getActivity(), inflater, R.drawable.left_feilei, R.string.category, Constants.NAV_ITEM_CATEGORY, leftNavLinearLayout); navCategoryPageView.setOnClickListener(this); navCategoryPageView.setSelected(true); this.currentNavItem = Constants.NAV_ITEM_CATEGORY; /* navTopicPageView = ActivityViewUtils.inflateNavigationBarItem(getApplicationContext(), inflater, R.drawable.left_zhuanti, R.string.topic, Constants.NAV_ITEM_TOPIC, leftNavLinearLayout); navTopicPageView.setOnClickListener(this); */ navManagementPageView = ViewUtils.inflateNavigationBarItem(getActivity(), inflater, R.drawable.left_guanli, R.string.management, Constants.NAV_ITEM_MANAGEMENT, leftNavLinearLayout); navManagementPageView.setOnClickListener(this); } } @Override public void onClick(View view) { // TODO Auto-generated method stub indicatorImageView.setVisibility(View.INVISIBLE); leftNavLinearLayout.findViewWithTag(currentNavItem).setSelected(false); ImageView indicator = (ImageView) leftNavLinearLayout.findViewWithTag(currentNavItem).findViewById(R.id.indicator); indicator.setVisibility(View.INVISIBLE); view.setSelected(true); //tab show or not on action bar mCallback.disableAllTabs(); if (view.getTag() == Constants.NAV_ITEM_FIRST_PAGE) { this.currentNavItem = Constants.NAV_ITEM_FIRST_PAGE; } else if (view.getTag() == Constants.NAV_ITEM_RANKING) { this.currentNavItem = Constants.NAV_ITEM_RANKING; } else if (view.getTag() == Constants.NAV_ITEM_CATEGORY) { this.currentNavItem = Constants.NAV_ITEM_CATEGORY; showCategoryFragment(); } else if (view.getTag() == Constants.NAV_ITEM_TOPIC) { this.currentNavItem = Constants.NAV_ITEM_TOPIC; } else if (view.getTag() == Constants.NAV_ITEM_MANAGEMENT) { if (!isAddedTabs) { mCallback.enableAllTabs(); } showLocalSoft(); this.currentNavItem = Constants.NAV_ITEM_MANAGEMENT; } else if (view.getTag() == Constants.NAV_ITEM_APP_SETTING) { //TODO: show app setting fragment showAppSettingFragment(); this.currentNavItem = Constants.NAV_ITEM_APP_SETTING; } else if (view.getTag() == Constants.NAV_ITEM_DOWNLOAD_SETTING) { //TODO: show app installing fragment showDownloadSettingFragment(); this.currentNavItem = Constants.NAV_ITEM_DOWNLOAD_SETTING; } ImageView selectedIndicator = (ImageView) leftNavLinearLayout.findViewWithTag(currentNavItem).findViewById(R.id.indicator); selectedIndicator.setVisibility(View.VISIBLE); // runIndicatorAnimation(currentNavItem, indicatorImageView); } private void runIndicatorAnimation(int navItemNo, final View view) { // Calculate ActionBar height int actionBarHeight = 0; TypedValue tv = new TypedValue(); if (getActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics()); } int itemHeight = getResources().getDimensionPixelSize(R.dimen.left_nav_item_height); final int endPosition = navItemNo * itemHeight + itemHeight / 2 + actionBarHeight; int viewXPosition = ViewUtils.getViewLocationScreenX(view); int viewYPosition = ViewUtils.getViewLocationScreenY(view); AnimationSet animationSet = new AnimationSet(true); TranslateAnimation transAnimation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, viewXPosition, Animation.RELATIVE_TO_SELF, viewXPosition, Animation.RELATIVE_TO_SELF, viewYPosition, Animation.RELATIVE_TO_SELF, endPosition); transAnimation.setDuration(2000); animationSet.addAnimation(transAnimation); view.startAnimation(animationSet); transAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { int left = view.getLeft(); int top = view.getTop(); int width = view.getWidth(); int height = view.getHeight(); view.clearAnimation(); view.layout(left, endPosition, left + width, top + height); } }); } private void showNavigationContent() { mCallback.disableAllTabs(); if (currentNavItem == Constants.NAV_ITEM_CATEGORY) { showCategoryFragment(); } else if (currentNavItem == Constants.NAV_ITEM_MANAGEMENT) { if (!isAddedTabs) { mCallback.enableAllTabs(); } showLocalSoft(); } } //show local soft fragment private void showLocalSoft() { //fragment management LocalSoftwareManagerFragment localSoftFragment = LocalSoftwareManagerFragment.getInstance(); FragmentTransaction fragTransaction = fragManager.beginTransaction(); fragTransaction.replace(R.id.frame_content, localSoftFragment); fragTransaction.commit(); } //show download setting fragment private void showDownloadSettingFragment() { DownloadSettingFragment downloadSettingFragment = DownloadSettingFragment.getInstance(); FragmentTransaction fragTransaction = fragManager.beginTransaction(); fragTransaction.replace(R.id.frame_content, downloadSettingFragment); fragTransaction.commit(); } //show download setting fragment private void showAppSettingFragment() { AppSettingFragment appSettingFragment = AppSettingFragment.getInstance(); FragmentTransaction fragTransaction = fragManager.beginTransaction(); fragTransaction.replace(R.id.frame_content, appSettingFragment); fragTransaction.commit(); } //show local soft fragment private void showCategoryFragment() { //fragment management FragmentTransaction fragTransaction = fragManager.beginTransaction(); if (NetUtil.isAvailable(getActivity())) { CategoryFragment categoryFragment = CategoryFragment.getInstance(); fragTransaction.replace(R.id.frame_content, categoryFragment); } else { NoNetworkFragment noNetFragment = NoNetworkFragment.getInstance(); fragTransaction.replace(R.id.frame_content, noNetFragment); } fragTransaction.commit(); } }