package edu.hebtu.movingcampus.activity.base;
import java.lang.reflect.Field;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import com.umeng.analytics.MobclickAgent;
import edu.hebtu.movingcampus.R;
import edu.hebtu.movingcampus.utils.LogUtil;
public abstract class BaseActivity extends Activity {
private static final String TAG = "BaseActivity";
protected AlertDialog mAlertDialog;
protected AsyncTask mRunningTask;
/******************************** 【Activity LifeCycle For Debug】 *******************************************/
@Override
protected void onCreate(Bundle savedInstanceState) {
LogUtil.d(TAG, this.getClass().getSimpleName()
+ " onCreate() invoked!!");
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
MobclickAgent.onError(this);
}
@Override
protected void onStart() {
LogUtil.d(TAG, this.getClass().getSimpleName() + " onStart() invoked!!");
super.onStart();
}
@Override
protected void onRestart() {
LogUtil.d(TAG, this.getClass().getSimpleName()
+ " onRestart() invoked!!");
super.onRestart();
}
@Override
protected void onResume() {
LogUtil.d(TAG, this.getClass().getSimpleName()
+ " onResume() invoked!!");
super.onResume();
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
LogUtil.d(TAG, this.getClass().getSimpleName() + " onPause() invoked!!");
super.onPause();
try {
MobclickAgent.onPause(this);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onStop() {
LogUtil.d(TAG, this.getClass().getSimpleName() + " onStop() invoked!!");
super.onStop();
}
@Override
protected void onDestroy() {
LogUtil.d(TAG, this.getClass().getSimpleName()
+ " onDestroy() invoked!!");
super.onDestroy();
if (mRunningTask != null && mRunningTask.isCancelled() == false) {
mRunningTask.cancel(false);
mRunningTask = null;
}
if (mAlertDialog != null) {
mAlertDialog.dismiss();
mAlertDialog = null;
}
}
public void recommandToYourFriend(String url, String shareTitle) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, shareTitle + " " + url);
Intent itn = Intent.createChooser(intent, "分享");
startActivity(itn);
}
/******************************** 【Activity LifeCycle For Debug】 *******************************************/
protected void showShortToast(int pResId) {
showShortToast(getString(pResId));
}
protected void showLongToast(String pMsg) {
Toast.makeText(this, pMsg, Toast.LENGTH_LONG).show();
}
protected void showShortToast(String pMsg) {
Toast.makeText(this, pMsg, Toast.LENGTH_SHORT).show();
}
protected boolean hasExtra(String pExtraKey) {
if (getIntent() != null) {
return getIntent().hasExtra(pExtraKey);
}
return false;
}
protected void openActivity(Class<?> pClass) {
openActivity(pClass, null);
}
protected void openActivity(Class<?> pClass, Bundle pBundle) {
Intent intent = new Intent(this, pClass);
if (pBundle != null) {
intent.putExtras(pBundle);
}
startActivity(intent);
}
protected void openActivity(String pAction) {
openActivity(pAction, null);
}
protected void openActivity(String pAction, Bundle pBundle) {
Intent intent = new Intent(pAction);
if (pBundle != null) {
intent.putExtras(pBundle);
}
startActivity(intent);
}
/**
* 通过反射来设置对话框是否要关闭,在表单校验时很管用, 因为在用户填写出错时点确定时默认Dialog会消失, 所以达不到校验的效果
* 而mShowing字段就是用来控制是否要消失的,而它在Dialog中是私有变量, 所有只有通过反射去解决此问题
*
* @param pDialog
* @param pIsClose
*/
public void setAlertDialogIsClose(DialogInterface pDialog, Boolean pIsClose) {
try {
Field field = pDialog.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(pDialog, pIsClose);
} catch (Exception e) {
e.printStackTrace();
}
}
protected AlertDialog showAlertDialog(String TitleID, String Message) {
mAlertDialog = new AlertDialog.Builder(this).setTitle(TitleID)
.setMessage(Message).show();
return mAlertDialog;
}
protected AlertDialog showAlertDialog(int pTitelResID, String pMessage,
DialogInterface.OnClickListener pOkClickListener) {
String title = getResources().getString(pTitelResID);
return showAlertDialog(title, pMessage, pOkClickListener, null, null);
}
protected AlertDialog showAlertDialog(String pTitle, String pMessage,
DialogInterface.OnClickListener pOkClickListener,
DialogInterface.OnClickListener pCancelClickListener,
DialogInterface.OnDismissListener pDismissListener) {
mAlertDialog = new AlertDialog.Builder(this)
.setTitle(pTitle)
.setMessage(pMessage)
.setPositiveButton(android.R.string.ok, pOkClickListener)
.setNegativeButton(android.R.string.cancel,
pCancelClickListener).show();
if (pDismissListener != null) {
mAlertDialog.setOnDismissListener(pDismissListener);
}
return mAlertDialog;
}
protected AlertDialog showAlertDialog(String pTitle, String pMessage,
String pPositiveButtonLabel, String pNegativeButtonLabel,
DialogInterface.OnClickListener pOkClickListener,
DialogInterface.OnClickListener pCancelClickListener,
DialogInterface.OnDismissListener pDismissListener) {
mAlertDialog = new AlertDialog.Builder(this).setTitle(pTitle)
.setMessage(pMessage)
.setPositiveButton(pPositiveButtonLabel, pOkClickListener)
.setNegativeButton(pNegativeButtonLabel, pCancelClickListener)
.show();
if (pDismissListener != null) {
mAlertDialog.setOnDismissListener(pDismissListener);
}
return mAlertDialog;
}
protected ProgressDialog showProgressDialog(int pTitelResID,
String pMessage,
DialogInterface.OnCancelListener pCancelClickListener) {
String title = getResources().getString(pTitelResID);
return showProgressDialog(title, pMessage, pCancelClickListener);
}
protected ProgressDialog showProgressDialog(String pTitle, String pMessage,
DialogInterface.OnCancelListener pCancelClickListener) {
mAlertDialog = ProgressDialog.show(this, pTitle, pMessage, true, true);
mAlertDialog.setOnCancelListener(pCancelClickListener);
return (ProgressDialog) mAlertDialog;
}
protected void hideKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) this
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
protected void handleOutmemoryError() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(BaseActivity.this, "内存空间不足!", Toast.LENGTH_SHORT)
.show();
// finish();
}
});
}
private int network_err_count = 0;
protected void handleNetworkError() {
network_err_count++;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (network_err_count < 3) {
Toast.makeText(BaseActivity.this, "网速好像不怎么给力啊!",
Toast.LENGTH_SHORT).show();
} else if (network_err_count < 5) {
Toast.makeText(BaseActivity.this, "网速真的不给力!",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(BaseActivity.this, "唉,今天的网络怎么这么差劲!",
Toast.LENGTH_SHORT).show();
}
// finish();
}
});
}
protected void handleMalformError() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(BaseActivity.this, "数据格式错误!", Toast.LENGTH_SHORT)
.show();
// finish();
}
});
}
protected void handleFatalError() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(BaseActivity.this, "发生了一点意外,程序终止!",
Toast.LENGTH_SHORT).show();
finish();
}
});
}
public void finish() {
super.finish();
overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
}
public void defaultFinish() {
super.finish();
}
protected abstract void bindButton();
}