package com.xiaomi.xms.sales.widget; import android.content.Context; import android.content.Intent; import android.os.Handler.Callback; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.activity.NetworkErrorActivity; import com.xiaomi.xms.sales.loader.BaseResult; import com.xiaomi.xms.sales.loader.ProgressNotifiable; import com.xiaomi.xms.sales.loader.BaseResult.ResultStatus; import com.xiaomi.xms.sales.util.LogUtil; import com.xiaomi.xms.sales.util.ToastUtil; public class EmptyLoadingView extends LinearLayout implements ProgressNotifiable { private static final String TAG = "EmptyLoadingView"; private ProgressBar mProgressBar; private TextView mTextView; private Button mButton; private int mEmptyResId; private CharSequence mEmptyText; public EmptyLoadingView(Context context) { this(context, null); } public EmptyLoadingView(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.empty_loading, this, true); mProgressBar = (ProgressBar) findViewById(R.id.progress); mTextView = (TextView) findViewById(R.id.empty_text); mButton = (Button) findViewById(R.id.button); LogUtil.d("XiaoMiShop-EmptyLoadingView", "init loading view:" + mTextView.getText()); } private void updateStyle(boolean hasData) { if (hasData) { getLayoutParams().height = LayoutParams.WRAP_CONTENT; setBackgroundResource(R.drawable.loading_view_bg); } else { getLayoutParams().height = LayoutParams.MATCH_PARENT; setBackgroundDrawable(null); } } @Override public void startLoading(boolean hasData) { updateStyle(hasData); mProgressBar.setVisibility(VISIBLE); mTextView.setVisibility(GONE); mButton.setVisibility(GONE); showView(this); } @Override public void stopLoading(boolean hasData) { updateStyle(hasData); if (hasData) { hideView(this); } else { showView(this); mProgressBar.setVisibility(GONE); mTextView.setVisibility(VISIBLE); if (mEmptyResId != 0) { mTextView.setText(mEmptyResId); } else if (!TextUtils.isEmpty(mEmptyText)) { mTextView.setText(mEmptyText); } mButton.setVisibility(GONE); } } @Override public void init(boolean hasData, boolean isLoading) { updateStyle(hasData); if (isLoading) { setVisibility(VISIBLE); mProgressBar.setVisibility(VISIBLE); mTextView.setVisibility(GONE); mButton.setVisibility(GONE); } else { if (hasData) { setVisibility(GONE); } else { setVisibility(VISIBLE); mProgressBar.setVisibility(GONE); mTextView.setVisibility(VISIBLE); mButton.setVisibility(GONE); } } } private void showView(View view) { if (view == null) { return; } if (view.getVisibility() == GONE) { view.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.appear)); view.setVisibility(VISIBLE); } } private void hideView(View view) { if (view == null) { return; } if (view.getVisibility() == VISIBLE) { if (view.isShown()) { view.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.disappear)); } view.setVisibility(GONE); } } public void setEmptyText(int emptyRes) { mEmptyResId = emptyRes; } public void setEmptyText(CharSequence errorStr) { mEmptyText = errorStr; } @Override public void onError(boolean hasData, ResultStatus status, final Callback callback) { if(status == BaseResult.ResultStatus.NETWROK_ERROR || status == BaseResult.ResultStatus.SERVICE_ERROR){ Intent intent = new Intent(getContext(), NetworkErrorActivity.class); getContext().startActivity(intent); } else{ updateStyle(hasData); if (hasData) { hideView(this); ToastUtil.show(getContext(), BaseResult.getStatusDes(status)); } else { showView(this); mProgressBar.setVisibility(GONE); mTextView.setVisibility(VISIBLE); mTextView.setText(BaseResult.getStatusDes(status)); LogUtil.d("XiaoMiShop-EmptyLoadingView", "set err text:" + mTextView.getText()); mButton.setVisibility(VISIBLE); if (status == BaseResult.ResultStatus.NETWROK_ERROR) { mButton.setText(R.string.check_network); } else if (status == ResultStatus.AUTH_ERROR) { mButton.setText(R.string.login_again); } else { mButton.setText(R.string.try_again); } mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { callback.handleMessage(null); } }); } } } }