File open dialog : Dialog « UI « Android






File open dialog

  

//package com.FileBrowser;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;

import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

class OpenDialogLayout extends LinearLayout {

  public OpenDialogLayout(Context context) {
    super(context);

    init(context);
  }

  public OpenDialogLayout(Context context, AttributeSet attrs) {
    super(context, attrs);

    init(context);
  }

  private void setItemLayout(View view) {
    view.setLayoutParams(new LinearLayout.LayoutParams(
        ViewGroup.LayoutParams.FILL_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT, 0.0F));
  }

  private void setListLayout(View view) {
    view.setLayoutParams(new LinearLayout.LayoutParams(
        ViewGroup.LayoutParams.FILL_PARENT,
        ViewGroup.LayoutParams.FILL_PARENT, 0.0F));
  }

  private void init(Context context) {
    setOrientation(LinearLayout.VERTICAL);
    setListLayout(this);

    _tvPath = new TextView(context);
    setItemLayout(_tvPath);
    _tvPath.setText("Path: ");

    _etFile = new EditText(context);
    setItemLayout(_etFile);
    _etFile.setEnabled(false);
    _etFile.setFocusable(false);

    _FileList = new FileList(context);
    setListLayout(_FileList);
    _FileList.setPath("/");
    _FileList.setFocusable(true);
    _FileList.setOnPathChangedListener(_OnPathChanged);
    _FileList.setOnFileSelected(_OnFileSelected);

    addView(_tvPath);
    addView(_etFile);
    addView(_FileList);

    setFocusable(true);
    setFocusableInTouchMode(true);
  }

  private TextView _tvPath = null;
  private EditText _etFile = null;
  private FileList _FileList = null;

  public String getPath() {
    return _tvPath.getText().toString();
  }

  public String getFileName() {
    return _etFile.getText().toString();
  }

  private OnPathChangedListener _OnPathChanged = new OnPathChangedListener() {
    public void onChanged(String path) {
      _tvPath.setText("Path: " + path);
      _etFile.setText("");
    }
  };

  private OnFileSelectedListener _OnFileSelected = new OnFileSelectedListener() {
    public void onSelected(String path, String fileName) {
      _etFile.setText(fileName);
    }
  };

}

public class OpenDialog {

  public OpenDialog(Context context) {
    _OpenDialogLayout = new OpenDialogLayout(context);

    _Dialog = new AlertDialog.Builder(context);
    _Dialog.setTitle("Open Dialog");
    _Dialog.setView(_OpenDialogLayout);
    _Dialog.setPositiveButton("Ok", _OnPositiveClick);
    _Dialog.setNegativeButton("Cancel", _OnNegativeClick);
  }

  private Builder _Dialog = null;
  private OpenDialogLayout _OpenDialogLayout = null;

  // Event
  private OnFileSelectedListener _OnFileSelected = null;
  private OnNotifyEventListener _OnCanceled = null;

  public void Show() {
    _Dialog.show();
  }

  public void setOnFileSelected(OnFileSelectedListener value) {
    _OnFileSelected = value;
  }

  public OnFileSelectedListener getOnFileSelected() {
    return _OnFileSelected;
  }

  public void setOnCanceled(OnNotifyEventListener value) {
    _OnCanceled = value;
  }

  public OnNotifyEventListener getOnCanceled() {
    return _OnCanceled;
  }

  private DialogInterface.OnClickListener _OnPositiveClick = new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
      if (_OnFileSelected != null) {
        _OnFileSelected.onSelected(_OpenDialogLayout.getPath(),
            _OpenDialogLayout.getFileName());
      }
    }
  };

  private DialogInterface.OnClickListener _OnNegativeClick = new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
      if (_OnCanceled != null) {
        _OnCanceled.onNotify(OpenDialog.this);
      }
    }
  };

}

interface OnFileSelectedListener {

  public void onSelected(String path, String fileName);

}

interface OnNotifyEventListener {

  public void onNotify(Object sender);

}

interface OnPathChangedListener {

  public void onChanged(String path);

}

class FileList extends ListView {

  public FileList(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    init(context);
  }

  public FileList(Context context, AttributeSet attrs) {
    super(context, attrs);

    init(context);
  }

  public FileList(Context context) {
    super(context);

    init(context);
  }

  private void init(Context context) {
    _Context = context;
    setOnItemClickListener(_OnItemClick);
  }

  private Context _Context = null;
  private ArrayList<String> _List = new ArrayList<String>();
  private ArrayList<String> _FolderList = new ArrayList<String>();
  private ArrayList<String> _FileList = new ArrayList<String>();
  private ArrayAdapter<String> _Adapter = null;

