AndroidFileBrowser.java :  » App » mycollectionpro » com » app » my_collection » Android Open Source

Android Open Source » App » mycollectionpro 
mycollectionpro » com » app » my_collection » AndroidFileBrowser.java
package com.app.my_collection;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class AndroidFileBrowser extends ListActivity implements Runnable {

  private enum DISPLAYMODE {
    ABSOLUTE, RELATIVE;
  }

  private final DISPLAYMODE displayMode = DISPLAYMODE.ABSOLUTE;
  private final int TITLE_INDEX = 0;
  private final int RATING_INDEX = 1;
  private final int CATEGORY_INDEX = 2;
  private final int STATUS_INDEX = 3;
  private final int TYPE_INDEX = 4;
  private final int SUBTYPE_INDEX = 5;
  private final int RANK_INDEX = 6;
  private final int UPC_INDEX = 7;
  private final int ARTIST_INDEX = 1;
  private final int AUTHOR_INDEX = 1;
  private final int YEAR_INDEX = 8;
  private List<String> directoryEntries = new ArrayList<String>();
  private File currentDirectory = new File("/");
  private Context _context;
  ProgressDialog pd;
  private File _selectedFile = null;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setTitle(R.string.title_import_file);
    _context = this.getApplicationContext();
    // setContentView() gets called within the next line,
    // so we do not need it here.
    browseToRoot();
  }

  /**
   * This function browses to the root-directory of the file-system.
   */
  private void browseToRoot() {
    browseTo(new File("/"));
  }

  /**
   * This function browses up one level according to the field:
   * currentDirectory
   */
  private void upOneLevel() {
    if (this.currentDirectory.getParent() != null)
      this.browseTo(this.currentDirectory.getParentFile());
  }

  private void browseTo(final File aDirectory) {
    if (aDirectory.isDirectory()) {
      this.currentDirectory = aDirectory;
      fill(aDirectory.listFiles());
    }
  }

  /**
   * Fills the array to pass off to the ArrayAdapter
   * 
   * @param files
   *            A list of files to display in a ListView
   */
  private void fill(File[] files) {
    this.directoryEntries.clear();

    // Add the "." and the ".." == 'Up one level'
    try {
      Thread.sleep(10);
    } catch (InterruptedException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    this.directoryEntries.add(".");

    if (this.currentDirectory.getParent() != null)
      this.directoryEntries.add("..");

    switch (this.displayMode) {
    case ABSOLUTE:
      for (File file : files) {
        this.directoryEntries.add(file.getPath());
      }
      break;
    case RELATIVE: // On relative Mode, we have to add the current-path to
      // the beginning
      int currentPathStringLenght = this.currentDirectory
          .getAbsolutePath().length();
      for (File file : files) {
        this.directoryEntries.add(file.getAbsolutePath().substring(
            currentPathStringLenght));
      }
      break;
    }

    ArrayAdapter<String> directoryList = new ArrayAdapter<String>(this,
        R.layout.file_row, this.directoryEntries);

    this.setListAdapter(directoryList);
  }

  /**
   * 
   */
  @Override
  protected void onListItemClick(ListView l, View v, int position, long id) {
    int selectionRowID = (int) this.getSelectedItemId();
    String selectedFileString = this.directoryEntries.get(selectionRowID);
    if (selectedFileString.equals(".")) {
      // Refresh
      this.browseTo(this.currentDirectory);
    } else if (selectedFileString.equals("..")) {
      this.upOneLevel();
    } else {
      File clickedFile = null;
      switch (this.displayMode) {
      case RELATIVE:
        clickedFile = new File(this.currentDirectory.getAbsolutePath()
            + this.directoryEntries.get(selectionRowID));
        break;
      case ABSOLUTE:
        clickedFile = new File(this.directoryEntries
            .get(selectionRowID));
        break;
      }
      if (clickedFile != null)
        if(clickedFile.isDirectory())
        {
          this.browseTo(clickedFile);
        } else {
          startImport(clickedFile);
        }
      
    }
  }//End of onItemClick

  private void startImport(File file) {
    pd = ProgressDialog.show(this, "Importing...",
        "Please wait while we load the movies", true, false);
    Thread td = new Thread(this);
    _selectedFile = file;
    td.start();
  }

  /**
   * This method parses data from the selected CSV file and inserts the data
   * into the movie table.
   * 
   * @param filePath The path to the CSV file
   */
  private void ImportData(File filePath) {
    FileReader fis = null;
    BufferedReader br = null;
    MoviesDbAdapter dbAdapter = null;
    try {
      dbAdapter = new MoviesDbAdapter(_context);
      dbAdapter.open();
      
      CsvReader reader = new CsvReader(filePath.toString(), ',');
      reader.setTextQualifier('"');
      while (reader.readRecord()) {
        
        if (reader.getColumnCount() >= 8) {
          try {
            String type = (reader.get(TYPE_INDEX) != null)?reader.get(TYPE_INDEX).trim().toUpperCase():"";
            if(type.equals("MOVIE") || type.equals("GAME")) {
              dbAdapter.createMovie(
                reader.get(TITLE_INDEX)
                ,reader.get(RATING_INDEX)
                ,dbAdapter.fetchCategoryIdByNameType(reader.get(CATEGORY_INDEX), reader.get(TYPE_INDEX))
                ,reader.get(STATUS_INDEX)
                ,reader.get(TYPE_INDEX)
                ,reader.get(SUBTYPE_INDEX)
                ,Integer.parseInt(reader.get(RANK_INDEX))
                ,reader.get(UPC_INDEX)
                ,null
                ,null
                ,null
                ,null
                ,(reader.getColumnCount() > 8)?reader.get(YEAR_INDEX):""
                ,""
              );
            } else if(type.equals("CD")) {
              dbAdapter.createMovie(
                reader.get(TITLE_INDEX)
                ,reader.get(RATING_INDEX)
                ,dbAdapter.fetchCategoryIdByNameType(reader.get(CATEGORY_INDEX), reader.get(TYPE_INDEX))
                ,reader.get(STATUS_INDEX)
                ,reader.get(TYPE_INDEX)
                ,reader.get(SUBTYPE_INDEX)
                ,Integer.parseInt(reader.get(RANK_INDEX))
                ,reader.get(UPC_INDEX)
                ,null
                ,null
                ,reader.get(ARTIST_INDEX)
                ,null
                ,(reader.getColumnCount() > 8)?reader.get(YEAR_INDEX):""
                ,""
              );
            } else if(type.equals("BOOK")) {
              dbAdapter.createMovie(
                reader.get(TITLE_INDEX)
                ,reader.get(RATING_INDEX)
                ,dbAdapter.fetchCategoryIdByNameType(reader.get(CATEGORY_INDEX), reader.get(TYPE_INDEX))
                ,reader.get(STATUS_INDEX)
                ,reader.get(TYPE_INDEX)
                ,reader.get(SUBTYPE_INDEX)
                ,Integer.parseInt(reader.get(RANK_INDEX))
                ,reader.get(UPC_INDEX)
                ,null
                ,null
                ,null
                ,reader.get(AUTHOR_INDEX)
                ,(reader.getColumnCount() > 8)?reader.get(YEAR_INDEX):""
                ,""
              );
            }
          } catch(Exception ex) {
            android.util.Log.v("IMPORT ERROR", ex.getMessage());
          }
        }
      }
    } catch (IOException ioe) {
      // DO NOTHING
    } finally {
      try {
        if (br != null) {
          br.close();
        }
        if (fis != null) {
          fis.close();
        }
        if (dbAdapter != null) {
          dbAdapter.close();
        }
      } catch (IOException ex) {
        // DO NOTHING
      }
    }
  }// End if method ImportData(File)

  public void run() {
    ImportData(_selectedFile);
    handler.sendEmptyMessage(0);
  }// End of method private void run()

  public Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      pd.dismiss();
      setResult(RESULT_OK);
      finish();
    }
  };

}// End of class AndroidFileBrowser
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.