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