package org.lntu.online.ui.activity; 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.ArrayAdapter; import android.widget.Spinner; 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.Grades; import org.lntu.online.model.storage.LoginShared; import org.lntu.online.ui.adapter.GradesAdapter; import org.lntu.online.ui.base.StatusBarActivity; import org.lntu.online.ui.listener.NavigationFinishClickListener; import java.util.Collections; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import retrofit.client.Response; public class GradesActivity extends StatusBarActivity { @BindView(R.id.toolbar) protected Toolbar toolbar; @BindView(R.id.layout_content) protected ViewGroup layoutContent; @BindView(R.id.recycler_view) protected RecyclerView recyclerView; @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.tv_ava_credit) protected TextView tvAvaCredit; @BindView(R.id.fab) protected FloatingActionButton fab; @BindView(R.id.layout_condition) protected ViewGroup layoutCondition; @BindView(R.id.spn_year) protected Spinner spnYear; @BindView(R.id.spn_term) protected Spinner spnTerm; @BindView(R.id.spn_level) protected Spinner spnLevel; @BindView(R.id.spn_display) protected Spinner spnDisplay; private GradesAdapter adapter; // 最后一次使用的过滤条件-默认条件为全部 private int lastYear = 0; private String lastTerm = ""; private Grades.Level lastLevel = null; private boolean lastDisplayMax = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grades); 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)); adapter = new GradesAdapter(this); recyclerView.setAdapter(adapter); fab.attachToRecyclerView(recyclerView); startNetwork(); } private void startNetwork() { ApiClient.service.getGrades(LoginShared.getLoginToken(this), new BackgroundCallback<Grades>(this) { @Override public void handleSuccess(Grades grades, Response response) { if (grades.getCourseScores().size() == 0) { showIconEmptyView("暂时没有成绩信息。"); } else { showLayoutContent(grades); } } @Override public void handleFailure(String message) { showIconEmptyView(message); } }); } private void showLayoutContent(Grades grades) { tvAvaCredit.setText(grades.getAverageCredit().getSummary()); Collections.sort(grades.getCourseScores()); // 排序 adapter.setScoreList(grades.getCourseScores()); int topYear = grades.getCourseScores().get(0).getYear(); int bottomYear = grades.getCourseScores().get(grades.getCourseScores().size() - 1).getYear(); String[] years = new String[topYear - bottomYear + 2]; years[0] = "全部"; for (int n = 1; n < years.length; n++) { years[n] = topYear - n + 1 + ""; } ArrayAdapter<String> spnYearAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, years); spnYearAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spnYear.setAdapter(spnYearAdapter); layoutContent.setVisibility(View.VISIBLE); fab.setVisibility(View.VISIBLE); iconLoading.setVisibility(View.GONE); iconEmpty.setVisibility(View.GONE); } 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.layout_condition_center) protected void onBtnLayoutConditionCenterClick() { // 屏蔽条件面板中间事件 } @Override public void onBackPressed() { if (layoutCondition.getVisibility() == View.VISIBLE) { layoutCondition.setVisibility(View.GONE); fab.setImageResource(R.drawable.ic_search_white_24dp); } else { super.onBackPressed(); } } @OnClick({ R.id.fab, R.id.layout_condition }) protected void onBtnFabClick() { if (layoutCondition.getVisibility() == View.GONE) { layoutCondition.setVisibility(View.VISIBLE); fab.setImageResource(R.drawable.ic_done_white_24dp); } else { layoutCondition.setVisibility(View.GONE); fab.setImageResource(R.drawable.ic_search_white_24dp); if (needUpdateListView()) { updateListView(); } } } private Grades.Level getCurrentLevel() { switch (spnLevel.getSelectedItemPosition()) { case 1: return Grades.Level.GREAT; case 2: return Grades.Level.NORMAL; case 3: return Grades.Level.UNPASS; default: return null; } } private boolean needUpdateListView() { if (lastYear != (spnYear.getSelectedItemPosition() == 0 ? 0 : Integer.parseInt(spnYear.getSelectedItem().toString()))) { return true; } else if (!lastTerm.equals(spnTerm.getSelectedItemPosition() == 0 ? "" : spnTerm.getSelectedItem().toString())) { return true; } else if (lastLevel != getCurrentLevel()) { return true; } else { return lastDisplayMax == (spnDisplay.getSelectedItemPosition() == 0); } } private void updateListView() { lastYear = spnYear.getSelectedItemPosition() == 0 ? 0 : Integer.parseInt(spnYear.getSelectedItem().toString()); lastTerm = spnTerm.getSelectedItemPosition() == 0 ? "" : spnTerm.getSelectedItem().toString(); lastLevel = getCurrentLevel(); lastDisplayMax = spnDisplay.getSelectedItemPosition() != 0; adapter.updateListView(lastYear, lastTerm, lastLevel, lastDisplayMax); recyclerView.scrollToPosition(0); } }