rpicms-android

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

MainFragment.java (8448B)


      1 package de.nordgedanken.rpicms;
      2 
      3 import java.net.URI;
      4 import java.util.Collections;
      5 import java.util.List;
      6 import java.util.Timer;
      7 import java.util.TimerTask;
      8 
      9 import android.content.Intent;
     10 import android.graphics.Color;
     11 import android.graphics.drawable.Drawable;
     12 import android.os.Bundle;
     13 import android.os.Handler;
     14 import android.support.v17.leanback.app.BackgroundManager;
     15 import android.support.v17.leanback.app.BrowseFragment;
     16 import android.support.v17.leanback.widget.ArrayObjectAdapter;
     17 import android.support.v17.leanback.widget.HeaderItem;
     18 import android.support.v17.leanback.widget.ListRow;
     19 import android.support.v17.leanback.widget.ListRowPresenter;
     20 import android.support.v17.leanback.widget.OnItemClickedListener;
     21 import android.support.v17.leanback.widget.OnItemSelectedListener;
     22 import android.support.v17.leanback.widget.Presenter;
     23 import android.support.v17.leanback.widget.Row;
     24 import android.util.DisplayMetrics;
     25 import android.util.Log;
     26 import android.view.Gravity;
     27 import android.view.View;
     28 import android.view.ViewGroup;
     29 import android.widget.TextView;
     30 import android.widget.Toast;
     31 
     32 import com.squareup.picasso.Picasso;
     33 import com.squareup.picasso.Target;
     34 
     35 
     36 public class MainFragment extends BrowseFragment {
     37     private static final String TAG = "MainFragment";
     38 
     39     private static final int NUM_ROWS = 6;
     40     private static final int NUM_COLS = 15;
     41 
     42     private ArrayObjectAdapter mRowsAdapter;
     43     private Drawable mDefaultBackground;
     44     private Target mBackgroundTarget;
     45     private DisplayMetrics mMetrics;
     46     private Timer mBackgroundTimer;
     47     private final Handler mHandler = new Handler();
     48     private URI mBackgroundURI;
     49     Movie mMovie;
     50     CardPresenter mCardPresenter;
     51 
     52     @Override
     53     public void onActivityCreated(Bundle savedInstanceState) {
     54         Log.i(TAG, "onCreate");
     55         super.onActivityCreated(savedInstanceState);
     56 
     57         prepareBackgroundManager();
     58 
     59         setupUIElements();
     60 
     61         loadRows();
     62 
     63         setupEventListeners();
     64     }
     65 
     66     private void loadRows() {
     67         List<Movie> list = MovieList.setupMovies();
     68 
     69         mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
     70         mCardPresenter = new CardPresenter();
     71 
     72         int i;
     73         for (i = 0; i < NUM_ROWS; i++) {
     74             if (i != 0) {
     75                 Collections.shuffle(list);
     76             }
     77             ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(mCardPresenter);
     78             for (int j = 0; j < NUM_COLS; j++) {
     79                 listRowAdapter.add(list.get(j % 5));
     80             }
     81             HeaderItem header = new HeaderItem(i, MovieList.MOVIE_CATEGORY[i], null);
     82             mRowsAdapter.add(new ListRow(header, listRowAdapter));
     83         }
     84 
     85         HeaderItem gridHeader = new HeaderItem(i, "PREFERENCES", null);
     86 
     87         GridItemPresenter mGridPresenter = new GridItemPresenter();
     88         ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(mGridPresenter);
     89         gridRowAdapter.add(getResources().getString(R.string.grid_view));
     90         gridRowAdapter.add(getResources().getString(R.string.send_feeback));
     91         gridRowAdapter.add(getResources().getString(R.string.personal_settings));
     92         mRowsAdapter.add(new ListRow(gridHeader, gridRowAdapter));
     93 
     94         setAdapter(mRowsAdapter);
     95 
     96     }
     97 
     98     private void prepareBackgroundManager() {
     99 
    100         BackgroundManager backgroundManager = BackgroundManager.getInstance(getActivity());
    101         backgroundManager.attach(getActivity().getWindow());
    102         mBackgroundTarget = new PicassoBackgroundManagerTarget(backgroundManager);
    103 
    104         mDefaultBackground = getResources().getDrawable(R.drawable.default_background);
    105 
    106         mMetrics = new DisplayMetrics();
    107         getActivity().getWindowManager().getDefaultDisplay().getMetrics(mMetrics);
    108     }
    109 
    110     private void setupUIElements() {
    111         // setBadgeDrawable(getActivity().getResources().getDrawable(
    112         // R.drawable.videos_by_google_banner));
    113         setTitle(getString(R.string.browse_title)); // Badge, when set, takes precedent
    114                                                     // over title
    115         setHeadersState(HEADERS_ENABLED);
    116         setHeadersTransitionOnBackEnabled(true);
    117 
    118         // set fastLane (or headers) background color
    119         setBrandColor(getResources().getColor(R.color.fastlane_background));
    120         // set search icon color
    121         setSearchAffordanceColor(getResources().getColor(R.color.search_opaque));
    122     }
    123 
    124     private void setupEventListeners() {
    125         setOnItemSelectedListener(getDefaultItemSelectedListener());
    126         setOnItemClickedListener(getDefaultItemClickedListener());
    127         setOnSearchClickedListener(new View.OnClickListener() {
    128             @Override
    129             public void onClick(View view) {
    130                 Toast.makeText(getActivity(), "Implement your own in-app search", Toast.LENGTH_LONG)
    131                         .show();
    132             }
    133         });
    134     }
    135 
    136     protected OnItemSelectedListener getDefaultItemSelectedListener() {
    137         return new OnItemSelectedListener() {
    138             @Override
    139             public void onItemSelected(Object item, Row row) {
    140                 if (item instanceof Movie) {
    141                     mBackgroundURI = ((Movie) item).getBackgroundImageURI();
    142                     startBackgroundTimer();
    143                 }
    144             }
    145         };
    146     }
    147 
    148     protected OnItemClickedListener getDefaultItemClickedListener() {
    149         return new OnItemClickedListener() {
    150             @Override
    151             public void onItemClicked(Object item, Row row) {
    152                 if (item instanceof Movie) {
    153                     Movie movie = (Movie) item;
    154                     Log.d(TAG, "Item: " + item.toString());
    155                     Intent intent = new Intent(getActivity(), DetailsActivity.class);
    156                     intent.putExtra(getString(R.string.movie), movie);
    157                     startActivity(intent);
    158                 }
    159                 else if (item instanceof String) {
    160                     Toast.makeText(getActivity(), (String) item, Toast.LENGTH_SHORT)
    161                             .show();
    162                 }
    163             }
    164         };
    165     }
    166 
    167     protected void setDefaultBackground(Drawable background) {
    168         mDefaultBackground = background;
    169     }
    170 
    171     protected void setDefaultBackground(int resourceId) {
    172         mDefaultBackground = getResources().getDrawable(resourceId);
    173     }
    174 
    175     protected void updateBackground(URI uri) {
    176         Picasso.with(getActivity())
    177                 .load(uri.toString())
    178                 .resize(mMetrics.widthPixels, mMetrics.heightPixels)
    179                 .centerCrop()
    180                 .error(mDefaultBackground)
    181                 .into(mBackgroundTarget);
    182     }
    183 
    184     protected void updateBackground(Drawable drawable) {
    185         BackgroundManager.getInstance(getActivity()).setDrawable(drawable);
    186     }
    187 
    188     protected void clearBackground() {
    189         BackgroundManager.getInstance(getActivity()).setDrawable(mDefaultBackground);
    190     }
    191 
    192     private void startBackgroundTimer() {
    193         if (null != mBackgroundTimer) {
    194             mBackgroundTimer.cancel();
    195         }
    196         mBackgroundTimer = new Timer();
    197         mBackgroundTimer.schedule(new UpdateBackgroundTask(), 300);
    198     }
    199 
    200     private class UpdateBackgroundTask extends TimerTask {
    201 
    202         @Override
    203         public void run() {
    204             mHandler.post(new Runnable() {
    205                 @Override
    206                 public void run() {
    207                     if (mBackgroundURI != null) {
    208                         updateBackground(mBackgroundURI);
    209                     }
    210                 }
    211             });
    212 
    213         }
    214     }
    215 
    216     private class GridItemPresenter extends Presenter {
    217         @Override
    218         public ViewHolder onCreateViewHolder(ViewGroup parent) {
    219             TextView view = new TextView(parent.getContext());
    220             view.setLayoutParams(new ViewGroup.LayoutParams(200, 200));
    221             view.setFocusable(true);
    222             view.setFocusableInTouchMode(true);
    223             view.setBackgroundColor(getResources().getColor(R.color.default_background));
    224             view.setTextColor(Color.WHITE);
    225             view.setGravity(Gravity.CENTER);
    226             return new ViewHolder(view);
    227         }
    228 
    229         @Override
    230         public void onBindViewHolder(ViewHolder viewHolder, Object item) {
    231             ((TextView) viewHolder.view).setText((String) item);
    232         }
    233 
    234         @Override
    235         public void onUnbindViewHolder(ViewHolder viewHolder) {
    236         }
    237     }
    238 
    239 }