rpicms-android

Android app for the RPICMS.
git clone git://archive.git.mtrnord.blog/RpicmsTeam/rpicms-android.git
Log | Files | Refs

VideoDetailsFragment.java (7362B)


      1 package de.nordgedanken.rpicms;
      2 
      3 import java.io.IOException;
      4 import java.net.URI;
      5 import java.util.Collections;
      6 import java.util.List;
      7 
      8 import android.content.Context;
      9 import android.content.Intent;
     10 import android.graphics.Bitmap;
     11 import android.graphics.drawable.Drawable;
     12 import android.os.AsyncTask;
     13 import android.os.Bundle;
     14 import android.support.v17.leanback.app.BackgroundManager;
     15 import android.support.v17.leanback.app.DetailsFragment;
     16 import android.support.v17.leanback.widget.Action;
     17 import android.support.v17.leanback.widget.ArrayObjectAdapter;
     18 import android.support.v17.leanback.widget.ClassPresenterSelector;
     19 import android.support.v17.leanback.widget.DetailsOverviewRow;
     20 import android.support.v17.leanback.widget.DetailsOverviewRowPresenter;
     21 import android.support.v17.leanback.widget.HeaderItem;
     22 import android.support.v17.leanback.widget.ListRow;
     23 import android.support.v17.leanback.widget.ListRowPresenter;
     24 import android.support.v17.leanback.widget.OnActionClickedListener;
     25 import android.support.v17.leanback.widget.OnItemClickedListener;
     26 import android.support.v17.leanback.widget.Row;
     27 import android.util.DisplayMetrics;
     28 import android.util.Log;
     29 import android.widget.Toast;
     30 
     31 import com.squareup.picasso.Picasso;
     32 import com.squareup.picasso.Target;
     33 
     34 public class VideoDetailsFragment extends DetailsFragment {
     35     private static final String TAG = "VideoDetailsFragment";
     36 
     37     private static final int ACTION_WATCH_TRAILER = 1;
     38     private static final int ACTION_RENT = 2;
     39     private static final int ACTION_BUY = 3;
     40 
     41     private static final int DETAIL_THUMB_WIDTH = 274;
     42     private static final int DETAIL_THUMB_HEIGHT = 274;
     43 
     44     private static final int NUM_COLS = 10;
     45 
     46     private static final String MOVIE = "Movie";
     47 
     48     private Movie selectedMovie;
     49 
     50     private Drawable mDefaultBackground;
     51     private Target mBackgroundTarget;
     52     private DisplayMetrics mMetrics;
     53 
     54     @Override
     55     public void onCreate(Bundle savedInstanceState) {
     56         Log.i(TAG, "onCreate DetailsFragment");
     57         super.onCreate(savedInstanceState);
     58 
     59         BackgroundManager backgroundManager = BackgroundManager.getInstance(getActivity());
     60         backgroundManager.attach(getActivity().getWindow());
     61         mBackgroundTarget = new PicassoBackgroundManagerTarget(backgroundManager);
     62 
     63         mDefaultBackground = getResources().getDrawable(R.drawable.default_background);
     64 
     65         mMetrics = new DisplayMetrics();
     66         getActivity().getWindowManager().getDefaultDisplay().getMetrics(mMetrics);
     67 
     68         selectedMovie = (Movie) getActivity().getIntent().getSerializableExtra(MOVIE);
     69         new DetailRowBuilderTask().execute(selectedMovie);
     70 
     71         setOnItemClickedListener(getDefaultItemClickedListener());
     72         updateBackground(selectedMovie.getBackgroundImageURI());
     73 
     74     }
     75 
     76     private class DetailRowBuilderTask extends AsyncTask<Movie, Integer, DetailsOverviewRow> {
     77         @Override
     78         protected DetailsOverviewRow doInBackground(Movie... movies) {
     79             selectedMovie = movies[0];
     80 
     81             DetailsOverviewRow row = new DetailsOverviewRow(selectedMovie);
     82             try {
     83                 Bitmap poster = Picasso.with(getActivity())
     84                         .load(selectedMovie.getCardImageUrl())
     85                         .resize(dpToPx(DETAIL_THUMB_WIDTH, getActivity().getApplicationContext()),
     86                                 dpToPx(DETAIL_THUMB_HEIGHT, getActivity().getApplicationContext()))
     87                         .centerCrop()
     88                         .get();
     89                 row.setImageBitmap(getActivity(), poster);
     90             } catch (IOException e) {
     91             }
     92 
     93             row.addAction(new Action(ACTION_WATCH_TRAILER, getResources().getString(
     94                     R.string.watch_trailer_1), getResources().getString(R.string.watch_trailer_2)));
     95             row.addAction(new Action(ACTION_RENT, getResources().getString(R.string.rent_1),
     96                     getResources().getString(R.string.rent_2)));
     97             row.addAction(new Action(ACTION_BUY, getResources().getString(R.string.buy_1),
     98                     getResources().getString(R.string.buy_2)));
     99             return row;
    100         }
    101 
    102         @Override
    103         protected void onPostExecute(DetailsOverviewRow detailRow) {
    104             ClassPresenterSelector ps = new ClassPresenterSelector();
    105             DetailsOverviewRowPresenter dorPresenter =
    106                     new DetailsOverviewRowPresenter(new DetailsDescriptionPresenter());
    107             // set detail background and style
    108             dorPresenter.setBackgroundColor(getResources().getColor(R.color.detail_background));
    109             dorPresenter.setStyleLarge(true);
    110             dorPresenter.setOnActionClickedListener(new OnActionClickedListener() {
    111                 @Override
    112                 public void onActionClicked(Action action) {
    113                     if (action.getId() == ACTION_WATCH_TRAILER) {
    114                         Intent intent = new Intent(getActivity(), PlayerActivity.class);
    115                         intent.putExtra(getResources().getString(R.string.movie), selectedMovie);
    116                         intent.putExtra(getResources().getString(R.string.should_start), true);
    117                         startActivity(intent);
    118                     }
    119                     else {
    120                         Toast.makeText(getActivity(), action.toString(), Toast.LENGTH_SHORT).show();
    121                     }
    122                 }
    123             });
    124 
    125             ps.addClassPresenter(DetailsOverviewRow.class, dorPresenter);
    126             ps.addClassPresenter(ListRow.class,
    127                     new ListRowPresenter());
    128 
    129             ArrayObjectAdapter adapter = new ArrayObjectAdapter(ps);
    130             adapter.add(detailRow);
    131 
    132             String subcategories[] = {
    133                     getString(R.string.related_movies)
    134             };
    135             List<Movie> list = MovieList.list;
    136             Collections.shuffle(list);
    137             ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new CardPresenter());
    138             for (int j = 0; j < NUM_COLS; j++) {
    139                 listRowAdapter.add(list.get(j % 5));
    140             }
    141 
    142             HeaderItem header = new HeaderItem(0, subcategories[0], null);
    143             adapter.add(new ListRow(header, listRowAdapter));
    144 
    145             setAdapter(adapter);
    146         }
    147 
    148     }
    149 
    150     protected OnItemClickedListener getDefaultItemClickedListener() {
    151         return new OnItemClickedListener() {
    152             @Override
    153             public void onItemClicked(Object item, Row row) {
    154                 if (item instanceof Movie) {
    155                     Movie movie = (Movie) item;
    156                     Intent intent = new Intent(getActivity(), DetailsActivity.class);
    157                     intent.putExtra(MOVIE, movie);
    158                     startActivity(intent);
    159                 }
    160             }
    161         };
    162     }
    163 
    164     protected void updateBackground(URI uri) {
    165         Log.d(TAG, "uri" + uri);
    166         Log.d(TAG, "metrics" + mMetrics.toString());
    167         Picasso.with(getActivity())
    168                 .load(uri.toString())
    169                 .resize(mMetrics.widthPixels, mMetrics.heightPixels)
    170                 .error(mDefaultBackground)
    171                 .into(mBackgroundTarget);
    172     }
    173 
    174     public static int dpToPx(int dp, Context ctx) {
    175         float density = ctx.getResources().getDisplayMetrics().density;
    176         return Math.round((float) dp * density);
    177     }
    178 }