@Override
    protected DetailsOverviewRow doInBackground(Movie... movies) {
      selectedMovie = movies[0];

      DetailsOverviewRow row = new DetailsOverviewRow(selectedMovie);
      try {
        Bitmap poster =
            Picasso.with(getActivity())
                .load(selectedMovie.getCardImageUrl())
                .resize(
                    dpToPx(DETAIL_THUMB_WIDTH, getActivity().getApplicationContext()),
                    dpToPx(DETAIL_THUMB_HEIGHT, getActivity().getApplicationContext()))
                .centerCrop()
                .get();
        row.setImageBitmap(getActivity(), poster);
      } catch (IOException e) {
      }

      row.addAction(
          new Action(
              ACTION_WATCH_TRAILER,
              getResources().getString(R.string.watch_trailer_1),
              getResources().getString(R.string.watch_trailer_2)));
      row.addAction(
          new Action(
              ACTION_RENT,
              getResources().getString(R.string.rent_1),
              getResources().getString(R.string.rent_2)));
      row.addAction(
          new Action(
              ACTION_BUY,
              getResources().getString(R.string.buy_1),
              getResources().getString(R.string.buy_2)));
      return row;
    }
  private void setupDetailsOverviewRow() {
    Log.d(TAG, "doInBackground: " + mSelectedMovie.toString());
    final DetailsOverviewRow row = new DetailsOverviewRow(mSelectedMovie);
    row.setImageDrawable(getResources().getDrawable(R.drawable.default_background));
    int width = Utils.convertDpToPixel(getActivity().getApplicationContext(), DETAIL_THUMB_WIDTH);
    int height = Utils.convertDpToPixel(getActivity().getApplicationContext(), DETAIL_THUMB_HEIGHT);

    Glide.with(getActivity())
        .load(mSelectedMovie.getCardImageUrl())
        .centerCrop()
        .error(R.drawable.default_background)
        .into(
            new SimpleTarget<GlideDrawable>(width, height) {
              @Override
              public void onResourceReady(
                  GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                Log.d(TAG, "details overview card image url ready: " + resource);
                row.setImageDrawable(resource);
                mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size());
              }
            });

    SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter();

    adapter.set(
        ACTION_WATCH_TRAILER,
        new Action(
            ACTION_WATCH_TRAILER,
            getResources().getString(R.string.watch_trailer_1),
            getResources().getString(R.string.watch_trailer_2)));
    adapter.set(
        ACTION_RENT,
        new Action(
            ACTION_RENT,
            getResources().getString(R.string.rent_1),
            getResources().getString(R.string.rent_2)));
    adapter.set(
        ACTION_BUY,
        new Action(
            ACTION_BUY,
            getResources().getString(R.string.buy_1),
            getResources().getString(R.string.buy_2)));
    row.setActionsAdapter(adapter);

    mAdapter.add(row);
  }