package cn.zadui.reader.helper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
public class NetHelper {
public static final int CONNECT_TIMEOUT=20*1000;
public static final int READ_TIMEOUT=20*1000;
// public static final String HOST_NAME="172.29.0.72";
// public static final String HOST_NAME="192.168.1.104";
public static final String HOST_NAME="meili.51leiju.cn";
public static final String PORT="80";
public static String webPath(String protocol,String path){
return protocol+"://"+HOST_NAME+":"+PORT+path;
}
/**
* Detects current network connection type
* @param ctx
* @return -1 means no network available.
*/
public static int currentNetwork(Context ctx){
ConnectivityManager connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo==null ? -1 : activeNetworkInfo.getType();
}
public static HttpURLConnection buildUrlConnection(String url) throws IOException{
URL u=new URL(url);
HttpURLConnection con=(HttpURLConnection)u.openConnection();
con.setInstanceFollowRedirects(true);
con.setConnectTimeout(NetHelper.CONNECT_TIMEOUT);
con.setReadTimeout(NetHelper.READ_TIMEOUT);
return con;
}
public static boolean needUpdate(Context ctx){
try {
int currentVersion=ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0).versionCode;
boolean hasNewVersion=Settings.getBooleanPreferenceValue(ctx, Settings.PRE_HAS_NEW_VERSION, false);
if (currentVersion>=Settings.getLongPreferenceValue(ctx, Settings.PRE_LAST_BUILD, currentVersion)){
if (hasNewVersion){
Settings.updateBooleanPreferenceValue(ctx, Settings.PRE_HAS_NEW_VERSION, false);
Settings.updateLongPreferenceValue(ctx, Settings.PRE_LAST_BUILD, currentVersion);
}
return false;
}else{
return true;
}
} catch (NameNotFoundException e) {
return false;
}
}
/**
* Check new version only for third party market because Google Android Market provides update function.
*/
public static void checkNewVersion(Context ctx){
Log.d(TAG,"IN checkNewVersion method");
if (Settings.installedFromGoogleMarket(ctx)) return;
if (Settings.getBooleanPreferenceValue(ctx, Settings.PRE_HAS_NEW_VERSION, false)) return;
String lastBuild=getStringFromNetIO(NetHelper.webPath("http", "/client/version"));
Log.d(TAG,"Last version is => "+lastBuild);
if (lastBuild==null) return;
try {
int currentVersion=ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0).versionCode;
Log.d(TAG,"installed version is => "+String.valueOf(currentVersion));
if (Integer.parseInt(lastBuild)>currentVersion){
Log.d(TAG,"Set new version available flag");
Settings.updateBooleanPreferenceValue(ctx, Settings.PRE_HAS_NEW_VERSION, true);
Settings.updateLongPreferenceValue(ctx, Settings.PRE_LAST_BUILD, Integer.parseInt(lastBuild));
}
} catch (NameNotFoundException e) {
e.printStackTrace();
} catch (Exception ce){
ce.printStackTrace();
}
}
public static String getStringFromNetIO(String url){
HttpURLConnection con=null;
try {
con=buildUrlConnection(url);
InputStream in=con.getInputStream();
ByteArrayOutputStream out=new ByteArrayOutputStream();
byte[] buf=new byte[1024*8];
int readCount=0;
while((readCount=in.read(buf))!=-1){
out.write(buf, 0, readCount);
}
String result=out.toString("UTF-8");
return result;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally{
con.disconnect();
}
}
static final String TAG="NetHelper";
}