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 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 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 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); } }