示例#1
0
  private void setupNetworkSection() {
    final ApiEndpoints currentEndpoint = ApiEndpoints.from(networkEndpoint.get());
    final EnumAdapter<ApiEndpoints> endpointAdapter =
        new EnumAdapter<>(getContext(), ApiEndpoints.class);
    endpointView.setAdapter(endpointAdapter);
    endpointView.setSelection(currentEndpoint.ordinal());

    RxAdapterView.itemSelections(endpointView)
        .map(endpointAdapter::getItem)
        .filter(item -> item != currentEndpoint)
        .subscribe(
            selected -> {
              if (selected == ApiEndpoints.CUSTOM) {
                Timber.d("Custom network endpoint selected. Prompting for URL.");
                showCustomEndpointDialog(currentEndpoint.ordinal(), "http://");
              } else {
                setEndpointAndRelaunch(selected.url);
              }
            });

    final NetworkDelayAdapter delayAdapter = new NetworkDelayAdapter(getContext());
    networkDelayView.setAdapter(delayAdapter);
    networkDelayView.setSelection(
        NetworkDelayAdapter.getPositionForValue(behavior.delay(MILLISECONDS)));

    RxAdapterView.itemSelections(networkDelayView)
        .map(delayAdapter::getItem)
        .filter(item -> item != behavior.delay(MILLISECONDS))
        .subscribe(
            selected -> {
              Timber.d("Setting network delay to %sms", selected);
              behavior.setDelay(selected, MILLISECONDS);
              networkDelay.set(selected);
            });

    final NetworkVarianceAdapter varianceAdapter = new NetworkVarianceAdapter(getContext());
    networkVarianceView.setAdapter(varianceAdapter);
    networkVarianceView.setSelection(
        NetworkVarianceAdapter.getPositionForValue(behavior.variancePercent()));

    RxAdapterView.itemSelections(networkVarianceView)
        .map(varianceAdapter::getItem)
        .filter(item -> item != behavior.variancePercent())
        .subscribe(
            selected -> {
              Timber.d("Setting network variance to %s%%", selected);
              behavior.setVariancePercent(selected);
              networkVariancePercent.set(selected);
            });

    final NetworkErrorAdapter errorAdapter = new NetworkErrorAdapter(getContext());
    networkErrorView.setAdapter(errorAdapter);
    networkErrorView.setSelection(
        NetworkErrorAdapter.getPositionForValue(behavior.failurePercent()));

    RxAdapterView.itemSelections(networkErrorView)
        .map(errorAdapter::getItem)
        .filter(item -> item != behavior.failurePercent())
        .subscribe(
            selected -> {
              Timber.d("Setting network error to %s%%", selected);
              behavior.setFailurePercent(selected);
              networkFailurePercent.set(selected);
            });

    int currentProxyPosition = networkProxyAddress.isSet() ? ProxyAdapter.PROXY : ProxyAdapter.NONE;
    final ProxyAdapter proxyAdapter = new ProxyAdapter(getContext(), networkProxyAddress);
    networkProxyView.setAdapter(proxyAdapter);
    networkProxyView.setSelection(currentProxyPosition);

    RxAdapterView.itemSelections(networkProxyView)
        .filter(position -> !networkProxyAddress.isSet() || position != ProxyAdapter.PROXY)
        .subscribe(
            position -> {
              if (position == ProxyAdapter.NONE) {
                Timber.d("Clearing network proxy");
                // TODO: Keep the custom proxy around so you can easily switch back and forth.
                networkProxyAddress.delete();
                client.setProxy(null);
                apiClient.setProxy(null);
              } else if (networkProxyAddress.isSet() && position == ProxyAdapter.PROXY) {
                Timber.d("Ignoring re-selection of network proxy %s", networkProxyAddress.get());
              } else {
                Timber.d("New network proxy selected. Prompting for host.");
                showNewNetworkProxyDialog(proxyAdapter);
              }
            });

    // Only show the endpoint editor when a custom endpoint is in use.
    endpointEditView.setVisibility(currentEndpoint == ApiEndpoints.CUSTOM ? VISIBLE : GONE);

    if (currentEndpoint == ApiEndpoints.MOCK_MODE) {
      // Disable network proxy if we are in mock mode.
      networkProxyView.setEnabled(false);
      networkLoggingView.setEnabled(false);
    } else {
      // Disable network controls if we are not in mock mode.
      networkDelayView.setEnabled(false);
      networkVarianceView.setEnabled(false);
      networkErrorView.setEnabled(false);
    }

    // We use the JSON rest adapter as the source of truth for the log level.
    // final EnumAdapter<RestAdapter.LogLevel> loggingAdapter =
    //    new EnumAdapter<>(getContext(), RestAdapter.LogLevel.class);
    // networkLoggingView.setAdapter(loggingAdapter);
    // networkLoggingView.setSelection(retrofit.getLogLevel().ordinal());
    // networkLoggingView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    //  @Override
    //  public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
    //    RestAdapter.LogLevel selected = loggingAdapter.getItem(position);
    //    if (selected != retrofit.getLogLevel()) {
    //      Timber.d("Setting logging level to %s", selected);
    //      retrofit.setLogLevel(selected);
    //    } else {
    //      Timber.d("Ignoring re-selection of logging level " + selected);
    //    }
    //  }
    //
    //  @Override public void onNothingSelected(AdapterView<?> adapterView) {
    //  }
    // });
  }
