package com.refresh.pos.ui; import java.util.Locale; import android.annotation.SuppressLint; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.AlertDialog; import android.app.FragmentTransaction; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import com.refresh.pos.R; import com.refresh.pos.domain.LanguageController; import com.refresh.pos.domain.inventory.Inventory; import com.refresh.pos.domain.inventory.Product; import com.refresh.pos.domain.inventory.ProductCatalog; import com.refresh.pos.techicalservices.NoDaoSetException; import com.refresh.pos.ui.component.UpdatableFragment; import com.refresh.pos.ui.inventory.InventoryFragment; import com.refresh.pos.ui.inventory.ProductDetailActivity; import com.refresh.pos.ui.sale.ReportFragment; import com.refresh.pos.ui.sale.SaleFragment; /** * This UI loads 3 main pages (Inventory, Sale, Report) * Makes the UI flow by slide through pages using ViewPager. * * @author Refresh Team * */ @SuppressLint("NewApi") public class MainActivity extends FragmentActivity { private ViewPager viewPager; private ProductCatalog productCatalog; private String productId; private Product product; private static boolean SDK_SUPPORTED; private PagerAdapter pagerAdapter; private Resources res; @SuppressLint("NewApi") /** * Initiate this UI. */ private void initiateActionBar() { if (SDK_SUPPORTED) { ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.TabListener tabListener = new ActionBar.TabListener() { @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } }; actionBar.addTab(actionBar.newTab().setText(res.getString(R.string.inventory)) .setTabListener(tabListener), 0, false); actionBar.addTab(actionBar.newTab().setText(res.getString(R.string.sale)) .setTabListener(tabListener), 1, true); actionBar.addTab(actionBar.newTab().setText(res.getString(R.string.report)) .setTabListener(tabListener), 2, false); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color .parseColor("#73bde5"))); } } } @Override protected void onCreate(Bundle savedInstanceState) { res = getResources(); setContentView(R.layout.layout_main); viewPager = (ViewPager) findViewById(R.id.pager); super.onCreate(savedInstanceState); SDK_SUPPORTED = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; initiateActionBar(); FragmentManager fragmentManager = getSupportFragmentManager(); pagerAdapter = new PagerAdapter(fragmentManager, res); viewPager.setAdapter(pagerAdapter); viewPager .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { if (SDK_SUPPORTED) getActionBar().setSelectedNavigationItem(position); } }); viewPager.setCurrentItem(1); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { openQuitDialog(); return true; } return super.onKeyDown(keyCode, event); } /** * Open quit dialog. */ private void openQuitDialog() { AlertDialog.Builder quitDialog = new AlertDialog.Builder( MainActivity.this); quitDialog.setTitle(res.getString(R.string.dialog_quit)); quitDialog.setPositiveButton(res.getString(R.string.quit), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); quitDialog.setNegativeButton(res.getString(R.string.no), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); quitDialog.show(); } /** * Option on-click handler. * @param view */ public void optionOnClickHandler(View view) { viewPager.setCurrentItem(0); String id = view.getTag().toString(); productId = id; try { productCatalog = Inventory.getInstance().getProductCatalog(); } catch (NoDaoSetException e) { e.printStackTrace(); } product = productCatalog.getProductById(Integer.parseInt(productId)); openDetailDialog(); } /** * Open detail dialog. */ private void openDetailDialog() { AlertDialog.Builder quitDialog = new AlertDialog.Builder(MainActivity.this); quitDialog.setTitle(product.getName()); quitDialog.setPositiveButton(res.getString(R.string.remove), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { openRemoveDialog(); } }); quitDialog.setNegativeButton(res.getString(R.string.product_detail), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent newActivity = new Intent(MainActivity.this, ProductDetailActivity.class); newActivity.putExtra("id", productId); startActivity(newActivity); } }); quitDialog.show(); } /** * Open remove dialog. */ private void openRemoveDialog() { AlertDialog.Builder quitDialog = new AlertDialog.Builder( MainActivity.this); quitDialog.setTitle(res.getString(R.string.dialog_remove_product)); quitDialog.setPositiveButton(res.getString(R.string.no), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); quitDialog.setNegativeButton(res.getString(R.string.remove), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { productCatalog.suspendProduct(product); pagerAdapter.update(0); } }); quitDialog.show(); } /** * Get view-pager * @return */ public ViewPager getViewPager() { return viewPager; } @Override public boolean onCreateOptionsMenu(Menu menu){ MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.lang_en: setLanguage("en"); return true; case R.id.lang_th: setLanguage("th"); return true; case R.id.lang_jp: setLanguage("jp"); return true; default: return super.onOptionsItemSelected(item); } } /** * Set language * @param localeString */ private void setLanguage(String localeString) { Locale locale = new Locale(localeString); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; LanguageController.getInstance().setLanguage(localeString); getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); Intent intent = getIntent(); finish(); startActivity(intent); } } /** * * @author Refresh team * */ class PagerAdapter extends FragmentStatePagerAdapter { private UpdatableFragment[] fragments; private String[] fragmentNames; /** * Construct a new PagerAdapter. * @param fragmentManager * @param res */ public PagerAdapter(FragmentManager fragmentManager, Resources res) { super(fragmentManager); UpdatableFragment reportFragment = new ReportFragment(); UpdatableFragment saleFragment = new SaleFragment(reportFragment); UpdatableFragment inventoryFragment = new InventoryFragment( saleFragment); fragments = new UpdatableFragment[] { inventoryFragment, saleFragment, reportFragment }; fragmentNames = new String[] { res.getString(R.string.inventory), res.getString(R.string.sale), res.getString(R.string.report) }; } @Override public Fragment getItem(int i) { return fragments[i]; } @Override public int getCount() { return fragments.length; } @Override public CharSequence getPageTitle(int i) { return fragmentNames[i]; } /** * Update * @param index */ public void update(int index) { fragments[index].update(); } }