com.google.android.agera.Repositories Java Examples

The following examples show how to use com.google.android.agera.Repositories. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: SimpleActivityH.java    From AndroidAgeraTutorial with Apache License 2.0 6 votes vote down vote up
private void setUpRepository() {
    mExecutor = Executors.newSingleThreadExecutor();
    mReservoir = Reservoirs.reservoir();
    Supplier<Result<Integer>> supplier = new Supplier<Result<Integer>>() {
        @NonNull
        @Override
        public Result<Integer> get() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            mReservoir.get();// consume receiver
            return Result.success(++mCount);
        }
    };
    mRepository = Repositories.repositoryWithInitialValue(Result.<Integer>absent())
            .observe(mReservoir)
            .onUpdatesPerLoop()
            .goTo(mExecutor)
            .thenGetFrom(supplier)
            .compile();
}
 
Example #2
Source File: SimpleActivityA.java    From AndroidAgeraTutorial with Apache License 2.0 6 votes vote down vote up
private void setUpRepository() {
    mObservable = new OnClickObservable() {
        @Override
        public void onClick( ) {
            dispatchUpdate();
        }
    };
    Supplier<Result<Integer>> supplier = new Supplier<Result<Integer>>() {
        @NonNull
        @Override
        public Result<Integer> get() {
            return Result.success(MockRandomData.getRandomColor());
        }
    };

    mRepository = Repositories.repositoryWithInitialValue(Result.<Integer>absent())
            .observe(mObservable)
            .onUpdatesPerLoop()
            .thenGetFrom(supplier)
            .compile();
}
 
Example #3
Source File: ComplexRecycleViewActivity.java    From AndroidAgeraTutorial with Apache License 2.0 6 votes vote down vote up
@Override
public void init(Bundle savedInstanceState) {
    setContentView(R.layout.activity_recycle_view);
    mRefreshRecyclerView = (WrapperRecyclerView) findViewById(R.id.refresh_recycler_view);
    mAdapter = new ComplexRvAdapter();
    mRefreshRecyclerView.setAdapter(mAdapter);

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    mRefreshRecyclerView.setLayoutManager(linearLayoutManager);
    mRefreshRecyclerView.setRecyclerViewListener(this);
    mAdapter.setLoadMoreFooterView(new DefaultLoadMoreFooterView(this));
    mRefreshRecyclerView.setPadding(0, 0, 0, 20);

    mRefreshRecyclerView.getRecyclerView().addOnScrollListener(new PicassoOnScrollListener(this));

    setUpRepository();
    mAdapter.setRepository(Repositories.mutableRepository(new ApiResult<GirlInfo>()));
    //mRefreshRecyclerView.getPtrFrameLayout().autoRefresh();
}
 
Example #4
Source File: ComplexRecycleViewActivity.java    From AndroidAgeraTutorial with Apache License 2.0 6 votes vote down vote up
private void setUpRepository() {
    networkExecutor = Executors.newSingleThreadExecutor();

    mMutableRepository = Repositories.mutableRepository(mPagination);

    mLoadDataRepository = Repositories.repositoryWithInitialValue(Result.<ApiResult<GirlInfo>>absent())
            .observe(mMutableRepository)
            .onUpdatesPerLoop()
            .goTo(networkExecutor)
            .attemptGetFrom(new GirlsSupplier(mMutableRepository)).orSkip()
            .thenTransform(new Function<ApiResult<GirlInfo>, Result<ApiResult<GirlInfo>>>() {
                @NonNull
                @Override
                public Result<ApiResult<GirlInfo>> apply(@NonNull ApiResult<GirlInfo> input) {
                    return absentIfNull(input);
                }
            })
            .onDeactivation(RepositoryConfig.SEND_INTERRUPT)
            .compile();

}
 
