1a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/* 2a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 3a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 4a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * you may not use this file except in compliance with the License. 6a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * You may obtain a copy of the License at 7a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 8a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * 10a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * See the License for the specific language governing permissions and 14a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * limitations under the License. 15a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 16a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 17d4cb9c587c23e3c24d928b0ac1a4de5679846f93Alex Sakhartchoukpackage com.android.testapp; 18a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 19a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.File; 20a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.io.FileFilter; 21a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.ArrayList; 22a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport java.util.List; 23a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 24a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.app.ListActivity; 25a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.content.Intent; 26a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.net.Uri; 27a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.os.Bundle; 28a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.view.View; 29a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.widget.ArrayAdapter; 30a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukimport android.widget.ListView; 31a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 32a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk/** 33a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * A list view where the last item the user clicked is placed in 34a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk * the "activated" state, causing its background to highlight. 35a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk */ 36a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchoukpublic class FileSelector extends ListActivity { 37a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 38a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk File[] mCurrentSubList; 39a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk File mCurrentFile; 40a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 41a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk class DAEFilter implements FileFilter { 42a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public boolean accept(File file) { 43a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (file.isDirectory()) { 44a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return true; 45a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 46a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return file.getName().endsWith(".dae"); 47a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 48a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 49a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 50a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk private void populateList(File file) { 51a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 52a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mCurrentFile = file; 53a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk setTitle(mCurrentFile.getAbsolutePath() + "/*.dae"); 54a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk List<String> names = new ArrayList<String>(); 55a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk names.add(".."); 56a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 57a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk mCurrentSubList = mCurrentFile.listFiles(new DAEFilter()); 58a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 59a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mCurrentSubList != null) { 60a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk for (int i = 0; i < mCurrentSubList.length; i ++) { 61a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk String fileName = mCurrentSubList[i].getName(); 62a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (mCurrentSubList[i].isDirectory()) { 63a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk fileName = "/" + fileName; 64a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 65a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk names.add(fileName); 66a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 67a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 68a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 69a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // Use the built-in layout for showing a list item with a single 70a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // line of text whose background is changes when activated. 71a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk setListAdapter(new ArrayAdapter<String>(this, 72a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk android.R.layout.simple_list_item_activated_1, names)); 73a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk getListView().setTextFilterEnabled(true); 74a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 75a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // Tell the list view to show one checked/activated item at a time. 76a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 77a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 78a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 79a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk @Override 80a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk public void onCreate(Bundle savedInstanceState) { 81a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk super.onCreate(savedInstanceState); 82a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 83a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk populateList(new File("/sdcard/")); 84a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 85a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 86a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk @Override 87a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk protected void onListItemClick(ListView l, View v, int position, long id) { 88a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (position == 0) { 89a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk File parent = mCurrentFile.getParentFile(); 90a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (parent == null) { 91a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return; 92a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 93a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk populateList(parent); 94a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return; 95a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 96a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 97a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk // the first thing in list is parent directory 98a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk File selectedFile = mCurrentSubList[position - 1]; 99a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk if (selectedFile.isDirectory()) { 100a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk populateList(selectedFile); 101a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk return; 102a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 103a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 104a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk Intent resultIntent = new Intent(); 105a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk resultIntent.setData(Uri.fromFile(selectedFile)); 106a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk setResult(RESULT_OK, resultIntent); 107a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk finish(); 108a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk } 109a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk 110a7a211b8a68a7d3f5ff4409aa286db07f96c0550Alex Sakhartchouk} 111