Merge "MTP: Fix partial implementation of 5 new audio specific properties" into lmp-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2b144a16f6
@@ -88,6 +88,10 @@ public class MtpDatabase {
|
|||||||
Files.FileColumns._ID, // 0
|
Files.FileColumns._ID, // 0
|
||||||
Files.FileColumns.DATA, // 1
|
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[] {
|
private static final String[] PATH_FORMAT_PROJECTION = new String[] {
|
||||||
Files.FileColumns._ID, // 0
|
Files.FileColumns._ID, // 0
|
||||||
Files.FileColumns.DATA, // 1
|
Files.FileColumns.DATA, // 1
|
||||||
@@ -597,6 +601,7 @@ public class MtpDatabase {
|
|||||||
MtpConstants.PROPERTY_PARENT_OBJECT,
|
MtpConstants.PROPERTY_PARENT_OBJECT,
|
||||||
MtpConstants.PROPERTY_PERSISTENT_UID,
|
MtpConstants.PROPERTY_PERSISTENT_UID,
|
||||||
MtpConstants.PROPERTY_NAME,
|
MtpConstants.PROPERTY_NAME,
|
||||||
|
MtpConstants.PROPERTY_DISPLAY_NAME,
|
||||||
MtpConstants.PROPERTY_DATE_ADDED,
|
MtpConstants.PROPERTY_DATE_ADDED,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -669,43 +674,6 @@ public class MtpDatabase {
|
|||||||
MtpConstants.PROPERTY_DESCRIPTION,
|
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) {
|
private int[] getSupportedObjectProperties(int format) {
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case MtpConstants.FORMAT_MP3:
|
case MtpConstants.FORMAT_MP3:
|
||||||
@@ -723,8 +691,6 @@ public class MtpDatabase {
|
|||||||
case MtpConstants.FORMAT_PNG:
|
case MtpConstants.FORMAT_PNG:
|
||||||
case MtpConstants.FORMAT_BMP:
|
case MtpConstants.FORMAT_BMP:
|
||||||
return IMAGE_PROPERTIES;
|
return IMAGE_PROPERTIES;
|
||||||
case 0:
|
|
||||||
return ALL_PROPERTIES;
|
|
||||||
default:
|
default:
|
||||||
return FILE_PROPERTIES;
|
return FILE_PROPERTIES;
|
||||||
}
|
}
|
||||||
@@ -749,6 +715,10 @@ public class MtpDatabase {
|
|||||||
|
|
||||||
MtpPropertyGroup propertyGroup;
|
MtpPropertyGroup propertyGroup;
|
||||||
if (property == 0xFFFFFFFFL) {
|
if (property == 0xFFFFFFFFL) {
|
||||||
|
if (format == 0 && handle > 0) {
|
||||||
|
// return properties based on the object's format
|
||||||
|
format = getObjectFormat((int)handle);
|
||||||
|
}
|
||||||
propertyGroup = mPropertyGroupsByFormat.get(format);
|
propertyGroup = mPropertyGroupsByFormat.get(format);
|
||||||
if (propertyGroup == null) {
|
if (propertyGroup == null) {
|
||||||
int[] propertyList = getSupportedObjectProperties(format);
|
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) {
|
private int deleteFile(int handle) {
|
||||||
mDatabaseModified = true;
|
mDatabaseModified = true;
|
||||||
String path = null;
|
String path = null;
|
||||||
|
|||||||
@@ -172,6 +172,17 @@ class MtpPropertyGroup {
|
|||||||
column = Images.ImageColumns.DESCRIPTION;
|
column = Images.ImageColumns.DESCRIPTION;
|
||||||
type = MtpConstants.TYPE_STR;
|
type = MtpConstants.TYPE_STR;
|
||||||
break;
|
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:
|
default:
|
||||||
type = MtpConstants.TYPE_UNDEFINED;
|
type = MtpConstants.TYPE_UNDEFINED;
|
||||||
Log.e(TAG, "unsupported property " + code);
|
Log.e(TAG, "unsupported property " + code);
|
||||||
@@ -420,6 +431,17 @@ class MtpPropertyGroup {
|
|||||||
result.setResult(MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE);
|
result.setResult(MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
if (property.type == MtpConstants.TYPE_STR) {
|
if (property.type == MtpConstants.TYPE_STR) {
|
||||||
result.append(handle, propertyCode, c.getString(column));
|
result.append(handle, propertyCode, c.getString(column));
|
||||||
|
|||||||
@@ -930,6 +930,11 @@ static const PropertyTableEntry kObjectPropertyTable[] = {
|
|||||||
{ MTP_PROPERTY_COMPOSER, MTP_TYPE_STR },
|
{ MTP_PROPERTY_COMPOSER, MTP_TYPE_STR },
|
||||||
{ MTP_PROPERTY_DURATION, MTP_TYPE_UINT32 },
|
{ MTP_PROPERTY_DURATION, MTP_TYPE_UINT32 },
|
||||||
{ MTP_PROPERTY_DESCRIPTION, MTP_TYPE_STR },
|
{ 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[] = {
|
static const PropertyTableEntry kDevicePropertyTable[] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user