/*
* Copyright (C) 2014 Pedro Vicente Gómez Sánchez.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.pedrovgs.tuentitv.ui.fragment;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v17.leanback.app.BackgroundManager;
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.DetailsOverviewRow;
import android.support.v17.leanback.widget.DetailsOverviewRowPresenter;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ListRowPresenter;
import android.util.DisplayMetrics;
import com.github.pedrovgs.tuentitv.R;
import com.github.pedrovgs.tuentitv.presenter.DetailPresenter;
import com.github.pedrovgs.tuentitv.ui.data.CardInfo;
import com.github.pedrovgs.tuentitv.ui.picasso.PicassoBackgroundManagerTarget;
import com.github.pedrovgs.tuentitv.ui.util.Util;
import com.github.pedrovgs.tuentitv.ui.viewpresenter.DetailsDescriptionPresenter;
import com.squareup.picasso.Picasso;
import java.io.IOException;
import javax.inject.Inject;
/**
* DetailBaseFragment extension created to show detailed information of Contacts or
* ConversationSummary given an identifier passed as extra to the container activity.
*
* @author Pedro Vicente Gómez Sánchez.
*/
public class DetailFragment extends DetailBaseFragment implements DetailPresenter.View {
public static final String ID_EXTRA = "id_extra";
private static final long VD_CALL_ACTION_ID = 1;
private static final long CALL_ACTION_ID = 2;
private static final long CHAT_ACTION_ID = 3;
private static final long EDIT_ACTION_ID = 4;
private static final int DETAIL_THUMB_WIDTH = 274;
private static final int DETAIL_THUMB_HEIGHT = 274;
@Inject DetailPresenter presenter;
private PicassoBackgroundManagerTarget backgroundTarget;
private DisplayMetrics metrics;
private ArrayObjectAdapter adapter;
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
configureBackground();
configureDetailPresenter();
}
@Override public void showBackground(String backgroundUrl) {
Picasso.with(getActivity())
.load(backgroundUrl)
.resize(metrics.widthPixels, metrics.heightPixels)
.error(R.drawable.fragment_default_background)
.centerCrop()
.into(backgroundTarget);
}
@Override public void showCardInfo(final CardInfo cardInfo) {
new AsyncTask<Void, Void, Bitmap>() {
@Override protected Bitmap doInBackground(Void... params) {
Bitmap detailImage = null;
try {
detailImage = Picasso.with(getActivity())
.load(cardInfo.getCardImageUrl())
.placeholder(R.drawable.icn_wink)
.error(R.drawable.icn_wink)
.resize(Util.convertDpToPixel(getActivity(), DETAIL_THUMB_WIDTH),
Util.convertDpToPixel(getActivity(), DETAIL_THUMB_HEIGHT))
.centerCrop()
.get();
} catch (IOException e) {
//Empty
}
return detailImage;
}
@Override protected void onPostExecute(Bitmap bitmap) {
DetailsOverviewRow detailRow = configureDetailsOverviewRow(cardInfo, bitmap);
ClassPresenterSelector presenterSelector = new ClassPresenterSelector();
DetailsOverviewRowPresenter dorPresenter =
new DetailsOverviewRowPresenter(new DetailsDescriptionPresenter());
dorPresenter.setBackgroundColor(getResources().getColor(R.color.primary_color));
dorPresenter.setStyleLarge(false);
presenterSelector.addClassPresenter(DetailsOverviewRow.class, dorPresenter);
presenterSelector.addClassPresenter(ListRow.class, new ListRowPresenter());
adapter = new ArrayObjectAdapter(presenterSelector);
adapter.add(detailRow);
setAdapter(adapter);
}
}.execute();
}
private DetailsOverviewRow configureDetailsOverviewRow(CardInfo cardInfo, Bitmap bitmap) {
final DetailsOverviewRow row = new DetailsOverviewRow(cardInfo);
row.setImageBitmap(getActivity(), bitmap);
row.addAction(new Action(VD_CALL_ACTION_ID, getString(R.string.vd_call_action_title)));
row.addAction(new Action(CALL_ACTION_ID, getString(R.string.call_action_title)));
row.addAction(new Action(CHAT_ACTION_ID, getString(R.string.chat_action_title)));
row.addAction(new Action(EDIT_ACTION_ID, getString(R.string.edit_action_title)));
return row;
}
private void configureBackground() {
metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
BackgroundManager backgroundManager = BackgroundManager.getInstance(getActivity());
backgroundManager.attach(getActivity().getWindow());
backgroundTarget = new PicassoBackgroundManagerTarget(backgroundManager);
}
private void configureDetailPresenter() {
presenter.setView(this);
String contentId = getContentId();
presenter.loadContent(contentId);
}
private String getContentId() {
return getActivity().getIntent().getExtras().getString(ID_EXTRA);
}
}