  // Property
  private String _Path = "";

  // Event
  private OnPathChangedListener _OnPathChangedListener = null;
  private OnFileSelectedListener _OnFileSelectedListener = null;

  private boolean openPath(String path) {
    _FolderList.clear();
    _FileList.clear();

    File file = new File(path);
    File[] files = file.listFiles();
    if (files == null)
      return false;

    for (int i = 0; i < files.length; i++) {
      if (files[i].isDirectory()) {
        _FolderList.add("<" + files[i].getName() + ">");
      } else {
        _FileList.add(files[i].getName());
      }
    }

    Collections.sort(_FolderList);
    Collections.sort(_FileList);

    _FolderList.add(0, "<..>");

    return true;
  }

  private void updateAdapter() {
    _List.clear();
    _List.addAll(_FolderList);
    _List.addAll(_FileList);

    _Adapter = new ArrayAdapter<String>(_Context,
        android.R.layout.simple_list_item_1, _List);
    setAdapter(_Adapter);
  }

  public void setPath(String value) {
    if (value.length() == 0) {
      value = "/";
    } else {
      String lastChar = value.substring(value.length() - 1,
          value.length());
      if (lastChar.matches("/") == false)
        value = value + "/";
    }

    if (openPath(value)) {
      _Path = value;
      updateAdapter();
      if (_OnPathChangedListener != null)
        _OnPathChangedListener.onChanged(value);
    }
  }

  public String getPath() {
    return _Path;
  }

  public void setOnPathChangedListener(OnPathChangedListener value) {
    _OnPathChangedListener = value;
  }

  public OnPathChangedListener getOnPathChangedListener() {
    return _OnPathChangedListener;
  }

  public void setOnFileSelected(OnFileSelectedListener value) {
    _OnFileSelectedListener = value;
  }

  public OnFileSelectedListener getOnFileSelected() {
    return _OnFileSelectedListener;
  }

  public String DelteRight(String value, String border) {
    String list[] = value.split(border);

    String result = "";

    for (int i = 0; i < list.length; i++) {
      result = result + list[i] + border;
    }

    return result;
  }

  private String delteLastFolder(String value) {
    String list[] = value.split("/");

    String result = "";

    for (int i = 0; i < list.length - 1; i++) {
      result = result + list[i] + "/";
    }

    return result;
  }

  private String getRealPathName(String newPath) {
    String path = newPath.substring(1, newPath.length() - 1);

    if (path.matches("..")) {
      return delteLastFolder(_Path);
    } else {
      return _Path + path + "/";
    }
  }

  private AdapterView.OnItemClickListener _OnItemClick = new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> arg0, View arg1, int position,
        long id) {
      String fileName = getItemAtPosition(position).toString();
      if (fileName.matches("<.*>")) {
        setPath(getRealPathName(fileName));
      } else {
        if (_OnFileSelectedListener != null)
          _OnFileSelectedListener.onSelected(_Path, fileName);
      }
    }
  };

}

   
    
  








Related examples in the same category

1.Dialog Helper
2.Use AlertDialog to inform exception
3.Add option item to Alert dialog and get user selection result
4.Add some padding to keep the dialog borders away
5.Dialog activity and TextView
6.Preference dialog
7.Show dialog
8.Dialog layout
9.Layout dialog with xml layout file
10.extends DialogFragment
11.Color Picker Dialog
12.Dialog Yes No Message
13.Dialog Yes No Old School Message
14.Dialog Yes No Holo Light Message
15.Dialog Yes No Long Message
16.Dialog Yes No Ultra Long Message
17.Dialog with List of value
18.Dialog with Progress
19.Dialog with Single Choice
20.Dialog Multiple Choice
21.Dialog Multiple Choice Cursor
22.Dialog with Text Entry
23.Dialog with Xml layout
24.Dialog Activity
25.Demonstrates how to show an AlertDialog that is managed by a Fragment.
26.Fragment Dialog
27.Demonstrates the use of progress dialogs.
28.Show error AlertDialog
29.extends DialogPreference
30.Show Notification Alert Dialog
31.Text Dialog
32.Create Chang Log Dialog
33.Show Title And Message Dialog
34.Show dialog and parse URL
35.Error Dialog Wrapper
36.Ok Dialog Wrapper
37.Display an alert dialog
38.AlertDialog Question
39.import android.app.AlertDialog;
40.dialog Builder
41.A dialog that allows the user to select multiple entries.
42.Help Dialog Creator
43.Color Select Dialog
44.Create MessageBox