package cn.scau.scautreasure.ui; import android.app.Activity; import android.content.DialogInterface; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.BaseAdapter; import android.widget.ListView; import com.devspark.appmsg.AppMsg; import com.umeng.analytics.MobclickAgent; import org.androidannotations.annotations.AfterInject; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.App; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import org.androidannotations.api.BackgroundExecutor; import java.util.ArrayList; import java.util.Arrays; import cn.scau.scautreasure.AppContext; import cn.scau.scautreasure.R; import cn.scau.scautreasure.helper.CacheHelper; import cn.scau.scautreasure.helper.UIHelper; import cn.scau.scautreasure.impl.ServerOnChangeListener; import cn.scau.scautreasure.util.CacheUtil; import cn.scau.scautreasure.widget.SpinnerDialog; /** * User: Special Leung * Date: 13-8-17 * Time: 下午2:38 * Mail: specialcyci@gmail.com */ @EActivity public class CommonActivity extends ActionBarActivity implements DialogInterface.OnCancelListener{ @App protected AppContext app; @ViewById protected View listView; protected ArrayList list; protected BaseAdapter adapter; /** * 当服务器返回404(查询结果为空)的提示语; */ protected int tips_empty = R.string.tips_default_null; protected CacheHelper cacheHelper; @AfterInject void initDialog(){ UIHelper.buildDialog(this, this); cacheHelper = new CacheHelper(this); } @AfterViews void initActionBar(){ getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(false); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayUseLogoEnabled(true); getSupportActionBar().setLogo(R.drawable.menu_icon_back); } protected void setTitle(String title){ getSupportActionBar().setTitle(title); } @Override public void setTitle(int titleResource){ getSupportActionBar().setTitle(titleResource); } /** * 设置当查询的数据集为空的时候的提示语。 * * @param tipsResource */ protected void setDataEmptyTips(int tipsResource){ this.tips_empty = tipsResource; } /** * 展示查询结果; */ @UiThread void showSuccessResult(){ UIHelper.getDialog().dismiss(); ((ListView)listView).setAdapter(adapter); } /** * 处理各种请求失败问题, 例如: * 查询的数据集为空,用户密码错误等等。 * * 本函数还带有正方服务器变更的 Listener 。 */ protected void showErrorResult(ActionBarActivity ctx, int requestCode, ServerOnChangeListener listener){ if (isServerError(requestCode)){ handleServerError(ctx,listener); }else{ showErrorResult(ctx, requestCode); } } /** * 判断是否教务系统服务器错误; * * @param requestCode * @return */ private boolean isServerError(int requestCode){ return requestCode == 500; } /** * 确保要使用的上下文没有被销毁。 * * @param ctx * @return */ private boolean ensureActivityAvailable(Activity ctx){ return ctx != null && !ctx.isFinishing(); } /** * 处理各种请求失败问题, 例如: * 查询的数据集为空,用户密码错误等等。 * * @param requestCode */ @UiThread void showErrorResult(ActionBarActivity ctx, int requestCode){ if( !ensureActivityAvailable(ctx) ) return; UIHelper.getDialog().dismiss(); if(requestCode == 404){ AppMsg.makeText(ctx, tips_empty, AppMsg.STYLE_CONFIRM).show(); }else{ AppContext.showError(requestCode,ctx); } } /** * 处理服务器错误的情况。 * * @param ctx * @param listener */ @UiThread void handleServerError(final ActionBarActivity ctx, final ServerOnChangeListener listener){ if( !ensureActivityAvailable(ctx) ) return; String[] server = ctx.getResources().getStringArray(R.array.server); SpinnerDialog spinner = new SpinnerDialog(ctx, Arrays.asList(server)); spinner.setDefaultSelectPosition(AppContext.getServer() - 1); spinner.setMessage(ctx.getString(R.string.tips_edu_server_error)); spinner.setDialogListener(new SpinnerDialog.DialogListener() { @Override public void select(int n) { AppContext.setServer(n + 1); listener.onChangeServer(); } }); spinner.createBuilder().create().show(); } /** * 处理没有网络连接的情况。 * * @param ctx */ @UiThread void handleNoNetWorkError(ActionBarActivity ctx){ if( !ensureActivityAvailable(ctx) ) return; UIHelper.getDialog().dismiss(); AppMsg.makeText(ctx, getString(R.string.tips_no_network), AppMsg.STYLE_ALERT).show(); } /** * 在进行http请求时,处理用户取消请求。 * * @param dialog */ @Override public void onCancel(DialogInterface dialog) { BackgroundExecutor.cancelAll(UIHelper.CANCEL_FLAG, true); } @Override public void onResume() { super.onResume(); MobclickAgent.onPageStart(getSimpleName()); } @Override public void onPause() { super.onPause(); MobclickAgent.onPageEnd(getSimpleName()); } private String getSimpleName(){ return getClass().getSimpleName(); } /** * 老版本是大多数fragment, 并且主要用这个函数获取context, * 为了减少点代码这函数继续保留了 * * @return */ protected ActionBarActivity getSherlockActivity(){ return this; } @OptionsItem(android.R.id.home) void home(){ this.finish(); } @Click(R.id.action_bar_title) void action_bar_title(){ this.finish(); } @OptionsItem(R.id.up) void up(){ this.finish(); } }