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