From bff8c3108d81392f54c75bf9d4e0d6330c4cdedc Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 29 Apr 2016 08:54:00 +0200 Subject: [PATCH] Android: Make avd name extraction more robust. The output of the console seems to have changed lately and includes some initial help hint now. Try to ignore that by always using the output before the last OK in the the response. Change-Id: I1cd5bfedd1aaea9de0d494b92d965ce0c60d1655 Reviewed-by: Christian Stenger Reviewed-by: Eike Ziller Reviewed-by: Vikas Pachdha --- src/plugins/android/androidconfigurations.cpp | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index bac863f2f64..35e80683244 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -917,7 +917,7 @@ QString AndroidConfig::getAvdName(const QString &serialnumber) if (!ok) return QString(); - QByteArray avdName = "avd name\n"; + const QByteArray avdName = "avd name\n"; QTcpSocket tcpSocket; tcpSocket.connectToHost(QHostAddress(QHostAddress::LocalHost), port); @@ -925,16 +925,15 @@ QString AndroidConfig::getAvdName(const QString &serialnumber) tcpSocket.write(avdName + "exit\n"); tcpSocket.waitForDisconnected(); - QByteArray response = tcpSocket.readAll(); - int start = response.indexOf("OK\r\n"); - if (start == -1) - return QString(); - start = start + 4; - - int end = response.indexOf("\r\n", start); - if (end == -1) - return QString(); - return QString::fromLatin1(response.mid(start, end - start)); + QByteArray name; + const QByteArrayList response = tcpSocket.readAll().split('\n'); + // The input "avd name" might not be echoed as-is, but contain ASCII + // control sequences. + for (int i = response.size() - 1; i > 1; --i) { + if (response.at(i).startsWith("OK")) + name = response.at(i - 1); + } + return QString::fromLatin1(name).trimmed(); } AndroidConfig::OpenGl AndroidConfig::getOpenGLEnabled(const QString &emulator) const