/* MonkeyTalk - a cross-platform functional testing tool
Copyright (C) 2012 Gorilla Logic, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package com.gorillalogic.monkeyconsole;
import java.io.File;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.ui.dialogs.PreferencesUtil;
import com.gorillalogic.monkeyconsole.plugin.FoneMonkeyPlugin;
import com.gorillalogic.monkeyconsole.preferences.PreferenceConstants;
/**
* Helper class to manage the Android Debug Bridge (aka ADB)
*/
public class ADBHelper {
/**
* Return {@code null} if ADB path is valid, otherwise return error message.
*
* @return null if valid, otherwise error message
*/
public static String validate() {
String path = getAndroidSdkPref();
if (path == null) {
Action action = new Action() {
public void run() {
PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null,
"com.gorillalogic.monkeyconsole.preferences.FonemonkeyPreferencePage",
null, null);
dialog.open();
}
};
action.run();
return null;
}
return validateAndroidSdkPath(path);
}
/**
* From the given path, return null if it leads to a valid ADB, otherwise return an error
* message.
*
* @param path
* the Android SDK path
* @return null if valid, otherwise error message.
*/
public static String validateAndroidSdkPath(String path) {
if (path == null) {
return "Android SDK path is null.";
}
File sdk = new File(path);
if (!sdk.exists() || !sdk.isDirectory()) {
return "Unable to find the Android SDK. Looked here: " + sdk.getAbsolutePath();
}
File platformTools = new File(sdk, "platform-tools");
if (!platformTools.exists() || !platformTools.isDirectory()) {
return "Unable to find the 'platform-tools' folder. Looked here: "
+ platformTools.getAbsolutePath();
}
String os = System.getProperty("os.name").toLowerCase();
File adb = new File(platformTools, "adb" + (os.contains("win") ? ".exe" : ""));
if (!adb.exists() || !adb.isFile()) {
return "Unable to find ADB. Looked here: " + adb.getAbsolutePath();
}
return null;
}
/**
* Get the location of the Android SDK folder from the Preferences.
*/
private static String getAndroidSdkPref() {
String sdk = FoneMonkeyPlugin.getDefault().getPreferenceStore()
.getString(PreferenceConstants.P_ANDROIDHOME);
if (sdk != null) {
File dir = new File(sdk);
if (dir.exists() && dir.isDirectory()) {
return sdk;
}
}
return null;
}
/**
* Get the path to ADB from the Preferences, but return null if invalid.
*
* @return the path to ADB if valid, otherwise null
*/
public static String getAdbPath() {
String sdkPath = getAndroidSdkPref();
if (sdkPath != null) {
File sdk = new File(sdkPath);
if (sdk.exists() && sdk.isDirectory()) {
File platformTools = new File(sdk, "platform-tools");
if (platformTools.exists() && platformTools.isDirectory()) {
String os = System.getProperty("os.name").toLowerCase();
File adb = new File(platformTools, "adb" + (os.contains("win") ? ".exe" : ""));
if (adb.exists() && adb.isFile()) {
return adb.getAbsolutePath();
}
}
}
}
return null;
}
}