/*******************************************************************************
* 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);
}
}