package com.mozu.mozuandroidinstoreassistant.app; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import com.mozu.api.contracts.commerceruntime.orders.Order; import com.mozu.api.contracts.customer.CustomerAccount; import com.mozu.api.contracts.productruntime.Category; import com.mozu.mozuandroidinstoreassistant.app.category.CategoryFragment; import com.mozu.mozuandroidinstoreassistant.app.category.CategoryFragmentListener; import com.mozu.mozuandroidinstoreassistant.app.category.CategoryProductFragment; import com.mozu.mozuandroidinstoreassistant.app.customer.CustomerListener; import com.mozu.mozuandroidinstoreassistant.app.customer.CustomersFragment; import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachine; import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachineProducer; import com.mozu.mozuandroidinstoreassistant.app.order.CreateOrderListener; import com.mozu.mozuandroidinstoreassistant.app.order.NewOrderActivity; import com.mozu.mozuandroidinstoreassistant.app.order.OrderFragment; import com.mozu.mozuandroidinstoreassistant.app.order.OrderListener; import com.mozu.mozuandroidinstoreassistant.app.order.OrderStrings; import com.mozu.mozuandroidinstoreassistant.app.product.ProductFragment; import com.mozu.mozuandroidinstoreassistant.app.product.ProductFragmentListener; import com.mozu.mozuandroidinstoreassistant.app.product.ProductListListener; import com.mozu.mozuandroidinstoreassistant.app.product.ProductSearchFragment; import com.mozu.mozuandroidinstoreassistant.app.search.SearchFragment; import com.mozu.mozuandroidinstoreassistant.app.settings.SettingsFragment; import java.util.ArrayList; public class MainActivity extends AuthActivity implements View.OnClickListener, CategoryFragmentListener, ProductFragmentListener, ProductListListener, OrderListener, CustomerListener, CreateOrderListener, SearchFragment.GlobalSearchListener { private static final String CATEGORY_FRAGMENT = "category_fragment_taggy_tag_tag"; private static final String CURRENTLY_SELECTED_NAV_VIEW_ID = "CURRENTLY_SELECTED_NAV_VIEW_ID"; public static String LAUNCH_SETTINGS = "launchSettings"; private LinearLayout mSearchMenuLayout; private LinearLayout mProductsLayout; private LinearLayout mOrdersLayout; private LinearLayout mCustomersLayout; private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private int mCurrentlySelectedNavItem; private boolean mLaunchSettings; @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); reloadFragment(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!getResources().getBoolean(R.bool.allow_portrait)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } setContentView(R.layout.activity_main); mLaunchSettings = getIntent().getBooleanExtra(LAUNCH_SETTINGS, false); mSearchMenuLayout = (LinearLayout) findViewById(R.id.menu_search_layout); mSearchMenuLayout.setOnClickListener(this); mProductsLayout = (LinearLayout) findViewById(R.id.menu_products_layout); mProductsLayout.setOnClickListener(this); mOrdersLayout = (LinearLayout) findViewById(R.id.menu_orders_layout); mOrdersLayout.setOnClickListener(this); mCustomersLayout = (LinearLayout) findViewById(R.id.menu_customers_layout); mCustomersLayout.setOnClickListener(this); if (getActionBar() != null) { getActionBar().setTitle(R.string.menu_products_text); getActionBar().setIcon(getResources().getDrawable(android.R.color.transparent)); getActionBar().setLogo(getResources().getDrawable(android.R.color.transparent)); getActionBar().setDisplayUseLogoEnabled(false); } mProductsLayout.setSelected(true); if (savedInstanceState == null) { mCurrentlySelectedNavItem = R.id.menu_products_layout; initializeCategoryFragment(true); } else { updateNavView(savedInstanceState.getInt(CURRENTLY_SELECTED_NAV_VIEW_ID, R.id.menu_products_layout)); } if (mLaunchSettings) { showSettings(); } setupDrawer(); } @Override public void loginSuccess() { } @Override public void loginFailure() { startLoginScreen(); } @Override public void authError() { startLoginScreen(); } @Override public void loadingState() { } @Override public void stoppedLoading() { } private void startLoginScreen() { Intent loginIntent = new Intent(this, LoginActivity.class); startActivity(loginIntent); finish(); } private void setupDrawer() { //holder, will show whatever fragment is in main content area getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, R.drawable.actionbar_menu_button, R.string.drawer_open, R.string.drawer_close ) { /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { super.onDrawerClosed(view); } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. //if (mWasCreatedInPortrait) { mDrawerToggle.syncState(); //} } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle != null && mDrawerToggle.onOptionsItemSelected(item)) { return true; } else if (item.getItemId() == R.id.settings) { showSettings(); } return super.onOptionsItemSelected(item); } private void showSettings() { SettingsFragment settingsFragment = SettingsFragment.getInstance(); settingsFragment.show(getFragmentManager(), "main_settings_frag"); } @Override public void onClick(View v) { updateNavView(v.getId()); if (v.getId() == R.id.menu_search_layout) { initializeSearchFragment(); } else if (v.getId() == R.id.menu_products_layout) { initializeCategoryFragment(false); } else if (v.getId() == R.id.menu_orders_layout) { initializeOrdersFragment(); } else if (v.getId() == R.id.menu_customers_layout) { initializeCustomersFragment(); } if (mDrawerLayout != null) { mDrawerLayout.closeDrawers(); } } private void updateNavView(int viewId) { mCurrentlySelectedNavItem = viewId; mSearchMenuLayout.setSelected(false); mProductsLayout.setSelected(false); mOrdersLayout.setSelected(false); mCustomersLayout.setSelected(false); if (viewId == R.id.menu_search_layout) { setSearchSelected(); } else if (viewId == R.id.menu_products_layout) { setProductSelected(); } else if (viewId == R.id.menu_orders_layout) { setOrdersSelected(); } else if (viewId == R.id.menu_customers_layout) { setCustomersSelected(); } } private void initializeCategoryFragment(boolean isFirstLaunch) { if (isFirstLaunch) { FragmentManager fragmentManager = getFragmentManager(); clearBackstack(fragmentManager); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); CategoryFragment fragment = CategoryFragment.getInstance(null); fragmentTransaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out); fragmentTransaction.replace(R.id.content_fragment_holder, fragment, CATEGORY_FRAGMENT); fragmentTransaction.commit(); } else { CategoryFragment fragment = CategoryFragment.getInstance(null); addMainFragment(fragment, true); } } private void initializeOrdersFragment() { UserAuthenticationStateMachine userStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); OrderFragment fragment = new OrderFragment(); fragment.setTenantId(userStateMachine.getTenantId()); fragment.setSiteId(userStateMachine.getSiteId()); fragment.setListener(this); fragment.setOrderCreateListener(this); addMainFragment(fragment, true); } private void initializeCustomersFragment() { UserAuthenticationStateMachine userStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); CustomersFragment fragment = new CustomersFragment(); fragment.setTenantId(userStateMachine.getTenantId()); fragment.setSiteId(userStateMachine.getSiteId()); fragment.setListener(this); addMainFragment(fragment, true); } private void initializeProductFragment(Category category) { ProductFragment fragment = new ProductFragment(); fragment.setCategoryId(category.getCategoryId()); addMainFragment(fragment, true); } private void initializeSearchFragment() { UserAuthenticationStateMachine userStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); SearchFragment fragment = SearchFragment.getInstance(userStateMachine.getTenantId(), userStateMachine.getSiteId()); addMainFragment(fragment, true); } private void resetSelected() { mProductsLayout.setSelected(false); mOrdersLayout.setSelected(false); mCustomersLayout.setSelected(false); mSearchMenuLayout.setSelected(false); } public void setProductSelected() { resetSelected(); getActionBar().setTitle(R.string.menu_products_text); mProductsLayout.setSelected(true); } public void setOrdersSelected() { resetSelected(); getActionBar().setTitle(R.string.menu_orders_text); mOrdersLayout.setSelected(true); } public void setCustomersSelected() { resetSelected(); getActionBar().setTitle(R.string.menu_customers_text); mCustomersLayout.setSelected(true); } public void setSearchSelected() { resetSelected(); getActionBar().setTitle(R.string.menu_search_text); mSearchMenuLayout.setSelected(true); } public void addMainFragment(Fragment newFragment, boolean addToBackStack) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_fragment_holder); if (currentFragment != null) { fragmentTransaction.hide(currentFragment); } fragmentTransaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out); fragmentTransaction.add(R.id.content_fragment_holder, newFragment); if (addToBackStack) { fragmentTransaction.addToBackStack(null); } fragmentTransaction.commit(); } public void reloadFragment() { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_fragment_holder); if (!(currentFragment instanceof SearchFragment)) { fragmentTransaction.detach(currentFragment); fragmentTransaction.attach(currentFragment); fragmentTransaction.commitAllowingStateLoss(); } } @Override public void onBackPressed() { FragmentManager fragmentManager = getFragmentManager(); Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_fragment_holder); if (currentFragment instanceof SearchFragment) { ((SearchFragment) currentFragment).onBackPressed(); } else { super.onBackPressed(); reloadFragment(); } } private void clearBackstack(FragmentManager fragmentManager) { while (getFragmentManager().getBackStackEntryCount() > 0) { fragmentManager.popBackStackImmediate(); } } @Override public void onCategoryChosen(Category category) { if (category.getChildrenCategories() != null && category.getChildrenCategories().size() > 0) { addChildCategoryFragment(category); } else { initializeProductFragment(category); } } @Override public void onSearchPerformedFromCategory(int currentCategoryId, String query) { showProductSearchFragment(currentCategoryId, query); } @Override public void onSearchPerformedFromProduct(int currentCategoryId, String query) { showProductSearchFragment(currentCategoryId, query); } private void showProductSearchFragment(int categoryId, String query) { ProductSearchFragment fragment = new ProductSearchFragment(); fragment.setCategoryId(categoryId); fragment.setQueryString(query); addMainFragment(fragment, true); } @Override public void onProductSelected(String productCodeSelected) { onProductChoosen(productCodeSelected); } @Override public void onProductChoosentFromProuct(String productCode) { onProductChoosen(productCode); } private void onProductChoosen(String productCode) { Intent intent = new Intent(this, ProductDetailActivity.class); UserAuthenticationStateMachine userAuthenticationStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); intent.putExtra(ProductDetailActivity.PRODUCT_CODE_EXTRA_KEY, productCode); intent.putExtra(ProductDetailActivity.CURRENT_TENANT_ID, userAuthenticationStateMachine.getTenantId()); intent.putExtra(ProductDetailActivity.CURRENT_SITE_ID, userAuthenticationStateMachine.getSiteId()); startActivity(intent); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt(CURRENTLY_SELECTED_NAV_VIEW_ID, mCurrentlySelectedNavItem); super.onSaveInstanceState(outState); } @Override public void orderSelected(Order order, ArrayList<String> orderList, int position) { UserAuthenticationStateMachine userAuthenticationStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); if (order.getStatus().equalsIgnoreCase(OrderStrings.PENDING)) { Intent intent = new Intent(this, NewOrderActivity.class); intent.putExtra(NewOrderActivity.ORDER_EXTRA_KEY, order.getId()); startActivity(intent); } else { Intent intent = new Intent(this, OrderDetailActivity.class); intent.putExtra(OrderDetailActivity.ORDER_NUMBER_EXTRA_KEY, order.getId()); intent.putExtra(OrderDetailActivity.ORDER_LIST, orderList); intent.putExtra(OrderDetailActivity.ORDER_LIST_POSITION, position); intent.putExtra(OrderDetailActivity.CURRENT_TENANT_ID, userAuthenticationStateMachine.getTenantId()); intent.putExtra(OrderDetailActivity.CURRENT_SITE_ID, userAuthenticationStateMachine.getSiteId()); startActivity(intent); } } @Override public void createNewOrder() { UserAuthenticationStateMachine userAuthenticationStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); Intent intent = new Intent(this, OrderCreationAddCustomerActivity.class); intent.putExtra(OrderDetailActivity.CURRENT_TENANT_ID, userAuthenticationStateMachine.getTenantId()); intent.putExtra(OrderDetailActivity.CURRENT_SITE_ID, userAuthenticationStateMachine.getSiteId()); startActivity(intent); } @Override public void customerSelected(CustomerAccount customer) { Intent intent = new Intent(this, CustomerDetailActivity.class); intent.putExtra(CustomerDetailActivity.CUSTOMER_ID, customer.getId()); startActivity(intent); } @Override public void onOrderLaunch(String searchQuery) { UserAuthenticationStateMachine userStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); OrderFragment fragment = new OrderFragment(); fragment.setTenantId(userStateMachine.getTenantId()); fragment.setSiteId(userStateMachine.getSiteId()); fragment.setListener(this); fragment.setLaunchFromGlobalSearch(true); fragment.setDefaultSearchQuery(searchQuery); addMainFragment(fragment, true); } @Override public void launchProductSearch(String searchQuery) { ProductSearchFragment fragment = new ProductSearchFragment(); fragment.setCategoryId(0); fragment.setQueryString(searchQuery); fragment.setLaunchedFromSearch(); addMainFragment(fragment, true); } private void addChildCategoryFragment(Category category) { CategoryProductFragment categoryFragment = CategoryProductFragment.getInstance(category); addMainFragment(categoryFragment, true); } @Override public void launchCustomerSearch(String searchQuery) { UserAuthenticationStateMachine userStateMachine = UserAuthenticationStateMachineProducer.getInstance(this); CustomersFragment fragment = new CustomersFragment(); fragment.setTenantId(userStateMachine.getTenantId()); fragment.setSiteId(userStateMachine.getSiteId()); fragment.setListener(this); fragment.setDefaultSearchQuery(searchQuery); fragment.setLauncedFromSearch(); addMainFragment(fragment, true); } }