示例#2
0
  private void setupNetworkSection() {
    final ApiEndpoints currentEndpoint = ApiEndpoints.from(networkEndpoint.get());
    final EnumAdapter<ApiEndpoints> endpointAdapter =
        new EnumAdapter<>(getContext(), ApiEndpoints.class);
    endpointView.setAdapter(endpointAdapter);
    endpointView.setSelection(currentEndpoint.ordinal());
    endpointView.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            ApiEndpoints selected = endpointAdapter.getItem(position);
            if (selected != currentEndpoint) {
              if (selected == ApiEndpoints.CUSTOM) {
                Timber.d("Custom network endpoint selected. Prompting for URL.");
                showCustomEndpointDialog(currentEndpoint.ordinal(), "http://");
              } else {
                setEndpointAndRelaunch(selected.url);
              }
            } else {
              Timber.d("Ignoring re-selection of network endpoint %s", selected);
            }
          }

          @Override
          public void onNothingSelected(AdapterView<?> adapterView) {}
        });

    final NetworkDelayAdapter delayAdapter = new NetworkDelayAdapter(getContext());
    networkDelayView.setAdapter(delayAdapter);
    networkDelayView.setSelection(
        NetworkDelayAdapter.getPositionForValue(mockRestAdapter.getDelay()));
    networkDelayView.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            long selected = delayAdapter.getItem(position);
            if (selected != mockRestAdapter.getDelay()) {
              Timber.d("Setting network delay to %sms", selected);
              mockRestAdapter.setDelay(selected);
            } else {
              Timber.d("Ignoring re-selection of network delay %sms", selected);
            }
          }

          @Override
          public void onNothingSelected(AdapterView<?> adapterView) {}
        });

    final NetworkVarianceAdapter varianceAdapter = new NetworkVarianceAdapter(getContext());
    networkVarianceView.setAdapter(varianceAdapter);
    networkVarianceView.setSelection(
        NetworkVarianceAdapter.getPositionForValue(mockRestAdapter.getVariancePercentage()));
    networkVarianceView.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            int selected = varianceAdapter.getItem(position);
            if (selected != mockRestAdapter.getVariancePercentage()) {
              Timber.d("Setting network variance to %s%%", selected);
              mockRestAdapter.setVariancePercentage(selected);
            } else {
              Timber.d("Ignoring re-selection of network variance %s%%", selected);
            }
          }

          @Override
          public void onNothingSelected(AdapterView<?> adapterView) {}
        });

    final NetworkErrorAdapter errorAdapter = new NetworkErrorAdapter(getContext());
    networkErrorView.setAdapter(errorAdapter);
    networkErrorView.setSelection(
        NetworkErrorAdapter.getPositionForValue(mockRestAdapter.getErrorPercentage()));
    networkErrorView.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            int selected = errorAdapter.getItem(position);
            if (selected != mockRestAdapter.getErrorPercentage()) {
              Timber.d("Setting network error to %s%%", selected);
              mockRestAdapter.setErrorPercentage(selected);
            } else {
              Timber.d("Ignoring re-selection of network error %s%%", selected);
            }
          }

          @Override
          public void onNothingSelected(AdapterView<?> adapterView) {}
        });

    int currentProxyPosition = networkProxy.isSet() ? ProxyAdapter.PROXY : ProxyAdapter.NONE;
    final ProxyAdapter proxyAdapter = new ProxyAdapter(getContext(), networkProxy);
    networkProxyView.setAdapter(proxyAdapter);
    networkProxyView.setSelection(currentProxyPosition);
    networkProxyView.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            if (position == ProxyAdapter.NONE) {
              Timber.d("Clearing network proxy");
              // TODO: Keep the custom proxy around so you can easily switch back and forth.
              networkProxy.delete();
              client.setProxy(null);
            } else if (networkProxy.isSet() && position == ProxyAdapter.PROXY) {
              Timber.d("Ignoring re-selection of network proxy %s", networkProxy.get());
            } else {
              Timber.d("New network proxy selected. Prompting for host.");
              showNewNetworkProxyDialog(proxyAdapter);
            }
          }

          @Override
          public void onNothingSelected(AdapterView<?> adapterView) {}
        });

    // Only show the endpoint editor when a custom endpoint is in use.
    endpointEditView.setVisibility(currentEndpoint == ApiEndpoints.CUSTOM ? VISIBLE : GONE);

    if (currentEndpoint == ApiEndpoints.INTERNAL) {
      // Disable network proxy if we are in mock mode.
      networkProxyView.setEnabled(false);
      networkLoggingView.setEnabled(false);
    } else {
      // Disable network controls if we are not in mock mode.
      networkDelayView.setEnabled(false);
      networkVarianceView.setEnabled(false);
      networkErrorView.setEnabled(false);
    }

    // We use the JSON rest adapter as the source of truth for the log level.
    final EnumAdapter<RestAdapter.LogLevel> loggingAdapter =
        new EnumAdapter<>(getContext(), RestAdapter.LogLevel.class);
    networkLoggingView.setAdapter(loggingAdapter);
    networkLoggingView.setSelection(restAdapter.getLogLevel().ordinal());
    networkLoggingView.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            RestAdapter.LogLevel selected = loggingAdapter.getItem(position);
            if (selected != restAdapter.getLogLevel()) {
              Timber.d("Setting logging level to %s", selected);
              restAdapter.setLogLevel(selected);
            } else {
              Timber.d("Ignoring re-selection of logging level " + selected);
            }
          }

          @Override
          public void onNothingSelected(AdapterView<?> adapterView) {}
        });
  }