package com.xiaomi.xms.sales.ui; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.TextView; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.activity.BaseActivity; import com.xiaomi.xms.sales.activity.OrderEditActivity; import com.xiaomi.xms.sales.activity.OrderListActivity; import com.xiaomi.xms.sales.loader.BaseLoader; import com.xiaomi.xms.sales.loader.UserInfoLoader; import com.xiaomi.xms.sales.loader.UserInfoLoader.Result; import com.xiaomi.xms.sales.loader.UserRemindLoader; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.request.HostManager; import com.xiaomi.xms.sales.util.Constants; import com.xiaomi.xms.sales.util.LogUtil; import com.xiaomi.xms.sales.widget.BaseAlertDialog; import com.xiaomi.xms.sales.widget.EmptyLoadingView; import com.xiaomi.xms.sales.xmsf.account.LoginManager; import com.xiaomi.xms.sales.xmsf.account.LoginManager.AccountListener; import java.net.URLEncoder; public class AccountFragment extends BaseFragment implements LoaderCallbacks<UserInfoLoader.Result>, AccountListener { private final String TAG = "AccountFragment"; private final static int USERINFO_LOADER = 1; private final static int USERREMIND_LOADER = 2; private EmptyLoadingView mLoadingView; private BaseLoader<?> mUserRemindLoader; private TextView mUserName; private TextView mUserOrgName; private View mUserExit; private View mOrderList; private View mOrderNonPayment; private View mExpressList; private View mAccountLoginContainer; private View mAccountViewNotLoginContainer; private View mEditOrderList; private TextView mNoPayCount; private TextView mExpressCount; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.account_fragment, container, false); mAccountLoginContainer = view.findViewById(R.id.alread_login); mAccountViewNotLoginContainer = view.findViewById(R.id.not_login); mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading); mUserName = (TextView) view.findViewById(R.id.account_user_name); mUserOrgName = (TextView) view.findViewById(R.id.account_user_org_name); mUserExit = view.findViewById(R.id.account_exit); mOrderList = view.findViewById(R.id.account_my_order_list); mOrderNonPayment = view.findViewById(R.id.account_nonpayment_list); mExpressList = view.findViewById(R.id.account_express_list); mEditOrderList = view.findViewById(R.id.account_order_edit); mNoPayCount = (TextView) view.findViewById(R.id.nonpayment_item_text_count); mExpressCount = (TextView) view.findViewById(R.id.express_item_count); return view; } @Override public void onResume() { super.onResume(); if (LoginManager.getInstance().hasLogin()) { if (mLoader == null) { // getLoaderManager().initLoader(USERINFO_LOADER, null, this); // 拉取需要标记的数字 getLoaderManager().initLoader(USERREMIND_LOADER, null, mUserRemindLoaderCallback); } else { mLoader.reload(); } } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mUserExit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showLogoutDialog(); } }); mAccountViewNotLoginContainer.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { ((BaseActivity) getActivity()).gotoAccount(); } }); mOrderList.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (LoginManager.getInstance().hasLogin()) { Intent intent = new Intent(getActivity(), OrderListActivity.class); intent.setAction(Constants.Intent.ACTION_ORDER_LIST); intent.putExtra(Constants.Intent.EXTRA_ORDER_LIST_TYPE, Tags.Order.ORDER_STATUS_OPEN); startActivity(intent); } else { ((BaseActivity) getActivity()).gotoAccount(); } } }); mOrderNonPayment.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (LoginManager.getInstance().hasLogin()) { Intent intent = new Intent(getActivity(), OrderListActivity.class); intent.setAction(Constants.Intent.ACTION_ORDER_LIST); intent.putExtra(Constants.Intent.EXTRA_ORDER_LIST_TYPE, Tags.Order.ORDER_STATUS_WAIT_PAYMENT); startActivity(intent); } else { ((BaseActivity) getActivity()).gotoAccount(); } } }); mExpressList.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (LoginManager.getInstance().hasLogin()) { Intent intent = new Intent(getActivity(), OrderListActivity.class); intent.setAction(Constants.Intent.ACTION_ORDER_LIST); intent.putExtra(Constants.Intent.EXTRA_ORDER_LIST_TYPE, Tags.Order.ORDER_STATUS_EXPRESS); startActivity(intent); } else { ((BaseActivity) getActivity()).gotoAccount(); } } }); mEditOrderList.setOnClickListener(new OnClickListener() { @Override public void onClick(View btn) { if (LoginManager.getInstance().hasLogin()) { Intent intent = new Intent(getActivity(), OrderEditActivity.class); startActivity(intent); } else { ((BaseActivity) getActivity()).gotoAccount(); } } }); mNoPayCount.setVisibility(View.GONE); mExpressCount.setVisibility(View.GONE); } @Override public void onDetach() { super.onDetach(); LoginManager.getInstance().removeLoginListener(this); // Delete all caches when user logout account if (mLoader != null && !LoginManager.getInstance().hasLogin()) { ((UserInfoLoader) mLoader).deleteCache(); } } @Override public void onAttach(Activity activity) { super.onAttach(activity); LoginManager.getInstance().addLoginListener(this); } @SuppressWarnings("unchecked") @Override public Loader<Result> onCreateLoader(int id, Bundle bundle) { if (id == USERINFO_LOADER) { mLoader = new UserInfoLoader(getActivity()); mLoader.setProgressNotifiable(mLoadingView); return (Loader<Result>) mLoader; } return null; } @Override public void onLoadFinished(Loader<Result> loader, Result data) { LogUtil.d(TAG, "result:" + data); if (data.mUserInfo != null) { mUserName.setText(data.mUserInfo.getUserName()); mUserOrgName.setText(data.mUserInfo.getOrgName()); showView(mAccountLoginContainer); hideView(mAccountViewNotLoginContainer); /** * @HACKME XM_[userId]_UN 这个cookie是用来记录用户的用户名,给Web中使用 */ HostManager.setCookie(getActivity(), "XM_" + LoginManager.getInstance().getUserId() + "_UN", URLEncoder.encode(data.mUserInfo.getUserName()), HostManager.DOMAIN_BASE); } else { mAccountLoginContainer.setVisibility(View.GONE); mAccountViewNotLoginContainer.setVisibility(View.GONE); } } @Override public void onLoaderReset(Loader<Result> arg0) { } private LoaderCallbacks<UserRemindLoader.Result> mUserRemindLoaderCallback = new LoaderCallbacks<UserRemindLoader.Result>() { @SuppressWarnings("unchecked") @Override public Loader<UserRemindLoader.Result> onCreateLoader(int id, Bundle bundle) { if (id == USERREMIND_LOADER) { mUserRemindLoader = new UserRemindLoader(getActivity()); return (Loader<UserRemindLoader.Result>) mUserRemindLoader; } return null; } @Override public void onLoadFinished(Loader<UserRemindLoader.Result> loader, UserRemindLoader.Result data) { getLoaderManager().destroyLoader(USERREMIND_LOADER); if (data != null && data.mRemindInfo != null) { setRemindCount(mNoPayCount, data.mRemindInfo.getUnPayCount()); setRemindCount(mExpressCount, data.mRemindInfo.getExpressCount()); } } @Override public void onLoaderReset(Loader<UserRemindLoader.Result> arg0) { } }; private void setRemindCount(TextView tv, int count) { if (count > 0) { tv.setText(String.valueOf(count)); tv.setVisibility(View.VISIBLE); } else { tv.setVisibility(View.GONE); } } @Override public void onLogin(String userId, String authToken, String security) { if (mLoader == null) { getLoaderManager().initLoader(USERINFO_LOADER, null, this); } else { mLoader.reload(); } } @Override public void onInvalidAuthonToken() { } @Override public void onLogout() { mNoPayCount.setVisibility(View.GONE); mExpressCount.setVisibility(View.GONE); ((BaseActivity) getActivity()).gotoAccount(); getActivity().finish(); } private void showLogoutDialog() { final BaseAlertDialog dialog = new BaseAlertDialog(getActivity()); dialog.setTitle(R.string.logout_title); dialog.setMessage(getResources().getString(R.string.logout_summary, LoginManager.getInstance().getSystemAccountId())); dialog.setPositiveButton(R.string.dialog_ask_cancel, new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.setNegativeButton(R.string.dialog_ask_ok, new OnClickListener() { @Override public void onClick(View v) { if (mLoader != null) { getLoaderManager().destroyLoader(USERINFO_LOADER); mLoader = null; } showView(mAccountViewNotLoginContainer); hideView(mAccountLoginContainer); LoginManager.getInstance().logout(); } }); dialog.show(); } private void showView(View view) { if (view == null) { return; } if (view.getVisibility() == View.GONE) { view.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.appear)); view.setVisibility(View.VISIBLE); } } private void hideView(View view) { if (view == null) { return; } if (view.getVisibility() == View.VISIBLE) { if (view.isShown()) { view.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.disappear)); } view.setVisibility(View.GONE); } } }