Back to project page Easy_File_Split_And_Join.
The source code is released under:
Copyright (c) 2011, 2012, Hunter Davis All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are m...
If you think the Android project Easy_File_Split_And_Join listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.hunterdavis.easyfilesplitandjoin; //from ww w . j av a 2 s .co m import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.TreeMap; import android.app.AlertDialog; import android.app.ListActivity; import android.content.DialogInterface; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; public class FileDialog extends ListActivity { private static final String ITEM_KEY = "key"; private static final String ITEM_IMAGE = "image"; public static final String START_PATH = "START_PATH"; public static final String RESULT_PATH = "RESULT_PATH"; private List<String> item = null; private List<String> path = null; private String root = "/"; private TextView myPath; private EditText mFileName; private ArrayList<HashMap<String, Object>> mList; private Button selectButton; private Button newButton; private Button cancelButton; private Button createButton; private LinearLayout layoutSelect; private LinearLayout layoutCreate; private InputMethodManager inputManager; private String parentPath; private String currentPath = root; private File selectedFile; private HashMap<String, Integer> lastPositions = new HashMap<String, Integer>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setResult(RESULT_CANCELED, getIntent()); setContentView(R.layout.file_dialog_main); myPath = (TextView) findViewById(R.id.path); mFileName = (EditText) findViewById(R.id.fdEditTextFile); inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); selectButton = (Button) findViewById(R.id.fdButtonSelect); selectButton.setEnabled(false); selectButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (selectedFile != null) { getIntent().putExtra(RESULT_PATH, selectedFile.getPath()); setResult(RESULT_OK, getIntent()); finish(); } } }); //newButton = (Button) findViewById(R.id.fdButtonNew); /*//newButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { layoutSelect.setVisibility(View.GONE); layoutCreate.setVisibility(View.VISIBLE); mFileName.setText(""); mFileName.requestFocus(); } })0*/ layoutSelect = (LinearLayout) findViewById(R.id.fdLinearLayoutSelect); layoutCreate = (LinearLayout) findViewById(R.id.fdLinearLayoutCreate); layoutCreate.setVisibility(View.GONE); cancelButton = (Button) findViewById(R.id.fdButtonCancel); cancelButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { layoutCreate.setVisibility(View.GONE); layoutSelect.setVisibility(View.VISIBLE); inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0); unselect(); } }); createButton = (Button) findViewById(R.id.fdButtonCreate); createButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mFileName.getText().length() > 0) { getIntent().putExtra(RESULT_PATH, currentPath + "/" + mFileName.getText()); setResult(RESULT_OK, getIntent()); finish(); } } }); String startPath = getIntent().getStringExtra(START_PATH); if (startPath != null) { getDir(startPath); } else { getDir(root); } } private void getDir(String dirPath) { boolean useAutoSelection = dirPath.length() < currentPath.length(); Integer position = lastPositions.get(parentPath); getDirImpl(dirPath); if (position != null && useAutoSelection) { getListView().setSelection(position); } } private void getDirImpl(String dirPath) { myPath.setText(getText(R.string.location) + ": " + dirPath); currentPath = dirPath; item = new ArrayList<String>(); path = new ArrayList<String>(); mList = new ArrayList<HashMap<String, Object>>(); File f = new File(dirPath); File[] files = f.listFiles(); if (!dirPath.equals(root)) { item.add(root); addItem(root, R.drawable.folder); path.add(root); item.add("../"); addItem("../", R.drawable.folder); path.add(f.getParent()); parentPath = f.getParent(); } TreeMap<String, String> dirsMap = new TreeMap<String, String>(); TreeMap<String, String> dirsPathMap = new TreeMap<String, String>(); TreeMap<String, String> filesMap = new TreeMap<String, String>(); TreeMap<String, String> filesPathMap = new TreeMap<String, String>(); for (File file : files) { if (file.isDirectory()) { String dirName = file.getName(); dirsMap.put(dirName, dirName); dirsPathMap.put(dirName, file.getPath()); } else { filesMap.put(file.getName(), file.getName()); filesPathMap.put(file.getName(), file.getPath()); } } item.addAll(dirsMap.tailMap("").values()); item.addAll(filesMap.tailMap("").values()); path.addAll(dirsPathMap.tailMap("").values()); path.addAll(filesPathMap.tailMap("").values()); SimpleAdapter fileList = new SimpleAdapter(this, mList, R.layout.file_dialog_row, new String[] { ITEM_KEY, ITEM_IMAGE }, new int[] { R.id.fdrowtext, R.id.fdrowimage }); for (String dir : dirsMap.tailMap("").values()) { addItem(dir, R.drawable.folder); } for (String file : filesMap.tailMap("").values()) { addItem(file, R.drawable.file); } fileList.notifyDataSetChanged(); setListAdapter(fileList); } private void addItem(String fileName, int imageId) { HashMap<String, Object> item = new HashMap<String, Object>(); item.put(ITEM_KEY, fileName); item.put(ITEM_IMAGE, imageId); mList.add(item); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { File file = new File(path.get(position)); if (file.isDirectory()) { unselect(); if (file.canRead()) { lastPositions.put(currentPath, position); getDir(path.get(position)); } else { new AlertDialog.Builder(this).setIcon(R.drawable.icon) .setTitle( "[" + file.getName() + "] " + getText(R.string.cant_read_folder)) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } } else { selectedFile = file; v.setSelected(true); selectButton.setEnabled(true); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { unselect(); if (layoutCreate.getVisibility() == View.VISIBLE) { layoutCreate.setVisibility(View.GONE); layoutSelect.setVisibility(View.VISIBLE); } else { if (!currentPath.equals(root)) { getDir(parentPath); } else { return super.onKeyDown(keyCode, event); } } return true; } else { return super.onKeyDown(keyCode, event); } } private void unselect() { selectButton.setEnabled(false); } }