120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood/* 220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * Copyright (C) 2010 The Android Open Source Project 320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * 420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * you may not use this file except in compliance with the License. 620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * You may obtain a copy of the License at 720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * 820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * 1020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * Unless required by applicable law or agreed to in writing, software 1120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 1220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * See the License for the specific language governing permissions and 1420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * limitations under the License. 1520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood */ 1620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 1720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodpackage com.android.camerabrowser; 1820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 1920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.app.ListActivity; 2020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.content.ContentResolver; 2120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.content.Context; 2220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.content.Intent; 2320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.mtp.MtpDevice; 2420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.mtp.MtpDeviceInfo; 2520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.os.Bundle; 2620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.util.Log; 2720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.view.LayoutInflater; 2820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.view.View; 2920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.view.ViewGroup; 3020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.BaseAdapter; 3120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.ListView; 3220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.TextView; 3320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.TwoLineListItem; 3420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 3520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport java.util.List; 3620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 3720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood /** 3820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * A list view displaying all connected cameras. 3920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood */ 4020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodpublic class CameraBrowser extends ListActivity implements MtpClient.Listener { 4120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 4220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private static final String TAG = "CameraBrowser"; 4320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 4420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private MtpClient mClient; 4520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private List<MtpDevice> mDeviceList; 4620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 4720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private static final int MODEL_COLUMN = 0; 4820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private static final int MANUFACTURER_COLUMN = 1; 4920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private static final int COLUMN_COUNT = 2; 5020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 5120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private class CameraAdapter extends BaseAdapter { 5220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private final Context mContext; 5320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private final LayoutInflater mInflater; 5420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 5520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public CameraAdapter(Context c) { 5620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mContext = c; 5720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 5820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 5920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 6020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public int getCount() { 6120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return mDeviceList.size(); 6220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 6320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 6420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public Object getItem(int position) { 6520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return mDeviceList.get(position); 6620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 6720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 6820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public long getItemId(int position) { 6920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return position; 7020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 7120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 7220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public View getView(int position, View convertView, ViewGroup parent) { 7320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood TwoLineListItem view; 7420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (convertView == null) { 7520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood view = (TwoLineListItem)mInflater.inflate( 7620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood android.R.layout.simple_list_item_2, parent, false); 7720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } else { 7820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood view = (TwoLineListItem)convertView; 7920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 8020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 81c72eb9113a2f3f7886afcecf5c29507e0a3a8266Mike Lockwood TextView textView1 = (TextView)view.findViewById(android.R.id.text1); 82c72eb9113a2f3f7886afcecf5c29507e0a3a8266Mike Lockwood TextView textView2 = (TextView)view.findViewById(android.R.id.text2); 8320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood MtpDevice device = mDeviceList.get(position); 8420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood MtpDeviceInfo info = device.getDeviceInfo(); 8520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (info != null) { 8620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood textView1.setText(info.getManufacturer()); 8720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood textView2.setText(info.getModel()); 8820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } else { 8920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood textView1.setText("???"); 9020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood textView2.setText("???"); 9120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 9220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return view; 9320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 9420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 9520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 9620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 9720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onCreate(Bundle savedInstanceState) { 9820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood super.onCreate(savedInstanceState); 9920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mClient = ((CameraBrowserApplication)getApplication()).getMtpClient(); 10020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mClient.addListener(this); 10120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mDeviceList = mClient.getDeviceList(); 10220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 10320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 10420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 10520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onResume() { 10620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood super.onResume(); 10720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood reload(); 10820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 10920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 11020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 11120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onDestroy() { 11220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mClient.removeListener(this); 11320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood super.onDestroy(); 11420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 11520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 11620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 11720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onListItemClick(ListView l, View v, int position, long id) { 11820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood Intent intent = new Intent(this, StorageBrowser.class); 11920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood intent.putExtra("device", mDeviceList.get(position).getDeviceName()); 12020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood startActivity(intent); 12120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 12220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 12320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private void reload() { 12420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood setListAdapter(new CameraAdapter(this)); 12520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 12620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 12720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public void deviceAdded(MtpDevice device) { 12820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood Log.d(TAG, "deviceAdded: " + device.getDeviceName()); 12920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mDeviceList = mClient.getDeviceList(); 13020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood reload(); 13120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 13220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 13320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public void deviceRemoved(MtpDevice device) { 13420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood Log.d(TAG, "deviceRemoved: " + device.getDeviceName()); 13520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mDeviceList = mClient.getDeviceList(); 13620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood reload(); 13720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 13820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood} 139