package com.yt.fragments;
import java.io.File;
import java.util.ArrayList;
import yt.sdk.jar.player.PlayerActivity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.LinearLayout;
import com.ytsdk.testapp.stp.R;
import com.yt.activities.YTSDKUtils;
import com.yt.activities.adapters.DownloadedListAdapter;
import com.yt.application.GlobalAppData;
import com.yt.common.utils.ConnectionChecker;
import com.yt.common.utils.MyLog;
import com.yt.item.VideoItem;
public class DownloadListFragment extends Fragment {
private static final String KEY_CONTENT = "ItemListFragment:Items";
private static final String KEY_FILE_NAME = "ItemListFragment:fileName";
private File currentDirectory = new File("/");
// public static final String VIDEO_DIR_PATH = "/YT Videos/";
private GridView mGridView;
private Button mRefreshButton;
LinearLayout progressBar;
DownloadedListAdapter mListAdapter;
ArrayList<VideoItem> downloadedList = new ArrayList<VideoItem>();
private static DownloadListFragment thisPointer;
private int position;
private AutoCompleteTextView mEditText;
private Button mSearchButton;
public static DownloadListFragment getInstance(int position) {
// if (gridFragent == null) {
thisPointer = new DownloadListFragment();
// }
Bundle args = new Bundle();
args.putInt("position", position);
thisPointer.setArguments(args);
return thisPointer;
}
@Override
public void onCreate(Bundle savedInstanceState) {
restoreData(savedInstanceState);
Bundle bundle = this.getArguments();
if (bundle != null) {
this.position = bundle.getInt("position");
}
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_downloaded_video,
container, false);
progressBar = (LinearLayout) view.findViewById(R.id.loadingPanel);
mGridView = (GridView) view.findViewById(R.id.list);
mRefreshButton = (Button) view.findViewById(R.id.refreshButton);
mRefreshButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
refreshList();
}
});
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new GetVideoListFromYouTube().execute();
}
public void onListItemClick(GridView g, View v, int position, long id) {
GlobalAppData.numItemClicked++;
Intent intent = new Intent(getActivity(), PlayerActivity.class);
intent.putExtra("path", downloadedList.get(position).getLocalPath());
startActivityForResult(intent, 3);
}
private void restoreData(Bundle savedInstanceState) {
if ((savedInstanceState != null)
&& savedInstanceState.containsKey(KEY_CONTENT)) {
downloadedList = (ArrayList<VideoItem>) savedInstanceState
.get(KEY_CONTENT);
position = savedInstanceState.getInt(KEY_FILE_NAME);
}
}
private void refreshList() {
new GetVideoListFromYouTube().execute();
}
private class GetVideoListFromYouTube extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
mGridView.setVisibility(View.GONE);
}
@Override
protected Void doInBackground(Void... params) {
if (downloadedList == null) {
downloadedList = new ArrayList<VideoItem>();
} else {
downloadedList.clear();
}
browseToRoot();
return null;
}
@Override
protected void onPostExecute(Void params) {
// Cancel the Loading Dialog
progressBar.setVisibility(View.GONE);
addVideoList(downloadedList);
}
}
/**
* This function browses to the root-directory of the file-system.
*/
private void browseToRoot() {
File f = new File(Environment.getExternalStorageDirectory() + "/"
+ YTSDKUtils.getYTSDK().getDownloadFolderPath() + "/");
System.out.println(f.getAbsolutePath());
browseTo(f);
}
private void browseTo(final File aDirectory) {
if (!aDirectory.exists()) {
aDirectory.mkdirs();// Create Directory if doesnt Exists
}
if (aDirectory.isDirectory()) {
this.currentDirectory = aDirectory;
fill(aDirectory.listFiles());
return;
}
}
private void fill(File[] files) {
if (files == null || files.length == 0) {
return;
}
// Add the "." and the ".." == 'Up one level'
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int currentPosOfFileName = this.currentDirectory.getAbsolutePath()
.length() + 1;
for (File file : files) {
VideoItem videoItem = new VideoItem();
int fileLength = file.getAbsolutePath().length();
videoItem.setTitle(file.getAbsolutePath().substring(
currentPosOfFileName, fileLength));
videoItem.setLocalPath(file.getPath());
downloadedList.add(videoItem);
}
}
private void addVideoList(ArrayList<VideoItem> videoList) {
if (videoList == null || videoList.size() == 0) {
if (!progressBar.isShown()) {
// Show Error Msg
// mErrorTextView.setText("No Videos Found!");
// mErrorTextView.setVisibility(View.VISIBLE);
}
return;
}
// mErrorTextView.setVisibility(View.GONE);
downloadedList = videoList;
mListAdapter = new DownloadedListAdapter(getActivity(), downloadedList,
position, R.layout.grid_item);
if (mGridView != null) {
mGridView.setAdapter(mListAdapter);
}
mGridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View view,
int position, long id) {
onListItemClick((GridView) parent, view, position, id);
}
});
// }
// This has to run only at fist time from next the on scroll down will
// run
if (!downloadedList.isEmpty()) {
mGridView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
// public String getRawData() {
// String result = "";
// try {
//
// InputStream is = null;
// if (position == 0) {
// is = getResources().openRawResource(R.raw.devanagari);
// } else {
// is = getResources().openRawResource(R.raw.english);
// }
//
// ZipInputStream zis = new ZipInputStream(is);
// ZipEntry ze = zis.getNextEntry();
//
// ByteArrayOutputStream out = new ByteArrayOutputStream();
// if (ze != null) {
// byte[] buffer = new byte[4 * 1024];
// int len;
// while ((len = zis.read(buffer)) > 0) {
// out.write(buffer, 0, len);
// }
// }
// result = new String(out.toByteArray(), "UTF-8");
//
// } catch (Exception e) {
// MyLog.Log(e.getMessage());
// }
//
// return result;
//
// }
private boolean isConnectivityPresent() {
ConnectivityManager cm = (ConnectivityManager) getActivity()
.getSystemService(Context.CONNECTIVITY_SERVICE);
ConnectionChecker connectionChecker = new ConnectionChecker(
getActivity(), cm, getActivity());
if (MyLog.disableConnectionCheckForDebug) {
return true;
}
if (connectionChecker.isOnline()) {
return true;
} else {
showConnectivityErrorDialog();
return false;
}
}
private void showConnectivityErrorDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setCancelable(true);
builder.setIcon(null);
builder.setTitle(null);
builder.setMessage(getActivity().getString(R.string.enablewifiMsg));
builder.setInverseBackgroundForced(true);
builder.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent settingPage = new Intent(
android.provider.Settings.ACTION_SETTINGS);
getActivity().startActivityForResult(settingPage, 0);
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}