package com.cheikh.lazywaimai.ui.activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.Menu; import android.view.MenuItem; import com.cheikh.lazywaimai.model.bean.ResponseError; import com.cheikh.lazywaimai.util.ToastUtil; import com.google.common.base.Preconditions; import java.util.ArrayList; import com.cheikh.lazywaimai.R; import com.cheikh.lazywaimai.base.BaseController; import com.cheikh.lazywaimai.base.BaseTabActivity; import com.cheikh.lazywaimai.context.AppContext; import com.cheikh.lazywaimai.controller.BusinessController; import com.cheikh.lazywaimai.model.bean.Business; import com.cheikh.lazywaimai.ui.Display; import com.cheikh.lazywaimai.ui.fragment.BusinessDetailFragment; import com.cheikh.lazywaimai.ui.fragment.CommentFragment; import com.cheikh.lazywaimai.ui.fragment.ProductFragment; import com.cheikh.lazywaimai.util.StringFetcher; /** * author: cheikh.wang on 17/1/5 * email: wanghonghi@126.com */ public class BusinessActivity extends BaseTabActivity<BusinessController.BusinessUiCallbacks> implements BusinessController.BusinessTabUi { private BusinessController.BusinessTab[] mTabs; private MenuItem mLikeMenuItem; private Business mBusiness; private boolean mIsLike; @Override protected BaseController getController() { return AppContext.getContext().getMainController().getBusinessController(); } @Override protected void handleIntent(Intent intent, Display display) { mBusiness = (Business) intent.getSerializableExtra(Display.PARAM_OBJ); } @Override protected void initializeViews(Bundle savedInstanceState) { super.initializeViews(savedInstanceState); setTitle(mBusiness.getName()); } @Override public Business getRequestParameter() { return mBusiness; } @Override protected String getTabTitle(int position) { if (mTabs != null) { return StringFetcher.getString(mTabs[position]); } return null; } @Override public void onFavoriteFinish(boolean isLike) { cancelLoading(); updateLikeMenuIcon(isLike); ToastUtil.showToast(isLike ? R.string.toast_success_favorite_business : R.string.toast_success_cancel_favorite_business); } @Override public void onResponseError(ResponseError error) { cancelLoading(); ToastUtil.showToast(error.getMessage()); } @Override public void setTabs(BusinessController.BusinessTab... tabs) { Preconditions.checkNotNull(tabs, "tabs cannot be null"); mTabs = tabs; if (getAdapter().getCount() != tabs.length) { ArrayList<Fragment> fragments = new ArrayList<>(); for (BusinessController.BusinessTab tab : tabs) { fragments.add(createFragmentForTab(tab)); } setFragments(fragments); } } private Fragment createFragmentForTab(BusinessController.BusinessTab tab) { switch (tab) { case PRODUCT: return ProductFragment.create(mBusiness); case COMMENT: return CommentFragment.create(mBusiness); case DETAIL: return BusinessDetailFragment.create(mBusiness); } return null; } private void updateLikeMenuIcon(boolean isLike) { mIsLike = isLike; mLikeMenuItem.setIcon(isLike ? R.drawable.ic_liked : R.drawable.ic_like); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_business, menu); mLikeMenuItem = menu.findItem(R.id.menu_like); updateLikeMenuIcon(mBusiness.isLike()); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_call: getCallbacks().callBusinessPhone(mBusiness); return true; case R.id.menu_like: showLoading(R.string.label_being_something); getCallbacks().favoriteBusiness(mBusiness, !mIsLike); return true; } return super.onOptionsItemSelected(item); } }