예제 #1
0
  private void setupUserInterfaceSection() {
    final AnimationSpeedAdapter speedAdapter = new AnimationSpeedAdapter(getContext());
    uiAnimationSpeedView.setAdapter(speedAdapter);
    final int animationSpeedValue = animationSpeed.get();
    uiAnimationSpeedView.setSelection(
        AnimationSpeedAdapter.getPositionForValue(animationSpeedValue));

    RxAdapterView.itemSelections(uiAnimationSpeedView)
        .map(speedAdapter::getItem)
        .filter(item -> item != animationSpeed.get())
        .subscribe(
            selected -> {
              Timber.d("Setting animation speed to %sx", selected);
              animationSpeed.set(selected);
              applyAnimationSpeed(selected);
            });
    // Ensure the animation speed value is always applied across app restarts.
    post(() -> applyAnimationSpeed(animationSpeedValue));

    boolean gridEnabled = pixelGridEnabled.get();
    uiPixelGridView.setChecked(gridEnabled);
    uiPixelRatioView.setEnabled(gridEnabled);
    uiPixelGridView.setOnCheckedChangeListener(
        (buttonView, isChecked) -> {
          Timber.d("Setting pixel grid overlay enabled to " + isChecked);
          pixelGridEnabled.set(isChecked);
          uiPixelRatioView.setEnabled(isChecked);
        });

    uiPixelRatioView.setChecked(pixelRatioEnabled.get());
    uiPixelRatioView.setOnCheckedChangeListener(
        (buttonView, isChecked) -> {
          Timber.d("Setting pixel scale overlay enabled to " + isChecked);
          pixelRatioEnabled.set(isChecked);
        });

    uiScalpelView.setChecked(scalpelEnabled.get());
    uiScalpelWireframeView.setEnabled(scalpelEnabled.get());
    uiScalpelView.setOnCheckedChangeListener(
        (buttonView, isChecked) -> {
          Timber.d("Setting scalpel interaction enabled to " + isChecked);
          scalpelEnabled.set(isChecked);
          uiScalpelWireframeView.setEnabled(isChecked);
        });

    uiScalpelWireframeView.setChecked(scalpelWireframeEnabled.get());
    uiScalpelWireframeView.setOnCheckedChangeListener(
        (buttonView, isChecked) -> {
          Timber.d("Setting scalpel wireframe enabled to " + isChecked);
          scalpelWireframeEnabled.set(isChecked);
        });
  }
예제 #2
0
  /**
   * Populates a {@code Spinner} with the values of an {@code enum} and binds it to the value set in
   * the mock service.
   */
  private <T extends Enum<T>> void configureResponseSpinner(
      Spinner spinner, final Class<T> responseClass) {
    final EnumAdapter<T> adapter = new EnumAdapter<>(getContext(), responseClass);
    spinner.setEnabled(isMockMode);
    spinner.setAdapter(adapter);
    spinner.setSelection(mockGithubService.getResponse(responseClass).ordinal());

    RxAdapterView.itemSelections(spinner)
        .map(adapter::getItem)
        .filter(item -> item != mockGithubService.getResponse(responseClass))
        .subscribe(
            selected -> {
              Timber.d("Setting %s to %s", responseClass.getSimpleName(), selected);
              mockGithubService.setResponse(responseClass, selected);
            });
  }
예제 #3
0
  @Override
  public void onStart() {
    super.onStart();
    ButterKnife.bind(this, getDialog());

    Button positiveButton = ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
    RxView.clicks(positiveButton)
        .subscribe(
            event -> {
              onDeleteClicked();
            });

    reasonListView.setAdapter(
        new ArrayAdapter<>(
            getContext(), android.R.layout.simple_list_item_1, AdminService.REASONS));

    RxAdapterView.itemClicks(reasonListView)
        .subscribe(
            index -> {
              customReasonText.setText(AdminService.REASONS.get(index));
            });
  }
예제 #4
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) {
    //  }
    // });
  }