package io.codetail.fragments.mover;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.ShareCompat;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import java.util.List;
import io.codetail.adapters.WatchMeAdapterNew;
import io.codetail.client.models.Video;
import io.codetail.client.mover.FetchAvailableVideoQualities;
import io.codetail.client.mover.Mover;
import io.codetail.fragments.WatchMeRecycleFragment;
import io.codetail.recycle.ItemClickSupport;
import io.codetail.watchme.R;
import io.codetail.work.JobManager;
public abstract class MoverRecycleFragment extends WatchMeRecycleFragment
implements ItemClickSupport.OnItemClickListener, ItemClickSupport.OnItemLongClickListener{
WatchMeAdapterNew mWatchMeAdapter;
int mSelectedVideoPosition;
AlertDialog mDialog;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mWatchMeAdapter = getWatchMeAdapter();
}
public void onSuggestionAvailable(final Mover.Suggestion suggestion){
List<String> qualities = suggestion.getAvailableQuality();
CharSequence[] items = new CharSequence[qualities.size()];
Resources resources = getResources();
for (int i = qualities.size() - 1; i >= 0; i--) {
int resId = resources.getIdentifier(
"mover_video_quality_"+qualities.get(i), "string",
getActivity().getPackageName());
items[i] = getText(resId);
}
mDialog = new AlertDialog.Builder(getActivity())
.setTitle(R.string.choose_video_quality)
.setCancelable(true)
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
CharSequence text = (CharSequence)
mDialog.getListView().getAdapter().getItem(which);
if (text.equals(getString(R.string.mover_video_quality_b))) {
openVideo("b", suggestion.getPosition());
} else if (text.equals(getString(R.string.mover_video_quality_m))) {
openVideo("m", suggestion.getPosition());
} else if (text.equals(getString(R.string.mover_video_quality_s))) {
openVideo("s", suggestion.getPosition());
}
}
})
.show();
}
public void openVideo(String quality, String id){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(Mover.MoverVideo.createVideoLink(id, quality)), "video/mp4");
startActivity(Intent.createChooser(intent, "Watch"));
}
public abstract JobManager getJobManager();
@Override
public void onItemClick(RecyclerView parent, View view, int position, long id) {
int viewType = mWatchMeAdapter.getItemViewType(position);
switch (viewType){
case WatchMeAdapterNew.TYPE_VIDEO_LAST:
case WatchMeAdapterNew.TYPE_VIDEO:
Video video = (Video) mWatchMeAdapter.getItem(position);
Toast.makeText(getActivity(), R.string.please_wait_until_qualities_not_fetched, Toast.LENGTH_SHORT).show();
getJobManager().addJob(new FetchAvailableVideoQualities(video.getId()));
break;
case WatchMeAdapterNew.TYPE_MORE:
mWatchMeAdapter.displayAllSectionItems(position);
break;
}
}
private final PopupMenu.OnMenuItemClickListener mOnMenuItemClickListener = new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.share:
Video video = ((WatchMeAdapterNew.WatchMeHolder) getRecycleView()
.findViewHolderForPosition(mSelectedVideoPosition)).getObject();
ShareCompat.IntentBuilder.from(getActivity())
.setChooserTitle(R.string.abc_shareactionprovider_share_with)
.setType("text/plain")
.setText(getString(R.string.sharing_video_template, video.getTitle(), video.getLinkForShare()))
.startChooser();
return true;
default:
return false;
}
}
};
@Override
public boolean onItemLongClick(RecyclerView parent, View view, int position, long id) {
int viewType = mWatchMeAdapter.getItemViewType(position);
switch (viewType){
case WatchMeAdapterNew.TYPE_HEADER_FIRST:
getJobManager().addJob(new FetchAvailableVideoQualities("p3xpwfHm"));
return true;
case WatchMeAdapterNew.TYPE_VIDEO:
case WatchMeAdapterNew.TYPE_VIDEO_LAST:
mSelectedVideoPosition = position;
PopupMenu popupMenu = new PopupMenu(view.getContext(), view, Gravity.TOP);
popupMenu.setOnMenuItemClickListener(mOnMenuItemClickListener);
popupMenu.inflate(R.menu.video_item_menu);
popupMenu.show();
return true;
}
return false;
}
}