/*
* 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.iiordanov.bssh.util;
import java.io.File;
import java.net.URI;
import org.openintents.intents.FileManagerIntents;
import com.iiordanov.bssh.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;
}
}