Пример #1
0
  private void fetchAuth(Context context) {
    String userId = EncryptionManager.getInstance().getUserHash(context);

    Intent intent = new Intent(context, OAuthActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    intent.putExtra(OAuthActivity.CONSUMER_KEY, context.getString(R.string.github_client_id));
    intent.putExtra(
        OAuthActivity.CONSUMER_SECRET, context.getString(R.string.github_client_secret));
    intent.putExtra(OAuthActivity.REQUESTER, "github");
    intent.putExtra(OAuthActivity.CALLBACK_URL, "http://tech.cbits.northwestern.edu/oauth/github");
    intent.putExtra(OAuthActivity.LOG_URL, LogManager.getInstance(context).getLogUrl(context));
    intent.putExtra(OAuthActivity.HASH_SECRET, userId);

    context.startActivity(intent);
  }
Пример #2
0
  public boolean onOptionsItemSelected(MenuItem item) {
    final int itemId = item.getItemId();

    if (itemId == android.R.id.home) {
      this.onBackPressed();
    }
    if (itemId == R.id.menu_email_item) {
      StringBuilder message = new StringBuilder();

      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

      String newline = System.getProperty("line.separator");

      message.append(this.getString(R.string.user_id_label));
      message.append(newline);
      message.append("\"" + EncryptionManager.getInstance().getUserId(this) + "\"");

      message.append(newline);
      message.append(newline);

      message.append(this.getString(R.string.probe_status_label));
      message.append(newline);

      boolean probeEnabled = prefs.getBoolean("config_probes_enabled", false);

      if (probeEnabled) message.append(this.getString(R.string.probe_status_enabled));
      else message.append(this.getString(R.string.probe_status_disabled));

      message.append(newline);
      message.append(newline);

      message.append(this.getString(R.string.upload_status_label));
      message.append(newline);

      PurpleRobotApplication.fixPreferences(this, true);

      boolean uploadEnabled = prefs.getBoolean("config_enable_data_server", false);

      if (uploadEnabled) {
        boolean wifiOnly = prefs.getBoolean("config_restrict_data_wifi", true);

        if (wifiOnly) message.append(this.getString(R.string.upload_status_enabled_wifi_only));
        else message.append(this.getString(R.string.upload_status_enabled));
      } else message.append(this.getString(R.string.upload_status_disabled));

      message.append(newline);
      message.append(newline);

      message.append(this.getString(R.string.last_upload_label));
      message.append(newline);

      if (prefs.contains("http_last_upload") && prefs.contains("http_last_payload_size")) {
        long lastUploadTime = prefs.getLong("http_last_upload", 0);
        long lastPayloadSize = prefs.getLong("http_last_payload_size", 0) / 1024;

        SimpleDateFormat sdf = new SimpleDateFormat("MMM d - HH:mm:ss");

        String dateString = sdf.format(new Date(lastUploadTime));

        message.append(
            String.format(
                this.getString(R.string.last_upload_format), dateString, lastPayloadSize));
      } else message.append(this.getString(R.string.last_upload_placeholder));

      message.append(newline);
      message.append(newline);

      OutputPlugin plugin =
          OutputPluginManager.sharedInstance.pluginForClass(this, HttpUploadPlugin.class);

      if (plugin instanceof HttpUploadPlugin) {
        HttpUploadPlugin http = (HttpUploadPlugin) plugin;

        message.append(this.getString(R.string.robot_pending_count_label));
        message.append(newline);
        message.append(this.getString(R.string.pending_files_file, http.pendingFilesCount()));

        message.append(newline);
        message.append(newline);
      }

      message.append(this.getString(R.string.pr_errors_label));
      message.append(newline);

      final SanityManager sanity = SanityManager.getInstance(this);

      if (sanity.getErrorLevel() != SanityCheck.OK) {
        Map<String, String> errors = sanity.errors();

        if (errors.size() > 0) {
          for (String error : errors.keySet()) {
            message.append(errors.get(error));
            message.append(newline);
          }

          message.append(newline);
        }

        Map<String, String> warnings = sanity.warnings();

        if (warnings.size() > 0) {
          for (String error : warnings.keySet()) {
            message.append(warnings.get(error));
            message.append(newline);
          }

          message.append(newline);
        }
      } else {
        message.append(this.getString(R.string.pr_errors_none_label));
        message.append(newline);
      }

      message.append(newline);

      message.append(this.getString(R.string.pr_version_label));
      message.append(newline);

      try {
        PackageInfo pInfo = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
        message.append(pInfo.versionName);
      } catch (NameNotFoundException e) {
        LogManager.getInstance(this).logException(e);
      }

      message.append(newline);
      message.append(newline);

      message.append(this.getString(R.string.play_services_version_label));
      message.append(newline);
      message.append("" + GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE);
      message.append(newline);
      message.append(newline);

      message.append(this.getString(R.string.available_sensors_label));
      message.append(newline);

      StringBuilder sb = new StringBuilder();

      SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);

      for (Sensor s : sensorManager.getSensorList(Sensor.TYPE_ALL)) {
        if (sb.length() > 0) sb.append("\n");

        sb.append(s.getName());
      }

      message.append(sb.toString());

      try {
        Intent intent = new Intent(Intent.ACTION_SEND);

        intent.setType("message/rfc822");
        intent.putExtra(Intent.EXTRA_SUBJECT, this.getString(R.string.email_diagnostic_subject));
        intent.putExtra(Intent.EXTRA_TEXT, message.toString());

        SchemeConfigFile scheme = new SchemeConfigFile(this);

        File cacheDir = this.getExternalCacheDir();
        File configFile = new File(cacheDir, "config.scm");

        FileOutputStream fout = new FileOutputStream(configFile);

        fout.write(scheme.toString().getBytes(Charset.defaultCharset().name()));

        fout.flush();
        fout.close();

        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(configFile));

        this.startActivity(intent);
      } catch (ActivityNotFoundException e) {
        try {
          Intent mailIntent =
              new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:[email protected]"));
          mailIntent.putExtra(
              Intent.EXTRA_SUBJECT, this.getString(R.string.email_diagnostic_subject));
          mailIntent.putExtra(Intent.EXTRA_TEXT, message.toString());

          this.startActivity(mailIntent);
        } catch (ActivityNotFoundException ex) {
          Toast.makeText(this, R.string.toast_mail_not_found, Toast.LENGTH_LONG).show();
        }
      } catch (IOException e) {
        LogManager.getInstance(this).logException(e);
      }
    }

    return true;
  }
