| /* |
| * 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; |
| |
| import java.util.Collection; |
| |
| import org.eclipse.sequoyah.device.common.utilities.exception.SequoyahException; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.IWorkbenchListener; |
| |
| import com.motorola.studio.android.adt.ISerialNumbered; |
| import com.motorola.studio.android.common.log.StudioLogger; |
| import com.motorola.studio.android.common.preferences.DialogWithToggleUtils; |
| import com.motorola.studio.android.devices.DevicesManager; |
| import com.motorola.studio.android.remote.i18n.RemoteDeviceNLS; |
| import com.motorola.studio.android.remote.instance.RemoteDeviceInstance; |
| |
| /** |
| * Class to implement the IWorkbenchListener that will check if |
| * there are connected Remote Devices when the uses tries to close Studio. |
| * The user will be prompted whether he wants to disconnect them or not. |
| */ |
| public class RemoteDeviceWorkbenchListener implements IWorkbenchListener |
| { |
| |
| public void postShutdown(IWorkbench workbench) |
| { |
| // Nothing to do. |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IWorkbenchListener#preShutdown(org.eclipse.ui.IWorkbench, boolean) |
| */ |
| public boolean preShutdown(IWorkbench workbench, boolean forced) |
| { |
| |
| Collection<ISerialNumbered> connectedDevices = |
| DevicesManager.getInstance().getOnlineDevicesByType(RemoteDeviceInstance.class); |
| |
| if (connectedDevices.size() > 0) |
| { |
| |
| boolean disconnectRemoteInstances = |
| DialogWithToggleUtils |
| .showQuestion( |
| RemoteDeviceConstants.DISCONNECT_ALL_REMOTE_DEVICES_IN_SHUTDOWN_KEY_PREFERENCE, |
| RemoteDeviceNLS.QUESTION_ConnectedRemoteDevicesOnClose_Title, |
| RemoteDeviceNLS.QUESTION_ConnectedRemoteDevicesOnClose_Text); |
| |
| if (disconnectRemoteInstances) |
| { |
| for (ISerialNumbered device : connectedDevices) |
| { |
| try |
| { |
| RemoteDevicePlugin.getDisconnectServiceHandler().run( |
| (RemoteDeviceInstance) device); |
| } |
| catch (SequoyahException e) |
| { |
| StudioLogger |
| .error("Error when trying to disconnect Remote Devices on Studio shutdown: " |
| + e.getMessage()); |
| } |
| } |
| } |
| |
| } |
| |
| return true; |
| } |
| } |