package org.lntu.online.ui.activity; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.LinearInterpolator; import android.widget.TextView; import com.melnykov.fab.FloatingActionButton; import org.lntu.online.R; import org.lntu.online.model.api.ApiClient; import org.lntu.online.model.api.BackgroundCallback; import org.lntu.online.model.entity.CourseEvaInfo; import org.lntu.online.model.storage.LoginShared; import org.lntu.online.ui.adapter.OneKeyEvaAdapter; import org.lntu.online.ui.base.StatusBarActivity; import org.lntu.online.ui.dialog.DialogUtils; import org.lntu.online.ui.dialog.ProgressDialog; import org.lntu.online.ui.listener.NavigationFinishClickListener; import org.lntu.online.ui.util.ToastUtils; import org.lntu.online.util.ShipUtils; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; public class OneKeyEvaActivity extends StatusBarActivity { @BindView(R.id.toolbar) protected Toolbar toolbar; @BindView(R.id.layout_content) protected ViewGroup layoutContent; @BindView(R.id.icon_loading) protected View iconLoading; @BindView(R.id.icon_empty) protected View iconEmpty; @BindView(R.id.icon_loading_anim) protected View iconLoadingAnim; @BindView(R.id.tv_load_failed) protected TextView tvLoadFailed; @BindView(R.id.recycler_view) protected RecyclerView recyclerView; @BindView(R.id.fab) protected FloatingActionButton fab; private OneKeyEvaAdapter adapter; private List<CourseEvaInfo> infoList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one_key_eva); ButterKnife.bind(this); toolbar.setNavigationOnClickListener(new NavigationFinishClickListener(this)); Animation dataLoadAnim = AnimationUtils.loadAnimation(this, R.anim.data_loading); dataLoadAnim.setInterpolator(new LinearInterpolator()); iconLoadingAnim.startAnimation(dataLoadAnim); recyclerView.setLayoutManager(new LinearLayoutManager(this)); infoList = new ArrayList<>(); adapter = new OneKeyEvaAdapter(this, infoList); recyclerView.setAdapter(adapter); fab.attachToRecyclerView(recyclerView); startNetwork(); } private void startNetwork() { ApiClient.service.getCourseEvaInfoList(LoginShared.getLoginToken(this), new BackgroundCallback<List<CourseEvaInfo>>(this) { @Override public void handleSuccess(List<CourseEvaInfo> infoList, Response response) { if (infoList.size() == 0) { showIconEmptyView("暂时没有评课信息。"); } else { OneKeyEvaActivity.this.infoList.clear(); OneKeyEvaActivity.this.infoList.addAll(infoList); adapter.notifyDataSetChanged(); layoutContent.setVisibility(View.VISIBLE); iconLoading.setVisibility(View.GONE); iconEmpty.setVisibility(View.GONE); } } @Override public void handleFailure(String message) { showIconEmptyView(message); } }); } private void showIconEmptyView(String message) { iconLoading.setVisibility(View.GONE); iconEmpty.setVisibility(View.VISIBLE); tvLoadFailed.setText(message); } @OnClick(R.id.icon_empty) protected void onBtnIconEmptyClick() { iconLoading.setVisibility(View.VISIBLE); iconEmpty.setVisibility(View.GONE); startNetwork(); } @OnClick(R.id.fab) protected void onBtnFabClick() { int n = 0; for (CourseEvaInfo info : infoList) { if (!info.isDone()) { n++; } } if (n <= 0) { //不需要评估 DialogUtils.createAlertDialogBuilder(this) .setMessage("您的课程都已经评价完成了。") .setPositiveButton("确定", null) .show(); } else { //需要评估 DialogUtils.createAlertDialogBuilder(this) .setMessage("您有" + n + "门课程需要评价。只有所有的课程完成评价之后,才能够正常查询成绩信息。点击【评价】按钮将会授权应用为您自动全部评价为好评。您也可以通过浏览器登录教务在线手动评价。\n\n您是否授权应用为您自动评价课程呢?") .setPositiveButton("评价", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ProgressDialog progressDialog = DialogUtils.createProgressDialog(OneKeyEvaActivity.this); progressDialog.setMessage(R.string.networking); progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { ToastUtils.with(OneKeyEvaActivity.this).show("评课任务已停止"); } }); progressDialog.setCanceledOnTouchOutside(false); progressDialog.show(); startEvaCourse(0, progressDialog); } }) .setNegativeButton("取消", null) .show(); } } private void startEvaCourse(final int current, final ProgressDialog progressDialog) { if (current == infoList.size()) { //评价已经完成 progressDialog.dismiss(); int n = 0; for (CourseEvaInfo info : infoList) { if (!info.isDone()) { n++; } } if (n <= 0) { //不需要评估 DialogUtils.createAlertDialogBuilder(this) .setMessage("您的课程都已经评价完成了。\n不给我们一个好评吗?") .setPositiveButton("给好评", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ShipUtils.openInAppStore(OneKeyEvaActivity.this); } }) .setNegativeButton("不评价", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ToastUtils.with(OneKeyEvaActivity.this).show("呜呜呜~~~o(>_<)o"); } }) .show(); } else { //需要评估 DialogUtils.createAlertDialogBuilder(this) .setMessage("您有" + n + "门课程评价失败,您可以再试一次。") .setPositiveButton("确定", null) .show(); } } else { //没评完 final CourseEvaInfo info = infoList.get(current); if (info.isDone()) { //不需要评价,跳过 startEvaCourse(current + 1, progressDialog); } else { //需要评价 progressDialog.setMessage("正在评价:" + info.getName()); ApiClient.service.doCourseEva(LoginShared.getLoginToken(this), info.getEvaKey(), new Callback<Void>() { @Override public void success(Void nothing, Response response) { if (progressDialog.isShowing()) { info.setDone(true); adapter.notifyItemChanged(current); startEvaCourse(current + 1, progressDialog); } } @Override public void failure(RetrofitError error) { if (progressDialog.isShowing()) { startEvaCourse(current + 1, progressDialog); } } }); } } } }