Пример #3
0
  @SuppressWarnings("deprecation")
  protected void onResume() {
    super.onResume();

    this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    TextView userId = (TextView) this.findViewById(R.id.user_id_value);
    TextView probeStatus = (TextView) this.findViewById(R.id.probe_status_value);
    TextView uploadStatus = (TextView) this.findViewById(R.id.upload_status_value);
    TextView lastUpload = (TextView) this.findViewById(R.id.last_upload_value);
    TextView prVersion = (TextView) this.findViewById(R.id.pr_version_value);
    TextView gpsVersion = (TextView) this.findViewById(R.id.play_services_version_value);

    userId.setText("\"" + EncryptionManager.getInstance().getUserId(this) + "\"");

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

    boolean probeEnabled = prefs.getBoolean("config_probes_enabled", false);

    if (probeEnabled) probeStatus.setText(R.string.probe_status_enabled);
    else probeStatus.setText(R.string.probe_status_disabled);

    PurpleRobotApplication.fixPreferences(this, true);

    boolean uploadEnabled = prefs.getBoolean("config_enable_data_server", false);

    if (uploadEnabled) {
      boolean wifiOnly = prefs.getBoolean("config_restrict_data_wifi", true);

      if (wifiOnly) uploadStatus.setText(R.string.upload_status_enabled_wifi_only);
      else uploadStatus.setText(R.string.upload_status_enabled);
    } else uploadStatus.setText(R.string.upload_status_disabled);

    if (prefs.contains("http_last_upload") && prefs.contains("http_last_payload_size")) {
      long lastUploadTime = prefs.getLong("http_last_upload", 0);
      long lastPayloadSize = prefs.getLong("http_last_payload_size", 0) / 1024;

      SimpleDateFormat sdf = new SimpleDateFormat("MMM d - HH:mm:ss");

      String dateString = sdf.format(new Date(lastUploadTime));

      lastUpload.setText(
          String.format(this.getString(R.string.last_upload_format), dateString, lastPayloadSize));
    }

    if (prefs.getBoolean("config_enable_data_server", false)) {
      OutputPlugin plugin =
          OutputPluginManager.sharedInstance.pluginForClass(this, HttpUploadPlugin.class);

      if (plugin instanceof HttpUploadPlugin) {
        HttpUploadPlugin http = (HttpUploadPlugin) plugin;

        TextView uploadCount = (TextView) this.findViewById(R.id.pending_files_value);
        uploadCount.setText(this.getString(R.string.pending_files_file, http.pendingFilesCount()));
      }
    } else {
      OutputPlugin plugin =
          OutputPluginManager.sharedInstance.pluginForClass(
              this, StreamingJacksonUploadPlugin.class);

      if (plugin instanceof StreamingJacksonUploadPlugin) {
        StreamingJacksonUploadPlugin http = (StreamingJacksonUploadPlugin) plugin;

        TextView uploadCount = (TextView) this.findViewById(R.id.pending_files_value);
        uploadCount.setText(this.getString(R.string.pending_files_file, http.pendingFilesCount()));
      }
    }

    if (prefs.getBoolean("config_enable_log_server", false)) {
      TextView pendingEventsCount = (TextView) this.findViewById(R.id.pending_log_events_value);
      pendingEventsCount.setText(
          this.getString(
              R.string.pending_log_events_value,
              LogManager.getInstance(this).pendingEventsCount()));
    }

    try {
      PackageInfo pInfo = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
      prVersion.setText(pInfo.versionName);
    } catch (NameNotFoundException e) {
      LogManager.getInstance(this).logException(e);
    }

    gpsVersion.setText("" + GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE);

    TextView okText = (TextView) this.findViewById(R.id.pr_error_none_value);
    LinearLayout errorList = (LinearLayout) this.findViewById(R.id.pr_error_list);
    errorList.removeAllViews();

    final SanityManager sanity = SanityManager.getInstance(this);

    if (sanity.getErrorLevel() != SanityCheck.OK) {
      errorList.setVisibility(View.VISIBLE);
      okText.setVisibility(View.GONE);

      Map<String, String> errors = sanity.errors();

      if (errors.size() > 0) {
        errorList.setVisibility(View.VISIBLE);

        for (String error : errors.keySet()) {
          TextView errorLine = new TextView(this);
          errorLine.setText(errors.get(error));
          errorLine.setTextColor(0xffff4444);
          errorLine.setTextSize(18);

          LinearLayout.LayoutParams layout =
              new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
          layout.setMargins(0, 0, 0, 10);
          errorLine.setLayoutParams(layout);

          final String errorKey = error;

          errorLine.setOnClickListener(
              new OnClickListener() {
                public void onClick(View view) {
                  sanity.runActionForAlert(errorKey);
                }
              });

          errorList.addView(errorLine);
        }
      }

      Map<String, String> warnings = sanity.warnings();

      if (warnings.size() > 0) {
        for (String error : warnings.keySet()) {
          TextView errorLine = new TextView(this);
          errorLine.setText(warnings.get(error));
          errorLine.setTextColor(0xffffbb33);
          errorLine.setTextSize(18);

          LinearLayout.LayoutParams layout =
              new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
          layout.setMargins(0, 0, 0, 10);
          errorLine.setLayoutParams(layout);

          final String errorKey = error;

          errorLine.setOnClickListener(
              new OnClickListener() {
                public void onClick(View view) {
                  sanity.runActionForAlert(errorKey);
                }
              });

          errorList.addView(errorLine);
        }
      }
    } else {
      errorList.setVisibility(View.GONE);
      okText.setVisibility(View.VISIBLE);
    }

    TextView triggerList = (TextView) this.findViewById(R.id.installed_triggers_value);

    StringBuilder triggerSb = new StringBuilder();

    List<Trigger> triggers = TriggerManager.getInstance(this).allTriggers();

    if (triggers.size() > 0) {
      for (Trigger trigger : triggers) {
        if (triggerSb.length() > 0) triggerSb.append("\n");

        triggerSb.append(trigger.getDiagnosticString(this));
      }

      triggerList.setText(triggerSb.toString());
    } else triggerList.setText(R.string.no_installed_triggers_label);

    TextView sensorsList = (TextView) this.findViewById(R.id.available_sensors_value);
    StringBuilder sb = new StringBuilder();

    SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);

    for (Sensor s : sensorManager.getSensorList(Sensor.TYPE_ALL)) {
      if (sb.length() > 0) sb.append("\n");

      sb.append(s.getName());
    }

    sensorsList.setText(sb.toString());

    String ipAddress = null;

    WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();

    if (wifiInfo != null) {
      int ip = wifiInfo.getIpAddress();

      ipAddress = Formatter.formatIpAddress(ip);
    } else {
      try {
        Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();

        NetworkInterface iface = null;

        while (ifaces.hasMoreElements()
            && (iface = ifaces.nextElement()) != null
            && ipAddress == null) {
          if (!iface.getName().equals("lo")) {
            Enumeration<InetAddress> ips = iface.getInetAddresses();
            InetAddress ipAddr = null;

            while (ips.hasMoreElements() && (ipAddr = ips.nextElement()) != null) {
              ipAddress = ipAddr.getHostAddress();
            }
          }
        }
      } catch (SocketException e) {
        LogManager.getInstance(this).logException(e);
      }
    }

    if (ipAddress != null) {
      TextView ipAddressView = (TextView) this.findViewById(R.id.ip_address_value);
      ipAddressView.setText(ipAddress);
    }
  }
