package it.sephiroth.android.library.bottomnavigation.app;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.MarginLayoutParams;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.readystatesoftware.systembartint.SystemBarTintManager.SystemBarConfig;
import com.squareup.picasso.Picasso;
import it.sephiroth.android.library.bottomnavigation.BottomBehavior;
import it.sephiroth.android.library.bottomnavigation.BottomNavigation;
import it.sephiroth.android.library.bottomnavigation.MiscUtils;
/**
* A placeholder fragment containing a simple view.
*/
public class MainActivityFragment extends Fragment {
private static final String TAG = MainActivityFragment.class.getSimpleName();
RecyclerView mRecyclerView;
CoordinatorLayout mCoordinatorLayout;
ViewGroup mRoot;
private SystemBarConfig config;
private ToolbarScrollHelper scrollHelper;
public MainActivityFragment() { }
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}
@Override
public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView01);
}
@Override
public void onActivityCreated(@Nullable final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final BaseActivity activity = (BaseActivity) getActivity();
config = activity.getSystemBarTint().getConfig();
mRoot = (ViewGroup) activity.findViewById(R.id.CoordinatorLayout01);
if (mRoot instanceof CoordinatorLayout) {
mCoordinatorLayout = (CoordinatorLayout) mRoot;
}
final int navigationHeight;
final int actionbarHeight;
if (activity.hasTranslucentNavigation()) {
navigationHeight = config.getNavigationBarHeight();
} else {
navigationHeight = 0;
}
if (activity.hasTranslucentStatusBar()) {
actionbarHeight = config.getActionBarHeight();
} else {
actionbarHeight = 0;
}
MiscUtils.log(TAG, Log.VERBOSE, "navigationHeight: " + navigationHeight);
MiscUtils.log(TAG, Log.VERBOSE, "actionbarHeight: " + actionbarHeight);
final BottomNavigation navigation = activity.getBottomNavigation();
if (null != navigation) {
navigation.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
navigation.getViewTreeObserver().removeOnGlobalLayoutListener(this);
final ViewGroup.LayoutParams params = navigation.getLayoutParams();
final CoordinatorLayout.Behavior behavior;
if (params instanceof CoordinatorLayout.LayoutParams) {
final CoordinatorLayout.LayoutParams coordinatorLayoutParams = (CoordinatorLayout.LayoutParams) params;
behavior = coordinatorLayoutParams.getBehavior();
} else {
behavior = null;
}
if (behavior instanceof BottomBehavior) {
final boolean scrollable = ((BottomBehavior) behavior).isScrollable();
int systemBottomNavigation = activity.hasTranslucentNavigation() ? activity.getNavigationBarHeight() : 0;
MiscUtils.log(TAG, Log.VERBOSE, "scrollable: " + scrollable);
int totalHeight;
if (scrollable) {
if (systemBottomNavigation > 0) {
totalHeight = systemBottomNavigation;
} else {
totalHeight = navigationHeight;
}
} else {
totalHeight = navigation.getNavigationHeight();
}
createAdater(totalHeight, activity.hasManagedToolbarScroll());
} else {
createAdater(navigationHeight, activity.hasAppBarLayout());
}
}
});
} else {
createAdater(navigationHeight, activity.hasAppBarLayout());
}
if (!activity.hasManagedToolbarScroll()) {
scrollHelper = new ToolbarScrollHelper(activity, activity.getToolbar());
scrollHelper.initialize(mRecyclerView);
}
}
private void createAdater(int height, final boolean hasAppBarLayout) {
MiscUtils.log(getClass().getSimpleName(), Log.INFO, "createAdapter(" + height + ")");
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
mRecyclerView.setAdapter(new Adapter(getContext(), height, hasAppBarLayout, createData()));
}
public void scrollToTop() {
mRecyclerView.smoothScrollToPosition(0);
}
static class TwoLinesViewHolder extends RecyclerView.ViewHolder {
final TextView title;
final TextView description;
final ImageView imageView;
final Button button1;
final Button button2;
final int marginBottom;
public TwoLinesViewHolder(final View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(android.R.id.title);
description = (TextView) itemView.findViewById(android.R.id.text1);
imageView = (ImageView) itemView.findViewById(android.R.id.icon);
marginBottom = ((MarginLayoutParams) itemView.getLayoutParams()).bottomMargin;
button1 = (Button) itemView.findViewById(android.R.id.button1);
button2 = (Button) itemView.findViewById(android.R.id.button2);
}
}
private class Adapter extends RecyclerView.Adapter<TwoLinesViewHolder> {
private final Picasso picasso;
private final int navigationHeight;
private final Book[] data;
private final boolean hasAppBarLayout;
public Adapter(final Context context, final int navigationHeight, final boolean hasAppBarLayout, final Book[] data) {
this.navigationHeight = navigationHeight;
this.data = data;
this.hasAppBarLayout = hasAppBarLayout;
this.picasso = Picasso.with(context);
}
@Override
public TwoLinesViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
final View view = LayoutInflater.from(getContext()).inflate(R.layout.simple_card_item, parent, false);
final TwoLinesViewHolder holder = new TwoLinesViewHolder(view);
holder.button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
Snackbar snackbar =
Snackbar.make(mRoot, "Button 1 of item " + holder.getAdapterPosition(), Snackbar.LENGTH_LONG)
.setAction(
"Action",
null
);
snackbar.show();
}
});
holder.button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
Snackbar snackbar = Snackbar.make(mRoot, "Button 2 of item " + holder.getAdapterPosition(),
Snackbar.LENGTH_LONG
)
.setAction(
"Action",
null
);
snackbar.show();
}
});
return holder;
}
@Override
public void onBindViewHolder(final TwoLinesViewHolder holder, final int position) {
((MarginLayoutParams) holder.itemView.getLayoutParams()).topMargin = 0;
if (position == getItemCount() - 1) {
((MarginLayoutParams) holder.itemView.getLayoutParams()).bottomMargin = holder.marginBottom + navigationHeight;
} else if (position == 0 && !hasAppBarLayout) {
((MarginLayoutParams) holder.itemView.getLayoutParams()).topMargin = scrollHelper.getToolbarHeight();
} else {
((MarginLayoutParams) holder.itemView.getLayoutParams()).bottomMargin = holder.marginBottom;
}
final Book item = data[position];
holder.title.setText(item.title);
holder.description.setText("By " + item.author);
holder.imageView.setImageBitmap(null);
picasso.cancelRequest(holder.imageView);
picasso
.load(item.imageUrl)
.noPlaceholder()
.resizeDimen(R.dimen.simple_card_image_width, R.dimen.simple_card_image_height)
.centerCrop()
.into(holder.imageView);
}
@Override
public int getItemCount() {
return data.length;
}
}
private Book[] createData() {
return new Book[]{
new Book("The Flight", "Scott Masterson", "http://i.imgur.com/dyyP2iO.jpg"),
new Book("Room of Plates", "Ali Conners", "http://i.imgur.com/da6QIlR.jpg"),
new Book("The Sleek Boot", "Sandra Adams", "http://i.imgur.com/YHoOJh4.jpg"),
new Book("Night Hunting", "Janet Perkins", "http://i.imgur.com/3jxqrKP.jpg"),
new Book("Rain and Coffee", "Peter Carlsson", "http://i.imgur.com/AZRynvM.jpg"),
new Book("Ocean View", "Trevor Hansen", "http://i.imgur.com/IvhOJcw.jpg"),
new Book("Lovers Of The Roof", "Britta Holt", "http://i.imgur.com/pxgI1b4.png"),
new Book("Lessons from Delhi", "Mary Johnson", "http://i.imgur.com/oT1WYX9.jpg"),
new Book("Mountaineers", "Abbey Christensen", "http://i.imgur.com/CLLDz.jpg"),
new Book("Plains In The Night", "David Park", "http://i.imgur.com/7MrSvXE.jpg?1"),
new Book("Dear Olivia", "Sylvia Sorensen", "http://i.imgur.com/3mkUuux.jpg"),
new Book("Driving Lessons", "Halime Carver", "http://i.imgur.com/LzYAfFL.jpg"),
};
}
static class Book {
final String title;
final String author;
final String imageUrl;
Book(final String title, final String author, final String imageUrl) {
this.title = title;
this.author = author;
this.imageUrl = imageUrl;
}
}
}