/*
* Copyright (C) 2008 OpenIntents.org
*
* 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 org.openintents.filemanager.demo;
import java.io.File;
import org.openintents.intents.FileManagerIntents;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Demo extends Activity {
protected static final int REQUEST_CODE_PICK_FILE_OR_DIRECTORY = 1;
protected static final int REQUEST_CODE_GET_CONTENT = 2;
private static final String MY_EXTRA = "org.openintents.filemanager.demo.EXTRA_MY_EXTRA";
protected EditText mEditText;
protected TextView mTextView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mEditText = (EditText) findViewById(R.id.file_path);
mTextView = (TextView) findViewById(R.id.info);
}
public void onClickOpenFile(View view) {
openFile();
}
public void onClickSaveFile(View view) {
saveFile();
}
public void onClickPickDirectory(View view) {
pickDirectory();
}
public void onClickGetContent(View view) {
getContent();
}
public void onClickOpenUri(View view){
openFileUri();
}
/**
* Opens the file manager to select a file to open.
*/
public void openFile() {
String fileName = mEditText.getText().toString();
Intent intent = new Intent(FileManagerIntents.ACTION_PICK_FILE);
// Construct URI from file name.
File file = new File(fileName);
intent.setData(Uri.fromFile(file));
// Set fancy title and button (optional)
intent.putExtra(FileManagerIntents.EXTRA_TITLE, getString(R.string.open_title));
intent.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, getString(R.string.open_button));
intent.putExtra(MY_EXTRA, "magic");
try {
startActivityForResult(intent, REQUEST_CODE_PICK_FILE_OR_DIRECTORY);
} catch (ActivityNotFoundException e) {
// No compatible file manager was found.
Toast.makeText(this, R.string.no_filemanager_installed,
Toast.LENGTH_SHORT).show();
}
}
/**
* Opens the file manager to select a location for saving a file.
*/
private void saveFile() {
String fileName = mEditText.getText().toString();
Intent intent = new Intent(FileManagerIntents.ACTION_PICK_FILE);
// Construct URI from file name.
File file = new File(fileName);
intent.setData(Uri.fromFile(file));
// Set fancy title and button (optional)
intent.putExtra(FileManagerIntents.EXTRA_TITLE, getString(R.string.save_title));
intent.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, getString(R.string.save_button));
intent.putExtra(MY_EXTRA, "magic");
try {
startActivityForResult(intent, REQUEST_CODE_PICK_FILE_OR_DIRECTORY);
} catch (ActivityNotFoundException e) {
// No compatible file manager was found.
Toast.makeText(this, R.string.no_filemanager_installed,
Toast.LENGTH_SHORT).show();
}
}
/**
* Opens the file manager to pick a directory.
*/
private void pickDirectory() {
String fileName = mEditText.getText().toString();
// Note the different intent: PICK_DIRECTORY
Intent intent = new Intent(FileManagerIntents.ACTION_PICK_DIRECTORY);
// Construct URI from file name.
File file = new File(fileName);
intent.setData(Uri.fromFile(file));
// Set fancy title and button (optional)
intent.putExtra(FileManagerIntents.EXTRA_TITLE, getString(R.string.pick_directory_title));
intent.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, getString(R.string.pick_directory_button));
intent.putExtra(MY_EXTRA, "magic");
try {
startActivityForResult(intent, REQUEST_CODE_PICK_FILE_OR_DIRECTORY);
} catch (ActivityNotFoundException e) {
// No compatible file manager was found.
Toast.makeText(this, R.string.no_filemanager_installed,
Toast.LENGTH_SHORT).show();
}
}
/**
* Use GET_CONTENT to open a file.
*/
public void getContent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(intent, REQUEST_CODE_GET_CONTENT);
} catch (ActivityNotFoundException e) {
// No compatible file manager was found.
Toast.makeText(this, R.string.no_filemanager_installed,
Toast.LENGTH_SHORT).show();
}
}
/**
* Use URI to get a file
*/
public void openFileUri(){
String filePath = mEditText.getText().toString();
Uri uri = Uri.parse("file://" + filePath);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
// optionally:
//intent.setPackage("org.openintents.filemanager");
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
// No compatible file manager was found.
Toast.makeText(this, R.string.no_filemanager_installed,
Toast.LENGTH_SHORT).show();
}
}
/**
* This is called after the file manager finished.
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mTextView.setText("");
switch (requestCode) {
case REQUEST_CODE_PICK_FILE_OR_DIRECTORY:
if (resultCode == RESULT_OK && data != null) {
// obtain the filename
Uri fileUri = data.getData();
if (fileUri != null) {
String filePath = fileUri.getPath();
if (filePath != null) {
mEditText.setText(filePath);
}
mTextView.setText("additional extra: " + data.getStringExtra(MY_EXTRA));
}
}
break;
case REQUEST_CODE_GET_CONTENT:
if (resultCode == RESULT_OK && data != null) {
String filePath = null;
long fileSize = 0;
String displayName = null;
Uri uri = data.getData();
Cursor c = getContentResolver().query(uri, new String[] {MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.MIME_TYPE,
MediaStore.MediaColumns.DISPLAY_NAME,
MediaStore.MediaColumns.SIZE
}, null, null, null);
if (c != null && c.moveToFirst()) {
int id = c.getColumnIndex(Images.Media.DATA);
if (id != -1) {
filePath = c.getString(id);
}
displayName = c.getString(2);
fileSize = c.getLong(3);
}
if (filePath != null) {
mEditText.setText(filePath);
String strFileSize = getString(R.string.get_content_info,
displayName, Long.toString(fileSize));
mTextView.setText(strFileSize);
}
if (c != null && !c.isClosed()) {
c.close();
}
}
}
}
}