Пример #4
0
  public TrainedModel(final Context context, Uri uri) {
    this._source = uri;
    this._sourceHash = EncryptionManager.getInstance().createHash(context, uri.toString());

    final TrainedModel me = this;

    Runnable r =
        new Runnable() {
          public void run() {
            String hash =
                EncryptionManager.getInstance().createHash(context, me._source.toString());

            SharedPreferences prefs = Probe.getPreferences(context);

            File internalStorage = context.getFilesDir();

            if (prefs.getBoolean("config_external_storage", false))
              internalStorage = context.getExternalFilesDir(null);

            if (internalStorage != null && !internalStorage.exists()) internalStorage.mkdirs();

            File modelsFolder = new File(internalStorage, "persisted_models");

            if (modelsFolder != null && !modelsFolder.exists()) modelsFolder.mkdirs();

            String contents = null;
            File cachedModel = new File(modelsFolder, hash);

            try {
              contents = FileUtils.readFileToString(cachedModel);
            } catch (IOException e) {

            }

            try {
              BufferedReader in = null;

              if (me._source.toString().startsWith("file:///android_asset/")) {
                AssetManager assets = context.getAssets();

                in =
                    new BufferedReader(
                        new InputStreamReader(
                            assets.open(
                                me._source.toString().replace("file:///android_asset/", ""))));
              } else {
                URL u = new URL(me._source.toString());

                in = new BufferedReader(new InputStreamReader(u.openStream()));
              }

              StringBuffer sb = new StringBuffer();

              String inputLine = null;

              while ((inputLine = in.readLine()) != null) sb.append(inputLine);

              in.close();

              contents = sb.toString();
            } catch (MalformedURLException e) {
              e.printStackTrace();
              LogManager.getInstance(context).logException(e);
            } catch (IOException e) {
              e.printStackTrace();
              LogManager.getInstance(context).logException(e);
            }

            if (contents != null) {
              try {
                JSONObject json = new JSONObject(contents);

                me._name = json.getString("name");

                me._accuracy = json.getDouble("accuracy");

                me.generateModel(context, json.get("model"));

                FileUtils.writeStringToFile(cachedModel, contents);

                me._inited = true;
              } catch (Exception e) {
                LogManager.getInstance(context).logException(e);

                ModelManager.getInstance(context).deleteModel(me._source.toString());
              }
            }
          }
        };

    Thread t = new Thread(r);
    t.start();
  }