Example #5
Source File: Step2ActivityFinal.java    From android-agera with Apache License 2.0 6 votes vote down vote up
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.step2);

    mValueTv = (TextView) findViewById(R.id.step2_value_tv);
    Button incrementBt = (Button) findViewById(R.id.increment_bt);

    incrementBt.setOnClickListener(view -> valueRepository.accept(valueRepository.get() + 1));

    textValueRepository =
            Repositories.repositoryWithInitialValue(getString(R.string.not_available))
            .observe(valueRepository)
            .onUpdatesPerLoop()
            .getFrom(valueRepository)
            .thenTransform(Object::toString)
            .compile();

    mTextValueUpdatable = () -> mValueTv.setText(textValueRepository.get());
}
 
Example #6
Source File: MainFragment.java    From agera with Apache License 2.0 5 votes vote down vote up
private void setUpRepository() {
  // Set up background executor
  networkExecutor = newSingleThreadExecutor();

  // Set up usernames repository
  usernamesRepository = Repositories
      .repositoryWithInitialValue(Result.<List<String>>absent())
      .observe(refreshObservable)
      .onUpdatesPerLoop()
      .goTo(networkExecutor)
      .thenGetFrom(new UsernamesSupplier())
      .compile();
}
 
Example #7
Source File: Okhttp3AgeraFastjsonActivity.java    From SaveVolley with Apache License 2.0 5 votes vote down vote up
@Override protected void initData() {
    SaveVolley saveVolley = SaveVolleys
        .<GankData>request(TEST_URL)
        .method(Method.GET)
        .parseStyle(FASTJSON)
        .classOf(GankData.class)
        .createRequest()
        .context(this)
        .compile();

    final Repository<GankResultData> repository = Repositories
        .repositoryWithInitialValue(INITIAL_VALUE)
        .observe(saveVolley.getReservoir())
        .onUpdatesPerLoop()
        .goTo(executor)
        .attemptGetFrom(saveVolley.getReservoir())
        .orSkip()
        .thenAttemptTransform(new Function<Object, Result<GankResultData>>() {
            /**
             * Returns the result of applying this function to {@code input}.
             */
            @NonNull @Override public Result<GankResultData> apply(@NonNull Object input) {
                if (input instanceof GankData) {
                    return Result.success(((GankData) input).results.get(0));
                } else if (input instanceof VolleyError) {
                    return Result.failure((VolleyError) input);
                }
                return Result.failure();
            }
        })
        .orSkip()
        .compile();

    repository.addUpdatable(new Updatable() {
        @Override public void update() {
            getContentText.setText(repository.get().toString());
        }
    });
}
 
Example #8
Source File: HurlAgeraFastjsonActivity.java    From SaveVolley with Apache License 2.0 5 votes vote down vote up
@Override protected void initData() {
    SaveVolley saveVolley = SaveVolleys
        .<GankData>request(TEST_URL)
        .method(Method.GET)
        .parseStyle(FASTJSON)
        .classOf(GankData.class)
        .createRequest()
        .context(this)
        .compile();

    final Repository<GankResultData> repository = Repositories
        .repositoryWithInitialValue(INITIAL_VALUE)
        .observe(saveVolley.getReservoir())
        .onUpdatesPerLoop()
        .goTo(executor)
        .attemptGetFrom(saveVolley.getReservoir())
        .orSkip()
        .thenAttemptTransform(new Function<Object, Result<GankResultData>>() {
            /**
             * Returns the result of applying this function to {@code input}.
             */
            @NonNull @Override public Result<GankResultData> apply(@NonNull Object input) {
                if (input instanceof GankData) {
                    return Result.success(((GankData) input).results.get(0));
                } else if (input instanceof VolleyError) {
                    return Result.failure((VolleyError) input);
                }
                return Result.failure();
            }
        })
        .orSkip()
        .compile();

    repository.addUpdatable(new Updatable() {
        @Override public void update() {
            getContentText.setText(repository.get().toString());
        }
    });
}
 
