Back to project page Android-Multiple-file-Selector-Dialog.
The source code is released under:
MIT License
If you think the Android project Android-Multiple-file-Selector-Dialog 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 paul.arian.fileselector; /*from ww w .j a va 2 s .c om*/ import java.io.File; import java.io.FileFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import com.commonsware.cwac.merge.MergeAdapter; public class FolderSelectionActivity extends Activity { private static final String TAG = "FileSelection"; private static final String FILES_TO_UPLOAD = "upload"; File mainPath = new File(Environment.getExternalStorageDirectory()+""); private ArrayList<File> resultFileList; private ListView directoryView; private ArrayList<File> directoryList = new ArrayList<File>(); private ArrayList<String> directoryNames = new ArrayList<String>(); private ArrayList<File> fileList = new ArrayList<File>(); private ArrayList<String> fileNames = new ArrayList<String>(); Button ok, all,cancel,storage,New; TextView path; Boolean switcher = false; String primary_sd; String secondary_sd; int index = 0; int top = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_file_selection); //getActionBar().setDisplayHomeAsUpEnabled(true); directoryView = (ListView)findViewById(R.id.directorySelectionList); ok = (Button)findViewById(R.id.ok); all = (Button)findViewById(R.id.all); cancel = (Button)findViewById(R.id.cancel); storage = (Button)findViewById(R.id.storage); New = (Button)findViewById(R.id.New); path = (TextView)findViewById(R.id.folderpath); all.setEnabled(false); loadLists(); ExtStorageSearch(); if(secondary_sd==null){ storage.setEnabled(false); } directoryView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { index = directoryView.getFirstVisiblePosition(); View v = directoryView.getChildAt(0); top = (v == null) ? 0 : v.getTop(); File lastPath = mainPath; try { if (position < directoryList.size()) { mainPath = directoryList.get(position); loadLists(); } }catch(Throwable e){ mainPath = lastPath; loadLists(); } } }); ok.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ ok(); } }); cancel.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ finish(); } }); storage.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ try { if (!switcher) { mainPath = new File(secondary_sd); loadLists(); switcher = true; storage.setText(getString(R.string.Int)); } else { mainPath = new File(primary_sd); loadLists(); switcher = false; storage.setText(getString(R.string.ext)); } }catch (Throwable e){ } } }); New.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ AlertDialog.Builder alert = new AlertDialog.Builder(v.getContext()); alert.setTitle( getString(R.string.New) ); alert.setMessage( getString(R.string.CNew) ); final EditText input = new EditText(v.getContext()); alert.setView(input); alert.setPositiveButton(getString(R.string.create), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String fileName = input.getText().toString(); // Verify if a value has been entered. if(fileName != null && fileName.length() > 0) { // Notify the listeners. File newFolder = new File(mainPath.getPath()+"/"+fileName+"/"); newFolder.mkdirs(); loadLists(); } } }); alert.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Do nothing, automatically the dialog is going to be closed. } }); // Show the dialog. alert.show(); } }); } @Override public void onBackPressed() { try { if(mainPath.equals(Environment.getExternalStorageDirectory().getParentFile().getParentFile())){ finish(); }else{ File parent = mainPath.getParentFile(); mainPath = parent; loadLists(); directoryView.setSelectionFromTop(index, top); } }catch (Throwable e){ } } public void ok(){ Intent result = this.getIntent(); result.putExtra(FILES_TO_UPLOAD, mainPath); setResult(Activity.RESULT_OK, result); finish(); } private void loadLists(){ FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isFile(); } }; FileFilter directoryFilter = new FileFilter(){ public boolean accept(File file){ return file.isDirectory(); } }; //if(mainPath.exists() && mainPath.length()>0){ //Lista de directorios File[] tempDirectoryList = mainPath.listFiles(directoryFilter); if (tempDirectoryList != null && tempDirectoryList.length > 1) { Arrays.sort(tempDirectoryList, new Comparator<File>() { @Override public int compare(File object1, File object2) { return object1.getName().compareTo(object2.getName()); } }); } directoryList = new ArrayList<File>(); directoryNames = new ArrayList<String>(); for(File file: tempDirectoryList){ directoryList.add(file); directoryNames.add(file.getName()); } ArrayAdapter<String> directoryAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, directoryNames); directoryView.setAdapter(directoryAdapter); //Lista de ficheros File[] tempFileList = mainPath.listFiles(fileFilter); if (tempFileList != null && tempFileList.length > 1) { Arrays.sort(tempFileList, new Comparator<File>() { @Override public int compare(File object1, File object2) { return object1.getName().compareTo(object2.getName()); } }); } fileList = new ArrayList<File>(); fileNames = new ArrayList<String>(); for(File file : tempFileList){ fileList.add(file); fileNames.add(file.getName()); } path.setText(mainPath.toString()); iconload(); // } } public void iconload(){ String[] foldernames = new String[directoryNames.size()]; foldernames = directoryNames.toArray(foldernames); String[] filenames = new String[fileNames.size()]; filenames = fileNames.toArray(filenames); CustomListSingleOnly adapter1 = new CustomListSingleOnly(FolderSelectionActivity.this, directoryNames.toArray(foldernames), mainPath.getPath()); CustomListSingleOnly adapter2 = new CustomListSingleOnly(FolderSelectionActivity.this, fileNames.toArray(filenames), mainPath.getPath()); MergeAdapter adap = new MergeAdapter(); adap.addAdapter(adapter1); adap.addAdapter(adapter2); directoryView.setAdapter(adap); } public void ExtStorageSearch(){ String[] extStorlocs = {"/storage/sdcard1","/storage/extsdcard","/storage/sdcard0/external_sdcard","/mnt/extsdcard", "/mnt/sdcard/external_sd","/mnt/external_sd","/mnt/media_rw/sdcard1","/removable/microsd","/mnt/emmc", "/storage/external_SD","/storage/ext_sd","/storage/removable/sdcard1","/data/sdext","/data/sdext2", "/data/sdext3","/data/sdext4","/storage/sdcard0"}; //First Attempt primary_sd = System.getenv("EXTERNAL_STORAGE"); secondary_sd = System.getenv("SECONDARY_STORAGE"); if(primary_sd == null) { primary_sd = Environment.getExternalStorageDirectory()+""; } if(secondary_sd == null) {//if fail, search among known list of extStorage Locations for(String string: extStorlocs){ if((new File(string)).exists() && (new File(string)).isDirectory() ){ secondary_sd = string; break; } } } } }