/** Copyright (C) 2013 Louis Teboul (a.k.a Androguide) * * admin@pimpmyrom.org || louisteboul@gmail.com * http://pimpmyrom.org || http://androguide.fr * 71 quai Clémenceau, 69300 Caluire-et-Cuire, FRANCE. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. **/ package com.androguide.apkreator.fragments; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.LinearLayout; import com.androguide.apkreator.R; import com.androguide.apkreator.helpers.Helpers; import com.androguide.apkreator.helpers.youtube.GetYouTubeUserVideosTask; import com.androguide.apkreator.helpers.youtube.Library; import com.androguide.apkreator.helpers.youtube.PlayVideo; import com.androguide.apkreator.helpers.youtube.Video; import com.androguide.apkreator.pluggable.parsers.ParserInterface; import com.fima.cardsui.objects.CardStack; import com.fima.cardsui.views.CardLoadMore; import com.fima.cardsui.views.CardUI; import com.fima.cardsui.views.CardYoutube; import java.util.ArrayList; /** * Every tab in the application contains an instance of this unique Fragment * Object. I send & retrieve the desired position of the tab which each * PluginFragment instance should belong to via the Activity Bundle. This * 0-based index also determines which XML plugin file the PluginFragment * instance will load (tab0.xml, tab1.xml, tab2.xml etc...) * * @see com.androguide.apkreator.MainActivity */ public class YouTubeFragment extends Fragment implements ParserInterface { public static LinearLayout ll; private static ActionBarActivity fa; private static CardUI mCardUI; private static SharedPreferences mPrefs; private static String mYoutubeUser; private static int mLastIndex = 0, mTotalItems; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); fa = (ActionBarActivity) super.getActivity(); fa.setSupportProgressBarIndeterminateVisibility(true); ll = (LinearLayout) inflater.inflate( com.androguide.apkreator.R.layout.cardsui, container, false); mPrefs = fa.getSharedPreferences("CONFIG", 0); mYoutubeUser = mPrefs.getString("YOUTUBE_USER", ""); mCardUI = (CardUI) ll .findViewById(com.androguide.apkreator.R.id.cardsui); mCardUI.addStack(new CardStack(""), true); new Thread(new GetYouTubeUserVideosTask(responseHandler, mYoutubeUser, 1, 50)).start(); mLastIndex = 50; mPrefs.edit().putInt("LAST_INDEX", mLastIndex).commit(); return ll; } @Override public void onResume() { super.onResume(); } @Override public void onPause() { super.onPause(); } @Override public void onDestroy() { super.onDestroy(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.youtube_menu, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.subscribe) Helpers.openUrl(fa, "http://youtube.com/user/" + mYoutubeUser); return super.onOptionsItemSelected(item); } public static Handler responseHandler = new Handler() { public void handleMessage(Message msg) { Library lib; final int lastPos = mCardUI.getLastCardStackPosition(); try { // noinspection ConstantConditions lib = (Library) msg.getData().get( GetYouTubeUserVideosTask.LIBRARY); mTotalItems = msg.getData().getInt("TOTAL_ITEMS"); Log.e("TOTAL_ITEMS", "TOTAL ITEMS: " + mTotalItems); ArrayList<Video> list = (ArrayList<Video>) lib.getVideos(); for (Video aList : list) { final String videoId = aList.getUrl() .replace("https://m.youtube.com/details?v=", ""); final String videoTitle = aList.getTitle(); final String videoDesc = aList.getDescription(); final String videoDate = aList.getUploaded(); final int videoLength = aList.getDuration(); final int videoRating = aList.getRating(); final int videoLikes = aList.getLikes(); final int videoComments = aList.getComments(); final CardYoutube card = new CardYoutube( videoTitle, videoDesc, mPrefs.getString("APP_COLOR", "#96AA39"), aList.getThumbUrl(), aList.getDuration(), videoRating, videoLikes, videoComments ); mCardUI.addAsyncCard(card, false, fa); card.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(fa, PlayVideo.class); mPrefs.edit() .putString("VIDEO_TO_PLAY", videoId) .putString("VIDEO_TITLE", videoTitle) .putString("VIDEO_DESCRIPTION", videoDesc) .putInt("VIDEO_LENGTH", videoLength) .putInt("VIDEO_RATING", videoRating) .putInt("VIDEO_LIKES", videoLikes) .putInt("VIDEO_COMMENTS", videoComments) .commit(); fa.startActivity(intent); } }); } mCardUI.refresh(); final CardLoadMore loadMore = new CardLoadMore("Load More...", "", fa); loadMore.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { fa.setSupportProgressBarIndeterminateVisibility(true); if (mLastIndex + 50 <= mTotalItems) { mCardUI.getLastStack().remove(0); new Thread(new GetYouTubeUserVideosTask(responseHandler, mPrefs.getString("YOUTUBE_USER", ""), mLastIndex + 1, 50)).start(); mLastIndex += 50; } else { mCardUI.getLastStack().remove(0); int toAdd = mTotalItems - mLastIndex; new Thread(new GetYouTubeUserVideosTask(responseHandler, mPrefs.getString("YOUTUBE_USER", ""), mLastIndex + 1, toAdd)).start(); mLastIndex += toAdd; } } }); mCardUI.addCard(loadMore, true); } catch (Exception e) { Log.e("Exception", e.getMessage() + ""); } fa.setSupportProgressBarIndeterminateVisibility(false); } }; }