/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.dialer.common.concurrent; import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.os.Bundle; import android.support.annotation.MainThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.DialerExecutor.FailureListener; import com.android.dialer.common.concurrent.DialerExecutor.SuccessListener; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; /** * A headless fragment for use in UI components that interact with ListenableFutures. * *
Callbacks are only executed if the UI component is still alive. * *
Example usage: The listeners are not called if the UI component this {@link UiListener} is declared in is
* dead.
*/
@MainThread
public void listen(
Context context,
@NonNull ListenableFuture
*/
public class UiListener
* public class MyActivity extends Activity {
*
* private UiListener<MyOutputType> uiListener;
*
* public void onCreate(Bundle bundle) {
* super.onCreate(bundle);
*
* // Must be called in onCreate!
* uiListener = DialerExecutorComponent.get(context).createUiListener(fragmentManager, taskId);
* }
*
* private void onSuccess(MyOutputType output) { ... }
* private void onFailure(Throwable throwable) { ... }
*
* private void userDidSomething() {
* ListenableFuture<MyOutputType> future = callSomeMethodReturningListenableFuture(input);
* uiListener.listen(this, future, this::onSuccess, this::onFailure);
* }
* }
*