MTP: Skip runtime thumbnail generation for Android Host
Android Host is not capable to deal with the long processing time for
runtime thumbnail generation.
Skip runtime thumbnail generation for Android Host
but keep no impact to other Host
Bug: 188752500
Test: atest MtpTests
Test: atest MtpServerTest
Test: atest MtpServiceTests
Test: manual test on Windows 10 File Explorer
Test: manual test on Android Host Files App
Change-Id: I73b6d804cc350a6146e4ab2794d15d05d1277f34
diff --git a/media/mtp/MtpDevice.cpp b/media/mtp/MtpDevice.cpp
index 9665c58..5be8ef5 100644
--- a/media/mtp/MtpDevice.cpp
+++ b/media/mtp/MtpDevice.cpp
@@ -608,6 +608,32 @@
return NULL;
}
+bool MtpDevice::setDevicePropValueStr(MtpProperty* property) {
+ if (property == nullptr)
+ return false;
+
+ std::lock_guard<std::mutex> lg(mMutex);
+
+ if (property->getDataType() != MTP_TYPE_STR) {
+ return false;
+ }
+
+ mRequest.reset();
+ mRequest.setParameter(1, property->getPropertyCode());
+
+ mData.reset();
+ mData.putString(property->getCurrentValue().str);
+
+ if (sendRequest(MTP_OPERATION_SET_DEVICE_PROP_VALUE) && sendData()) {
+ MtpResponseCode ret = readResponse();
+ if (ret != MTP_RESPONSE_OK) {
+ ALOGW("%s: Response=0x%04X\n", __func__, ret);
+ return false;
+ }
+ }
+ return true;
+}
+
MtpProperty* MtpDevice::getObjectPropDesc(MtpObjectProperty code, MtpObjectFormat format) {
std::lock_guard<std::mutex> lg(mMutex);
diff --git a/media/mtp/MtpDevice.h b/media/mtp/MtpDevice.h
index 01bc3db..b1b30e4 100644
--- a/media/mtp/MtpDevice.h
+++ b/media/mtp/MtpDevice.h
@@ -112,6 +112,7 @@
MtpObjectPropertyList* getObjectPropsSupported(MtpObjectFormat format);
MtpProperty* getDevicePropDesc(MtpDeviceProperty code);
+ bool setDevicePropValueStr(MtpProperty* property);
MtpProperty* getObjectPropDesc(MtpObjectProperty code, MtpObjectFormat format);
// Reads value of |property| for |handle|. Returns true on success.
diff --git a/media/mtp/MtpPacket.cpp b/media/mtp/MtpPacket.cpp
index 3b298a9..f069a83 100644
--- a/media/mtp/MtpPacket.cpp
+++ b/media/mtp/MtpPacket.cpp
@@ -157,7 +157,7 @@
request->endpoint,
request->buffer,
request->buffer_length,
- 1000);
+ 5000);
request->actual_length = result;
return result;
}
diff --git a/media/mtp/MtpProperty.cpp b/media/mtp/MtpProperty.cpp
index 5c02a0d..98a2ad3 100644
--- a/media/mtp/MtpProperty.cpp
+++ b/media/mtp/MtpProperty.cpp
@@ -240,6 +240,16 @@
mCurrentValue.str = NULL;
}
+void MtpProperty::setCurrentValue(const char* string) {
+ free(mCurrentValue.str);
+ if (string) {
+ MtpStringBuffer buffer(string);
+ mCurrentValue.str = strdup(buffer);
+ }
+ else
+ mCurrentValue.str = NULL;
+}
+
void MtpProperty::setCurrentValue(MtpDataPacket& packet) {
free(mCurrentValue.str);
mCurrentValue.str = NULL;
diff --git a/media/mtp/MtpProperty.h b/media/mtp/MtpProperty.h
index bfd5f7f..36d7360 100644
--- a/media/mtp/MtpProperty.h
+++ b/media/mtp/MtpProperty.h
@@ -91,6 +91,7 @@
void setDefaultValue(const uint16_t* string);
void setCurrentValue(const uint16_t* string);
+ void setCurrentValue(const char* string);
void setCurrentValue(MtpDataPacket& packet);
const MtpPropertyValue& getCurrentValue() { return mCurrentValue; }