//------------------------------------------------------------------------------
// Copyright (c) 2012 Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
package com.microsoft.live.sample.util;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Stack;
import android.app.Activity;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.microsoft.live.sample.R;
public class FilePicker extends ListActivity {
private class FilePickerListAdapter extends BaseAdapter {
private final LayoutInflater mInflater;
private final ArrayList<File> mFiles;
public FilePickerListAdapter(Context context) {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mFiles = new ArrayList<File>();
}
public ArrayList<File> getFiles() {
return mFiles;
}
@Override
public int getCount() {
return mFiles.size();
}
@Override
public File getItem(int position) {
return mFiles.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView != null ? convertView :
mInflater.inflate(R.layout.file_picker_list_item,
parent,
false);
TextView name = (TextView) v.findViewById(R.id.nameTextView);
TextView type = (TextView) v.findViewById(R.id.typeTextView);
File file = getItem(position);
name.setText(file.getName());
type.setText(file.isDirectory() ? "Folder" : "File");
return v;
}
}
public static final int PICK_FILE_REQUEST = 0;
public static final String EXTRA_FILE_PATH = "filePath";
private File mCurrentFolder;
private Stack<File> mPrevFolders;
private FilePickerListAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.file_picker);
mPrevFolders = new Stack<File>();
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
File file = (File) parent.getItemAtPosition(position);
if (file.isDirectory()) {
mPrevFolders.push(mCurrentFolder);
loadFolder(file);
} else {
Intent data = new Intent();
data.putExtra(EXTRA_FILE_PATH, file.getPath());
setResult(Activity.RESULT_OK, data);
finish();
}
}
});
mAdapter = new FilePickerListAdapter(FilePicker.this);
setListAdapter(mAdapter);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && !mPrevFolders.isEmpty()) {
File folder = mPrevFolders.pop();
loadFolder(folder);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
@Override
protected void onStart() {
super.onStart();
loadFolder(Environment.getExternalStorageDirectory());
}
private void loadFolder(File folder) {
assert folder.isDirectory();
setTitle(folder.getName());
mCurrentFolder = folder;
ProgressDialog progressDialog =
ProgressDialog.show(this, "", "Loading. Please wait...", true);
ArrayList<File> adapterFiles = mAdapter.getFiles();
adapterFiles.clear();
adapterFiles.addAll(Arrays.asList(folder.listFiles()));
mAdapter.notifyDataSetChanged();
progressDialog.dismiss();
}
}