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