/*
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

package com.facebook.drawee.backends.volley;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import com.android.volley.toolbox.ImageLoader;
import com.facebook.common.internal.Preconditions;
import com.facebook.datasource.DataSource;
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.interfaces.DraweeController;
import java.util.Set;

/**
 * Concrete implementation of Volley Drawee controller builder.
 * <p/> See {@link AbstractDraweeControllerBuilder} for more details.
 */
public class VolleyDraweeControllerBuilder extends AbstractDraweeControllerBuilder<
    VolleyDraweeControllerBuilder,
    Uri,
    Bitmap,
    Bitmap> {

  private final ImageLoader mImageLoader;
  private final VolleyDraweeControllerFactory mVolleyDraweeControllerFactory;

  public VolleyDraweeControllerBuilder(
      Context context,
      ImageLoader imageLoader,
      VolleyDraweeControllerFactory volleyDraweeControllerFactory,
      Set<ControllerListener> boundControllerListeners) {
    super(context, boundControllerListeners);
    mImageLoader = imageLoader;
    mVolleyDraweeControllerFactory = volleyDraweeControllerFactory;
  }

  @Override
  protected VolleyDraweeController obtainController() {
    DraweeController oldController = getOldController();
    VolleyDraweeController controller;
    if (oldController instanceof VolleyDraweeController) {
      controller = (VolleyDraweeController) oldController;
      controller.initialize(
          obtainDataSourceSupplier(),
          generateUniqueControllerId(),
          getCallerContext());
    } else {
      controller = mVolleyDraweeControllerFactory.newController(
          obtainDataSourceSupplier(),
          generateUniqueControllerId(),
          getCallerContext());
    }
    return controller;
  }

  @Override
  protected DataSource<Bitmap> getDataSourceForRequest(
      final Uri imageRequest,
      final Object callerContext,
      final CacheLevel cacheLevel) {
    return new VolleyDataSource(mImageLoader, imageRequest, cacheLevel);
  }

  @Override
  public VolleyDraweeControllerBuilder setUri(Uri uri) {
    return setImageRequest(uri);
  }

  @Override
  public VolleyDraweeControllerBuilder setUri(String uriString) {
    Preconditions.checkNotNull(uriString);
    return setImageRequest(Uri.parse(uriString));
  }

  @Override
  protected VolleyDraweeControllerBuilder getThis() {
    return this;
  }
}

/*
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

package com.facebook.drawee.backends.volley;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import com.android.volley.toolbox.ImageLoader;
import com.facebook.common.internal.Preconditions;
import com.facebook.datasource.DataSource;
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.interfaces.DraweeController;
import java.util.Set;

/**
 * Concrete implementation of Volley Drawee controller builder.
 * <p/> See {@link AbstractDraweeControllerBuilder} for more details.
 */
public class VolleyDraweeControllerBuilder extends AbstractDraweeControllerBuilder<
    VolleyDraweeControllerBuilder,
    Uri,
    Bitmap,
    Bitmap> {

  private final ImageLoader mImageLoader;
  private final VolleyDraweeControllerFactory mVolleyDraweeControllerFactory;

  public VolleyDraweeControllerBuilder(
      Context context,
      ImageLoader imageLoader,
      VolleyDraweeControllerFactory volleyDraweeControllerFactory,
      Set<ControllerListener> boundControllerListeners) {
    super(context, boundControllerListeners);
    mImageLoader = imageLoader;
    mVolleyDraweeControllerFactory = volleyDraweeControllerFactory;
  }

  @Override
  protected VolleyDraweeController obtainController() {
    DraweeController oldController = getOldController();
    VolleyDraweeController controller;
    if (oldController instanceof VolleyDraweeController) {
      controller = (VolleyDraweeController) oldController;
      controller.initialize(
          obtainDataSourceSupplier(),
          generateUniqueControllerId(),
          getCallerContext());
    } else {
      controller = mVolleyDraweeControllerFactory.newController(
          obtainDataSourceSupplier(),
          generateUniqueControllerId(),
          getCallerContext());
    }
    return controller;
  }

  @Override
  protected DataSource<Bitmap> getDataSourceForRequest(
      final Uri imageRequest,
      final Object callerContext,
      final CacheLevel cacheLevel) {
    return new VolleyDataSource(mImageLoader, imageRequest, cacheLevel);
  }

  @Override
  public VolleyDraweeControllerBuilder setUri(Uri uri) {
    return setImageRequest(uri);
  }

  @Override
  public VolleyDraweeControllerBuilder setUri(String uriString) {
    Preconditions.checkNotNull(uriString);
    return setImageRequest(Uri.parse(uriString));
  }
}

Remove remaining redundant getThis override