Example #9
Source File: HurlAgeraGsonActivity.java    From SaveVolley with Apache License 2.0 5 votes vote down vote up
@Override protected void initData() {
    SaveVolley saveVolley = SaveVolleys
        .<GankData>request(TEST_URL)
        .method(Method.GET)
        .parseStyle(GSON)
        .classOf(GankData.class)
        .createRequest()
        .context(this)
        .compile();

    final Repository<GankResultData> repository = Repositories
        .repositoryWithInitialValue(INITIAL_VALUE)
        .observe(saveVolley.getReservoir())
        .onUpdatesPerLoop()
        .goTo(executor)
        .attemptGetFrom(saveVolley.getReservoir())
        .orSkip()
        .thenAttemptTransform(new Function<Object, Result<GankResultData>>() {
            /**
             * Returns the result of applying this function to {@code input}.
             */
            @NonNull @Override public Result<GankResultData> apply(@NonNull Object input) {
                if (input instanceof GankData) {
                    return Result.success(((GankData) input).results.get(0));
                } else if (input instanceof VolleyError) {
                    return Result.failure((VolleyError) input);
                }
                return Result.failure();
            }
        })
        .orSkip()
        .compile();

    repository.addUpdatable(new Updatable() {
        @Override public void update() {
            getContentText.setText(repository.get().toString());
        }
    });
}
 
Example #10
Source File: Okhttp3AgeraGsonActivity.java    From SaveVolley with Apache License 2.0 5 votes vote down vote up
@Override protected void initData() {
    SaveVolley saveVolley = SaveVolleys
        .<GankData>request(TEST_URL)
        .method(Method.GET)
        .parseStyle(GSON)
        .classOf(GankData.class)
        .createRequest()
        .context(this)
        .compile();

    final Repository<GankResultData> repository = Repositories.repositoryWithInitialValue(
        INITIAL_VALUE)
        .observe(saveVolley.getReservoir())
        .onUpdatesPerLoop()
        .goTo(executor)
        .attemptGetFrom(saveVolley.getReservoir())
        .orSkip()
        .thenAttemptTransform(new Function<Object, Result<GankResultData>>() {
            /**
             * Returns the result of applying this function to {@code input}.
             */
            @NonNull @Override public Result<GankResultData> apply(@NonNull Object input) {
                if (input instanceof GankData) {
                    return Result.success(((GankData) input).results.get(0));
                } else if (input instanceof VolleyError) {
                    return Result.failure((VolleyError) input);
                }
                return Result.failure();
            }
        })
        .orSkip()
        .compile();

    repository.addUpdatable(new Updatable() {
        @Override public void update() {
            getContentText.setText(repository.get().toString());
        }
    });
}
 
Example #11
Source File: Step1ActivityFinal.java    From android-agera with Apache License 2.0 5 votes vote down vote up
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.step1);

    // Create a MutableRepository
    mStringRepo = Repositories.mutableRepository("Initial value");

    // Create an Updatable
    mLoggerUpdatable = () -> Log.d("AGERA", mStringRepo.get());

}
 
Example #12
Source File: MoviesActivity.java    From AndroidSchool with Apache License 2.0 5 votes vote down vote up
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_movies);
    ButterKnife.bind(this);
    setSupportActionBar(mToolbar);

    int columns = getResources().getInteger(R.integer.columns_count);
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), columns);
    mMoviesRecycler.setLayoutManager(layoutManager);
    mAdapter = createAdapter();
    mMoviesRecycler.setAdapter(mAdapter);

    mMoviesRepository = Repositories.repositoryWithInitialValue(Result.<List<Movie>>absent())
            .observe()
            .onUpdatesPerLoop()
            .goTo(AsyncExecutor.EXECUTOR)
            .getFrom(() -> {
                try {
                    return ApiFactory.getMoviesService().popularMovies().execute().body();
                } catch (IOException e) {
                    return new MoviesResponse();
                }
            })
            .thenTransform(input -> Result.absentIfNull(input.getMovies()))
            .compile();
}
 
Example #13
Source File: SimpleActivityB.java    From AndroidAgeraTutorial with Apache License 2.0 5 votes vote down vote up
private void setUpRepository() {
    networkExecutor = Executors.newSingleThreadExecutor();
    mObservable = new OnClickObservable() {
        @Override
        public void onClick( ) {
            dispatchUpdate();
        }
    };

    Supplier<String> imageUriSupplier = new Supplier<String>() {
        @NonNull
        @Override
        public String get() {
            return MockRandomData.getRandomImage();
        }
    };

    mRepository = Repositories.repositoryWithInitialValue(Result.<Bitmap>absent())
            .observe(mObservable)
            .onUpdatesPerLoop()
            .getFrom(imageUriSupplier)
            .goTo(networkExecutor)
            .thenTransform(new Function<String, Result<Bitmap>>() {
                @NonNull
                @Override
                public Result<Bitmap> apply(@NonNull String input) {
                    return new ImageSupplier(input).get();
                }
            })
            .compile();
}
 
Example #14
Source File: RepositoryAdapterRecycleViewActivity.java    From AndroidAgeraTutorial with Apache License 2.0 5 votes vote down vote up
private void setUpRepository() {
    networkExecutor = Executors.newSingleThreadExecutor();
    mObservable = new SimpleObservable() { };


    mRepository = Repositories.repositoryWithInitialValue(Result.<List<GirlInfo>>absent())
            .observe(mObservable)
            .onUpdatesPerLoop()
            .goTo(networkExecutor)
            .getFrom(new GirlsSupplier(new Supplier<Integer>() {
                @NonNull
                @Override
                public Integer get() {
                    return mPagination;
                }
            }))
            .thenTransform(new Function<Result<ApiResult<GirlInfo>>, Result<List<GirlInfo>>>() {
                @NonNull
                @Override
                public Result<List<GirlInfo>> apply(@NonNull Result<ApiResult<GirlInfo>> input) {
                    if (input.succeeded() && !input.get().error) {
                        return Result.success(input.get().results);
                    } else {
                        return Result.absent();
                    }
                }
            })
            .onDeactivation(RepositoryConfig.SEND_INTERRUPT)
            .compile();
}
 
Example #15
Source File: RecycleViewActivity.java    From AndroidAgeraTutorial with Apache License 2.0 5 votes vote down vote up
private void setUpRepository() {
    networkExecutor = Executors.newSingleThreadExecutor();
    uiExecutor = UiThreadExecutor.newUiThreadExecutor();
    mObservable = new SimpleObservable() { };


    mRepository = Repositories.repositoryWithInitialValue(Result.<ApiResult<GirlInfo>>absent())
            .observe(mObservable)
            .onUpdatesPerLoop()
            //.goTo(uiExecutor)
            .getFrom(new Supplier<Object>() {
                @NonNull
                @Override
                public Object get() {
                    Toast.makeText(RecycleViewActivity.this, "load data begin", Toast.LENGTH_LONG).show();
                    return new Object();
                }
            })
            .goTo(networkExecutor)
            .getFrom(new GirlsSupplier(new Supplier<Integer>() {
                @NonNull
                @Override
                public Integer get() {
                    return mPagination;
                }
            }))

            .goTo(uiExecutor)
            .thenTransform(new Function<Result<ApiResult<GirlInfo>>, Result<ApiResult<GirlInfo>>>() {
                @NonNull
                @Override
                public Result<ApiResult<GirlInfo>> apply(@NonNull Result<ApiResult<GirlInfo>> input) {
                    Toast.makeText(RecycleViewActivity.this, "load data end", Toast.LENGTH_LONG).show();
                    return input;
                }
            })
            .onDeactivation(RepositoryConfig.SEND_INTERRUPT)
            .compile();
}
 
Example #16
Source File: SimpleFragmentC.java    From AndroidAgeraTutorial with Apache License 2.0 5 votes vote down vote up
private void setUpRepository() {
    mObservable = new OnClickObservable() {
        @Override
        public void onClick( ) {
            mRepository.accept(Result.success(MockRandomData.getRandomImage()));
        }
    };

    mRepository = Repositories.mutableRepository(Result.success(MockRandomData.getRandomImage()));

    //initialization
    //mRepository.accept(Result.success(MockRandomData.getRandomImage()));
}
 
