package com.duckduckgo.mobile.android.fragment; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Point; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.view.menu.MenuBuilder; import android.view.Display; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import com.duckduckgo.mobile.android.R; import com.duckduckgo.mobile.android.actionbar.DDGActionBarManager; import com.duckduckgo.mobile.android.adapters.DDGPagerAdapter; /** * Created by fgei on 6/18/15. */ public abstract class TabFragment extends Fragment { protected abstract TabItem getFirstTabItem(); protected abstract TabItem getSecondTabItem(); protected abstract void setMenu(Menu menu); private ViewPager viewPager; private DDGPagerAdapter pagerAdapter; private TabItem firstTabItem; private TabItem secondTabItem; private View fragmentView = null; private Menu menu = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setRetainInstance(true); fragmentView = inflater.inflate(R.layout.fragment_favorite_recents, container, false); return fragmentView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); int width; Display display = getActivity().getWindowManager().getDefaultDisplay(); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB_MR2) { Point size = new Point(); display.getSize(size); width = size.x; } else { width = display.getWidth(); } firstTabItem = getFirstTabItem(); secondTabItem = getSecondTabItem(); int storiesResId = (width >= getResources().getDimension(R.dimen.tab_small) ? firstTabItem.titleFull : firstTabItem.titleNarrow); int searchesResId = (width >= getResources().getDimension(R.dimen.tab_big) ? secondTabItem.titleFull : secondTabItem.titleNarrow); pagerAdapter = new DDGPagerAdapter(getChildFragmentManager(), new String[] {getResources().getString(storiesResId), getResources().getString(searchesResId)}, new Fragment[] {firstTabItem.fragment, secondTabItem.fragment}); viewPager = (ViewPager) fragmentView.findViewById(R.id.view_pager); viewPager.setAdapter(pagerAdapter); DDGActionBarManager.getInstance().getSlidingTabLayout().setSelectedIndicatorColors(getActivity().getResources().getColor(R.color.actionbar_tab_selected)); DDGActionBarManager.getInstance().getSlidingTabLayout().setViewPager(viewPager); menu = new MenuBuilder(getActivity()); getActivity().getMenuInflater().inflate(R.menu.main, menu); setMenu(menu); } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if(!hidden) { viewPager.setAdapter(pagerAdapter); DDGActionBarManager.getInstance().getSlidingTabLayout().setViewPager(viewPager); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); DDGActionBarManager.getInstance().getSlidingTabLayout().setViewPager(viewPager); } @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } @Override public Animation onCreateAnimation(int transit, final boolean enter, int nextAnim) { Animation anim = null; try { anim = AnimationUtils.loadAnimation(getActivity(), nextAnim); } catch(Resources.NotFoundException e) { e.printStackTrace(); } if(anim==null) { return null; } anim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { if(enter) { DDGActionBarManager.getInstance().showTabLayout(); } } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } }); AnimationSet animSet = new AnimationSet(true); animSet.addAnimation(anim); return animSet; } class TabItem { public int titleFull; public int titleNarrow; public Fragment fragment; public TabItem(int titleFull, int titleNarrow, Fragment fragment) { this.titleFull = titleFull; this.titleNarrow = titleNarrow; this.fragment = fragment; } } }