package itkach.aard2; import android.app.ActionBar; import android.app.Activity; import android.app.ListActivity; import android.content.Intent; import android.content.SharedPreferences; import android.database.DataSetObserver; import android.os.Bundle; import android.os.Environment; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ListView; import java.io.File; public class FileSelectActivity extends ListActivity { final static String KEY_SELECTED_FILE_PATH = "selectedFilePath"; static final String PREF = "fileSelect"; private MenuItem miParentDir; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Application app = (Application)getApplication(); app.installTheme(this); final ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); final FileSelectListAdapter adapter = new FileSelectListAdapter(); adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { File root = adapter.getRoot(); String path; if (root != null) { path = root.getAbsolutePath(); } else { path = ""; } actionBar.setSubtitle(path); savePath(path); } }); setListAdapter(adapter); setPath(savedInstanceState); } private SharedPreferences prefs() { return getSharedPreferences(PREF, Activity.MODE_PRIVATE); } private void savePath(String path) { SharedPreferences p = prefs(); SharedPreferences.Editor edit = p.edit(); edit.putString(KEY_SELECTED_FILE_PATH, path); edit.commit(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); FileSelectListAdapter adapter = (FileSelectListAdapter)getListAdapter(); if (adapter != null) { File root = adapter.getRoot(); if (root != null) { outState.putString(KEY_SELECTED_FILE_PATH, root.getAbsolutePath()); } } } @Override protected void onRestoreInstanceState(Bundle state) { super.onRestoreInstanceState(state); setPath(state); } private void setPath(Bundle state) { FileSelectListAdapter adapter = (FileSelectListAdapter)getListAdapter(); if (adapter != null) { String path = state == null ? null : state.getString(KEY_SELECTED_FILE_PATH); File root = null; if (path != null && path.length() > 0) { root = new File(path); } else { SharedPreferences p = prefs(); path = p.getString(KEY_SELECTED_FILE_PATH, null); if (path != null) { root = new File(path); } } if (root == null || !root.exists()) { root = Environment.getExternalStorageDirectory(); } adapter.setRoot(root); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_file_select, menu); return true; } @Override public boolean onPrepareOptionsMenu(final Menu menu) { miParentDir = menu.findItem(R.id.action_goto_parent_dir); miParentDir.setIcon(IconMaker.actionBar(this, IconMaker.IC_LEVEL_UP)); MenuItem miReloadDir = menu.findItem(R.id.action_reload_directory); miReloadDir.setIcon(IconMaker.actionBar(this, IconMaker.IC_RELOAD)); FileSelectListAdapter adapter = (FileSelectListAdapter)getListAdapter(); File root = adapter.getRoot(); File parent = root.getParentFile(); miParentDir.setEnabled(parent != null); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); FileSelectListAdapter adapter = (FileSelectListAdapter)getListAdapter(); if (id == R.id.action_goto_parent_dir) { File root = adapter.getRoot(); this.setRoot(root.getParentFile()); return true; } if (id == R.id.action_reload_directory) { adapter.reload(); return true; } if (id == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } private void setRoot(File newRoot) { FileSelectListAdapter adapter = (FileSelectListAdapter)getListAdapter(); if (newRoot != null) { adapter.setRoot(newRoot); miParentDir.setEnabled(newRoot.getParentFile() != null); } } @Override protected void onListItemClick(ListView l, View v, int position, long id) { FileSelectListAdapter adapter = (FileSelectListAdapter)l.getAdapter(); File f = (File)adapter.getItem(position); if (f.isDirectory()) { this.setRoot(f); } else { Intent data = new Intent(); data.putExtra(KEY_SELECTED_FILE_PATH, f.getAbsolutePath()); setResult(RESULT_OK, data); finish(); } } }