am 5ac22aa6
: am 2b144a16
: Merge "MTP: Fix partial implementation of 5 new audio specific properties" into lmp-mr1-dev
* commit '5ac22aa60f773917981f42e64fbc28615871fd3e': MTP: Fix partial implementation of 5 new audio specific properties
This commit is contained in:
@ -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
|
||||
@ -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,
|
||||
};
|
||||
|
||||
@ -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:
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
@ -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;
|
||||
|
@ -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);
|
||||
@ -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));
|
||||
|
@ -934,6 +934,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[] = {
|
||||
|
Reference in New Issue
Block a user