package com.mozu.mozuandroidinstoreassistant.app;
import android.app.LoaderManager;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.ActivityInfo;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.format.DateFormat;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.mozu.api.contracts.commerceruntime.orders.Order;
import com.mozu.api.contracts.customer.CustomerAccount;
import com.mozu.mozuandroidinstoreassistant.app.bus.RxBus;
import com.mozu.mozuandroidinstoreassistant.app.order.adapters.OrderDetailSectionPagerAdapter;
import com.mozu.mozuandroidinstoreassistant.app.order.loaders.OrderDetailLoader;
import com.mozu.mozuandroidinstoreassistant.app.settings.SettingsFragment;
import com.mozu.mozuandroidinstoreassistant.app.tasks.CustomerAsyncListener;
import com.mozu.mozuandroidinstoreassistant.app.tasks.RetrieveCustomerAsyncTask;
import com.mozu.mozuandroidinstoreassistant.app.utils.ContactIntentUtil;
import com.viewpagerindicator.TabPageIndicator;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
public class OrderDetailActivity extends BaseActivity implements LoaderManager.LoaderCallbacks<Order>, CustomerAsyncListener, SwipeRefreshLayout.OnRefreshListener {
public static final String ORDER_LIST = "orderList";
public static final String ORDER_LIST_POSITION = "orderListPosition";
public static final String ORDER_NUMBER_EXTRA_KEY = "ORDER_NUMBER";
public static final String CURRENT_TENANT_ID = "curTenantIdWhenActLoaded";
public static final String CURRENT_SITE_ID = "curSiteIdWhenActLoaded";
public static final int LOADER_ORDER_DETAIL = 45;
private final String ORDER_SETTINGS_FRAGMENT = "Order_Settings_Fragment";
public RxBus mRxBus;
@InjectView(R.id.order_detail_container)
SwipeRefreshLayout mOrderSwipeRefresh;
@InjectView(R.id.edit_mode)
Button enterEditMode;
private String mOrderNumber;
private TextView mOrderStatus;
private TextView mOrderDate;
private TextView mCustomerName;
private TextView mOrderTotal;
private Button mPreviousOrder;
private Button mNextOrder;
private Order mOrder;
private int mTenantId;
private int mSiteId;
private ViewPager mOrderViewPager;
private TabPageIndicator mTabIndicator;
private List<String> mTitles;
private NumberFormat mNumberFormat;
private OrderDetailSectionPagerAdapter mAdapter;
private TextView mOrderFulfillmentStatus;
private Boolean mIsEditMode = false;
private TextView mCustomerEmail;
private ArrayList<String> mOrderList;
private int mOrderPosition;
@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_order_detail);
mRxBus = RxBus.getInstance();
ButterKnife.inject(this);
if (getIntent() != null) {
mOrderNumber = getIntent().getStringExtra(ORDER_NUMBER_EXTRA_KEY);
mTenantId = getIntent().getIntExtra(CURRENT_TENANT_ID, -1);
mSiteId = getIntent().getIntExtra(CURRENT_SITE_ID, -1);
mOrderList = (ArrayList<String>) (getIntent().getSerializableExtra(OrderDetailActivity.ORDER_LIST));
mOrderPosition = getIntent().getIntExtra(OrderDetailActivity.ORDER_LIST_POSITION, -1);
} else if (savedInstanceState != null) {
mOrderNumber = savedInstanceState.getString(ORDER_NUMBER_EXTRA_KEY);
mTenantId = savedInstanceState.getInt(CURRENT_TENANT_ID, -1);
mSiteId = savedInstanceState.getInt(CURRENT_SITE_ID, -1);
}
if (getActionBar() != null) {
getActionBar().setDisplayShowHomeEnabled(false);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayShowCustomEnabled(true);
getActionBar().setTitle(" ");
}
enterEditMode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSwapEditMode();
}
});
mOrderStatus = (TextView) findViewById(R.id.order_status_value);
mOrderDate = (TextView) findViewById(R.id.order_date_value);
mCustomerName = (TextView) findViewById(R.id.customer_value);
mCustomerEmail = (TextView) findViewById(R.id.customer_email);
mOrderTotal = (TextView) findViewById(R.id.order_total_value);
mPreviousOrder = (Button) findViewById(R.id.previous_order);
mNextOrder = (Button) findViewById(R.id.next_order);
if (mOrderList == null || mOrderPosition == -1) {
mPreviousOrder.setVisibility(View.GONE);
mNextOrder.setVisibility(View.GONE);
} else {
if (mOrderPosition == 0) {
mPreviousOrder.setVisibility(View.GONE);
}
if (mOrderPosition == mOrderList.size() - 1) {
mNextOrder.setVisibility(View.GONE);
}
mPreviousOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String orderId = mOrderList.get(mOrderPosition - 1);
Intent intent = new Intent(OrderDetailActivity.this, OrderDetailActivity.class);
intent.putExtra(OrderDetailActivity.ORDER_NUMBER_EXTRA_KEY, orderId);
intent.putExtra(OrderDetailActivity.ORDER_LIST, mOrderList);
intent.putExtra(OrderDetailActivity.ORDER_LIST_POSITION, mOrderPosition - 1);
intent.putExtra(OrderDetailActivity.CURRENT_TENANT_ID, mTenantId);
intent.putExtra(OrderDetailActivity.CURRENT_SITE_ID, mSiteId);
startActivity(intent);
finish();
}
});
mNextOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String orderId = mOrderList.get(mOrderPosition + 1);
Intent intent = new Intent(OrderDetailActivity.this, OrderDetailActivity.class);
intent.putExtra(OrderDetailActivity.ORDER_NUMBER_EXTRA_KEY, orderId);
intent.putExtra(OrderDetailActivity.ORDER_LIST, mOrderList);
intent.putExtra(OrderDetailActivity.ORDER_LIST_POSITION, mOrderPosition + 1);
intent.putExtra(OrderDetailActivity.CURRENT_TENANT_ID, mTenantId);
intent.putExtra(OrderDetailActivity.CURRENT_SITE_ID, mSiteId);
startActivity(intent);
finish();
}
});
}
mCustomerName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mOrder != null && mOrder.getCustomerAccountId() != null) {
Intent intent = new Intent(OrderDetailActivity.this, CustomerDetailActivity.class);
intent.putExtra(CustomerDetailActivity.CUSTOMER_ID, mOrder.getCustomerAccountId());
startActivity(intent);
}
}
});
mOrderFulfillmentStatus = (TextView) findViewById(R.id.order_fulfillment_status);
mTitles = new ArrayList<String>();
mTitles.add(getString(R.string.overview_tab_name));
mTitles.add(getString(R.string.fullfillment_tab_name));
mTitles.add(getString(R.string.payment_tab_name));
mTitles.add(getString(R.string.returns_tab_name));
mTitles.add(getString(R.string.notes_tab_name));
mOrderViewPager = (ViewPager) findViewById(R.id.order_detail_sections_viewpager);
mTabIndicator = (TabPageIndicator) findViewById(R.id.order_detail_sections);
mTabIndicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
setEditModeVisibility(position == 0);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
if (getLoaderManager().getLoader(LOADER_ORDER_DETAIL) == null) {
getLoaderManager().initLoader(LOADER_ORDER_DETAIL, null, this).forceLoad();
} else {
getLoaderManager().initLoader(LOADER_ORDER_DETAIL, null, this);
}
mNumberFormat = NumberFormat.getCurrencyInstance();
mOrderSwipeRefresh.setOnRefreshListener(this);
mOrderSwipeRefresh.setEnabled(false);
mOrderSwipeRefresh.setColorScheme(R.color.first_color_swipe_refresh,
R.color.second_color_swipe_refresh,
R.color.third_color_swipe_refresh,
R.color.fourth_color_swipe_refresh);
}
@OnClick(R.id.customer_email)
public void emailCustomer() {
if (mCustomerEmail == null || mCustomerEmail.getText().toString().isEmpty()) {
return;
}
ContactIntentUtil.launchEmailIntent(this, mCustomerEmail.getText().toString());
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString(ORDER_NUMBER_EXTRA_KEY, mOrderNumber);
outState.putInt(CURRENT_TENANT_ID, mTenantId);
outState.putInt(CURRENT_SITE_ID, mSiteId);
super.onSaveInstanceState(outState);
}
public void setEditModeVisibility(boolean isVisible) {
enterEditMode.setVisibility(isVisible ? View.VISIBLE : View.GONE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.order_detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.refresh_order) {
mOrderSwipeRefresh.setRefreshing(true);
onRefresh();
return true;
} else if (item.getItemId() == R.id.settings) {
SettingsFragment settingsFragment = SettingsFragment.getInstance();
settingsFragment.show(getFragmentManager(), ORDER_SETTINGS_FRAGMENT);
}
return super.onOptionsItemSelected(item);
}
@Override
public void onRefresh() {
mOrderSwipeRefresh.setRefreshing(true);
Loader orderLoader = getLoaderManager().getLoader(LOADER_ORDER_DETAIL);
orderLoader.reset();
orderLoader.startLoading();
orderLoader.forceLoad();
}
@Override
public Loader<Order> onCreateLoader(int id, Bundle args) {
if (id == LOADER_ORDER_DETAIL) {
mOrderSwipeRefresh.setRefreshing(true);
return new OrderDetailLoader(this, mTenantId, mSiteId, mOrderNumber);
}
return null;
}
@Override
public void onLoadFinished(Loader<Order> loader, Order data) {
mOrderSwipeRefresh.setRefreshing(false);
mOrder = data;
if (mOrder == null) {
return;
}
new RetrieveCustomerAsyncTask(this, this, mSiteId, mTenantId, mOrder.getCustomerAccountId()).execute();
TextView tv = new TextView(this);
tv.setText("Order #" + mOrder.getOrderNumber());
tv.setPadding(getResources().getDimensionPixelSize(R.dimen.order_actionbar_margin_left), 0, 0, 0);
tv.setGravity(Gravity.CENTER);
tv.setTextColor(getResources().getColor(R.color.dark_gray_text));
tv.setTypeface(null, Typeface.BOLD);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
getActionBar().setCustomView(tv);
String date = mOrder.getSubmittedDate() != null ? DateFormat.format("MM/dd/yy hh:mm a", new Date(mOrder.getSubmittedDate().getMillis())).toString() : "";
mOrderDate.setText(date);
mOrderStatus.setText(mOrder.getStatus());
mOrderTotal.setText(mNumberFormat.format(mOrder.getTotal() != null ? mOrder.getTotal() : 0));
if (mAdapter == null) {
mAdapter = new OrderDetailSectionPagerAdapter(getFragmentManager(), mOrder, mTitles, mTenantId, mSiteId);
mOrderViewPager.setAdapter(mAdapter);
mTabIndicator.setViewPager(mOrderViewPager);
} else {
mAdapter.setData(mOrder);
mAdapter.notifyDataSetChanged();
}
}
@Override
public void onLoaderReset(Loader<Order> loader) {
}
@Override
public void customerRetrieved(CustomerAccount customer) {
if (mCustomerName != null && customer != null) {
mCustomerName.setText(customer.getFirstName() + " " + customer.getLastName());
mCustomerEmail.setText(customer.getEmailAddress());
}
}
@Override
public void onError(String errorMessage) {
mCustomerName.setText(getString(R.string.error_message_for_order_customer_name));
}
public void onSwapEditMode() {
mIsEditMode = !mIsEditMode;
mRxBus.send(mIsEditMode);
mAdapter.setIsEditMode(mIsEditMode);
if (mIsEditMode) {
enterEditMode.setText(getString(R.string.exit_edit_mode));
} else {
enterEditMode.setText(getString(R.string.edit));
}
}
}