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