package com.abewy.android.apps.klyph.fragment; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.abewy.android.apps.klyph.KlyphApplication; import com.abewy.android.apps.klyph.KlyphDownloadManager; import com.abewy.android.apps.klyph.R; import com.abewy.android.apps.klyph.adapter.MultiObjectAdapter; import com.abewy.android.apps.klyph.adapter.SpecialLayout; import com.abewy.android.apps.klyph.core.fql.Video; import com.abewy.android.apps.klyph.core.graph.GraphObject; import com.abewy.android.apps.klyph.core.request.Response; import com.abewy.android.apps.klyph.core.util.AttrUtil; import com.abewy.android.apps.klyph.request.AsyncRequest; import com.abewy.android.apps.klyph.request.AsyncRequest.Query; import com.abewy.android.apps.klyph.widget.KlyphGridView; import com.abewy.util.Android; public class AlbumVideos extends KlyphFragment2 { public interface ElementVideosListener { public void onVideoSelected(Fragment fragment, Video video); } private ElementVideosListener listener; public AlbumVideos() { setRequestType(Query.ALBUM_VIDEOS); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { setListVisible(false); setRequestType(Query.ALBUM_VIDEOS); super.onViewCreated(view, savedInstanceState); getGridView().setAdapter(new MultiObjectAdapter(getListView(), SpecialLayout.GRID)); defineEmptyText(R.string.empty_list_no_video); } @Override protected int getNumColumn() { return getResources().getInteger(R.integer.klyph_grid_album_photos_num_column); } @Override protected int getCustomLayout() { return R.layout.grid_simple; } @Override public void onGridItemClick(KlyphGridView gridView, View v, int position, long id) { Video video = (Video) getAdapter().getItem(position); listener.onVideoSelected(AlbumVideos.this, video); } @Override protected void populate(List<GraphObject> data) { super.populate(data); if (data.size() > 0 && requestHasMoreData()) { setNoMoreData(false); Video lastPhoto = (Video) data.get(data.size() - 1); setOffset(lastPhoto.getCreated_time()); } else { setNoMoreData(true); } Log.d("AlbumVideos", "empty view " + getGridView().getEmptyView()); } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { listener = (ElementVideosListener) activity; } catch (ClassCastException e) { // The activity doesn't implement the interface, throw exception throw new ClassCastException(activity.toString() + " must implement ElementVideosListener"); } } @Override public void onPrepareOptionsMenu(Menu menu) { if (Android.isMinAPI(9) && menu.findItem(R.id.menu_download) == null) { menu.add(Menu.NONE, R.id.menu_download, 2, R.string.menu_download) .setIcon(AttrUtil.getResourceId(getActivity(), R.attr.downloadIcon)) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_download) { downloadAlbum(); } return super.onOptionsItemSelected(item); } private void downloadAlbum() { if (hasNoMoreData() == false) { Toast.makeText(getActivity(), R.string.fetch_videos_from_album, Toast.LENGTH_SHORT).show(); new AsyncRequest(Query.ALBUM_VIDEOS_ALL, getElementId(), "", new AsyncRequest.Callback() { @Override public void onComplete(Response response) { if (response.getError() == null) { downloadAlbum(response.getGraphObjectList()); } } }).execute(); } else { List<GraphObject> videos = new ArrayList<GraphObject>(); for (GraphObject graphObject : getAdapter().getItems()) { videos.add(graphObject); } downloadAlbum(videos); } } private void downloadAlbum(List<GraphObject> videos) { int n = videos.size(); for (int i = 0; i < n; i++) { Video video = (Video) videos.get(i); String url = video.getSrc_hq(); if (url != null) { boolean notifOnComplete = i == n - 1; KlyphDownloadManager.downloadPhoto(KlyphApplication.getInstance(), url, video.getVid(), video.getDescription(), true, notifOnComplete); } } } @Override public void onDestroy() { super.onDestroy(); listener = null; } }