Mercurial > 510Connectbot
diff src/com/five_ten_sg/connectbot/util/FileChooser.java @ 0:0ce5cc452d02
initial version
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Thu, 22 May 2014 10:41:19 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/com/five_ten_sg/connectbot/util/FileChooser.java Thu May 22 10:41:19 2014 -0700 @@ -0,0 +1,127 @@ +/* + * File Chooser Class for VX ConnectBot + * Copyright 2012 Martin Matuska + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.five_ten_sg.connectbot.util; + +import java.io.File; +import java.net.URI; + +import org.openintents.intents.FileManagerIntents; + +import com.five_ten_sg.connectbot.R; +import android.app.Activity; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.os.Environment; +import android.preference.PreferenceManager; +import android.util.Log; +import android.widget.Toast; + +import com.lamerman.FileDialog; +import com.lamerman.SelectionMode; + +public class FileChooser { + public final static String TAG = "ConnectBot.FileChooser"; + + public static final int REQUEST_CODE_SELECT_FILE = 1; + + // Constants for AndExplorer's file picking intent + private static final String ANDEXPLORER_TITLE = "explorer_title"; + private static final String MIME_TYPE_ANDEXPLORER_FILE = "vnd.android.cursor.dir/lysesoft.andexplorer.file"; + + public static void selectFile(Activity source, FileChooserCallback callback, int requestcode) { + selectFile(source, callback, requestcode, null); + } + + public static void selectFile(Activity source, FileChooserCallback callback, int requestcode, String title) { + final File sdcard = Environment.getExternalStorageDirectory(); + + if (title == null) + title = source.getString(R.string.file_chooser_select_file); + + int mode = SelectionMode.MODE_OPEN; + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(source); + Intent intent = null; + String filedialog; + String appString = null; + + if (prefs == null) + return; + + filedialog = prefs.getString(PreferenceConstants.FILE_DIALOG, "built-in"); + + if (filedialog.equals("OI")) { + appString = "OpenIntents File Manager"; + intent = new Intent(FileManagerIntents.ACTION_PICK_FILE); + intent.setData(Uri.fromFile(sdcard)); + intent.putExtra(FileManagerIntents.EXTRA_TITLE, title); + intent.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, source.getString(android.R.string.ok)); + } + else if (filedialog.equals("AE")) { + appString = "AndExplorer"; + intent = new Intent(Intent.ACTION_PICK); + intent.setDataAndType(Uri.fromFile(sdcard), MIME_TYPE_ANDEXPLORER_FILE); + intent.putExtra(ANDEXPLORER_TITLE, title); + } + + if (intent != null && appString != null) { + try { + source.startActivityForResult(intent, requestcode); + return; + } + catch (ActivityNotFoundException e1) { + Toast.makeText(source, + source.getString(R.string.error_starting_app, appString), + Toast.LENGTH_LONG).show(); + } + } + + intent = new Intent(source.getBaseContext(), FileDialog.class); + intent.putExtra(FileDialog.START_PATH, sdcard.toString()); + intent.putExtra(FileDialog.TITLE, title); + intent.putExtra(FileDialog.SELECTION_MODE, mode); + source.startActivityForResult(intent, requestcode); + } + + public static File getSelectedFile(Intent intent) { + File file = null; + + if (intent == null) + return null; + + Uri uri = intent.getData(); + + try { + if (uri != null) { + file = new File(URI.create(uri.toString())); + } + else { + String filename = intent.getDataString(); + + if (filename != null) + file = new File(URI.create(filename)); + } + } + catch (IllegalArgumentException e) { + Log.e(TAG, "Couldn't read selected file", e); + return null; + } + + return file; + } +} \ No newline at end of file