| /* |
| * 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.perspective; |
| |
| import java.net.URL; |
| |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jdt.internal.ui.JavaPerspectiveFactory; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.ui.IFolderLayout; |
| import org.eclipse.ui.IPageLayout; |
| import org.eclipse.ui.IPageListener; |
| import org.eclipse.ui.IPerspectiveDescriptor; |
| import org.eclipse.ui.IPerspectiveFactory; |
| import org.eclipse.ui.IPerspectiveListener; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchPartReference; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.PerspectiveAdapter; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.intro.IIntroConstants; |
| import org.osgi.framework.BundleContext; |
| |
| import com.motorola.studio.android.AndroidPlugin; |
| import com.motorola.studio.android.common.log.StudioLogger; |
| import com.motorola.studio.android.common.utilities.EclipseUtils; |
| |
| @SuppressWarnings("restriction") |
| public class MotodevStudioAndroidPerspective extends JavaPerspectiveFactory |
| { |
| private static String VIEW_PACKAGE_EXPLORER = "org.eclipse.jdt.ui.PackageExplorer"; |
| |
| private static String VIEW_PROBLEM = "org.eclipse.ui.views.ProblemView"; |
| |
| private static String VIEW_CONSOLE = "org.eclipse.ui.console.ConsoleView"; |
| |
| private static String VIEW_OUTLINE = "org.eclipse.ui.views.ContentOutline"; |
| |
| private static String VIEW_ANDROID_EMULATOR = |
| "com.motorola.studio.android.emulator.androidView"; |
| |
| private static String VIEW_SNIPPETS = |
| "org.eclipse.wst.common.snippets.internal.ui.SnippetsView"; |
| |
| // DDMS Views |
| |
| private static String DDMSVIEW_EMULATOR_CONTROL = |
| "com.android.ide.eclipse.ddms.views.EmulatorControlView"; |
| |
| private static String DDMSVIEW_LOGCAT = "com.android.ide.eclipse.ddms.views.LogCatView"; |
| |
| private static String DDMSVIEW_FILE_EXPLORER = |
| "com.android.ide.eclipse.ddms.views.FileExplorerView"; |
| |
| private static String PERSPECTIVE_ANDROID = "com.motorola.studio.android.perspective"; |
| |
| private static String PERSPECTIVE_OPHONE = "com.motorola.studio.android.ophone.perspective"; |
| |
| private static String PERSPECTIVE_DDMS = "com.android.ide.eclipse.ddms.Perspective"; |
| |
| private static String PERSPECTIVE_EMULATOR = "com.motorola.studio.android.emulator.perspective"; |
| |
| private static String PERSPECTIVE_DEBUG = "org.eclipse.debug.ui.DebugPerspective"; |
| |
| private static String LAUNCH_COOLBAR_SHORTCUT = "org.eclipse.debug.ui.launchActionSet"; |
| |
| private static String VIEW_TML_DEV_MGT = |
| "org.eclipse.sequoyah.device.framework.ui.InstanceMgtView"; |
| |
| private static String WIZARD_PROJECT = "com.motorola.studio.android.wizards.newProjectWizard"; |
| |
| private static String WIZARD_WIDGET_PROJECT = |
| "com.motorola.studio.android.wizards.newWidgetProjectWizard"; |
| |
| private static String WIZARD_ACTIVITY = "com.motorola.studio.android.wizards.newActivityWizard"; |
| |
| private static String WIZARD_ACTIVITY_BASED_ON_TEMPLATE = |
| "com.motorola.studio.android.wizards.newActivityBasedOnTemplateWizard"; |
| |
| private static String WIZARD_RECEIVER = "com.motorola.studio.android.wizards.newReceiverWizard"; |
| |
| private static String WIZARD_SERVICE = "com.motorola.studio.android.wizards.newServiceWizard"; |
| |
| private static String WIZARD_PROVIDER = "com.motorola.studio.android.wizards.newProviderWizard"; |
| |
| private static String WIZARD_ANDROID_XML = |
| "com.android.ide.eclipse.editors.wizards.NewXmlFileWizard"; |
| |
| private static String WIZARD_WIDGET_PROVIDER = |
| "com.motorola.studio.android.wizard.newWidgetProviderWizard"; |
| |
| private static String WIZARD_JAVA_PACKAGE = |
| "org.eclipse.jdt.ui.wizards.NewPackageCreationWizard"; |
| |
| private static String WIZARD_JAVA_CLASS = "org.eclipse.jdt.ui.wizards.NewClassCreationWizard"; |
| |
| private static String WIZARD_JAVA_INTERFACE = |
| "org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard"; |
| |
| private static String WIZARD_NEW_FOLDER = "org.eclipse.ui.wizards.new.folder"; |
| |
| private static String VIEW_APPLICATION_SIGNING_TOOL = |
| "com.motorola.studio.android.packaging.ui.signingview"; |
| |
| private static final String STUDIO_INFO_INITIAL_PAGE_PROPERTY = "studio.android.initial.page"; |
| |
| private static final String STUDIO_INFO_INITIAL_PAGE_FILE = "MOTODEV/index.html"; |
| |
| private static IPerspectiveListener perspectiveListener = null; |
| |
| /** |
| * Creates the initial layout for a page. |
| * |
| * @param layout |
| * the page layout |
| * |
| * @see IPerspectiveFactory#createInitialLayout(IPageLayout) |
| */ |
| @Override |
| public void createInitialLayout(final IPageLayout layout) |
| { |
| String editorArea = layout.getEditorArea(); |
| layout.setEditorAreaVisible(true); |
| |
| IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.2f, editorArea); |
| left.addView(VIEW_PACKAGE_EXPLORER); |
| left.addView(DDMSVIEW_FILE_EXPLORER); |
| |
| IFolderLayout leftBottom = |
| layout.createFolder("leftBottom", IPageLayout.BOTTOM, 0.59f, "left"); |
| leftBottom.addView(VIEW_SNIPPETS); |
| leftBottom.addView(VIEW_OUTLINE); |
| |
| IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, 0.6f, editorArea); |
| right.addView(VIEW_ANDROID_EMULATOR); |
| |
| IFolderLayout bottomMiddle = |
| layout.createFolder("bottomMiddle", IPageLayout.BOTTOM, 0.59f, editorArea); |
| bottomMiddle.addView(VIEW_TML_DEV_MGT); |
| bottomMiddle.addView(DDMSVIEW_EMULATOR_CONTROL); |
| bottomMiddle.addView(DDMSVIEW_LOGCAT); |
| bottomMiddle.addView(VIEW_CONSOLE); |
| bottomMiddle.addView(VIEW_PROBLEM); |
| bottomMiddle.addView(VIEW_APPLICATION_SIGNING_TOOL); |
| |
| layout.addShowViewShortcut(VIEW_TML_DEV_MGT); |
| layout.addShowViewShortcut(VIEW_ANDROID_EMULATOR); |
| layout.addShowViewShortcut(VIEW_SNIPPETS); |
| layout.addShowViewShortcut(VIEW_APPLICATION_SIGNING_TOOL); |
| // layout.addShowViewShortcut(VIEW_VIDEOS); |
| |
| layout.addPerspectiveShortcut(PERSPECTIVE_ANDROID); |
| layout.addPerspectiveShortcut(PERSPECTIVE_OPHONE); |
| layout.addPerspectiveShortcut(PERSPECTIVE_DDMS); |
| layout.addPerspectiveShortcut(PERSPECTIVE_DEBUG); |
| layout.addPerspectiveShortcut(PERSPECTIVE_EMULATOR); |
| |
| layout.addActionSet(LAUNCH_COOLBAR_SHORTCUT); |
| |
| layout.addNewWizardShortcut(WIZARD_PROJECT); |
| layout.addNewWizardShortcut(WIZARD_WIDGET_PROJECT); |
| layout.addNewWizardShortcut(WIZARD_ACTIVITY); |
| layout.addNewWizardShortcut(WIZARD_ACTIVITY_BASED_ON_TEMPLATE); |
| layout.addNewWizardShortcut(WIZARD_RECEIVER); |
| layout.addNewWizardShortcut(WIZARD_SERVICE); |
| layout.addNewWizardShortcut(WIZARD_PROVIDER); |
| layout.addNewWizardShortcut(WIZARD_WIDGET_PROVIDER); |
| layout.addNewWizardShortcut(WIZARD_JAVA_PACKAGE); |
| layout.addNewWizardShortcut(WIZARD_JAVA_CLASS); |
| layout.addNewWizardShortcut(WIZARD_JAVA_INTERFACE); |
| layout.addNewWizardShortcut(WIZARD_ANDROID_XML); |
| layout.addNewWizardShortcut(WIZARD_NEW_FOLDER); |
| |
| final IWorkbenchWindow activeWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
| IWorkbenchPage activePage = null; |
| if (activeWindow != null) |
| { |
| activePage = activeWindow.getActivePage(); |
| addPerspectiveListener(activeWindow); |
| firePerspectiveInitActions(activePage, layout); |
| } |
| |
| IPageListener pageListener = new IPageListener() |
| { |
| public void pageActivated(IWorkbenchPage page) |
| { |
| firePerspectiveInitActions(page, layout); |
| Display disp = PlatformUI.getWorkbench().getDisplay(); |
| final IPageListener thisListener = this; |
| disp.asyncExec(new Runnable() |
| { |
| public void run() |
| { |
| if (activeWindow != null) |
| { |
| activeWindow.removePageListener(thisListener); |
| } |
| } |
| }); |
| } |
| |
| public void pageClosed(IWorkbenchPage page) |
| { |
| //do nothing |
| } |
| |
| public void pageOpened(IWorkbenchPage page) |
| { |
| //do nothing |
| } |
| |
| }; |
| if (activeWindow != null) |
| { |
| activeWindow.addPageListener(pageListener); |
| } |
| |
| StudioLogger.debug(MotodevStudioAndroidPerspective.class, |
| "MOTODEV Studio Perspective created."); |
| } |
| |
| /** |
| * Creates and adds a perspective listener that will remove the |
| * "maximized state" of the Welcome (intro) view before hiding it. |
| * |
| * @param activeWindow |
| * Workbench Window where the listener will be added. |
| */ |
| private synchronized static void addPerspectiveListener(IWorkbenchWindow activeWindow) |
| { |
| if (perspectiveListener == null) |
| { |
| perspectiveListener = new PerspectiveAdapter() |
| { |
| |
| @Override |
| public void perspectiveChanged(IWorkbenchPage page, |
| IPerspectiveDescriptor perspective, IWorkbenchPartReference partRef, |
| String changeId) |
| { |
| if (PERSPECTIVE_ANDROID.equals(perspective.getId())) |
| { |
| if (IIntroConstants.INTRO_VIEW_ID.equals(partRef.getId())) |
| { |
| if (IWorkbenchPage.CHANGE_VIEW_HIDE.equals(changeId)) |
| { |
| if (IWorkbenchPage.STATE_MAXIMIZED == page.getPartState(partRef)) |
| { |
| page.toggleZoom(partRef); |
| } |
| } |
| } |
| } |
| } |
| |
| }; |
| activeWindow.addPerspectiveListener(perspectiveListener); |
| } |
| |
| } |
| |
| /** |
| * |
| * @param activeWindow |
| * @param layout |
| */ |
| private void firePerspectiveInitActions(final IWorkbenchPage activePage, |
| final IPageLayout layout) |
| { |
| if (activePage != null) |
| { |
| // Open MOTODEV Web Resources on a Web Browser Editor |
| openStudioInfoOnWebBrowserEditor(activePage); |
| } |
| |
| } |
| |
| /** |
| * Opens a web browser with useful information from Studio for Android |
| */ |
| public static void openStudioInfoOnWebBrowserEditor(IWorkbenchPage page) |
| { |
| |
| URL initialPageURL = getWebResourcesURL(); |
| |
| if ((initialPageURL != null) && (!Platform.getOS().equals(Platform.OS_LINUX))) |
| { |
| EclipseUtils.openedWebEditor(page, initialPageURL); |
| } |
| } |
| |
| /** |
| * @return |
| */ |
| public static URL getWebResourcesURL() |
| { |
| URL initialPageURL = null; |
| |
| try |
| { |
| BundleContext context = AndroidPlugin.getDefault().getBundle().getBundleContext(); |
| String initialPage = context.getProperty(STUDIO_INFO_INITIAL_PAGE_PROPERTY); |
| StudioLogger.debug(MotodevStudioAndroidPerspective.class, "Read initial page property:" |
| + STUDIO_INFO_INITIAL_PAGE_PROPERTY + " = " + initialPage); |
| if (initialPage != null) |
| { |
| StudioLogger.debug(MotodevStudioAndroidPerspective.class, |
| "Using the customized URL to be opened in the Web Browser Editor:" |
| + initialPage); |
| initialPageURL = new URL(initialPage); |
| } |
| } |
| catch (Exception e) |
| { |
| StudioLogger.error( |
| MotodevStudioAndroidPerspective.class, |
| "Unable to read customized URL to be opened in the Web Browser Editor..." |
| + e.getMessage()); |
| } |
| |
| if (initialPageURL == null) |
| { |
| try |
| { |
| StudioLogger.debug(MotodevStudioAndroidPerspective.class, |
| "Use the default URL to be opened in the Web Browser Editor."); |
| URL installDir = Platform.getInstallLocation().getURL(); |
| initialPageURL = new URL(installDir, STUDIO_INFO_INITIAL_PAGE_FILE); |
| } |
| catch (Exception e) |
| { |
| StudioLogger.error(MotodevStudioAndroidPerspective.class, |
| "Unable to show Web Browser Editor with URL: " + e.getMessage()); |
| } |
| } |
| return initialPageURL; |
| } |
| |
| } |