Loading media/java/android/mtp/MtpDatabase.java +29 −39 Original line number Diff line number Diff line Loading @@ -88,6 +88,10 @@ public class MtpDatabase { Files.FileColumns._ID, // 0 Files.FileColumns.DATA, // 1 }; private static final String[] FORMAT_PROJECTION = new String[] { Files.FileColumns._ID, // 0 Files.FileColumns.FORMAT, // 1 }; private static final String[] PATH_FORMAT_PROJECTION = new String[] { Files.FileColumns._ID, // 0 Files.FileColumns.DATA, // 1 Loading Loading @@ -597,6 +601,7 @@ public class MtpDatabase { MtpConstants.PROPERTY_PARENT_OBJECT, MtpConstants.PROPERTY_PERSISTENT_UID, MtpConstants.PROPERTY_NAME, MtpConstants.PROPERTY_DISPLAY_NAME, MtpConstants.PROPERTY_DATE_ADDED, }; Loading Loading @@ -669,43 +674,6 @@ public class MtpDatabase { MtpConstants.PROPERTY_DESCRIPTION, }; static final int[] ALL_PROPERTIES = { // NOTE must match FILE_PROPERTIES above MtpConstants.PROPERTY_STORAGE_ID, MtpConstants.PROPERTY_OBJECT_FORMAT, MtpConstants.PROPERTY_PROTECTION_STATUS, MtpConstants.PROPERTY_OBJECT_SIZE, MtpConstants.PROPERTY_OBJECT_FILE_NAME, MtpConstants.PROPERTY_DATE_MODIFIED, MtpConstants.PROPERTY_PARENT_OBJECT, MtpConstants.PROPERTY_PERSISTENT_UID, MtpConstants.PROPERTY_NAME, MtpConstants.PROPERTY_DISPLAY_NAME, MtpConstants.PROPERTY_DATE_ADDED, // image specific properties MtpConstants.PROPERTY_DESCRIPTION, // audio specific properties MtpConstants.PROPERTY_ARTIST, MtpConstants.PROPERTY_ALBUM_NAME, MtpConstants.PROPERTY_ALBUM_ARTIST, MtpConstants.PROPERTY_TRACK, MtpConstants.PROPERTY_ORIGINAL_RELEASE_DATE, MtpConstants.PROPERTY_DURATION, MtpConstants.PROPERTY_GENRE, MtpConstants.PROPERTY_COMPOSER, // video specific properties MtpConstants.PROPERTY_ARTIST, MtpConstants.PROPERTY_ALBUM_NAME, MtpConstants.PROPERTY_DURATION, MtpConstants.PROPERTY_DESCRIPTION, // image specific properties MtpConstants.PROPERTY_DESCRIPTION, }; private int[] getSupportedObjectProperties(int format) { switch (format) { case MtpConstants.FORMAT_MP3: Loading @@ -723,8 +691,6 @@ public class MtpDatabase { case MtpConstants.FORMAT_PNG: case MtpConstants.FORMAT_BMP: return IMAGE_PROPERTIES; case 0: return ALL_PROPERTIES; default: return FILE_PROPERTIES; } Loading @@ -749,6 +715,10 @@ public class MtpDatabase { MtpPropertyGroup propertyGroup; if (property == 0xFFFFFFFFL) { if (format == 0 && handle > 0) { // return properties based on the object's format format = getObjectFormat((int)handle); } propertyGroup = mPropertyGroupsByFormat.get(format); if (propertyGroup == null) { int[] propertyList = getSupportedObjectProperties(format); Loading Loading @@ -988,6 +958,26 @@ public class MtpDatabase { } } private int getObjectFormat(int handle) { Cursor c = null; try { c = mMediaProvider.query(mPackageName, mObjectsUri, FORMAT_PROJECTION, ID_WHERE, new String[] { Integer.toString(handle) }, null, null); if (c != null && c.moveToNext()) { return c.getInt(1); } else { return -1; } } catch (RemoteException e) { Log.e(TAG, "RemoteException in getObjectFilePath", e); return -1; } finally { if (c != null) { c.close(); } } } private int deleteFile(int handle) { mDatabaseModified = true; String path = null; Loading media/java/android/mtp/MtpPropertyGroup.java +22 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,17 @@ class MtpPropertyGroup { column = Images.ImageColumns.DESCRIPTION; type = MtpConstants.TYPE_STR; break; case MtpConstants.PROPERTY_AUDIO_WAVE_CODEC: case MtpConstants.PROPERTY_AUDIO_BITRATE: case MtpConstants.PROPERTY_SAMPLE_RATE: // these are special cased type = MtpConstants.TYPE_UINT32; break; case MtpConstants.PROPERTY_BITRATE_TYPE: case MtpConstants.PROPERTY_NUMBER_OF_CHANNELS: // these are special cased type = MtpConstants.TYPE_UINT16; break; default: type = MtpConstants.TYPE_UNDEFINED; Log.e(TAG, "unsupported property " + code); Loading Loading @@ -420,6 +431,17 @@ class MtpPropertyGroup { result.setResult(MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE); } break; case MtpConstants.PROPERTY_AUDIO_WAVE_CODEC: case MtpConstants.PROPERTY_AUDIO_BITRATE: case MtpConstants.PROPERTY_SAMPLE_RATE: // we don't have these in our database, so return 0 result.append(handle, propertyCode, MtpConstants.TYPE_UINT32, 0); break; case MtpConstants.PROPERTY_BITRATE_TYPE: case MtpConstants.PROPERTY_NUMBER_OF_CHANNELS: // we don't have these in our database, so return 0 result.append(handle, propertyCode, MtpConstants.TYPE_UINT16, 0); break; default: if (property.type == MtpConstants.TYPE_STR) { result.append(handle, propertyCode, c.getString(column)); Loading media/jni/android_mtp_MtpDatabase.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -930,6 +930,11 @@ static const PropertyTableEntry kObjectPropertyTable[] = { { MTP_PROPERTY_COMPOSER, MTP_TYPE_STR }, { MTP_PROPERTY_DURATION, MTP_TYPE_UINT32 }, { MTP_PROPERTY_DESCRIPTION, MTP_TYPE_STR }, { MTP_PROPERTY_AUDIO_WAVE_CODEC, MTP_TYPE_UINT32 }, { MTP_PROPERTY_BITRATE_TYPE, MTP_TYPE_UINT16 }, { MTP_PROPERTY_AUDIO_BITRATE, MTP_TYPE_UINT32 }, { MTP_PROPERTY_NUMBER_OF_CHANNELS,MTP_TYPE_UINT16 }, { MTP_PROPERTY_SAMPLE_RATE, MTP_TYPE_UINT32 }, }; static const PropertyTableEntry kDevicePropertyTable[] = { Loading Loading
media/java/android/mtp/MtpDatabase.java +29 −39 Original line number Diff line number Diff line Loading @@ -88,6 +88,10 @@ public class MtpDatabase { Files.FileColumns._ID, // 0 Files.FileColumns.DATA, // 1 }; private static final String[] FORMAT_PROJECTION = new String[] { Files.FileColumns._ID, // 0 Files.FileColumns.FORMAT, // 1 }; private static final String[] PATH_FORMAT_PROJECTION = new String[] { Files.FileColumns._ID, // 0 Files.FileColumns.DATA, // 1 Loading Loading @@ -597,6 +601,7 @@ public class MtpDatabase { MtpConstants.PROPERTY_PARENT_OBJECT, MtpConstants.PROPERTY_PERSISTENT_UID, MtpConstants.PROPERTY_NAME, MtpConstants.PROPERTY_DISPLAY_NAME, MtpConstants.PROPERTY_DATE_ADDED, }; Loading Loading @@ -669,43 +674,6 @@ public class MtpDatabase { MtpConstants.PROPERTY_DESCRIPTION, }; static final int[] ALL_PROPERTIES = { // NOTE must match FILE_PROPERTIES above MtpConstants.PROPERTY_STORAGE_ID, MtpConstants.PROPERTY_OBJECT_FORMAT, MtpConstants.PROPERTY_PROTECTION_STATUS, MtpConstants.PROPERTY_OBJECT_SIZE, MtpConstants.PROPERTY_OBJECT_FILE_NAME, MtpConstants.PROPERTY_DATE_MODIFIED, MtpConstants.PROPERTY_PARENT_OBJECT, MtpConstants.PROPERTY_PERSISTENT_UID, MtpConstants.PROPERTY_NAME, MtpConstants.PROPERTY_DISPLAY_NAME, MtpConstants.PROPERTY_DATE_ADDED, // image specific properties MtpConstants.PROPERTY_DESCRIPTION, // audio specific properties MtpConstants.PROPERTY_ARTIST, MtpConstants.PROPERTY_ALBUM_NAME, MtpConstants.PROPERTY_ALBUM_ARTIST, MtpConstants.PROPERTY_TRACK, MtpConstants.PROPERTY_ORIGINAL_RELEASE_DATE, MtpConstants.PROPERTY_DURATION, MtpConstants.PROPERTY_GENRE, MtpConstants.PROPERTY_COMPOSER, // video specific properties MtpConstants.PROPERTY_ARTIST, MtpConstants.PROPERTY_ALBUM_NAME, MtpConstants.PROPERTY_DURATION, MtpConstants.PROPERTY_DESCRIPTION, // image specific properties MtpConstants.PROPERTY_DESCRIPTION, }; private int[] getSupportedObjectProperties(int format) { switch (format) { case MtpConstants.FORMAT_MP3: Loading @@ -723,8 +691,6 @@ public class MtpDatabase { case MtpConstants.FORMAT_PNG: case MtpConstants.FORMAT_BMP: return IMAGE_PROPERTIES; case 0: return ALL_PROPERTIES; default: return FILE_PROPERTIES; } Loading @@ -749,6 +715,10 @@ public class MtpDatabase { MtpPropertyGroup propertyGroup; if (property == 0xFFFFFFFFL) { if (format == 0 && handle > 0) { // return properties based on the object's format format = getObjectFormat((int)handle); } propertyGroup = mPropertyGroupsByFormat.get(format); if (propertyGroup == null) { int[] propertyList = getSupportedObjectProperties(format); Loading Loading @@ -988,6 +958,26 @@ public class MtpDatabase { } } private int getObjectFormat(int handle) { Cursor c = null; try { c = mMediaProvider.query(mPackageName, mObjectsUri, FORMAT_PROJECTION, ID_WHERE, new String[] { Integer.toString(handle) }, null, null); if (c != null && c.moveToNext()) { return c.getInt(1); } else { return -1; } } catch (RemoteException e) { Log.e(TAG, "RemoteException in getObjectFilePath", e); return -1; } finally { if (c != null) { c.close(); } } } private int deleteFile(int handle) { mDatabaseModified = true; String path = null; Loading
media/java/android/mtp/MtpPropertyGroup.java +22 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,17 @@ class MtpPropertyGroup { column = Images.ImageColumns.DESCRIPTION; type = MtpConstants.TYPE_STR; break; case MtpConstants.PROPERTY_AUDIO_WAVE_CODEC: case MtpConstants.PROPERTY_AUDIO_BITRATE: case MtpConstants.PROPERTY_SAMPLE_RATE: // these are special cased type = MtpConstants.TYPE_UINT32; break; case MtpConstants.PROPERTY_BITRATE_TYPE: case MtpConstants.PROPERTY_NUMBER_OF_CHANNELS: // these are special cased type = MtpConstants.TYPE_UINT16; break; default: type = MtpConstants.TYPE_UNDEFINED; Log.e(TAG, "unsupported property " + code); Loading Loading @@ -420,6 +431,17 @@ class MtpPropertyGroup { result.setResult(MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE); } break; case MtpConstants.PROPERTY_AUDIO_WAVE_CODEC: case MtpConstants.PROPERTY_AUDIO_BITRATE: case MtpConstants.PROPERTY_SAMPLE_RATE: // we don't have these in our database, so return 0 result.append(handle, propertyCode, MtpConstants.TYPE_UINT32, 0); break; case MtpConstants.PROPERTY_BITRATE_TYPE: case MtpConstants.PROPERTY_NUMBER_OF_CHANNELS: // we don't have these in our database, so return 0 result.append(handle, propertyCode, MtpConstants.TYPE_UINT16, 0); break; default: if (property.type == MtpConstants.TYPE_STR) { result.append(handle, propertyCode, c.getString(column)); Loading
media/jni/android_mtp_MtpDatabase.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -930,6 +930,11 @@ static const PropertyTableEntry kObjectPropertyTable[] = { { MTP_PROPERTY_COMPOSER, MTP_TYPE_STR }, { MTP_PROPERTY_DURATION, MTP_TYPE_UINT32 }, { MTP_PROPERTY_DESCRIPTION, MTP_TYPE_STR }, { MTP_PROPERTY_AUDIO_WAVE_CODEC, MTP_TYPE_UINT32 }, { MTP_PROPERTY_BITRATE_TYPE, MTP_TYPE_UINT16 }, { MTP_PROPERTY_AUDIO_BITRATE, MTP_TYPE_UINT32 }, { MTP_PROPERTY_NUMBER_OF_CHANNELS,MTP_TYPE_UINT16 }, { MTP_PROPERTY_SAMPLE_RATE, MTP_TYPE_UINT32 }, }; static const PropertyTableEntry kDevicePropertyTable[] = { Loading