StorageBrowser.java revision 20bc97fc541610a296d12e25570ac3eb6d599673
1748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka/*
2748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * Copyright (C) 2010 The Android Open Source Project
3748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka *
4748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License");
5748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * you may not use this file except in compliance with the License.
6748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * You may obtain a copy of the License at
7748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka *
8748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
9748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka *
10748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
11748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS,
12748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * See the License for the specific language governing permissions and
14748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * limitations under the License.
15748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka */
16748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka
17748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokapackage com.android.camerabrowser;
18748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka
19748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.app.ListActivity;
20748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.content.Context;
21748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.content.Intent;
22748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.mtp.MtpClient;
23748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.mtp.MtpDevice;
24748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.mtp.MtpStorageInfo;
25d1630a3add1c38d365078ad12fde52dc1934f296Tadashi G. Takaokaimport android.os.Bundle;
26748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.util.Log;
27abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaokaimport android.view.LayoutInflater;
28748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.view.View;
29748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.view.ViewGroup;
30748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokaimport android.widget.BaseAdapter;
3113d5f6605be6a6e8d9e5dde5b204dc050a862550Tadashi G. Takaokaimport android.widget.ListView;
3279dcd270e5dc82346f2aec93df1ca13b16f490beTadashi G. Takaokaimport android.widget.TextView;
3385d594a80ed72a68031f0eb1a4e378f5b9ed344eTadashi G. Takaoka
34b03529aa0119d38054fe825156669c45f7a6c8c3Tadashi G. Takaokaimport java.util.List;
35b03529aa0119d38054fe825156669c45f7a6c8c3Tadashi G. Takaoka
36748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka/**
37748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka * A list view displaying all storage units on a device.
38bfbcbe5a145a901ec824603f534e7d117492cd66Tadashi G. Takaoka */
39748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaokapublic class StorageBrowser extends ListActivity {
40748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka
4179dcd270e5dc82346f2aec93df1ca13b16f490beTadashi G. Takaoka    private static final String TAG = "StorageBrowser";
42748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka
43748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka    private MtpClient mClient;
44748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka    private String mDeviceName;
4513d5f6605be6a6e8d9e5dde5b204dc050a862550Tadashi G. Takaoka    private List<MtpStorageInfo> mStorageList;
4679dcd270e5dc82346f2aec93df1ca13b16f490beTadashi G. Takaoka    private DeviceDisconnectedReceiver mDisconnectedReceiver;
4785d594a80ed72a68031f0eb1a4e378f5b9ed344eTadashi G. Takaoka
4847141f7011c50a6463da74c1c7ae86cbab3a04f7Tadashi G. Takaoka    private class StorageAdapter extends BaseAdapter {
49748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka        private final Context mContext;
507a39bd4454664b5c37b30e9b5362ddbcdce3b374Tadashi G. Takaoka        private final LayoutInflater mInflater;
51bfbcbe5a145a901ec824603f534e7d117492cd66Tadashi G. Takaoka
52748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka        public StorageAdapter(Context c) {
53abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka            mContext = c;
5479dcd270e5dc82346f2aec93df1ca13b16f490beTadashi G. Takaoka            mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
55abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka        }
56abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka
57abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka        public int getCount() {
5879dcd270e5dc82346f2aec93df1ca13b16f490beTadashi G. Takaoka            if (mStorageList == null) {
590462f4dced99f1ec31e7ac40df8871024fe2a5f2Tadashi G. Takaoka                return 0;
600462f4dced99f1ec31e7ac40df8871024fe2a5f2Tadashi G. Takaoka            } else {
6185d594a80ed72a68031f0eb1a4e378f5b9ed344eTadashi G. Takaoka                return mStorageList.size();
6285d594a80ed72a68031f0eb1a4e378f5b9ed344eTadashi G. Takaoka            }
63abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka        }
64d1630a3add1c38d365078ad12fde52dc1934f296Tadashi G. Takaoka
65abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka        public Object getItem(int position) {
66abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka            return mStorageList.get(position);
6779dcd270e5dc82346f2aec93df1ca13b16f490beTadashi G. Takaoka        }
68426723a9cfb18d742602cb5098092808d592ea6dTadashi G. Takaoka
69abd7392d66fcfd404b7763edaf3fced5c97c8f43Tadashi G. Takaoka        public long getItemId(int position) {
70748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka            return position;
71d1630a3add1c38d365078ad12fde52dc1934f296Tadashi G. Takaoka        }
72748e1072031c26b00f2a9707a340527bd970514fTadashi G. Takaoka
73        public View getView(int position, View convertView, ViewGroup parent) {
74            TextView view;
75            if (convertView == null) {
76                view = (TextView)mInflater.inflate(
77                        android.R.layout.simple_list_item_1, parent, false);
78            } else {
79                view = (TextView)convertView;
80            }
81
82            MtpStorageInfo info = mStorageList.get(position);
83            if (info != null) {
84                view.setText(info.getDescription());
85            } else {
86                view.setText("???");
87            }
88            return view;
89        }
90    }
91
92    @Override
93    protected void onCreate(Bundle savedInstanceState) {
94        super.onCreate(savedInstanceState);
95
96        mClient = ((CameraBrowserApplication)getApplication()).getMtpClient();
97        mDeviceName = getIntent().getStringExtra("device");
98        mDisconnectedReceiver = new DeviceDisconnectedReceiver(this, mDeviceName);
99    }
100
101    @Override
102    protected void onResume() {
103        super.onResume();
104        mStorageList = mClient.getStorageList(mDeviceName);
105        setListAdapter(new StorageAdapter(this));
106    }
107
108    @Override
109    protected void onDestroy() {
110        unregisterReceiver(mDisconnectedReceiver);
111        super.onDestroy();
112    }
113
114    @Override
115    protected void onListItemClick(ListView l, View v, int position, long id) {
116        Intent intent = new Intent(this, ObjectBrowser.class);
117        intent.putExtra("device", mDeviceName);
118        intent.putExtra("storage", mStorageList.get(position).getStorageId());
119        startActivity(intent);
120    }
121}
122