Example #17
Source File: CalculatorActivity.java    From android-agera with Apache License 2.0 4 votes vote down vote up
@Override
protected void onStart() {
    super.onStart();

    mExecutor = Executors.newSingleThreadExecutor();

    mResultRepository = Repositories.repositoryWithInitialValue(Result.<String>absent())
            .observe(mValue1Repo, mValue2Repo, mOperationSelector)
            .onUpdatesPerLoop()
            .goTo(mExecutor)
            .attemptTransform(CalculatorOperations::keepCpuBusy).orEnd(Result::failure)
            .getFrom(mValue1Repo)
            .mergeIn(mValue2Repo, Pair::create)
            .attemptMergeIn(mOperationSelector, CalculatorOperations::attemptOperation)
            .orEnd(Result::failure)
            .thenTransform(input -> Result.present(input.toString()))
            .onConcurrentUpdate(RepositoryConfig.SEND_INTERRUPT)
            .compile();


    ((SeekBar) findViewById(R.id.seekBar1)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue1Repo));

    ((SeekBar) findViewById(R.id.seekBar2)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue2Repo));

    mValue1TVupdatable = () -> ((TextView) findViewById(R.id.value1)).setText(
            mValue1Repo.get().toString());

    mValue2TVupdatable = () -> ((TextView) findViewById(R.id.value2)).setText(
            mValue2Repo.get().toString());

    TextView resultTextView = (TextView) findViewById(R.id.textViewResult);
    mResultUpdatable = () -> mResultRepository
            .get()
            .ifFailedSendTo(t -> Toast.makeText(this, t.getLocalizedMessage(),
                    Toast.LENGTH_SHORT).show())
            .ifFailedSendTo(t -> {
                if (t instanceof ArithmeticException) {
                    resultTextView.setText("DIV#0");
                } else {
                    resultTextView.setText("N/A");
                }
            })
            .ifSucceededSendTo(resultTextView::setText);

    setUpdatables();
}
 
Example #18
Source File: CalculatorActivityFinal.java    From android-agera with Apache License 2.0 4 votes vote down vote up
@Override
protected void onStart() {
    super.onStart();

    mResultRepository = Repositories.repositoryWithInitialValue(Result.<String>absent())
            .observe(mValue1Repo, mValue2Repo, mOperationSelector)
            .onUpdatesPerLoop()
            .goTo(CalculatorExecutor.EXECUTOR)
            .attemptTransform(CalculatorOperations::keepCpuBusy).orEnd(Result::failure)
            .getFrom(mValue1Repo)
            .mergeIn(mValue2Repo, Pair::create)
            .attemptMergeIn(mOperationSelector, CalculatorOperations::attemptOperation)
            .orEnd(Result::failure)
            .thenTransform(input -> Result.present(input.toString()))
            .onConcurrentUpdate(RepositoryConfig.SEND_INTERRUPT)
            .compile();


    ((SeekBar) findViewById(R.id.seekBar1)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue1Repo));

    ((SeekBar) findViewById(R.id.seekBar2)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue2Repo));

    mValue1TVupdatable = () -> ((TextView) findViewById(R.id.value1)).setText(
            mValue1Repo.get().toString());

    mValue2TVupdatable = () -> ((TextView) findViewById(R.id.value2)).setText(
            mValue2Repo.get().toString());

    TextView resultTextView = (TextView) findViewById(R.id.textViewResult);
    mResultUpdatable = () -> mResultRepository
            .get()
            .ifFailedSendTo(t -> Toast.makeText(this, t.getLocalizedMessage(),
                    Toast.LENGTH_SHORT).show())
            .ifFailedSendTo(t -> {
                if (t instanceof ArithmeticException) {
                    resultTextView.setText("DIV#0");
                } else {
                    resultTextView.setText("N/A");
                }
            })
            .ifSucceededSendTo(resultTextView::setText);

    setUpdatables();
}
 
