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