Directoris.java 5.89 KB
package com.upc.pbe.upcnews;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

//Segona Activity, mostra els directoris i arxius del servidor
public class Directoris extends Activity implements OnItemClickListener
{

	final static String TAG = "Directoris";
	private String URL, currentFolder;
	private HTMLParser parser;

	public void onCreate(Bundle savedInstanceState)
	{
		// Creem el layout
		Log.d(TAG, "onCreated");
		super.onCreate(savedInstanceState);
		// Passem del layout anterior al actual
		setContentView(R.layout.dirs);
		// Canviem la direccio de la URL a la actual
		currentFolder = ((UpcApp) getApplication()).getUrl() + "/";
		URL = currentFolder;
		// Creem un HTMLParser
		parser = new HTMLParser(URL);
		// Fem una llista ListView i la omplim amb la informacio trobada
		((ListView) findViewById(R.id.listView1)).setOnItemClickListener(this);
		this.showResources();
	}

	public void showResources()
	{
		// Actualitza la informacio que mostra la ListView a mesura que ens
		// desplacem pels directoris
		ArrayList<String> entries;
		Descarrega d = new Descarrega(this);
		try
		{
			d.execute(new URL(currentFolder));
			entries = parser.parse(d.get());
			this.createEntries(entries);
		}
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
		catch (ExecutionException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			// Nunca llegara aqui la cosa, y si lo hace ES CULPA DEL SERVIDOR!!
		}
	}

	public void createEntries(ArrayList<String> directories)
	{
		// Crea les entrades de la ListView
		String[] entries = directories.toArray(new String[directories.size()]);
		ListView listView = (ListView) findViewById(R.id.listView1);
		listView.setAdapter(null);
		ResourceAdapter adapter = new ResourceAdapter(this, R.layout.rowlayout, entries);
		listView.setAdapter(adapter);
	}

	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		//Determina el funcionament al clickar en una de les entrades de al ListView
		String path = ((TextView)((RelativeLayout)view).findViewById(R.id.rowTextView)).getText().toString();
		//Si es un m3u8, el descarrega, parseja i inicia la reproduccio
		if(path.endsWith(".m3u8"))
		{
			path = currentFolder + path;
			String playlist;
			try
			{
					Descarrega d = new Descarrega(this);
					//Descarreguem m3u8
					d.execute(new URL(path));
					playlist = d.get();
					Parser p = new Parser(path.substring(0, path.lastIndexOf("/") + 1), this);
					try
					{
						//Parsing m3u8
						ArrayList<ParentList> m3u8parsed = p.parseFile(playlist);
						Log.d(TAG, "Parsing completat");
						//Creem un gestor HLS
						HLS h = new HLS(m3u8parsed,((UpcApp)getApplication()).getLocalPath());
						((UpcApp)getApplication()).setHLS(h);
						//Iniciem la reproduccio
						Intent mIntent = new Intent(this, VideoActivity.class);
						if(((UpcApp)getApplication()).getHLS() != null) 
						{
							startActivity(mIntent);
						}
						else 
						{
							Toast.makeText(this, "Error en gestor HLS", Toast.LENGTH_LONG).show();
						}
					}
					catch (ErrorException e)
					{
						Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
						Log.d(TAG, e.getMessage());
					}	
					catch (WarningException e)
					{
						Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
						Log.d(TAG, e.getMessage());
					}
					catch (InfoException e)
					{
						Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
						Log.d(TAG, e.getMessage());
					}
				}
				catch (IOException e1)
				{
					// Nunca llegara aqui la cosa, y si lo hace ES CULPA DEL SERVIDOR!!
				}
				catch (InterruptedException e1)
				{
					e1.printStackTrace();
				}
				catch (ExecutionException e1)
				{
					e1.printStackTrace();
				}
			}
		//Si es una carpeta, hi entra i mostra el seu contingut
		else
		{
			if(!path.startsWith("http://"))
			{
				currentFolder += path;
			}
			else
			{
				currentFolder = path;
			}
			showResources();
		}
	}

	public boolean onKeyDown(int keyCode, KeyEvent event)
	{
		// Determina el funcionament al apretar la tecla de tornar enrere
		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
		{
			if (currentFolder.equals(URL))
			{
				super.finish();
				return true;
			}
			currentFolder = currentFolder.substring(0, currentFolder.length() - 1);
			currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf("/") + 1);
			showResources();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Determina el funcionament al apretar la tecla d'opcions
		getMenuInflater().inflate(R.menu.menu, menu);
		Log.d(TAG, "Menu");
		return true;
	}

	public boolean onOptionsItemSelected(MenuItem item)
	{
		// Determina el funcionament al clickar en el menu d'opcions
		switch (item.getItemId())
		{
		case R.id.itemprefs:
			startActivity(new Intent(this, Prefs.class));
			Log.d(TAG, "Preferencies");
			return true;
		case R.id.itemhelp:
			startActivity(new Intent(this, Help.class));
			Log.d(TAG, "Help");
			return true;
		default:
			return false;
		}
	}
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
	}
}