MTP: Implement MTP_DEVICE_PROPERTY_IMAGE_SIZE device property.
Return screen size as preferred maximum image size.
Change-Id: I8dc4afb0e49fe45f6925a35aa443d3fc30211453
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/media/jni/android_media_MtpDatabase.cpp b/media/jni/android_media_MtpDatabase.cpp
index 1909e6a..fc7d86e 100644
--- a/media/jni/android_media_MtpDatabase.cpp
+++ b/media/jni/android_media_MtpDatabase.cpp
@@ -860,8 +860,9 @@
};
static const PropertyTableEntry kDevicePropertyTable[] = {
- { MTP_DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER, MTP_TYPE_STR },
- { MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME, MTP_TYPE_STR },
+ { MTP_DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER, MTP_TYPE_STR },
+ { MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME, MTP_TYPE_STR },
+ { MTP_DEVICE_PROPERTY_IMAGE_SIZE, MTP_TYPE_STR },
};
bool MyMtpDatabase::getObjectPropertyInfo(MtpObjectProperty property, int& type) {
@@ -973,31 +974,35 @@
}
MtpProperty* MyMtpDatabase::getDevicePropertyDesc(MtpDeviceProperty property) {
+ JNIEnv* env = AndroidRuntime::getJNIEnv();
MtpProperty* result = NULL;
+ bool writable = false;
+
switch (property) {
case MTP_DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER:
case MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME:
- {
- // writeable string properties
- result = new MtpProperty(property, MTP_TYPE_STR, true);
+ writable = true;
+ // fall through
+ case MTP_DEVICE_PROPERTY_IMAGE_SIZE:
+ result = new MtpProperty(property, MTP_TYPE_STR, writable);
- // set current value
- JNIEnv* env = AndroidRuntime::getJNIEnv();
+ // get current value
jint ret = env->CallIntMethod(mDatabase, method_getDeviceProperty,
(jint)property, mLongBuffer, mStringBuffer);
if (ret == MTP_RESPONSE_OK) {
jchar* str = env->GetCharArrayElements(mStringBuffer, 0);
result->setCurrentValue(str);
+ // for read-only properties it is safe to assume current value is default value
+ if (!writable)
+ result->setDefaultValue(str);
env->ReleaseCharArrayElements(mStringBuffer, str, 0);
} else {
LOGE("unable to read device property, response: %04X", ret);
}
-
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
break;
- }
}
+ checkAndClearExceptionFromCallback(env, __FUNCTION__);
return result;
}