diff options
| -rw-r--r-- | media/java/android/media/MtpDatabase.java | 19 | ||||
| -rw-r--r-- | media/jni/android_media_MtpDatabase.cpp | 25 |
2 files changed, 32 insertions, 12 deletions
diff --git a/media/java/android/media/MtpDatabase.java b/media/java/android/media/MtpDatabase.java index 139a6ea3468c..6056a0f85904 100644 --- a/media/java/android/media/MtpDatabase.java +++ b/media/java/android/media/MtpDatabase.java @@ -31,6 +31,8 @@ import android.provider.MediaStore.Files; import android.provider.MediaStore.Images; import android.provider.MediaStore.MediaColumns; import android.util.Log; +import android.view.Display; +import android.view.WindowManager; import java.io.File; import java.util.HashMap; @@ -460,6 +462,7 @@ public class MtpDatabase { return new int[] { MtpConstants.DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER, MtpConstants.DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME, + MtpConstants.DEVICE_PROPERTY_IMAGE_SIZE, }; } @@ -592,9 +595,21 @@ public class MtpDatabase { c.close(); } } - } - return MtpConstants.RESPONSE_DEVICE_PROP_NOT_SUPPORTED; + case MtpConstants.DEVICE_PROPERTY_IMAGE_SIZE: + // use screen size as max image size + Display display = ((WindowManager)mContext.getSystemService( + Context.WINDOW_SERVICE)).getDefaultDisplay(); + int width = display.getWidth(); + int height = display.getHeight(); + String imageSize = Integer.toString(width) + "x" + Integer.toString(height); + imageSize.getChars(0, imageSize.length(), outStringValue, 0); + outStringValue[imageSize.length()] = 0; + return MtpConstants.RESPONSE_OK; + + default: + return MtpConstants.RESPONSE_DEVICE_PROP_NOT_SUPPORTED; + } } private int setDeviceProperty(int property, long intValue, String stringValue) { diff --git a/media/jni/android_media_MtpDatabase.cpp b/media/jni/android_media_MtpDatabase.cpp index 1909e6a56288..fc7d86ec9081 100644 --- a/media/jni/android_media_MtpDatabase.cpp +++ b/media/jni/android_media_MtpDatabase.cpp @@ -860,8 +860,9 @@ static const PropertyTableEntry kObjectPropertyTable[] = { }; 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::getObjectPropertyDesc(MtpObjectProperty property, } 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; } |