package com.xiaomi.xms.sales.ui;
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.support.v4.app.Fragment;
import com.xiaomi.xms.sales.activity.BaseActivity;
import com.xiaomi.xms.sales.activity.BaseActivity.OnRefreshListener;
import com.xiaomi.xms.sales.loader.BaseLoader;
import com.xiaomi.xms.sales.loader.BaseResult;
import com.xiaomi.xms.sales.util.LogUtil;
import com.xiaomi.xms.sales.util.Utils;
public abstract class BaseFragment extends Fragment implements OnRefreshListener {
private static final String TAG = "BaseFragment";
private NetworkConnectivityChangedReceiver mNetworkConnectivityReceiver;
protected boolean mNetworkConnected;
protected BaseLoader<? extends BaseResult> mLoader;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
registerConnectivityReceiver();
mNetworkConnected = Utils.Network.isNetWorkConnected(getActivity());
((BaseActivity) getActivity()).registerRefreshListener(this);
}
@Override
public void onDetach() {
super.onDetach();
unregisterConnectivityReceiver();
((BaseActivity) getActivity()).unregisterRefreshListener(this);
}
/**
* 网络从未连接状态到连接的时候调用该方法
* @param type 网络类型,用{@link #ConnectivityManager} 中标识的Type来判断连接的网络
*/
protected void onNetworkConnected(int type) {
if (mLoader != null) {
mLoader.reload();
}
}
private void registerConnectivityReceiver() {
LogUtil.d(TAG, "Register network connectivity changed receiver");
if (mNetworkConnectivityReceiver == null) {
mNetworkConnectivityReceiver = new NetworkConnectivityChangedReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
getActivity().registerReceiver(mNetworkConnectivityReceiver, filter);
}
private void unregisterConnectivityReceiver() {
LogUtil.d(TAG, "Unregister network connectivity changed receiver");
getActivity().unregisterReceiver(mNetworkConnectivityReceiver);
}
private class NetworkConnectivityChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isConnected = Utils.Network.isNetWorkConnected(getActivity());
if (!mNetworkConnected && isConnected) {
onNetworkConnected(Utils.Network.getActiveNetworkType(getActivity()));
}
mNetworkConnected = isConnected;
}
}
@Override
public void onRefresh() {
if (isVisible() && mLoader != null) {
LogUtil.d(TAG, getTag() + " fragment was refreshed");
mLoader.reload();
}
}
}