summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/data
diff options
context:
space:
mode:
authorBobby Georgescu <georgescu@google.com>2012-12-26 00:52:28 -0800
committerBobby Georgescu <georgescu@google.com>2013-01-07 14:43:56 -0800
commitd3aac52ffb88ced53413d5eef29c641dd6982267 (patch)
treeb5e614ec3f5cc1f29ee6b501c7cfa8ac0bfb0fce /src/com/android/gallery3d/data
parent3114fa3a8a99be3c819d102dd1d069face13c43f (diff)
downloadandroid_packages_apps_Gallery2-d3aac52ffb88ced53413d5eef29c641dd6982267.tar.gz
android_packages_apps_Gallery2-d3aac52ffb88ced53413d5eef29c641dd6982267.tar.bz2
android_packages_apps_Gallery2-d3aac52ffb88ced53413d5eef29c641dd6982267.zip
Replace camera importer
Change-Id: Icfeb23301bc6c9f8c8b12824bcbb0d8b41852d07
Diffstat (limited to 'src/com/android/gallery3d/data')
-rw-r--r--src/com/android/gallery3d/data/DataManager.java11
-rw-r--r--src/com/android/gallery3d/data/DataSourceType.java5
-rw-r--r--src/com/android/gallery3d/data/MediaObject.java17
-rw-r--r--src/com/android/gallery3d/data/MtpContext.java144
-rw-r--r--src/com/android/gallery3d/data/MtpDevice.java177
-rw-r--r--src/com/android/gallery3d/data/MtpDeviceSet.java156
-rw-r--r--src/com/android/gallery3d/data/MtpImage.java171
-rw-r--r--src/com/android/gallery3d/data/MtpSource.java76
8 files changed, 9 insertions, 748 deletions
diff --git a/src/com/android/gallery3d/data/DataManager.java b/src/com/android/gallery3d/data/DataManager.java
index 4ec7b6d98..8fcf4008a 100644
--- a/src/com/android/gallery3d/data/DataManager.java
+++ b/src/com/android/gallery3d/data/DataManager.java
@@ -68,13 +68,9 @@ public class DataManager implements StitchingChangeListener {
private static final String TAG = "DataManager";
// This is the path for the media set seen by the user at top level.
- private static final String TOP_SET_PATH = ApiHelper.HAS_MTP
- ? "/combo/{/mtp,/local/all,/picasa/all}"
- : "/combo/{/local/all,/picasa/all}";
+ private static final String TOP_SET_PATH = "/combo/{/local/all,/picasa/all}";
- private static final String TOP_IMAGE_SET_PATH = ApiHelper.HAS_MTP
- ? "/combo/{/mtp,/local/image,/picasa/image}"
- : "/combo/{/local/image,/picasa/image}";
+ private static final String TOP_IMAGE_SET_PATH = "/combo/{/local/image,/picasa/image}";
private static final String TOP_VIDEO_SET_PATH =
"/combo/{/local/video,/picasa/video}";
@@ -118,9 +114,6 @@ public class DataManager implements StitchingChangeListener {
// the order matters, the UriSource must come last
addSource(new LocalSource(mApplication));
addSource(new PicasaSource(mApplication));
- if (ApiHelper.HAS_MTP) {
- addSource(new MtpSource(mApplication));
- }
addSource(new ComboSource(mApplication));
addSource(new ClusterSource(mApplication));
addSource(new FilterSource(mApplication));
diff --git a/src/com/android/gallery3d/data/DataSourceType.java b/src/com/android/gallery3d/data/DataSourceType.java
index 27611880d..ab534d0c3 100644
--- a/src/com/android/gallery3d/data/DataSourceType.java
+++ b/src/com/android/gallery3d/data/DataSourceType.java
@@ -22,12 +22,10 @@ public final class DataSourceType {
public static final int TYPE_NOT_CATEGORIZED = 0;
public static final int TYPE_LOCAL = 1;
public static final int TYPE_PICASA = 2;
- public static final int TYPE_MTP = 3;
- public static final int TYPE_CAMERA = 4;
+ public static final int TYPE_CAMERA = 3;
private static final Path PICASA_ROOT = Path.fromString("/picasa");
private static final Path LOCAL_ROOT = Path.fromString("/local");
- private static final Path MTP_ROOT = Path.fromString("/mtp");
public static int identifySourceType(MediaSet set) {
if (set == null) {
@@ -40,7 +38,6 @@ public final class DataSourceType {
Path prefix = path.getPrefixPath();
if (prefix == PICASA_ROOT) return TYPE_PICASA;
- if (prefix == MTP_ROOT) return TYPE_MTP;
if (prefix == LOCAL_ROOT) return TYPE_LOCAL;
return TYPE_NOT_CATEGORIZED;
diff --git a/src/com/android/gallery3d/data/MediaObject.java b/src/com/android/gallery3d/data/MediaObject.java
index 9c82661f6..270d4cf0b 100644
--- a/src/com/android/gallery3d/data/MediaObject.java
+++ b/src/com/android/gallery3d/data/MediaObject.java
@@ -35,13 +35,12 @@ public abstract class MediaObject {
public static final int SUPPORT_CACHE = 1 << 8;
public static final int SUPPORT_EDIT = 1 << 9;
public static final int SUPPORT_INFO = 1 << 10;
- public static final int SUPPORT_IMPORT = 1 << 11;
- public static final int SUPPORT_TRIM = 1 << 12;
- public static final int SUPPORT_UNLOCK = 1 << 13;
- public static final int SUPPORT_BACK = 1 << 14;
- public static final int SUPPORT_ACTION = 1 << 15;
- public static final int SUPPORT_CAMERA_SHORTCUT = 1 << 16;
- public static final int SUPPORT_MUTE = 1 << 17;
+ public static final int SUPPORT_TRIM = 1 << 11;
+ public static final int SUPPORT_UNLOCK = 1 << 12;
+ public static final int SUPPORT_BACK = 1 << 13;
+ public static final int SUPPORT_ACTION = 1 << 14;
+ public static final int SUPPORT_CAMERA_SHORTCUT = 1 << 15;
+ public static final int SUPPORT_MUTE = 1 << 16;
public static final int SUPPORT_ALL = 0xffffffff;
// These are the bits returned from getMediaType():
@@ -120,10 +119,6 @@ public abstract class MediaObject {
return MEDIA_TYPE_UNKNOWN;
}
- public boolean Import() {
- throw new UnsupportedOperationException();
- }
-
public MediaDetails getDetails() {
MediaDetails details = new MediaDetails();
return details;
diff --git a/src/com/android/gallery3d/data/MtpContext.java b/src/com/android/gallery3d/data/MtpContext.java
deleted file mode 100644
index 53b6faafb..000000000
--- a/src/com/android/gallery3d/data/MtpContext.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package com.android.gallery3d.data;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.media.MediaScannerConnection;
-import android.media.MediaScannerConnection.MediaScannerConnectionClient;
-import android.mtp.MtpObjectInfo;
-import android.net.Uri;
-import android.os.Environment;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.common.ApiHelper;
-import com.android.gallery3d.util.BucketNames;
-import com.android.gallery3d.util.GalleryUtils;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB_MR1)
-public class MtpContext implements MtpClient.Listener {
- private static final String TAG = "MtpContext";
-
- private ScannerClient mScannerClient;
- private Context mContext;
- private MtpClient mClient;
-
- private static final class ScannerClient implements MediaScannerConnectionClient {
- ArrayList<String> mPaths = new ArrayList<String>();
- MediaScannerConnection mScannerConnection;
- boolean mConnected;
- Object mLock = new Object();
-
- public ScannerClient(Context context) {
- mScannerConnection = new MediaScannerConnection(context, this);
- }
-
- public void scanPath(String path) {
- synchronized (mLock) {
- if (mConnected) {
- mScannerConnection.scanFile(path, null);
- } else {
- mPaths.add(path);
- mScannerConnection.connect();
- }
- }
- }
-
- @Override
- public void onMediaScannerConnected() {
- synchronized (mLock) {
- mConnected = true;
- if (!mPaths.isEmpty()) {
- for (String path : mPaths) {
- mScannerConnection.scanFile(path, null);
- }
- mPaths.clear();
- }
- }
- }
-
- @Override
- public void onScanCompleted(String path, Uri uri) {
- }
- }
-
- public MtpContext(Context context) {
- mContext = context;
- mScannerClient = new ScannerClient(context);
- mClient = new MtpClient(mContext);
- }
-
- public void pause() {
- mClient.removeListener(this);
- }
-
- public void resume() {
- mClient.addListener(this);
- notifyDirty();
- }
-
- @Override
- public void deviceAdded(android.mtp.MtpDevice device) {
- notifyDirty();
- showToast(R.string.camera_connected);
- }
-
- @Override
- public void deviceRemoved(android.mtp.MtpDevice device) {
- notifyDirty();
- showToast(R.string.camera_disconnected);
- }
-
- private void notifyDirty() {
- mContext.getContentResolver().notifyChange(Uri.parse("mtp://"), null);
- }
-
- private void showToast(final int msg) {
- Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
- }
-
- public MtpClient getMtpClient() {
- return mClient;
- }
-
- public boolean copyFile(String deviceName, MtpObjectInfo objInfo) {
- if (GalleryUtils.hasSpaceForSize(objInfo.getCompressedSize())) {
- File dest = Environment.getExternalStorageDirectory();
- dest = new File(dest, BucketNames.IMPORTED);
- dest.mkdirs();
- String destPath = new File(dest, objInfo.getName()).getAbsolutePath();
- int objectId = objInfo.getObjectHandle();
- if (mClient.importFile(deviceName, objectId, destPath)) {
- mScannerClient.scanPath(destPath);
- return true;
- }
- } else {
- Log.w(TAG, "No space to import " + objInfo.getName() +
- " whose size = " + objInfo.getCompressedSize());
- }
- return false;
- }
-
- public boolean copyAlbum(String deviceName, String albumName,
- List<MtpObjectInfo> children) {
- File dest = Environment.getExternalStorageDirectory();
- dest = new File(dest, albumName);
- dest.mkdirs();
- int success = 0;
- for (MtpObjectInfo child : children) {
- if (!GalleryUtils.hasSpaceForSize(child.getCompressedSize())) continue;
-
- File importedFile = new File(dest, child.getName());
- String path = importedFile.getAbsolutePath();
- if (mClient.importFile(deviceName, child.getObjectHandle(), path)) {
- mScannerClient.scanPath(path);
- success++;
- }
- }
- return success == children.size();
- }
-}
diff --git a/src/com/android/gallery3d/data/MtpDevice.java b/src/com/android/gallery3d/data/MtpDevice.java
deleted file mode 100644
index 25ffbc8ba..000000000
--- a/src/com/android/gallery3d/data/MtpDevice.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.gallery3d.data;
-
-import android.annotation.TargetApi;
-import android.hardware.usb.UsbDevice;
-import android.mtp.MtpConstants;
-import android.mtp.MtpObjectInfo;
-import android.mtp.MtpStorageInfo;
-import android.net.Uri;
-import android.util.Log;
-
-import com.android.gallery3d.app.GalleryApp;
-import com.android.gallery3d.common.ApiHelper;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB_MR1)
-public class MtpDevice extends MediaSet {
- private static final String TAG = "MtpDevice";
-
- private final GalleryApp mApplication;
- private final int mDeviceId;
- private final String mDeviceName;
- private final MtpContext mMtpContext;
- private final String mName;
- private final ChangeNotifier mNotifier;
- private final Path mItemPath;
- private List<MtpObjectInfo> mJpegChildren;
-
- public MtpDevice(Path path, GalleryApp application, int deviceId,
- String name, MtpContext mtpContext) {
- super(path, nextVersionNumber());
- mApplication = application;
- mDeviceId = deviceId;
- mDeviceName = UsbDevice.getDeviceName(deviceId);
- mMtpContext = mtpContext;
- mName = name;
- mNotifier = new ChangeNotifier(this, Uri.parse("mtp://"), application);
- mItemPath = Path.fromString("/mtp/item/" + String.valueOf(deviceId));
- mJpegChildren = new ArrayList<MtpObjectInfo>();
- }
-
- public MtpDevice(Path path, GalleryApp application, int deviceId,
- MtpContext mtpContext) {
- this(path, application, deviceId,
- MtpDeviceSet.getDeviceName(mtpContext, deviceId), mtpContext);
- }
-
- private List<MtpObjectInfo> loadItems() {
- ArrayList<MtpObjectInfo> result = new ArrayList<MtpObjectInfo>();
-
- List<MtpStorageInfo> storageList = mMtpContext.getMtpClient()
- .getStorageList(mDeviceName);
- if (storageList == null) return result;
-
- for (MtpStorageInfo info : storageList) {
- collectJpegChildren(info.getStorageId(), 0, result);
- }
-
- return result;
- }
-
- private void collectJpegChildren(int storageId, int objectId,
- ArrayList<MtpObjectInfo> result) {
- ArrayList<MtpObjectInfo> dirChildren = new ArrayList<MtpObjectInfo>();
-
- queryChildren(storageId, objectId, result, dirChildren);
-
- for (int i = 0, n = dirChildren.size(); i < n; i++) {
- MtpObjectInfo info = dirChildren.get(i);
- collectJpegChildren(storageId, info.getObjectHandle(), result);
- }
- }
-
- private void queryChildren(int storageId, int objectId,
- ArrayList<MtpObjectInfo> jpeg, ArrayList<MtpObjectInfo> dir) {
- List<MtpObjectInfo> children = mMtpContext.getMtpClient().getObjectList(
- mDeviceName, storageId, objectId);
- if (children == null) return;
-
- for (MtpObjectInfo obj : children) {
- int format = obj.getFormat();
- switch (format) {
- case MtpConstants.FORMAT_JFIF:
- case MtpConstants.FORMAT_EXIF_JPEG:
- jpeg.add(obj);
- break;
- case MtpConstants.FORMAT_ASSOCIATION:
- dir.add(obj);
- break;
- default:
- Log.w(TAG, "other type: name = " + obj.getName()
- + ", format = " + format);
- }
- }
- }
-
- public static MtpObjectInfo getObjectInfo(MtpContext mtpContext, int deviceId,
- int objectId) {
- String deviceName = UsbDevice.getDeviceName(deviceId);
- return mtpContext.getMtpClient().getObjectInfo(deviceName, objectId);
- }
-
- @Override
- public ArrayList<MediaItem> getMediaItem(int start, int count) {
- ArrayList<MediaItem> result = new ArrayList<MediaItem>();
- int begin = start;
- int end = Math.min(start + count, mJpegChildren.size());
-
- DataManager dataManager = mApplication.getDataManager();
- for (int i = begin; i < end; i++) {
- MtpObjectInfo child = mJpegChildren.get(i);
- Path childPath = mItemPath.getChild(child.getObjectHandle());
- synchronized (DataManager.LOCK) {
- MtpImage image = (MtpImage) dataManager.peekMediaObject(childPath);
- if (image == null) {
- image = new MtpImage(
- childPath, mApplication, mDeviceId, child, mMtpContext);
- } else {
- image.updateContent(child);
- }
- result.add(image);
- }
- }
- return result;
- }
-
- @Override
- public int getMediaItemCount() {
- return mJpegChildren.size();
- }
-
- @Override
- public String getName() {
- return mName;
- }
-
- @Override
- public long reload() {
- if (mNotifier.isDirty()) {
- mDataVersion = nextVersionNumber();
- mJpegChildren = loadItems();
- }
- return mDataVersion;
- }
-
- @Override
- public int getSupportedOperations() {
- return SUPPORT_IMPORT;
- }
-
- @Override
- public boolean Import() {
- return mMtpContext.copyAlbum(mDeviceName, mName, mJpegChildren);
- }
-
- @Override
- public boolean isLeafAlbum() {
- return true;
- }
-}
diff --git a/src/com/android/gallery3d/data/MtpDeviceSet.java b/src/com/android/gallery3d/data/MtpDeviceSet.java
deleted file mode 100644
index bc4bc6321..000000000
--- a/src/com/android/gallery3d/data/MtpDeviceSet.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.gallery3d.data;
-
-import android.annotation.TargetApi;
-import android.mtp.MtpDeviceInfo;
-import android.net.Uri;
-import android.os.Handler;
-import android.util.Log;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.app.GalleryApp;
-import com.android.gallery3d.common.ApiHelper;
-import com.android.gallery3d.util.Future;
-import com.android.gallery3d.util.FutureListener;
-import com.android.gallery3d.util.MediaSetUtils;
-import com.android.gallery3d.util.ThreadPool.Job;
-import com.android.gallery3d.util.ThreadPool.JobContext;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-// MtpDeviceSet -- MtpDevice -- MtpImage
-@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB_MR1)
-public class MtpDeviceSet extends MediaSet
- implements FutureListener<ArrayList<MediaSet>> {
- private static final String TAG = "MtpDeviceSet";
-
- private GalleryApp mApplication;
- private final ChangeNotifier mNotifier;
- private final MtpContext mMtpContext;
- private final String mName;
- private final Handler mHandler;
-
- private Future<ArrayList<MediaSet>> mLoadTask;
- private ArrayList<MediaSet> mDeviceSet = new ArrayList<MediaSet>();
- private ArrayList<MediaSet> mLoadBuffer;
- private boolean mIsLoading;
-
- public MtpDeviceSet(Path path, GalleryApp application, MtpContext mtpContext) {
- super(path, nextVersionNumber());
- mApplication = application;
- mNotifier = new ChangeNotifier(this, Uri.parse("mtp://"), application);
- mMtpContext = mtpContext;
- mName = application.getResources().getString(R.string.set_label_mtp_devices);
- mHandler = new Handler(mApplication.getMainLooper());
- }
-
- private class DevicesLoader implements Job<ArrayList<MediaSet>> {
- @Override
- public ArrayList<MediaSet> run(JobContext jc) {
- DataManager dataManager = mApplication.getDataManager();
- ArrayList<MediaSet> result = new ArrayList<MediaSet>();
-
- // Enumerate all devices
- List<android.mtp.MtpDevice> devices = mMtpContext.getMtpClient().getDeviceList();
- Log.v(TAG, "loadDevices: " + devices + ", size=" + devices.size());
- for (android.mtp.MtpDevice mtpDevice : devices) {
- synchronized (DataManager.LOCK) {
- int deviceId = mtpDevice.getDeviceId();
- Path childPath = mPath.getChild(deviceId);
- MtpDevice device = (MtpDevice) dataManager.peekMediaObject(childPath);
- if (device == null) {
- device = new MtpDevice(childPath, mApplication, deviceId, mMtpContext);
- }
- Log.d(TAG, "add device " + device);
- result.add(device);
- }
- }
- Collections.sort(result, MediaSetUtils.NAME_COMPARATOR);
- return result;
- }
- }
-
- public static String getDeviceName(MtpContext mtpContext, int deviceId) {
- android.mtp.MtpDevice device = mtpContext.getMtpClient().getDevice(deviceId);
- if (device == null) {
- return "";
- }
- MtpDeviceInfo info = device.getDeviceInfo();
- if (info == null) {
- return "";
- }
- String manufacturer = info.getManufacturer().trim();
- String model = info.getModel().trim();
- return manufacturer + " " + model;
- }
-
- @Override
- public MediaSet getSubMediaSet(int index) {
- return index < mDeviceSet.size() ? mDeviceSet.get(index) : null;
- }
-
- @Override
- public int getSubMediaSetCount() {
- return mDeviceSet.size();
- }
-
- @Override
- public String getName() {
- return mName;
- }
-
- @Override
- public synchronized boolean isLoading() {
- return mIsLoading;
- }
-
- @Override
- public synchronized long reload() {
- if (mNotifier.isDirty()) {
- if (mLoadTask != null) mLoadTask.cancel();
- mIsLoading = true;
- mLoadTask = mApplication.getThreadPool().submit(new DevicesLoader(), this);
- }
- if (mLoadBuffer != null) {
- mDeviceSet = mLoadBuffer;
- mLoadBuffer = null;
- for (MediaSet device : mDeviceSet) {
- device.reload();
- }
- mDataVersion = nextVersionNumber();
- }
- return mDataVersion;
- }
-
- @Override
- public synchronized void onFutureDone(Future<ArrayList<MediaSet>> future) {
- if (future != mLoadTask) return;
- mLoadBuffer = future.get();
- mIsLoading = false;
- if (mLoadBuffer == null) mLoadBuffer = new ArrayList<MediaSet>();
-
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- notifyContentChanged();
- }
- });
- }
-}
diff --git a/src/com/android/gallery3d/data/MtpImage.java b/src/com/android/gallery3d/data/MtpImage.java
deleted file mode 100644
index 0abb1985d..000000000
--- a/src/com/android/gallery3d/data/MtpImage.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.gallery3d.data;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapRegionDecoder;
-import android.hardware.usb.UsbDevice;
-import android.mtp.MtpObjectInfo;
-import android.net.Uri;
-import android.util.Log;
-
-import com.android.gallery3d.app.GalleryApp;
-import com.android.gallery3d.common.ApiHelper;
-import com.android.gallery3d.provider.GalleryProvider;
-import com.android.gallery3d.util.ThreadPool.Job;
-import com.android.gallery3d.util.ThreadPool.JobContext;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB_MR1)
-public class MtpImage extends MediaItem {
- private static final String TAG = "MtpImage";
-
- private final int mDeviceId;
- private int mObjectId;
- private int mObjectSize;
- private long mDateTaken;
- private String mFileName;
- private final MtpContext mMtpContext;
- private final MtpObjectInfo mObjInfo;
- private final int mImageWidth;
- private final int mImageHeight;
- private final Context mContext;
-
- MtpImage(Path path, GalleryApp application, int deviceId,
- MtpObjectInfo objInfo, MtpContext mtpContext) {
- super(path, nextVersionNumber());
- mContext = application.getAndroidContext();
- mDeviceId = deviceId;
- mObjInfo = objInfo;
- mObjectId = objInfo.getObjectHandle();
- mObjectSize = objInfo.getCompressedSize();
- mDateTaken = objInfo.getDateCreated();
- mFileName = objInfo.getName();
- mImageWidth = objInfo.getImagePixWidth();
- mImageHeight = objInfo.getImagePixHeight();
- mMtpContext = mtpContext;
- }
-
- MtpImage(Path path, GalleryApp app, int deviceId, int objectId, MtpContext mtpContext) {
- this(path, app, deviceId, MtpDevice.getObjectInfo(mtpContext, deviceId, objectId),
- mtpContext);
- }
-
- @Override
- public long getDateInMs() {
- return mDateTaken;
- }
-
- @Override
- public Job<Bitmap> requestImage(int type) {
- return new Job<Bitmap>() {
- @Override
- public Bitmap run(JobContext jc) {
- byte[] thumbnail = mMtpContext.getMtpClient().getThumbnail(
- UsbDevice.getDeviceName(mDeviceId), mObjectId);
- if (thumbnail == null) {
- Log.w(TAG, "decoding thumbnail failed");
- return null;
- }
- return DecodeUtils.decode(jc, thumbnail, null);
- }
- };
- }
-
- @Override
- public Job<BitmapRegionDecoder> requestLargeImage() {
- return new Job<BitmapRegionDecoder>() {
- @Override
- public BitmapRegionDecoder run(JobContext jc) {
- byte[] bytes = mMtpContext.getMtpClient().getObject(
- UsbDevice.getDeviceName(mDeviceId), mObjectId, mObjectSize);
- return DecodeUtils.createBitmapRegionDecoder(
- jc, bytes, 0, bytes.length, false);
- }
- };
- }
-
- public byte[] getImageData() {
- return mMtpContext.getMtpClient().getObject(
- UsbDevice.getDeviceName(mDeviceId), mObjectId, mObjectSize);
- }
-
- @Override
- public boolean Import() {
- return mMtpContext.copyFile(UsbDevice.getDeviceName(mDeviceId), mObjInfo);
- }
-
- @Override
- public int getSupportedOperations() {
- return SUPPORT_FULL_IMAGE | SUPPORT_IMPORT;
- }
-
- public void updateContent(MtpObjectInfo info) {
- if (mObjectId != info.getObjectHandle() || mDateTaken != info.getDateCreated()) {
- mObjectId = info.getObjectHandle();
- mDateTaken = info.getDateCreated();
- mDataVersion = nextVersionNumber();
- }
- }
-
- @Override
- public String getMimeType() {
- // Currently only JPEG is supported in MTP.
- return "image/jpeg";
- }
-
- @Override
- public int getMediaType() {
- return MEDIA_TYPE_IMAGE;
- }
-
- @Override
- public long getSize() {
- return mObjectSize;
- }
-
- @Override
- public Uri getContentUri() {
- return GalleryProvider.getUriFor(mContext, mPath);
- }
-
- @Override
- public MediaDetails getDetails() {
- MediaDetails details = super.getDetails();
- DateFormat formater = DateFormat.getDateTimeInstance();
- details.addDetail(MediaDetails.INDEX_TITLE, mFileName);
- details.addDetail(MediaDetails.INDEX_DATETIME, formater.format(new Date(mDateTaken)));
- details.addDetail(MediaDetails.INDEX_WIDTH, mImageWidth);
- details.addDetail(MediaDetails.INDEX_HEIGHT, mImageHeight);
- details.addDetail(MediaDetails.INDEX_SIZE, Long.valueOf(mObjectSize));
- return details;
- }
-
- @Override
- public int getWidth() {
- return mImageWidth;
- }
-
- @Override
- public int getHeight() {
- return mImageHeight;
- }
-}
diff --git a/src/com/android/gallery3d/data/MtpSource.java b/src/com/android/gallery3d/data/MtpSource.java
deleted file mode 100644
index 47a2e6c66..000000000
--- a/src/com/android/gallery3d/data/MtpSource.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.gallery3d.data;
-
-import com.android.gallery3d.app.GalleryApp;
-
-public class MtpSource extends MediaSource {
- @SuppressWarnings("unused")
- private static final String TAG = "MtpSource";
-
- private static final int MTP_DEVICESET = 0;
- private static final int MTP_DEVICE = 1;
- private static final int MTP_ITEM = 2;
-
- GalleryApp mApplication;
- PathMatcher mMatcher;
- MtpContext mMtpContext;
-
- public MtpSource(GalleryApp application) {
- super("mtp");
- mApplication = application;
- mMatcher = new PathMatcher();
- mMatcher.add("/mtp", MTP_DEVICESET);
- mMatcher.add("/mtp/*", MTP_DEVICE);
- mMatcher.add("/mtp/item/*/*", MTP_ITEM);
- mMtpContext = new MtpContext(mApplication.getAndroidContext());
- }
-
- @Override
- public MediaObject createMediaObject(Path path) {
- switch (mMatcher.match(path)) {
- case MTP_DEVICESET: {
- return new MtpDeviceSet(path, mApplication, mMtpContext);
- }
- case MTP_DEVICE: {
- int deviceId = mMatcher.getIntVar(0);
- return new MtpDevice(path, mApplication, deviceId, mMtpContext);
- }
- case MTP_ITEM: {
- int deviceId = mMatcher.getIntVar(0);
- int objectId = mMatcher.getIntVar(1);
- return new MtpImage(path, mApplication, deviceId, objectId, mMtpContext);
- }
- default:
- throw new RuntimeException("bad path: " + path);
- }
- }
-
- @Override
- public void pause() {
- mMtpContext.pause();
- }
-
- @Override
- public void resume() {
- mMtpContext.resume();
- }
-
- public static boolean isMtpPath(String s) {
- return s != null && Path.fromString(s).getPrefix().equals("mtp");
- }
-}