ObjectViewer.java revision 4453aa4c306871bb85fcf1d6efcaaf151327f2ce
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 * * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *      http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16package com.android.camerabrowser;
17
18import android.app.Activity;
19import android.content.ActivityNotFoundException;
20import android.content.ContentValues;
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.os.Environment;
28import android.provider.Ptp;
29import android.util.Log;
30import android.view.View;
31import android.widget.Button;
32import android.widget.ImageView;
33import android.widget.TextView;
34import android.widget.Toast;
35
36import java.io.File;
37import java.util.Date;
38
39/**
40 * A view to display the properties of an object.
41 */
42public class ObjectViewer extends Activity implements View.OnClickListener {
43
44    private static final String TAG = "ObjectViewer";
45
46    private int mDeviceID;
47    private long mStorageID;
48    private long mObjectID;
49    private String mFileName;
50    private Button mImportButton;
51    private Button mDeleteButton;
52    private DeviceDisconnectedReceiver mDisconnectedReceiver;
53
54    private static final String[] OBJECT_COLUMNS =
55        new String[] {  Ptp.Object._ID,
56                        Ptp.Object.NAME,
57                        Ptp.Object.SIZE,
58                        Ptp.Object.THUMB_WIDTH,
59                        Ptp.Object.THUMB_HEIGHT,
60                        Ptp.Object.THUMB_SIZE,
61                        Ptp.Object.IMAGE_WIDTH,
62                        Ptp.Object.IMAGE_HEIGHT,
63                        Ptp.Object.IMAGE_DEPTH,
64                        Ptp.Object.SEQUENCE_NUMBER,
65                        Ptp.Object.DATE_CREATED,
66                        Ptp.Object.DATE_MODIFIED,
67                        Ptp.Object.KEYWORDS,
68                        Ptp.Object.THUMB,
69                        Ptp.Object.FORMAT,
70                        };
71
72    @Override
73    protected void onCreate(Bundle savedInstanceState) {
74        super.onCreate(savedInstanceState);
75
76        setContentView(R.layout.object_info);
77
78        mImportButton = (Button)findViewById(R.id.import_button);
79        mImportButton.setOnClickListener(this);
80        mDeleteButton = (Button)findViewById(R.id.delete_button);
81        mDeleteButton.setOnClickListener(this);
82
83        mDeviceID = getIntent().getIntExtra("device", 0);
84        mStorageID = getIntent().getLongExtra("storage", 0);
85        mObjectID = getIntent().getLongExtra("object", 0);
86        mDisconnectedReceiver = new DeviceDisconnectedReceiver(this, mDeviceID);
87    }
88
89    @Override
90    protected void onResume() {
91        super.onResume();
92
93        if (mDeviceID != 0 && mObjectID != 0) {
94        Cursor c = getContentResolver().query(
95                        Ptp.Object.getContentUri(mDeviceID, mObjectID),
96                        OBJECT_COLUMNS, null, null, null);
97            c.moveToFirst();
98            TextView view = (TextView)findViewById(R.id.name);
99            mFileName = c.getString(1);
100            view.setText(mFileName);
101            view = (TextView)findViewById(R.id.size);
102            view.setText(Long.toString(c.getLong(2)));
103            view = (TextView)findViewById(R.id.thumb_width);
104            view.setText(Long.toString(c.getLong(3)));
105            view = (TextView)findViewById(R.id.thumb_height);
106            view.setText(Long.toString(c.getLong(4)));
107            view = (TextView)findViewById(R.id.thumb_size);
108            view.setText(Long.toString(c.getLong(5)));
109            view = (TextView)findViewById(R.id.width);
110            view.setText(Long.toString(c.getLong(6)));
111            view = (TextView)findViewById(R.id.height);
112            view.setText(Long.toString(c.getLong(7)));
113            view = (TextView)findViewById(R.id.depth);
114            view.setText(Long.toString(c.getLong(8)));
115            view = (TextView)findViewById(R.id.sequence);
116            view.setText(Long.toString(c.getLong(9)));
117            view = (TextView)findViewById(R.id.created);
118            Date date = new Date(c.getLong(10) * 1000);
119            view.setText(date.toString());
120            view = (TextView)findViewById(R.id.modified);
121            date = new Date(c.getLong(11) * 1000);
122            view.setText(date.toString());
123            view = (TextView)findViewById(R.id.keywords);
124            view.setText(c.getString(12));
125            byte[] thumbnail = c.getBlob(13);
126            if (thumbnail != null) {
127                ImageView thumbView = (ImageView)findViewById(R.id.thumbnail);
128                Bitmap bitmap = BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length);
129                if (bitmap != null) {
130                    thumbView.setImageBitmap(bitmap);
131                }
132            }
133            view = (TextView)findViewById(R.id.format);
134            view.setText(Long.toHexString(c.getLong(14)).toUpperCase());
135        }
136    }
137
138    @Override
139    protected void onDestroy() {
140        unregisterReceiver(mDisconnectedReceiver);
141        super.onDestroy();
142    }
143
144    private void importObject() {
145        // copy file to /mnt/sdcard/imported/<filename>
146        File dest = Environment.getExternalStorageDirectory();
147        dest = new File(dest, "imported");
148        dest.mkdirs();
149        dest = new File(dest, mFileName);
150
151        Uri requestUri = Ptp.Object.getContentUriForImport(mDeviceID, mObjectID,
152                dest.getAbsolutePath());
153        Uri resultUri = getContentResolver().insert(requestUri, new ContentValues());
154        Log.d(TAG, "save returned " + resultUri);
155
156        if (resultUri != null) {
157            Toast.makeText(this, R.string.object_saved_message, Toast.LENGTH_SHORT).show();
158            Intent intent = new Intent(Intent.ACTION_VIEW, resultUri);
159            try {
160                startActivity(intent);
161            } catch (ActivityNotFoundException e) {
162                Toast.makeText(this, R.string.start_activity_failed_message, Toast.LENGTH_SHORT).show();
163            }
164        } else {
165            Toast.makeText(this, R.string.save_failed_message, Toast.LENGTH_SHORT).show();
166        }
167    }
168
169    private void deleteObject() {
170        Uri uri = Ptp.Object.getContentUri(mDeviceID, mObjectID);
171
172        Log.d(TAG, "deleting " + uri);
173
174        int result = getContentResolver().delete(uri, null, null);
175        if (result > 0) {
176            Toast.makeText(this, R.string.object_deleted_message, Toast.LENGTH_SHORT).show();
177            finish();
178        } else {
179            Toast.makeText(this, R.string.delete_failed_message, Toast.LENGTH_SHORT).show();
180        }
181    }
182
183    public void onClick(View v) {
184        if (v == mImportButton) {
185            importObject();
186        } else if (v == mDeleteButton) {
187            deleteObject();
188        }
189    }
190}
191