com.androguide.apkreator.fragments.YouTubeFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.androguide.apkreator.fragments.YouTubeFragment.java

Source

/**   Copyright (C) 2013  Louis Teboul (a.k.a Androguide)
 *
 *    admin@pimpmyrom.org  || louisteboul@gmail.com
 *    http://pimpmyrom.org || http://androguide.fr
 *    71 quai Clmenceau, 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);
        }
    };

}