summaryrefslogtreecommitdiff
path: root/android/ultimate
diff options
context:
space:
mode:
authorEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>2013-11-17 22:40:12 +0400
committerEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>2013-12-04 15:18:18 +0400
commit85777804dcba8e562b9c7c558521ae334c50ddfb (patch)
treeb099d3faf30afa322569c1ccbc7d93ef1d0a406e /android/ultimate
parentc6edbe43d3d61b2a650d93483a7dfd6c5bed3ede (diff)
downloadidea-85777804dcba8e562b9c7c558521ae334c50ddfb.tar.gz
provide the notification about the problem in Android db support on Android 4.3 devices [rev=a.lobas]
(cherry picked from commit 062c94b)
Diffstat (limited to 'android/ultimate')
-rw-r--r--android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java24
1 files changed, 17 insertions, 7 deletions
diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java
index 4ceb6e8d7a4..89826a7e0cc 100644
--- a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java
+++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java
@@ -12,6 +12,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.net.URL;
import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
/**
* @author Eugene.Kudelevsky
@@ -29,6 +30,8 @@ class AndroidDbUtil {
private static final String DEVICE_ID_EMULATOR_PREFIX = "EMULATOR_";
private static final String DEVICE_ID_SERIAL_NUMBER_PREFIX = "SERIAL_NUMBER_";
+ private static final Pattern RUN_AS_UNKNOWN_PACKAGE_ERROR_PATTERN = Pattern.compile("run-as: Package '\\S+' is unknown");
+
private AndroidDbUtil() {
}
@@ -51,7 +54,7 @@ class AndroidDbUtil {
final String remoteDbPath = getDatabaseRemoteFilePath(packageName, dbName, external);
final String remoteDbDirPath = remoteDbPath.substring(0, remoteDbPath.lastIndexOf('/'));
- MyShellOutputReceiver outputReceiver = new MyShellOutputReceiver(progressIndicator);
+ MyShellOutputReceiver outputReceiver = new MyShellOutputReceiver(progressIndicator, device);
device.executeShellCommand(getRunAsPrefix(packageName, external) +
"mkdir " + remoteDbDirPath, outputReceiver,
DB_COPYING_TIMEOUT_SEC, TimeUnit.SECONDS);
@@ -65,7 +68,7 @@ class AndroidDbUtil {
if (!external && !recreateRemoteFile(device, packageName, remoteDbPath, errorReporter, progressIndicator)) {
return false;
}
- outputReceiver = new MyShellOutputReceiver(progressIndicator);
+ outputReceiver = new MyShellOutputReceiver(progressIndicator, device);
device.executeShellCommand(getRunAsPrefix(packageName, external) + "cat " + TEMP_REMOTE_DB_PATH + " >" + remoteDbPath,
outputReceiver, DB_COPYING_TIMEOUT_SEC, TimeUnit.SECONDS);
output = outputReceiver.getOutput();
@@ -93,7 +96,7 @@ class AndroidDbUtil {
String remotePath,
AndroidDbErrorReporter errorReporter,
ProgressIndicator progressIndicator) throws Exception {
- MyShellOutputReceiver outputReceiver = new MyShellOutputReceiver(progressIndicator);
+ MyShellOutputReceiver outputReceiver = new MyShellOutputReceiver(progressIndicator, device);
device.executeShellCommand("run-as " + packageName + " rm " + remotePath,
outputReceiver, DB_COPYING_TIMEOUT_SEC, TimeUnit.SECONDS);
String output = outputReceiver.getOutput();
@@ -102,7 +105,7 @@ class AndroidDbUtil {
errorReporter.reportError(output);
return false;
}
- outputReceiver = new MyShellOutputReceiver(progressIndicator);
+ outputReceiver = new MyShellOutputReceiver(progressIndicator, device);
device.executeShellCommand("run-as " + packageName + " touch " + remotePath,
outputReceiver, DB_COPYING_TIMEOUT_SEC, TimeUnit.SECONDS);
output = outputReceiver.getOutput();
@@ -122,7 +125,7 @@ class AndroidDbUtil {
@NotNull final ProgressIndicator progressIndicator,
@NotNull AndroidDbErrorReporter errorReporter) {
try {
- final MyShellOutputReceiver receiver = new MyShellOutputReceiver(progressIndicator);
+ final MyShellOutputReceiver receiver = new MyShellOutputReceiver(progressIndicator, device);
device.executeShellCommand(getRunAsPrefix(packageName, external) + "cat " +
getDatabaseRemoteFilePath(packageName, dbName, external) + " >" +
TEMP_REMOTE_DB_PATH, receiver,
@@ -356,7 +359,7 @@ class AndroidDbUtil {
private static String executeSingleCommand(@NotNull IDevice device,
@NotNull AndroidDbErrorReporter errorReporter,
@NotNull String command) {
- final MyShellOutputReceiver receiver = new MyShellOutputReceiver(null);
+ final MyShellOutputReceiver receiver = new MyShellOutputReceiver(null, device);
try {
device.executeShellCommand(command, receiver, SHELL_COMMAND_TIMEOUT_SECONDS, TimeUnit.SECONDS);
@@ -434,9 +437,11 @@ class AndroidDbUtil {
private static class MyShellOutputReceiver extends MultiLineReceiver {
@Nullable private final ProgressIndicator myProgressIndicator;
private final StringBuilder myOutputBuilder = new StringBuilder();
+ private final boolean myAndroid43;
- public MyShellOutputReceiver(@Nullable ProgressIndicator progressIndicator) {
+ public MyShellOutputReceiver(@Nullable ProgressIndicator progressIndicator, @NotNull IDevice device) {
myProgressIndicator = progressIndicator;
+ myAndroid43 = "18".equals(device.getProperty("ro.build.version.sdk"));
}
@Override
@@ -450,6 +455,11 @@ class AndroidDbUtil {
myOutputBuilder.append('\n');
}
myOutputBuilder.append(s);
+
+ if (myAndroid43 && RUN_AS_UNKNOWN_PACKAGE_ERROR_PATTERN.matcher(s).matches()) {
+ myOutputBuilder.append(". \nUnfortunately database support doesn't work for Android 4.3 devices because of the bug " +
+ "https://code.google.com/p/android/issues/detail?id=58373");
+ }
}
}
}