summaryrefslogtreecommitdiff
path: root/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/USBModeServiceHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/USBModeServiceHandler.java')
-rw-r--r--src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/USBModeServiceHandler.java189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/USBModeServiceHandler.java b/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/USBModeServiceHandler.java
new file mode 100644
index 0000000..61bab7d
--- /dev/null
+++ b/src/plugins/remote.device/src/com/motorola/studio/android/remote/handlers/USBModeServiceHandler.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.motorola.studio.android.remote.handlers;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.sequoyah.device.framework.model.IInstance;
+import org.eclipse.sequoyah.device.framework.model.IService;
+import org.eclipse.sequoyah.device.framework.model.handler.IServiceHandler;
+import org.eclipse.sequoyah.device.framework.model.handler.ServiceHandler;
+
+import com.motorola.studio.android.adt.DDMSFacade;
+import com.motorola.studio.android.adt.ISerialNumbered;
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.common.utilities.EclipseUtils;
+import com.motorola.studio.android.remote.RemoteDevicePlugin;
+import com.motorola.studio.android.remote.i18n.RemoteDeviceNLS;
+import com.motorola.studio.android.remote.instance.RemoteDeviceInstance;
+
+/**
+ * Handler which switches back a remote device from TCP/IP to USB mode.
+ */
+public class USBModeServiceHandler extends ServiceHandler
+{
+ // Min SDK version that supports tcpip connection mode
+ private static final int MIN_SDK_VERSION = 6;
+
+ /**
+ * Get the wireless service handler.
+ */
+ @Override
+ public IServiceHandler newInstance()
+ {
+ return new USBModeServiceHandler();
+ }
+
+ /**
+ * Get the phone IP, validate it and launch the Wireless wizard.
+ */
+ @Override
+ public IStatus runService(final IInstance instance, Map<Object, Object> arguments,
+ final IProgressMonitor monitor)
+ {
+
+ final SubMonitor subMonitor = SubMonitor.convert(monitor, 1000);
+ subMonitor.beginTask(
+ RemoteDeviceNLS.USBModeServiceHandler_MsgStartingProcessOfSwitchingToUSBMode, 1000);
+
+ final ISerialNumbered device = (ISerialNumbered) instance;
+
+ int deviceSdkVersion = -1;
+ try
+ {
+ deviceSdkVersion =
+ Integer.parseInt(DDMSFacade.getDeviceProperty(device.getSerialNumber(),
+ "ro.build.version.sdk")); //$NON-NLS-1$
+
+ subMonitor.worked(100);
+ }
+ catch (Exception e)
+ {
+ StudioLogger.error(USBModeServiceHandler.class,
+ RemoteDeviceNLS.USBModeServiceHandler_2, e);
+ }
+
+ // if it was not possible to retrieve the sdk version
+ // try to execute the service anyway
+ if ((!subMonitor.isCanceled()) && (deviceSdkVersion < MIN_SDK_VERSION)
+ && (deviceSdkVersion != -1))
+ {
+ EclipseUtils.showErrorDialog(RemoteDeviceNLS.Title_ReturningToUSBConnectionDialog,
+ RemoteDeviceNLS.USBModeServiceHandler_MsgUnableToSwitchToUSBDueToSDKVersion);
+ }
+ else
+ {
+
+ if (!subMonitor.isCanceled())
+ {
+
+ subMonitor
+ .setTaskName(RemoteDeviceNLS.WirelessServiceHandler_MsgRetrievingDeviceIPNumber);
+
+ // retrieve the IP, Port and timeout and validate it
+ Properties properties = instance.getProperties();
+ String host = properties.getProperty(RemoteDeviceInstance.PROPERTY_HOST);
+ String port = properties.getProperty(RemoteDeviceInstance.PROPERTY_PORT);
+ String timeout = properties.getProperty(RemoteDeviceInstance.PROPERTY_TIMEOUT);
+
+ subMonitor.worked(600);
+ if (host == null)
+ {
+ EclipseUtils.showErrorDialog(
+ RemoteDeviceNLS.Title_ReturningToUSBConnectionDialog,
+ RemoteDeviceNLS.ERR_WirelessWizard_No_IP);
+ }
+
+ else
+ {
+ if (!subMonitor.isCanceled())
+ {
+ subMonitor
+ .setTaskName(RemoteDeviceNLS.USBModeServiceHandler_MsgSwithcingTCPToUSB);
+ // switch the device from connection mode from TCP/IP to USB
+ try
+ {
+ IStatus status =
+ DDMSFacade.switchFromTCPConnectionModeToUSBConnectionMode(
+ device, host, port, Integer.parseInt(timeout),
+ subMonitor.newChild(300));
+
+ // in case the status is not OK, show an error message
+ if ((status != null) && (status.getSeverity() == IStatus.ERROR))
+ {
+ EclipseUtils
+ .showErrorDialog(
+ RemoteDeviceNLS.Title_ReturningToUSBConnectionDialog,
+ NLS.bind(
+ RemoteDeviceNLS.USBModeServiceHandler_MsgItWasNotPossibleToSwitchDeviceToUSBMode,
+ host), status);
+ }
+ else
+ {
+ // show a success message
+ EclipseUtils.showInformationDialog(
+ RemoteDeviceNLS.Title_ReturningToUSBConnectionDialog,
+ NLS.bind(RemoteDeviceNLS.USBModeServiceHandler_MsgSuccess,
+ host));
+ }
+ }
+ catch (IOException e)
+ {
+ StudioLogger
+ .error(this.getClass(),
+ NLS.bind(
+ "It was not possible to switch the android device {0} connection mode to USB.", //$NON-NLS-1$
+ device.getDeviceName()), e);
+ EclipseUtils
+ .showErrorDialog(
+ RemoteDeviceNLS.Title_ReturningToUSBConnectionDialog,
+ NLS.bind(
+ RemoteDeviceNLS.USBModeServiceHandler_MsgItWasNotPossibleToSwitchToUSBMode,
+ device.getDeviceName()));
+ }
+ }
+ }
+ }
+ }
+ return Status.OK_STATUS;
+ }
+
+ /**
+ * Simply Return an OK Status.
+ */
+ @Override
+ public IStatus updatingService(IInstance arg0, IProgressMonitor arg1)
+ {
+ return Status.OK_STATUS;
+ }
+
+ @Override
+ public void setService(IService service)
+ {
+ super.setService(service);
+ if (service != null)
+ {
+ service.setVisible(RemoteDevicePlugin.isWifiServiceEnabled());
+ }
+ }
+}