All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.shadows.ShadowLegacyAsyncTaskLoader Maven / Gradle / Ivy

The newest version!
package org.robolectric.shadows;

import android.content.AsyncTaskLoader;
import android.content.Context;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.LooperMode;
import org.robolectric.annotation.RealObject;

/** The shadow {@link AsyncTaskLoader} for {@link LooperMode.Mode.LEGACY}. */
@Implements(
    value = AsyncTaskLoader.class,
    shadowPicker = ShadowAsyncTaskLoader.Picker.class,
    isInAndroidSdk = false)
public class ShadowLegacyAsyncTaskLoader extends ShadowAsyncTaskLoader {
  @RealObject private AsyncTaskLoader realObject;
  private BackgroundWorker worker;

  @Implementation
  protected void __constructor__(Context context) {
    worker = new BackgroundWorker();
  }

  @Implementation
  protected void onForceLoad() {
    FutureTask future =
        new FutureTask(worker) {
          @Override
          protected void done() {
            try {
              final D result = get();
              ShadowApplication.getInstance()
                  .getForegroundThreadScheduler()
                  .post(
                      new Runnable() {
                        @Override
                        public void run() {
                          realObject.deliverResult(result);
                        }
                      });
            } catch (InterruptedException e) {
              // Ignore
            } catch (ExecutionException e) {
              throw new RuntimeException(e.getCause());
            }
          }
        };

    ShadowApplication.getInstance().getBackgroundThreadScheduler().post(future);
  }

  private final class BackgroundWorker implements Callable {
    @Override
    public D call() throws Exception {
      return realObject.loadInBackground();
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy