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:
Mike Lockwood
2015-01-26 19:10:44 +00:00
committed by Android Git Automerger
3 changed files with 56 additions and 39 deletions

View File

@ -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;

View File

@ -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));

View File

@ -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[] = {