ObjectBrowser.java revision 147717c2671e34e0b2aef1570bcc9498f1074a0e
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.camerabrowser; 18 19import android.app.ListActivity; 20import android.content.Context; 21import android.content.Intent; 22import android.database.Cursor; 23import android.graphics.Bitmap; 24import android.graphics.BitmapFactory; 25import android.net.Uri; 26import android.os.Bundle; 27import android.provider.Mtp; 28import android.util.Log; 29import android.view.Menu; 30import android.view.MenuInflater; 31import android.view.MenuItem; 32import android.view.View; 33import android.widget.AdapterView; 34import android.widget.ImageView; 35import android.widget.ListView; 36import android.widget.ResourceCursorAdapter; 37import android.widget.TextView; 38import android.widget.Toast; 39 40 /** 41 * A list view displaying all objects within a container (folder or storage unit). 42 */ 43public class ObjectBrowser extends ListActivity { 44 45 private static final String TAG = "ObjectBrowser"; 46 47 private Cursor mCursor; 48 private ObjectCursorAdapter mAdapter; 49 private int mDeviceID; 50 private int mStorageID; 51 private int mObjectID; 52 53 private static final String[] OBJECT_COLUMNS = 54 new String[] { Mtp.Object._ID, Mtp.Object.NAME, Mtp.Object.FORMAT, Mtp.Object.THUMB }; 55 56 static final int ID_COLUMN = 0; 57 static final int NAME_COLUMN = 1; 58 static final int FORMAT_COLUMN = 2; 59 static final int THUMB_COLUMN = 3; 60 61 @Override 62 protected void onCreate(Bundle savedInstanceState) { 63 super.onCreate(savedInstanceState); 64 } 65 66 @Override 67 protected void onResume() { 68 super.onResume(); 69 70 mDeviceID = getIntent().getIntExtra("device", 0); 71 mStorageID = getIntent().getIntExtra("storage", 0); 72 mObjectID = getIntent().getIntExtra("object", 0); 73 if (mDeviceID != 0 && mStorageID != 0) { 74 Cursor c; 75 Uri uri; 76 if (mObjectID == 0) { 77 uri = Mtp.Object.getContentUriForStorageChildren(mDeviceID, mStorageID); 78 } else { 79 uri = Mtp.Object.getContentUriForObjectChildren(mDeviceID, mObjectID); 80 } 81 Log.d(TAG, "query " + uri); 82 c = getContentResolver().query(uri, OBJECT_COLUMNS, null, null, null); 83 startManagingCursor(c); 84 mCursor = c; 85 86 // Map Cursor columns to views defined in simple_list_item_1.xml 87 mAdapter = new ObjectCursorAdapter(this, c); 88 setListAdapter(mAdapter); 89 } 90 } 91 92 @Override 93 protected void onListItemClick(ListView l, View v, int position, long id) { 94 int rowID = (int)mAdapter.getItemId(position); 95 Cursor c = getContentResolver().query( 96 Mtp.Object.getContentUri(mDeviceID, rowID), 97 OBJECT_COLUMNS, null, null, null); 98 Log.d(TAG, "query returned " + c + " count: " + c.getCount()); 99 long format = 0; 100 if (c != null && c.getCount() == 1) { 101 c.moveToFirst(); 102 long rowId = c.getLong(ID_COLUMN); 103 String name = c.getString(NAME_COLUMN); 104 format = c.getLong(FORMAT_COLUMN); 105 Log.d(TAG, "rowId: " + rowId + " name: " + name + " format: " + format); 106 } 107 if (format == Mtp.Object.FORMAT_JFIF) { 108 Intent intent = new Intent(this, ObjectViewer.class); 109 intent.putExtra("device", mDeviceID); 110 intent.putExtra("storage", mStorageID); 111 intent.putExtra("object",rowID); 112 startActivity(intent); 113 } else { 114 Intent intent = new Intent(this, ObjectBrowser.class); 115 intent.putExtra("device", mDeviceID); 116 intent.putExtra("storage", mStorageID); 117 intent.putExtra("object", rowID); 118 startActivity(intent); 119 } 120 } 121 122 @Override 123 public boolean onCreateOptionsMenu(Menu menu) { 124 MenuInflater inflater = getMenuInflater(); 125 inflater.inflate(R.menu.object_menu, menu); 126 return true; 127 } 128 129 @Override 130 public boolean onPrepareOptionsMenu(Menu menu) { 131 int position = mList.getSelectedItemPosition(); 132 MenuItem item = menu.findItem(R.id.delete); 133 item.setEnabled(position != AdapterView.INVALID_POSITION); 134 return true; 135 } 136 137 @Override 138 public boolean onOptionsItemSelected(MenuItem item) { 139 switch (item.getItemId()) { 140 case R.id.delete: 141 deleteSelected(); 142 return true; 143 } 144 return false; 145 } 146 147 private void deleteSelected() { 148 int position = mList.getSelectedItemPosition(); 149 int rowID = (int)mAdapter.getItemId(position); 150 Uri uri = Mtp.Object.getContentUri(mDeviceID, rowID); 151 152 Log.d(TAG, "deleting " + uri); 153 154 int result = getContentResolver().delete(uri, null, null); 155 if (result > 0) { 156 Toast.makeText(this, R.string.object_deleted_message, Toast.LENGTH_SHORT).show(); 157 mCursor.requery(); 158 } else { 159 Toast.makeText(this, R.string.delete_failed_message, Toast.LENGTH_SHORT).show(); 160 } 161 } 162 163 private class ObjectCursorAdapter extends ResourceCursorAdapter { 164 165 public ObjectCursorAdapter(Context context, Cursor c) { 166 super(context, R.layout.object_list, c); 167 } 168 169 @Override 170 public void bindView(View view, Context context, Cursor cursor) { 171 ImageView thumbView = (ImageView)view.findViewById(R.id.thumbnail); 172 TextView nameView = (TextView)view.findViewById(R.id.name); 173 174 // get the thumbnail 175 byte[] thumbnail = cursor.getBlob(THUMB_COLUMN); 176 if (thumbnail != null) { 177 Bitmap bitmap = BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length); 178 if (bitmap != null) { 179 thumbView.setImageBitmap(bitmap); 180 } 181 } 182 183 // get the name 184 String name = cursor.getString(NAME_COLUMN); 185 if (name == null) { 186 name = ""; 187 } 188 nameView.setText(name); 189 } 190 } 191} 192