Android Open Source - android-file-picker File Chooser Dialog






From Project

Back to project page android-file-picker.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project android-file-picker listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * ?Copyright 2013 Jose F. Maldonado?/* w w w . j  av  a2s  . com*/
 *
 *  This file is part of aFileDialog.
 *
 *  aFileDialog is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published 
 *  by the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  aFileDialog 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 Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with aFileDialog. If not, see <http://www.gnu.org/licenses/>.
 */

package org.bakchuda.android.filePicker;

import java.io.File;
import java.util.LinkedList;
import java.util.List;

import org.bakchuda.android.filePicker.R;

import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;

/**
 * A file chooser implemented in a Dialog. 
 */
public class FileChooserDialog extends Dialog implements FileChooser {

  // ----- Attributes ----- //
  
  /**
   * The core of this file chooser.
   */
  private FileChooserCore core;
  
  /**
   * The listeners for the event of select a file.
   */
  private List<OnFileSelectedListener> listeners;
  
  // ----- Constructors ----- //
  
  /**
   * Creates a file chooser dialog which, by default, lists all the files in the SD card.
   * 
   * @param context The current context.
   */
  public FileChooserDialog(Context context) {
    this(context, null);
  }

  /**
   * Creates a file chooser dialog which lists all the file of a particular folder.
   * 
   * @param context The current context.
   * @param folderPath The folder which files are going to be listed.
   */
  public FileChooserDialog(Context context, String folderPath) {
    // Call superclass constructor.
    super(context);
        
    // Set layout.
    this.setContentView(R.layout.daidalos_file_chooser);

    // Maximize the dialog.
        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
        lp.copyFrom(this.getWindow().getAttributes());
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        this.getWindow().setAttributes(lp);
        
        // By default, load the SD card files.
        this.core = new FileChooserCore(this);
        this.core.loadFolder(folderPath);
        
        // Initialize attributes.
        this.listeners = new LinkedList<OnFileSelectedListener>();
    
    // Set the background color.
        LinearLayout layout = (LinearLayout) this.findViewById(R.id.rootLayout);
        layout.setBackgroundColor(context.getResources().getColor(R.color.daidalos_backgroud));
                
        // Add a listener for when a file is selected.
        core.addListener(new FileChooserCore.OnFileSelectedListener() {
      public void onFileSelected(File folder, String name) {
        // Call to the listeners.
        for(int i=0; i<FileChooserDialog.this.listeners.size(); i++) {
          FileChooserDialog.this.listeners.get(i).onFileSelected(FileChooserDialog.this, folder, name);
        }
      }
      public void onFileSelected(File file) {
        // Call to the listeners.
        for(int i=0; i<FileChooserDialog.this.listeners.size(); i++) {
          FileChooserDialog.this.listeners.get(i).onFileSelected(FileChooserDialog.this, file);
        }
      }
    });
  }
  
    // ----- Events methods ----- //

  /**
   * Add a listener for the event of a file selected.
   * 
   * @param listener The listener to add.
   */
  public void addListener(OnFileSelectedListener listener) {
    this.listeners.add(listener);
  }
  
  /**
   * Removes a listener for the event of a file selected.
   * 
   * @param listener The listener to remove.
   */
  public void removeListener(OnFileSelectedListener listener) {
    this.listeners.remove(listener);
  }
  
  /**
   * Removes all the listeners for the event of a file selected.
   */
  public void removeAllListeners() {
    this.listeners.clear();
  }
  
  /**
   * Interface definition for a callback to be invoked when a file is selected. 
   */
  public interface OnFileSelectedListener {
    /**
     * Called when a file has been selected.
     * 
     * @param file The file selected.
     */
    void onFileSelected(Dialog source, File file);
    
    /**
     * Called when an user wants to be create a file.
     * 
     * @param folder The file's parent folder.
     * @param name The file's name.
     */
    void onFileSelected(Dialog source, File folder, String name);
  }
  
  // ----- Miscellaneous methods ----- //
  
  
  /**
   * Set a regular expression to filter the files that can be selected.
   * 
   * @param filter A regular expression.
   */
  public void setFilter(String filter) {
    this.core.setFilter(filter);
  }
  
  /**
   * Defines if only the files that can be selected (they pass the filter) must be show.
   * 
   * @param show 'true' if only the files that can be selected must be show or 'false' if all the files must be show.
   */
  public void setShowOnlySelectable(boolean show) {
    this.core.setShowOnlySelectable(show);
  }
  
  /**
   * Loads all the files of the SD card root.
   */
  public void loadFolder() {
    this.core.loadFolder();
  }
  
  /**
   * Loads all the files of a folder in the file chooser.
   * 
   * If no path is specified ('folderPath' is null) the root folder of the SD card is going to be used.
   * 
   * @param folderPath The folder's path.
   */
  public void loadFolder(String folderPath) {
    this.core.loadFolder(folderPath);
  }
  
  /**
   * Defines if the chooser is going to be used to select folders, instead of files.
   * 
   * @param folderMode 'true' for select folders or 'false' for select files.
   */
  public void setFolderMode(boolean folderMode) {
    this.core.setFolderMode(folderMode);
  }
  
  /**
   * Defines if the user can create files, instead of only select files.
   * 
   * @param canCreate 'true' if the user can create files or 'false' if it can only select them.
   */
  public void setCanCreateFiles(boolean canCreate) {
    this.core.setCanCreateFiles(canCreate);
  }
  
  /**
   * Defines the value of the labels.
   * 
   * @param labels The labels.
   */
  public void setLabels(FileChooserLabels labels) {
    this.core.setLabels(labels);
  }
  
  /**
   * Allows to define if a confirmation dialog must be show when selecting o creating a file.
   * 
   * @param onSelect 'true' for show a confirmation dialog when selecting a file, 'false' if not.
   * @param onCreate 'true' for show a confirmation dialog when creating a file, 'false' if not.
   */
  public void setShowConfirmation(boolean onSelect, boolean onCreate) {
    this.core.setShowConfirmationOnCreate(onCreate);
    this.core.setShowConfirmationOnSelect(onSelect);
  }
  
  /**
   * Allows to define if, in the title, must be show only the current folder's name or the full file's path..
   * 
   * @param show 'true' for show the full path, 'false' for show only the name.
   */
  public void setShowFullPath(boolean show) {
    this.core.setShowFullPathInTitle(show);
  }
  
    // ----- FileChooser methods ----- //
    
  public LinearLayout getRootLayout() {
    View root = this.findViewById(R.id.rootLayout); 
    return (root instanceof LinearLayout)? (LinearLayout)root : null;
  }  

  public void setCurrentFolderName(String name) {
    this.setTitle(name);
  }
}




Java Source Code List

org.bakchuda.android.filePicker.FileChooserActivity.java
org.bakchuda.android.filePicker.FileChooserCore.java
org.bakchuda.android.filePicker.FileChooserDialog.java
org.bakchuda.android.filePicker.FileChooserLabels.java
org.bakchuda.android.filePicker.FileChooser.java
org.bakchuda.android.filePicker.view.FileItem.java