package br.com.livrowebservices.carros.activity;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import org.parceler.Parcels;
import java.io.File;
import br.com.livrowebservices.carros.R;
import br.com.livrowebservices.carros.domain.Carro;
import br.com.livrowebservices.carros.fragment.CarroEditFragment;
import br.com.livrowebservices.carros.fragment.CarroFragment;
import br.com.livrowebservices.carros.utils.ImageUtils;
import livroandroid.lib.activity.BaseActivity;
import livroandroid.lib.fragment.BaseFragment;
public class CarroActivity extends BaseActivity {
CollapsingToolbarLayout collapsingToolbar;
private Carro carro;
private ImageView appBarImg;
private FloatingActionButton fabButton;
private ClickHeaderListener clickHeaderListener;
public interface ClickHeaderListener{
void onHeaderClicked();
void onFabButtonClicked(Carro carro);
}
public void setClickHeaderListener(ClickHeaderListener clickHeaderListener) {
this.clickHeaderListener = clickHeaderListener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_carro);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
// Título da CollapsingToolbarLayout
collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
// Header
appBarImg = (ImageView) findViewById(R.id.appBarImg);
appBarImg.setOnClickListener(onClickImgHeader());
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.header_appbar);
// Palleta cores
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
int color = ContextCompat.getColor(getContext(), R.color.primary);
int mutedColor = palette.getMutedColor(color);
collapsingToolbar.setContentScrimColor(mutedColor);
}
});
// Args
this.carro = Parcels.unwrap(getIntent().getExtras().getParcelable("carro"));
final boolean editMode = getIntent().getBooleanExtra("editMode", false);
setAppBarInfo(carro);
// FAB
fabButton = (FloatingActionButton) findViewById(R.id.fab);
if(!editMode) {
fabButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickHeaderListener != null) {
clickHeaderListener.onFabButtonClicked(carro);
}
}
});
} else {
fabButton.setVisibility(View.GONE);
}
// Fragment
if (savedInstanceState == null) {
BaseFragment frag = editMode ? new CarroEditFragment() : new CarroFragment();
frag.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().replace(R.id.layoutFrag, frag,"frag").commit();
}
}
private View.OnClickListener onClickImgHeader() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
if(clickHeaderListener != null) {
// Delegate para notificar o fragment que teve clique.
clickHeaderListener.onHeaderClicked();
}
}
};
}
public void setAppBarInfo(Carro c) {
if(c != null) {
String nome = c.nome;
String url = c.urlFoto;
collapsingToolbar.setTitle(nome);
setImage(url);
} else {
// Novo Carro
collapsingToolbar.setTitle(getString(R.string.novo_carro));
}
}
public void setImage(String url) {
ImageUtils.setImage(this,url, appBarImg);
}
public void setImage(File file) {
ImageUtils.setImage(this,file, appBarImg);
}
public void setImage(Bitmap bitmap) {
if(bitmap != null) {
appBarImg.setImageBitmap(bitmap);
}
}
public void toogleFavorite(boolean b) {
setFavoriteColor(b);
if (b) {
snack(appBarImg, carro.nome + " adicionado aos favoritos.");
} else {
snack(appBarImg, carro.nome + " removido dos favoritos.");
}
}
// Desenha a cor conforme está favoritado ou não.
public void setFavoriteColor(boolean b) {
// Troca a cor conforme o status do favoritos
int fundo = ContextCompat.getColor(this, b ? R.color.favorito_on : R.color.favorito_off);
int cor = ContextCompat.getColor(this,b ? R.color.amarelo : R.color.favorito_on);
fabButton.setBackgroundTintList(new ColorStateList(new int[][]{new int[]{0}}, new int[]{fundo}));
fabButton.setColorFilter(cor);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
ActivityCompat.finishAfterTransition(getActivity());
return true;
}
return super.onOptionsItemSelected(item);
}
}