Add friendlier error if trying to use Android < 6.0 device. Closes #1060

This commit is contained in:
baldurk
2018-07-31 10:40:45 +01:00
parent 5293a2c991
commit df1a494fa7
5 changed files with 46 additions and 0 deletions
+11
View File
@@ -1776,6 +1776,17 @@ void MainWindow::switchContext()
// see if the server is up
host->CheckStatus();
if(host->IsADB() && !RENDERDOC_IsAndroidSupported(host->hostname.c_str()))
{
GUIInvoke::call(this, [this]() {
statusText->setText(tr("Device unsupported, Android 6.0 is required."));
contextChooser->setIcon(Icons::disconnect());
contextChooser->setText(tr("Replay Context: Local"));
contextChooser->setEnabled(true);
});
return;
}
if(!host->serverRunning && !host->runCommand.isEmpty())
{
GUIInvoke::call(this, [this]() {
+13
View File
@@ -587,6 +587,16 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_AndroidShutdown()
Android::shutdownAdb();
}
extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_IsAndroidSupported(const char *device)
{
int index = 0;
std::string deviceID;
Android::ExtractDeviceIDAndIndex(device, index, deviceID);
return Android::IsSupported(deviceID);
}
extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartAndroidRemoteServer(const char *device)
{
int index = 0;
@@ -594,6 +604,9 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartAndroidRemoteServer(co
Android::ExtractDeviceIDAndIndex(device, index, deviceID);
if(!Android::IsSupported(deviceID))
return;
std::string packagesOutput = trim(
Android::adbExecCommand(deviceID, "shell pm list packages " RENDERDOC_ANDROID_PACKAGE_BASE)
.strStdout);
+18
View File
@@ -131,6 +131,21 @@ std::string GetPathForPackage(const std::string &deviceID, const std::string &pa
return pkgPath;
}
bool IsSupported(std::string deviceID)
{
std::string api =
trim(Android::adbExecCommand(deviceID, "shell getprop ro.build.version.sdk").strStdout);
int apiVersion = atoi(api.c_str());
// SDK 23 == Android 6.0, our minimum spec. Only fail if we did parse an SDK string, in case some
// Android devices don't support the query - we assume they are new enough.
if(apiVersion >= 0 && apiVersion < 23)
return false;
return true;
}
std::string GetFriendlyName(std::string deviceID)
{
auto it = friendlyNameCache.find(deviceID);
@@ -153,6 +168,9 @@ std::string GetFriendlyName(std::string deviceID)
else if(!manuf.empty() && !model.empty())
combined = manuf + " " + model;
if(!IsSupported(deviceID))
combined += " - Unsupported";
return combined;
}
};
+1
View File
@@ -49,6 +49,7 @@ bool toolExists(const std::string &path);
std::string GetFirstMatchingLine(const std::string &haystack, const std::string &needle);
bool IsSupported(std::string deviceID);
std::string GetFriendlyName(std::string deviceID);
// supported ABIs
+3
View File
@@ -2141,6 +2141,9 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_AndroidInitialise();
DOCUMENT("Internal function for shutting down android use.");
extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_AndroidShutdown();
DOCUMENT("Internal function for checking android support.");
extern "C" RENDERDOC_API bool RENDERDOC_CC RENDERDOC_IsAndroidSupported(const char *device);
DOCUMENT("Internal function for starting an android remote server.");
extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartAndroidRemoteServer(const char *device);