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