package com.airplayer.fragment.child;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.CardView;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.airplayer.R;
import com.airplayer.adapter.AirAdapter;
import com.airplayer.adapter.AlbumAdapter;
import com.airplayer.fragment.child.HideTabsChildFragment;
import com.airplayer.fragment.singleitem.AlbumFragment;
import com.airplayer.model.AirModelSingleton;
import com.airplayer.model.Album;
import java.util.List;
/**
* Created by ZiyiTsang on 15/6/4.
*/
public class RecentFragment extends HideTabsChildFragment {
private List<Album> mActivityAlbums;
private RecyclerView mRecyclerView;
private int mRecentAlbumsSize;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AirModelSingleton singleton = AirModelSingleton.getInstance(getActivity());
mActivityAlbums = singleton.getActivityAlbums();
mRecentAlbumsSize = singleton.getRecentAlbumsSize();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mActivityAlbums.size() == 0) {
return super.onCreateView(inflater, container, savedInstanceState);
}
View rootView = inflater.inflate(R.layout.fragment_recycler, container, false);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
final GridLayoutManager manager = new GridLayoutManager(getActivity(), 3);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position == 0 || position == 1 || position == mRecentAlbumsSize + 2 ?
manager.getSpanCount() : 1;
}
});
mRecyclerView.setLayoutManager(manager);
PlayNowAdapter adapter = new PlayNowAdapter(getActivity(), mActivityAlbums);
adapter.setOnItemClickListener(new AirAdapter.OnItemClickListener() {
@Override
public void onItemClicked(View view, int position) {
FragmentTransaction ft = getActivity()
.getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, AlbumFragment.newInstance(mActivityAlbums.get(correctPosition(position))));
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
});
mRecyclerView.setAdapter(adapter);
return rootView;
}
private int correctPosition(int position) {
if (position > mRecentAlbumsSize + 2) {
return position - 3;
} else {
return position - 2;
}
}
private class PlayNowAdapter extends AlbumAdapter {
public static final int TYPE_MESSAGE = 4;
public PlayNowAdapter(Context context, List<Album> list) {
super(context, list);
}
@Override
public int getItemViewType(int position) {
if (position == 0) return TYPE_HEADER;
if (position == 1) return TYPE_MESSAGE;
if (position == mRecentAlbumsSize + 2) return TYPE_MESSAGE;
if (position == 3 + getList().size()) return TYPE_FOOTER;
return TYPE_ITEM;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_MESSAGE) return onCreateMessageViewHolder(parent);
return super.onCreateViewHolder(parent, viewType);
}
@Override
public AirItemViewHolder onCreateItemViewHolder(ViewGroup parent) {
CardView itemView = (CardView) getLayoutInflater().inflate(
R.layout.recycler_item_album_three_pre_line, parent, false);
return new AlbumItemViewHolder(itemView);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof AirAdapter.AirItemViewHolder) {
AirItemViewHolder itemViewHolder = (AirItemViewHolder) holder;
super.onBindItemViewHolder(itemViewHolder, correctPosition(position) + 1);
return;
} else if (holder instanceof MessageViewHolder) {
onBindMessageViewHolder(holder, position);
return;
}
super.onBindViewHolder(holder, position);
}
public MessageViewHolder onCreateMessageViewHolder(ViewGroup parent) {
return new MessageViewHolder(getLayoutInflater().inflate(R.layout.recycler_item_message, parent, false));
}
public void onBindMessageViewHolder(RecyclerView.ViewHolder holder, int position) {
MessageViewHolder message = (MessageViewHolder) holder;
if (position == 1) {
message.textView.setText(R.string.title_text_recent_added);
} else if (position == mRecentAlbumsSize + 2) {
message.textView.setText(R.string.title_text_favour);
}
}
@Override
public AirFootViewHolder onCreateFootViewHolder(ViewGroup parent) {
return new AirFootViewHolder(newPaddingLayout(20));
}
private LinearLayout newPaddingLayout(int layoutHeight) {
LinearLayout linearLayout = new LinearLayout(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
(ViewGroup.LayoutParams.MATCH_PARENT, layoutHeight);
linearLayout.setLayoutParams(params);
return linearLayout;
}
@Override
public int getItemCount() {
return super.getItemCount() + 2;
}
private class MessageViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public MessageViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.title_text);
}
}
}
}