Example #19
Source File: CalculatorActivity.java    From android-agera with Apache License 2.0 4 votes vote down vote up
@Override
protected void onStart() {
    super.onStart();

    mExecutor = Executors.newSingleThreadExecutor();

    // ACTION REQUIRED: Fix this repository
    mResultRepository = Repositories.repositoryWithInitialValue(Result.<String>absent())
            .observe(mValue1Repo, mValue2Repo, mOperationSelector)
            .onUpdatesPerLoop()
            .getFrom(() -> "Lambda all the things!")
            .thenTransform(input -> {
                Result<Integer> operation = mOperationSelector.get();
                if (operation.isPresent()) {
                    Integer result1;
                    int a = mValue1Repo.get();
                    int b = mValue2Repo.get();
                    switch (operation.get()) {
                        case R.id.radioButtonAdd:
                            result1 = a + b;
                            break;
                        case R.id.radioButtonSub:
                            result1 = a - b;
                            break;
                        case R.id.radioButtonMult:
                            result1 = a * b;
                            break;
                        case R.id.radioButtonDiv:
                            try {
                                result1 = (a / b);
                            } catch (ArithmeticException e) {
                                return Result.failure(e);
                            }
                            break;
                        default:
                            return Result.failure(
                                    new RuntimeException("Invalid operation"));
                    }
                    return Result.present(result1.toString());
                } else {
                    return Result.absent();
                }
            })
            .onConcurrentUpdate(RepositoryConfig.SEND_INTERRUPT)
            .compile();

    ((SeekBar) findViewById(R.id.seekBar1)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue1Repo));

    ((SeekBar) findViewById(R.id.seekBar2)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue2Repo));

    mValue1TVupdatable = () -> ((TextView) findViewById(R.id.value1)).setText(
            mValue1Repo.get().toString());

    mValue2TVupdatable = () -> ((TextView) findViewById(R.id.value2)).setText(
            mValue2Repo.get().toString());

    TextView resultTextView = (TextView) findViewById(R.id.textViewResult);
    mResultUpdatable = () -> mResultRepository
            .get()
            .ifFailedSendTo(t -> Toast.makeText(this, t.getLocalizedMessage(),
                    Toast.LENGTH_SHORT).show())
            .ifFailedSendTo(t -> {
                if (t instanceof ArithmeticException) {
                    resultTextView.setText(R.string.div_zero);
                } else {
                    resultTextView.setText(getString(R.string.not_available));
                }
            })
            .ifSucceededSendTo(resultTextView::setText);

    setUpdatables();
    UiUtils.startAnimation(findViewById(R.id.imageView));
}
 
Example #20
Source File: CalculatorActivityFinal.java    From android-agera with Apache License 2.0 4 votes vote down vote up
@Override
protected void onStart() {
    super.onStart();

    mExecutor = Executors.newSingleThreadExecutor();

    mResultRepository = Repositories.repositoryWithInitialValue(Result.<String>absent())
            .observe(mValue1Repo, mValue2Repo, mOperationSelector)
            .onUpdatesPerLoop()
            .goTo(mExecutor)
            .attemptTransform(CalculatorOperations::keepCpuBusy).orEnd(Result::failure)
            .getFrom(mValue1Repo)
            .mergeIn(mValue2Repo, Pair::create)
            .attemptMergeIn(mOperationSelector, CalculatorOperations::attemptOperation)
            .orEnd(Result::failure)
            .thenTransform(input -> Result.present(input.toString()))
            .onConcurrentUpdate(RepositoryConfig.SEND_INTERRUPT)
            .compile();


    ((SeekBar) findViewById(R.id.seekBar1)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue1Repo));

    ((SeekBar) findViewById(R.id.seekBar2)).setOnSeekBarChangeListener(
            new RepositorySeekBarListener(mValue2Repo));

    mValue1TVupdatable = () -> ((TextView) findViewById(R.id.value1)).setText(
            mValue1Repo.get().toString());

    mValue2TVupdatable = () -> ((TextView) findViewById(R.id.value2)).setText(
            mValue2Repo.get().toString());

    TextView resultTextView = (TextView) findViewById(R.id.textViewResult);
    mResultUpdatable = () -> mResultRepository
            .get()
            .ifFailedSendTo(t -> Toast.makeText(this, t.getLocalizedMessage(),
                    Toast.LENGTH_SHORT).show())
            .ifFailedSendTo(t -> {
                if (t instanceof ArithmeticException) {
                    resultTextView.setText("DIV#0");
                } else {
                    resultTextView.setText("N/A");
                }
            })
            .ifSucceededSendTo(resultTextView::setText);

    setUpdatables();
}