package com.jacky.catlauncher.detail;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v17.leanback.app.BackgroundManager;
import android.support.v17.leanback.app.DetailsFragment;
import android.support.v17.leanback.widget.Action;
import android.support.v17.leanback.widget.ArrayObjectAdapter;
import android.support.v17.leanback.widget.ClassPresenterSelector;
import android.support.v17.leanback.widget.DetailsOverviewLogoPresenter;
import android.support.v17.leanback.widget.DetailsOverviewRow;
import android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ListRowPresenter;
import android.support.v17.leanback.widget.OnActionClickedListener;
import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
import android.util.DisplayMetrics;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.jacky.catlauncher.video.VideoActivity;
/**
* @author jacky
* @version v1.0
* @since 16/8/28
*/
public class MediaDetailsFragment extends DetailsFragment {
private ArrayObjectAdapter mRowsAdapter;
private MediaModel mMediaModel;
private Context mContext;
private static final int ACTION_WATCH_TRAILER = 1;
private BackgroundManager mBackgroundManager;
private DisplayMetrics mMetrics;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
mMediaModel = getActivity().getIntent().getParcelableExtra(MediaDetailsActivity.MEDIA);
prepareBackgroundManager();
buildDetails();
}
private void prepareBackgroundManager() {
mBackgroundManager = BackgroundManager.getInstance(getActivity());
mBackgroundManager.attach(getActivity().getWindow());
mMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(mMetrics);
}
private void buildDetails() {
ClassPresenterSelector selector = new ClassPresenterSelector();
FullWidthDetailsOverviewRowPresenter rowPresenter = new FullWidthDetailsOverviewRowPresenter(
new MediaDetailsDescriptionPresenter(),
new DetailsOverviewLogoPresenter());
rowPresenter.setOnActionClickedListener(new OnActionClickedListener() {
@Override
public void onActionClicked(Action action) {
if (action.getId() == ACTION_WATCH_TRAILER) {
Intent intent = new Intent(getActivity(), VideoActivity.class);
intent.putExtra(VideoActivity.VIDEO, mMediaModel);
startActivity(intent);
} else {
Toast.makeText(getActivity(), action.toString(), Toast.LENGTH_SHORT).show();
}
}
});
selector.addClassPresenter(DetailsOverviewRow.class, rowPresenter);
selector.addClassPresenter(ListRow.class, new ListRowPresenter());
mRowsAdapter = new ArrayObjectAdapter(selector);
final DetailsOverviewRow detailsOverview = new DetailsOverviewRow(mMediaModel);
Glide.with(mContext)
.load(mMediaModel.getImageUrl())
.asBitmap()
.listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
detailsOverview.setImageBitmap(mContext, resource);
return true;
}
})
.into(-1, -1);
updateBackground(mMediaModel.getImageUrl());
SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter();
if (!mMediaModel.getVideoUrl().isEmpty()) {
adapter.set(ACTION_WATCH_TRAILER, new Action(ACTION_WATCH_TRAILER, "播放"));
}
detailsOverview.setActionsAdapter(adapter);
mRowsAdapter.add(detailsOverview);
setAdapter(mRowsAdapter);
}
private void updateBackground(String uri) {
Glide.with(this)
.load(uri)
.asBitmap()
.centerCrop()
.into(new SimpleTarget<Bitmap>(mMetrics.widthPixels, mMetrics.heightPixels) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
mBackgroundManager.setBitmap(resource);
}
});
}
@Override
public void onStop() {
mBackgroundManager.release();
super.onStop();
}
}