package studio.uphie.one.abs;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.TextHttpResponseHandler;
import com.umeng.analytics.MobclickAgent;
import studio.uphie.one.R;
import studio.uphie.one.common.HttpClient;
import studio.uphie.one.common.HttpData;
import studio.uphie.one.common.HttpError;
import studio.uphie.one.interfaces.IHttp;
import studio.uphie.one.interfaces.IInit;
import studio.uphie.one.interfaces.OnNetConnChangeListener;
import studio.uphie.one.utils.NetworkUtil;
import studio.uphie.one.utils.TextToast;
import org.apache.http.Header;
import org.json.JSONException;
import org.json.JSONObject;
import butterknife.ButterKnife;
/**
* Created by Uphie on 2015/9/5.
* Email: uphie7@gmail.com
*/
public abstract class AbsBaseActivity extends Activity implements IInit, IHttp, OnNetConnChangeListener {
private InputMethodManager softManager;
private NetworkStateChangeReceiver mNetworkStateChangeReceiver;
private TextView tv_title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getLayoutId() == 0) {
return;
}
setContentView(getLayoutId());
//获得软键盘管理器
softManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//注册监听器
mNetworkStateChangeReceiver = new NetworkStateChangeReceiver();
IntentFilter mIntentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateChangeReceiver, mIntentFilter);
ButterKnife.bind(this);
initActionBar();
init();
}
@Override
public void onDataError(String url, HttpError error) {
}
@Override
public void getHttpData(String url, RequestParams param, HttpData httpData) {
}
@Override
public void onDataOk(String url, String data) {
}
@Override
public void onNetworkDisconnected() {
TextToast.shortShow("网络连接异常");
}
/**
* 是否应该隐藏软键盘
*
* @param v
* @param event
* @return
*/
private boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] leftTop = {0, 0};
//获取输入框当前的location位置
v.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域,保留点击EditText的事件
return false;
} else {
return true;
}
}
return false;
}
private void initActionBar() {
ImageButton ib_back = ButterKnife.findById(this, R.id.actionbar_back);
if (ib_back != null) {
ib_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
tv_title=ButterKnife.findById(this,R.id.actionbar_title);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
if (softManager != null) {
softManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
return super.dispatchTouchEvent(ev);
}
// 必不可少,否则所有的组件都不会有TouchEvent了
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销监听器
unregisterReceiver(mNetworkStateChangeReceiver);
}
@Override
public void onRestoreData(String url) {
}
/**
* 关闭输入法
*/
public void closeInputMethod() {
if (softManager != null && softManager.isActive()) {
softManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
}
}
/**
* 设置顶部标题
* @param resId 标题内容资源id
*/
public void setTitle(int resId){
String content=getResources().getString(resId);
if (tv_title!=null){
tv_title.setText(content);
}
}
/**
* 检测网络连接状态的广播接收器
*/
private class NetworkStateChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isAvailable = NetworkUtil.getInstance()
.checkNetworkAvailable();
if (!isAvailable) {
onNetworkDisconnected();
}
}
}
}