package cn.scau.scautreasure.ui;
import android.app.Activity;
import android.content.DialogInterface;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
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.App;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
import org.androidannotations.api.BackgroundExecutor;
import java.util.Arrays;
import java.util.List;
import cn.scau.scautreasure.AppContext;
import cn.scau.scautreasure.R;
import cn.scau.scautreasure.helper.UIHelper;
import cn.scau.scautreasure.impl.ServerOnChangeListener;
import cn.scau.scautreasure.widget.ResideMenu;
import cn.scau.scautreasure.widget.SpinnerDialog;
/**
* 查询通用的Activiy;
* User: Special Leung
* Date: 13-8-17
* Time: 下午2:38
* Mail: specialcyci@gmail.com
*/
@EFragment
public abstract class CommonFragment extends Fragment implements DialogInterface.OnCancelListener{
@App
protected AppContext app;
@ViewById
protected View listView;
protected List list;
protected BaseAdapter adapter;
/**
* 当服务器返回404(查询结果为空)的提示语;
*/
protected int tips_empty = R.string.tips_default_null;
@AfterInject
void initDialog(){
UIHelper.buildDialog(getActivity(), this);
}
protected Main_ parentActivity(){
return (Main_) getActivity();
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
protected void setTitle(String title){
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(title);
}
protected void setTitle(int titleResource){
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(titleResource);
}
protected void setSubTitle(String res){
((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle(res);
}
protected void setDataEmptyTips(int tipsResource){
this.tips_empty = tipsResource;
}
/**
* 展示查询结果;
*/
@UiThread
void showSuccessResult(){
UIHelper.getDialog().dismiss();
((ListView)listView).setAdapter(adapter);
}
protected void showErrorResult(ActionBarActivity ctx, int requestCode, ServerOnChangeListener listener){
if (isServerError(requestCode)){
handleServerError(ctx,listener);
}else{
showErrorResult(ctx, requestCode);
}
}
private boolean isServerError(int requestCode){
return requestCode == 500;
}
/**
* 展示http请求异常结果
*
* @param requestCode
*/
@UiThread
void showErrorResult(ActionBarActivity ctx, int requestCode){
if(ctx == null) return;
UIHelper.getDialog().dismiss();
if(requestCode == 404){
AppMsg.makeText(ctx, tips_empty, AppMsg.STYLE_CONFIRM).show();
}else{
AppContext.showError(requestCode,ctx);
}
}
private boolean ensureActivityAvailable(Activity ctx){
return ctx != null && !ctx.isFinishing();
}
@UiThread
void handleServerError(final ActionBarActivity ctx, final ServerOnChangeListener listener){
if( !ensureActivityAvailable(ctx) )
return;
UIHelper.getDialog().dismiss();
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();
}
@UiThread
void handleNoNetWorkError(ActionBarActivity ctx){
if( !ensureActivityAvailable(ctx) )
return;
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();
}
/**
* 由于将actionbar从sherlock迁移到官方的appcompat,
* hack这个方法去减少其他文件的修改.
*
* @return
*/
protected ActionBarActivity getSherlockActivity(){
return (ActionBarActivity)getActivity();
}
}