at.alladin.rmbt.android.fragments.result.RMBTResultPagerFragment.java Source code

Java tutorial

Introduction

Here is the source code for at.alladin.rmbt.android.fragments.result.RMBTResultPagerFragment.java

Source

/*******************************************************************************
 * Copyright 2013-2016 alladin-IT GmbH
 * 
 * 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 at.alladin.rmbt.android.fragments.result;

import java.util.concurrent.atomic.AtomicInteger;

import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;
import at.alladin.openrmbt.android.R;
import at.alladin.rmbt.android.adapter.result.OnCompleteListener;
import at.alladin.rmbt.android.adapter.result.OnDataChangedListener;
import at.alladin.rmbt.android.adapter.result.RMBTResultPagerAdapter;
import at.alladin.rmbt.android.main.ExtendedViewPager;
import at.alladin.rmbt.android.main.RMBTMainActivity;

public class RMBTResultPagerFragment extends Fragment implements OnTabChangeListener, OnPageChangeListener {
    /**
     * use this flag to make the map indicator visible only if coordinates are available
     */
    public final static boolean MAP_INDICATOR_DYNAMIC_VISIBILITY = false;

    public static final String ARG_TEST_UUID = "test_uuid";

    private RMBTResultPagerAdapter pagerAdapter;
    private ExtendedViewPager viewPager;
    private TabHost tabHost;
    private HorizontalScrollView scroller;

    private Handler handler = new Handler();

    final AtomicInteger counter = new AtomicInteger(0);

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);

        final Bundle args = getArguments();

        final String uuid = args.getString(ARG_TEST_UUID);
        System.out.println("ResultPagerFragment: test uuid: " + uuid);

        pagerAdapter = new RMBTResultPagerAdapter((RMBTMainActivity) getActivity(), handler, uuid);
        pagerAdapter.setOnCompleteListener(new OnCompleteListener() {

            @Override
            public void onComplete(int flag, Object object) {
                if (pagerAdapter.getCount() > tabHost.getTabWidget().getChildCount()) {
                    if (getActivity() != null) {
                        LayoutInflater inflater = (LayoutInflater) getActivity()
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                        for (int i = tabHost.getTabWidget().getChildCount(); i < pagerAdapter.getCount(); i++) {
                            TabSpec tab = tabHost.newTabSpec(String.valueOf(i));
                            //tab.setIndicator(getActivity().getResources().getStringArray(R.array.result_page_title)[i]);
                            tab.setContent(android.R.id.tabcontent);

                            View indicator = inflater.inflate(R.layout.tabhost_indicator, null);
                            TextView title = (TextView) indicator.findViewById(android.R.id.title);
                            title.setText(getActivity().getResources().getStringArray(
                                    R.array.result_page_title)[RMBTResultPagerAdapter.RESULT_PAGE_TAB_TITLE_MAP
                                            .get(i)]);

                            tab.setIndicator(indicator);

                            tabHost.addTab(tab);
                        }
                    }
                }
            }
        });

        if (MAP_INDICATOR_DYNAMIC_VISIBILITY) {
            pagerAdapter.setOnDataChangedListener(new OnDataChangedListener() {

                @Override
                public void onChange(Object oldValue, Object newValue, Object flag) {
                    if (flag.equals("HAS_MAP")) {
                        boolean b = (Boolean) newValue;
                        if (b) {
                            tabHost.getTabWidget().getChildTabViewAt(RMBTResultPagerAdapter.RESULT_PAGE_MAP)
                                    .setVisibility(View.VISIBLE);
                        } else {
                            tabHost.getTabWidget().getChildTabViewAt(RMBTResultPagerAdapter.RESULT_PAGE_MAP)
                                    .setVisibility(View.GONE);
                        }
                    }
                }
            });
        }
    }

    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
            final Bundle savedInstanceState) {
        pagerAdapter.setActivity((RMBTMainActivity) getActivity());
        View v = inflater.inflate(R.layout.result_tabhost_pager, container, false);
        return createView(v, inflater, RMBTResultPagerAdapter.RESULT_PAGE_MAIN_MENU);
    }

    private View createView(View v, LayoutInflater inflater, int currentPage) {
        tabHost = (TabHost) v.findViewById(android.R.id.tabhost);
        tabHost.setup();
        tabHost.setOnTabChangedListener(this);

        for (int i = 0; i < pagerAdapter.getCount(); i++) {
            TabSpec tab = tabHost.newTabSpec(String.valueOf(i));
            //tab.setIndicator(getActivity().getResources().getStringArray(R.array.result_page_title)[i]);
            tab.setContent(android.R.id.tabcontent);

            View indicator = inflater.inflate(R.layout.tabhost_indicator, null);
            TextView title = (TextView) indicator.findViewById(android.R.id.title);
            title.setText(getActivity().getResources().getStringArray(
                    R.array.result_page_title)[RMBTResultPagerAdapter.RESULT_PAGE_TAB_TITLE_MAP.get(i)]);

            if (MAP_INDICATOR_DYNAMIC_VISIBILITY) {
                if (i == RMBTResultPagerAdapter.RESULT_PAGE_MAP) {
                    indicator.setVisibility(View.GONE);
                }
            }
            tab.setIndicator(indicator);

            tabHost.addTab(tab);
        }

        scroller = (HorizontalScrollView) v.findViewById(R.id.tabwidget_scrollview);

        viewPager = (ExtendedViewPager) v.findViewById(R.id.pager);
        viewPager.setAdapter(pagerAdapter);

        viewPager.setOnPageChangeListener(this);
        setCurrentPosition(currentPage);

        return v;
    }

    @Override
    public void onTabChanged(String tabId) {
        int tabIndex = Integer.valueOf(tabId);
        if (viewPager != null && (tabIndex != viewPager.getCurrentItem())) {
            scrollToTabTab(tabIndex);
            viewPager.setCurrentItem(tabIndex);
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        pagerAdapter.onPause();
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setActionBarItems();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        pagerAdapter.destroy();
    }

    public void setCurrentPosition(final int pos) {
        //tabHost.setCurrentTab(pos);
        viewPager.setCurrentItem(pos);
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onPageSelected(int index) {
        tabHost.setCurrentTab(index);
        scrollToTabTab(index);
        setActionBarItems();
    }

    private void scrollToTabTab(int scrollToPosition) {
        if (scroller != null && tabHost != null && tabHost.getTabWidget() != null) {
            int startX = (scroller.getWidth() / 2);
            scroller.scrollTo(tabHost.getTabWidget().getChildAt(0).getWidth() * scrollToPosition - startX, 0);
        }
    }

    public TabHost getTabHost() {
        return tabHost;
    }

    public ViewPager getViewPager() {
        return viewPager;
    }

    public RMBTResultPagerAdapter getPagerAdapter() {
        return pagerAdapter;
    }

    public void setActionBarItems() {
        System.out.println("SET ACTIONBARI TEMS");
        if (viewPager != null) {
            switch (viewPager.getCurrentItem()) {
            case RMBTResultPagerAdapter.RESULT_PAGE_MAIN_MENU:
                ((RMBTMainActivity) getActivity()).setVisibleMenuItems(R.id.action_menu_help,
                        R.id.action_menu_share);
                break;
            case RMBTResultPagerAdapter.RESULT_PAGE_MAP:
                ((RMBTMainActivity) getActivity()).setVisibleMenuItems(R.id.action_menu_map);
                break;
            default:
                ((RMBTMainActivity) getActivity()).setVisibleMenuItems();
                break;
            }
        }
    }

    public View getChildAt(int position) {
        if (viewPager != null) {
            return viewPager.getChildAt(position);
        }
        return null;
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        populateViewForOrientation(inflater, (ViewGroup) getView());
    }

    /**
     * 
     * @param inflater
     * @param view
     */
    private void populateViewForOrientation(LayoutInflater inflater, ViewGroup view) {
        int page = getViewPager().getCurrentItem();
        view.removeAllViewsInLayout();
        View v = inflater.inflate(R.layout.result_tabhost_pager, view);
        createView(v, inflater, page);
    }
}