package pt.rupeal.invoicexpress.fragments; import java.util.List; import java.util.Map; import pt.rupeal.invoicexpress.MainActivity; import pt.rupeal.invoicexpress.R; import pt.rupeal.invoicexpress.adapters.FragmentPagerAdapter; import pt.rupeal.invoicexpress.model.BarChartModel; import pt.rupeal.invoicexpress.model.QuarterChartModel; import pt.rupeal.invoicexpress.model.TopDebtorsChartModel; import pt.rupeal.invoicexpress.server.ChartRestHandler; import pt.rupeal.invoicexpress.server.InvoiceXpress; import pt.rupeal.invoicexpress.charts.InvoicingChart; import pt.rupeal.invoicexpress.charts.QuarterlyChart; import pt.rupeal.invoicexpress.charts.TopDebtorsChart; import pt.rupeal.invoicexpress.charts.TreasuryChart; import android.app.Fragment; import android.app.FragmentManager; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.view.PagerTitleStrip; import android.support.v4.view.ViewPager; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; public class DashBoardFragment extends Fragment { private ViewPager viewPager; private DashBoardFragmentPagerAdapter adpater; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MainActivity) getActivity()).getActionBar().setDisplayHomeAsUpEnabled(false); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dashboard, container, false); viewPager = (ViewPager) view.findViewById(R.id.dashboard_pager); ((PagerTitleStrip) viewPager.findViewById(R.id.dashboard_pager_title_strip)).setTextColor(getResources().getColor(R.color.horizontal_navigation_bar_text)); ((PagerTitleStrip) viewPager.findViewById(R.id.dashboard_pager_title_strip)).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); ((PagerTitleStrip) viewPager.findViewById(R.id.dashboard_pager_title_strip)).setGravity(Gravity.CENTER_VERTICAL); ((PagerTitleStrip) viewPager.findViewById(R.id.dashboard_pager_title_strip)).setPadding(-55, 0, -55, 0); if(adpater == null) { adpater = new DashBoardFragmentPagerAdapter(getFragmentManager()); } new SetAdapterTask().execute(); return view; } /** * Resolve a fragment exception */ private class SetAdapterTask extends AsyncTask<Void,Void,Void> { @Override protected Void doInBackground(Void... params) { return null; } @Override protected void onPostExecute(Void result) { viewPager.setAdapter(adpater); } } private static final int[] dashboard_filters = new int[] {R.string.dashboard_invoicing, R.string.dashboard_treasury, R.string.dashboard_quarterly, R.string.dashboard_top5debtors}; private class DashBoardFragmentPagerAdapter extends FragmentPagerAdapter { public DashBoardFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Fragment fragment = new DashBoardFilterFragment(); Bundle args = new Bundle(); args.putInt(DashBoardFilterFragment.FILTER_CODE, position); fragment.setArguments(args); return fragment; } @Override public int getCount() { return dashboard_filters.length; } @Override public CharSequence getPageTitle(int position) { return getResources().getString(dashboard_filters[position]); } } public static class DashBoardFilterFragment extends Fragment { public static final String FILTER_CODE = "filter"; public static final int NO_FILTER = -1; public static final int FILTER_CODE_INVOICING = 0; public static final int FILTER_CODE_TREASURY = 1; public static final int FILTER_CODE_QUARTERLY = 2; public static final int FILTER_CODE_TOPDEBTORS = 3; private int filterCode; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // enable menu setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // get filterCode from parent fragment filterCode = getArguments().getInt(FILTER_CODE); // get chart layout FrameLayout chartLayout = (FrameLayout) inflater.inflate(R.layout.dashboard_charts, container, false); if(FILTER_CODE_INVOICING == filterCode) { // INVOICING // get chart data Map<String, BarChartModel> data = InvoiceXpress.getInstance().getCharts().getInvoicingChartData(); // add chart view chartLayout.addView(new InvoicingChart().getView(getActivity(), data)); // check if is a sample BarChartModel dataBarChartModel = data.values().iterator().next(); if(dataBarChartModel.isSample()) { showSampleImage(chartLayout); } else { hideSampleImage(chartLayout); } // return view return chartLayout; } else if(FILTER_CODE_TREASURY == filterCode) { // TREASURY // get chart data Map<String, BarChartModel> data = InvoiceXpress.getInstance().getCharts().getTreasuryChartData(); // add chart view chartLayout.addView(new TreasuryChart().getView(getActivity(), data)); // check if is a sample BarChartModel dataBarChartModel = data.values().iterator().next(); if(dataBarChartModel.isSample()) { showSampleImage(chartLayout); } else { hideSampleImage(chartLayout); } return chartLayout; } else if(FILTER_CODE_QUARTERLY == filterCode) { // QUARTERY View quarteryBoardView = inflater.inflate(R.layout.quarterly, container, false); // get chart data List<QuarterChartModel> data = InvoiceXpress.getInstance().getCharts().getQuartersChartData(); // add chart view chartLayout.addView(new QuarterlyChart().getView(getActivity(), quarteryBoardView, data)); // check if is a sample if(data.get(0).isSample()) { showSampleImage(chartLayout); } else { hideSampleImage(chartLayout); } return chartLayout; } else if(FILTER_CODE_TOPDEBTORS == filterCode) { // TOP DEBTORS // get chart data TopDebtorsChartModel data = InvoiceXpress.getInstance().getCharts().getDebtorsChartData(); // check if is a sample if(data.isSample()) { // add chart view TopDebtorsChart chart = new TopDebtorsChart(); chartLayout.addView(chart.getView(getActivity(), data)); } else { // set image sample invisible hideSampleImage(chartLayout); // add chart view chartLayout.addView(new TopDebtorsChart().getView(getActivity(), data)); } return chartLayout; } return null; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.action_bar_dashboard, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.refresh_tab: String[] params = new String[]{String.valueOf(filterCode)}; ChartRestHandler restHandler = new ChartRestHandler(getActivity()); InvoiceXpress.getInstance().setAsyncTaskActive(restHandler); restHandler.execute(params); break; default: break; } return super.onOptionsItemSelected(item); } private void showSampleImage(View chartLayout) { // set image resource based on locale language device int imageResource = InvoiceXpress.isPortugueseLocale() ? R.drawable.amostra : R.drawable.sample; ((ImageView) chartLayout.findViewById(R.id.dashboard_sample)).setImageResource(imageResource); // set image visible chartLayout.findViewById(R.id.dashboard_sample).setVisibility(View.VISIBLE); // bring image to front chartLayout.findViewById(R.id.dashboard_sample).bringToFront(); } private void hideSampleImage(View chartLayout) { chartLayout.findViewById(R.id.dashboard_sample).setVisibility(View.INVISIBLE); } } }