package com.simplecity.amp_library.ui.fragments;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.simplecity.amp_library.R;
import com.simplecity.amp_library.model.Song;
import com.simplecity.amp_library.playback.MusicService;
import com.simplecity.amp_library.utils.MusicServiceConnectionUtils;
import com.simplecity.amp_library.utils.MusicUtils;
import com.simplecity.amp_library.utils.PermissionUtils;
import java.util.ArrayList;
import java.util.List;
public class QueuePagerFragment extends BaseFragment implements
ViewPager.OnPageChangeListener,
RequestManagerProvider {
private final String TAG = "QueuePagerFragment";
private View mRootView;
private ViewPager mPager;
private ImagePagerAdapter mAdapter;
private RequestManager requestManager;
public static QueuePagerFragment newInstance() {
Bundle args = new Bundle();
QueuePagerFragment fragment = new QueuePagerFragment();
fragment.setArguments(args);
return fragment;
}
public QueuePagerFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MusicService.InternalIntents.META_CHANGED);
intentFilter.addAction(MusicService.InternalIntents.REPEAT_CHANGED);
intentFilter.addAction(MusicService.InternalIntents.SHUFFLE_CHANGED);
intentFilter.addAction(MusicService.InternalIntents.QUEUE_CHANGED);
getActivity().registerReceiver(mReceiver, intentFilter);
if (requestManager == null) {
requestManager = Glide.with(this);
}
}
@Override
public void onPause() {
if (getParentFragment() != null && getParentFragment() instanceof PlayerFragment) {
((PlayerFragment) getParentFragment()).setDragView(null);
}
super.onPause();
}
@Override
public void onResume() {
super.onResume();
if (getParentFragment() != null && getParentFragment() instanceof PlayerFragment) {
((PlayerFragment) getParentFragment()).setDragView(mRootView);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mRootView == null) {
mRootView = inflater.inflate(R.layout.fragment_queue_pager, container, false);
mPager = (ViewPager) mRootView.findViewById(R.id.pager);
resetAdapter();
}
return mRootView;
}
@Override
public void onDestroy() {
getActivity().unregisterReceiver(mReceiver);
super.onDestroy();
}
private void refreshAdapterItems() {
PermissionUtils.RequestStoragePermissions(() -> {
if (getActivity() != null && isAdded()) {
mAdapter.setData(MusicUtils.getQueue());
mPager.clearOnPageChangeListeners();
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(MusicUtils.getQueuePosition());
mPager.addOnPageChangeListener(this);
}
});
}
@Override
public RequestManager getRequestManager() {
return requestManager;
}
private static class ImagePagerAdapter extends FragmentStatePagerAdapter {
private List<Song> songs = new ArrayList<>();
ImagePagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
public void setData(List<Song> songs) {
this.songs.clear();
this.songs.addAll(songs);
notifyDataSetChanged();
}
public void clear() {
songs.clear();
notifyDataSetChanged();
}
@Override
public int getCount() {
return songs.size();
}
@Override
public Fragment getItem(int position) {
return ArtworkFragment.newInstance(songs.get(position));
}
}
public void updateQueuePosition() {
if (mPager == null) {
return;
}
mPager.clearOnPageChangeListeners();
mPager.setCurrentItem(MusicUtils.getQueuePosition(), true);
mPager.addOnPageChangeListener(this);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
int oldPos = MusicUtils.getQueuePosition();
if (position > oldPos) {
MusicUtils.next();
} else if (position < oldPos) {
MusicUtils.previous(false);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
switch (action) {
case MusicService.InternalIntents.META_CHANGED:
updateQueuePosition();
break;
case MusicService.InternalIntents.REPEAT_CHANGED:
case MusicService.InternalIntents.SHUFFLE_CHANGED:
case MusicService.InternalIntents.QUEUE_CHANGED:
resetAdapter();
break;
}
}
};
public void resetAdapter() {
if (MusicServiceConnectionUtils.sServiceBinder != null) {
mAdapter = new ImagePagerAdapter(getChildFragmentManager());
refreshAdapterItems();
}
}
@Override
protected String screenName() {
return TAG;
}
}