content: package fuzion24.device.vulnerability.test;
  
  import android.content.Context;
  import android.os.AsyncTask;
  import android.util.Log;
  
  import com.afollestad.materialdialogs.MaterialDialog;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import fuzion24.device.vulnerability.vulnerabilities.VulnerabilityOrganizer;
  import fuzion24.device.vulnerability.vulnerabilities.VulnerabilityTest;
  
  public class VulnerabilityTestRunner extends AsyncTask<Void, Integer, List<VulnerabilityTestResult>> {
  
      private final Boolean mShowWaitDiaglog;
      private MaterialDialog mProgressDialog;
      private final ResultsCallback mCustomCallback;
      private final Context mCtx;
      private List<VulnerabilityTest> tests;
  
      private static final String TAG = "VULN_TEST";
  
      public VulnerabilityTestRunner(Context actv, Boolean showScanDialog, ResultsCallback callback) {
          mCtx = actv;
          mShowWaitDiaglog = showScanDialog;
          mCustomCallback = callback;
          tests = VulnerabilityOrganizer.getTests(mCtx);
      }
  
      @Override
      protected void onPreExecute() {
          if (mShowWaitDiaglog) {
              mProgressDialog = new MaterialDialog.Builder(mCtx)
                  .title("Device Vulnerability Checker")
                  .content("Checking device for publicly known vulnerabilities")
                  .cancelable(false)
                  .progress(false, tests.size())
                  .show();
          }
      }
  
      @Override
      protected List<VulnerabilityTestResult> doInBackground(Void... params) {
          Log.d(TAG, "Async execute called!!!!");
  
          List<VulnerabilityTestResult> results = new ArrayList<>();
  
          for (int i = 0; i < tests.size(); i++) {
              mProgressDialog.setProgress(i);
  
              VulnerabilityTest test = tests.get(i);
              Log.d(TAG, "Running test: " + test.getCVEorID());
              Exception x = null;
              boolean isVuln = false;
              try {
                  isVuln = test.isVulnerable(mCtx);
                  Log.d(TAG, test.getCVEorID() + "  isVulnerable: " + isVuln);
  
              } catch (Exception e) {
                  e.printStackTrace();
                  Log.d(TAG, test.getCVEorID() + "  failed with: " + e.getMessage());
                  x = e;
              }
              results.add(new VulnerabilityTestResult(test, isVuln, x));
          }
  
          return results;
      }
  
      @Override
      protected void onPostExecute(List<VulnerabilityTestResult> vulnerabilityResults) {
          super.onPostExecute(vulnerabilityResults);
          if (mCustomCallback != null)
              mCustomCallback.finished(vulnerabilityResults);
  
          if (mShowWaitDiaglog)
              mProgressDialog.dismiss();
      }
  
  }
  