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.Context; 2120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.content.Intent; 2220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.database.Cursor; 2320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.graphics.Bitmap; 2420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.graphics.BitmapFactory; 2520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.mtp.MtpConstants; 2620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.mtp.MtpDevice; 2720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.mtp.MtpObjectInfo; 2820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.os.Bundle; 2920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.util.Log; 3020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.view.LayoutInflater; 3120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.view.View; 3220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.view.ViewGroup; 3320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.BaseAdapter; 3420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.ImageView; 3520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.ListView; 3620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport android.widget.TextView; 3720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 3820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodimport java.util.List; 3920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 4020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood /** 4120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood * A list view displaying all objects within a container (folder or storage unit). 4220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood */ 4320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwoodpublic class ObjectBrowser extends ListActivity { 4420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 4520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private static final String TAG = "ObjectBrowser"; 4620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 4720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private MtpClient mClient; 4820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private List<MtpObjectInfo> mObjectList; 4920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private String mDeviceName; 5020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private int mStorageID; 5120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private int mObjectID; 5220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private DeviceDisconnectedReceiver mDisconnectedReceiver; 5320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 5420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private class ObjectAdapter extends BaseAdapter { 5520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private final Context mContext; 5620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood private final LayoutInflater mInflater; 5720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 5820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public ObjectAdapter(Context c) { 5920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mContext = c; 6020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 6120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 6220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 6320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public int getCount() { 6420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (mObjectList == null) { 6520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return 0; 6620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } else { 6720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return mObjectList.size(); 6820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 6920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 7020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 7120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public Object getItem(int position) { 7220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return mObjectList.get(position); 7320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 7420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 7520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public long getItemId(int position) { 7620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return position; 7720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 7820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 7920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood public View getView(int position, View convertView, ViewGroup parent) { 8020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood View view; 8120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (convertView == null) { 8220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood view = mInflater.inflate(R.layout.object_list, parent, false); 8320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } else { 8420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood view = convertView; 8520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 8620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 8720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood TextView nameView = (TextView)view.findViewById(R.id.name); 8820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood MtpObjectInfo info = mObjectList.get(position); 8920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood nameView.setText(info.getName()); 9020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 9120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood int thumbFormat = info.getThumbFormat(); 9220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (thumbFormat == MtpConstants.FORMAT_EXIF_JPEG 9320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood || thumbFormat == MtpConstants.FORMAT_JFIF) { 9420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood byte[] thumbnail = mClient.getThumbnail(mDeviceName, info.getObjectHandle()); 9520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (thumbnail != null) { 9620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood Bitmap bitmap = BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length); 9720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (bitmap != null) { 9820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood ImageView thumbView = (ImageView)view.findViewById(R.id.thumbnail); 9920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood thumbView.setImageBitmap(bitmap); 10020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 10120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 10220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 10320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood return view; 10420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 10520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 10620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 10720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 10820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onCreate(Bundle savedInstanceState) { 10920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood super.onCreate(savedInstanceState); 11020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 11120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mClient = ((CameraBrowserApplication)getApplication()).getMtpClient(); 11220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mDeviceName = getIntent().getStringExtra("device"); 11320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mStorageID = getIntent().getIntExtra("storage", 0); 11420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mObjectID = getIntent().getIntExtra("object", 0); 11520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mDisconnectedReceiver = new DeviceDisconnectedReceiver(this, mDeviceName); 11620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 11720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 11820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 11920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onResume() { 12020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood super.onResume(); 12120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 12220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood mObjectList = mClient.getObjectList(mDeviceName, mStorageID, mObjectID); 12320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood setListAdapter(new ObjectAdapter(this)); 12420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 12520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 12620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 12720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onDestroy() { 12820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood unregisterReceiver(mDisconnectedReceiver); 12920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood super.onDestroy(); 13020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 13120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood 13220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood @Override 13320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood protected void onListItemClick(ListView l, View v, int position, long id) { 13420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood MtpObjectInfo info = mObjectList.get(position); 13520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood Intent intent; 13620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood if (info.getFormat() == MtpConstants.FORMAT_ASSOCIATION) { 13720bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood intent = new Intent(this, ObjectBrowser.class); 13820bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } else { 13920bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood intent = new Intent(this, ObjectViewer.class); 14020bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 14120bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood intent.putExtra("device", mDeviceName); 14220bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood intent.putExtra("storage", mStorageID); 14320bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood intent.putExtra("object", info.getObjectHandle()); 14420bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood startActivity(intent); 14520bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood } 14620bc97fc541610a296d12e25570ac3eb6d599673Mike Lockwood} 147