/**
*
*/
package com.pyj.activity;
import java.io.IOException;
import java.net.ConnectException;
import java.util.concurrent.TimeoutException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
import com.hupu.games.R;
import com.hupu.games.common.DoubleClickUtil;
import com.hupu.games.common.HupuLog;
import com.pyj.BaseApplication;
import com.pyj.common.DialogRes;
import com.slidingmenu.lib.app.SlidingFragmentActivity;
import com.umeng.analytics.MobclickAgent;
/**
* 所有自定activity的基类,处理公用dialog,view,menu的事件。
*
* @author peter.pan
*/
public class BaseActivity extends FragmentActivity {
private BaseApplication mBaseApp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBaseApp = (BaseApplication) getApplication();
mBaseApp.addActivitToStack(this);
click = new Click();
}
@Override
protected void onResume() {
super.onResume();
i_curState = STATE_START;
}
@Override
protected void onStop() {
if (i_curState == STATE_SHOW_DIALOG && mDialog.isShowing())
mDialog.cancel();
i_curState = STATE_STOP;
super.onStop();
}
@Override
protected void onDestroy() {
mBaseApp.removeFromStack(this);
super.onDestroy();
}
public void showToast(String s) {
Toast toast = Toast.makeText(this, s, Toast.LENGTH_SHORT);
// toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
/** dialog中有一个按钮 */
public static final int ONE_BUTTON = 1;
/** dialog中有两个按钮 */
public static final int TOW_BUTTONS = 3;
/** dialog中有三个按钮 */
public static final int THREE_BUTTONS = 7;
/** 错误的信息的字符串 */
private String str_err;
/** 错误的信息的Res id */
private int i_errRes;
protected AlertDialog mDialog;
@Override
protected Dialog onCreateDialog(final int id) {
if (id == DialogRes.DIALOG_ID_NET_CONNECT) {
return mDialog = DialogRes.buildProgressDialog(this);
}
AlertDialog.Builder builder = DialogRes.getBuild(this, id, true);
int flag = 0;
switch (id) {
case DialogRes.DIALOG_ID_ERR:
// 显示错误信息
if (str_err != null)
builder.setMessage(str_err);
else if (i_errRes > 0)
builder.setMessage(i_errRes);
case DialogRes.DIALOG_ERROR_PROMPT:
case DialogRes.DIALOG_ID_NETWORK_NOT_AVALIABLE:
case DialogRes.DIALOG_ID_NO_DATA:
case DialogRes.DIALOG_ID_SDCARD_NOT_AVAILABLE:
case DialogRes.DIALOG_ID_LOGINING_FAILD:// 登录失败
case DialogRes.DIALOG_ID_NO_UPDATE:
case DialogRes.DIALOG_REGIST_NOTIFY:
flag = ONE_BUTTON;
break;
case DialogRes.DIALOG_ID_NET_CONNECT:
break;
case DialogRes.DIALOG_WAITING_FOR_DATA:// 正在获取数据...progressDialog
break;
case DialogRes.DIALOG_ID_AUTO_LOGINING:// 自动登录...
break;
case DialogRes.DIALOG_ID_LOGINING:// 正在登录...
break;
case DialogRes.DIALOG_ID_CHECK_USERNAME_ISVALID:// 检查用户名是否重复
break;
case DialogRes.DIALOG_SEND_REGISTER_REQUEST:// 正在发送请求
break;
case DialogRes.DIALOG_UPDATE_FOR_DATA:
break;
case DialogRes.DIALOG_ID_DOWNLOAD_FAILED:
case DialogRes.DIALOG_ID_HAS_UPDATE:
case DialogRes.DIALOG_QUIT_PROMPT:
case DialogRes.DIALOG_ID_CANCEL_DOWNLOAD:
flag = TOW_BUTTONS;
break;
case CUSTOM_DIA_TOW_BUTTONS:
break;
}
if ((flag & 1) > 0) {
builder.setPositiveButton(DialogRes.getPositiveTxt(id),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
clickPositiveButton(id);
}
});
}
if ((flag & 2) > 0) {
builder.setNegativeButton(DialogRes.getNegativeTxt(id),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
clickNegativeButton(id);
}
});
}
if ((flag & 4) > 0) {
builder.setNeutralButton(DialogRes.getNeutralTxt(id),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
clickNeutralButton(id);
}
});
}
mDialog = builder.create();
mDialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
onCancelDialog(id);
}
});
return mDialog;
}
final int CUSTOM_DIA_TOW_BUTTONS = -2;
/**
* 对话框取消时会调
*
* @param dialogId
* 对话框ID
* */
public void onCancelDialog(int dialogId) {
if (dialogId == DialogRes.DIALOG_ID_NET_CONNECT
&& i_curState == STATE_CONNECTING) {
i_curState = STATE_START;
}
}
/**
* 点击dialog左键 子类需要重载
*
* @param dialogId
* 对话框ID
* */
public void clickPositiveButton(int dialogId) {
removeDialog(dialogId);
if (dialogId == DialogRes.DIALOG_QUIT_PROMPT) {
// 如果是退出
quit();
}
}
public void quit() {
onQuit();
mBaseApp.quit();
}
public void onQuit() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
/**
* 点击dialog右键 子类需要重载
*
* @param dialogId
* 对话框ID
* */
public void clickNegativeButton(int dialogId) {
removeDialog(dialogId);
}
/**
* 点击dialog中间键 子类需要重载
*
* @param dialogId
* 对话框ID
* */
public void clickNeutralButton(int dialogId) {
}
/**
* 请求服务正常返回结果,子类需要覆盖此方法。
*
* @param o
* 返回的数据对象
* @param methodId
* 请求的方法ID
*
* */
public void onReqResponse(Object o, int methodId) {
}
/**
* 请求服务正常返回结果,子类需要覆盖此方法。
*
* @param o
* 返回的数据对象
* @param methodId
* 请求的方法ID
*
* */
public void onReqResponse(Object o, int methodId,int msgid1,int msgid2) {
}
/**
* 请求服务异常返回结果,子类可以覆盖此方法。
*
* @param error
* 返回的错误对象
* @param content
* 返回的错误描述
* */
public void onErrResponse(Throwable error, int type) {
i_errRes = -1;
str_err = null;
if (error != null) {
if (error instanceof ConnectException
|| error instanceof IOException) {
i_errRes = R.string.MSG_CONNECTION_ERR;
//添加umeng自定义事件超时
MobclickAgent.onEvent(this, "Http_Connec_Error_5");
} else if (error instanceof TimeoutException) {
MobclickAgent.onEvent(this, "Http_TimeOut_5");
i_errRes = R.string.MSG_TIME_OUT;
}
error.printStackTrace();
}
if (i_errRes > 0)
showDialog(DialogRes.DIALOG_ID_ERR);
}
public void onErrMsg(String msg, int type)
{
showToast(msg);
}
/**
* 请求服务异常返回结果,子类可以覆盖此方法。
*
* @param error
* 返回的错误对象
* @param content
* 返回的错误描述
* @param isBackGroundThread
* 是否后台线程访问网络 true:是,false:否
*
*/
public void onErrResponse(Throwable error, String content,
boolean isBackGroundThread) {
}
public Click click;
/** 设置控件点击监听器 */
public void setOnClickListener(int id) {
if (click == null)
click = new Click();
findViewById(id).setOnClickListener(click);
}
private class Click implements OnClickListener {
@Override
public void onClick(View v) {
int id = v.getId();
treatClickEvent(id);
treatClickEvent(v);
}
}
/** 处理点击事件 */
public void treatClickEvent(int id) {
if(DoubleClickUtil.isFastDoubleClick()){
return;
}
}
/** 处理点击事件 */
public void treatClickEvent(View v) {
}
/** 设置listview点击监听器 */
class ListClick implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> arg0, View v, int pos, long arg3) {
treatItemClick(arg0, v, pos, arg3);
}
}
ListClick listClick;
public void setOnItemClick(ListView list) {
if (listClick == null)
listClick = new ListClick();
list.setOnItemClickListener(listClick);
}
public void treatItemClick(AdapterView<?> arg0, View v, int pos, long arg3) {
}
/**
* 记录当前的状态
* */
public int i_curState;
/**
* 当前Activity处于开始状态
* */
public static final int STATE_START = 1;
/**
* 当前Activity处于暂停状态
* */
public static final int STATE_PAUSE = 2;
/**
* 当前Activity处于连接数据状态
* */
public static final int STATE_CONNECTING = 3;
/**
* 当前Activity处于显示对话框状态
* */
public static final int STATE_SHOW_DIALOG = 4;
/**
* 当前Activity处于停止状态
* */
public static final int STATE_STOP = 5;
/** 当前请求的线程数 */
public int i_curReqTimes;
/**
* 保存图片
*/
public void savePic(String url){
}
}