| /* |
| * 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.wizards.installapp; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableColumn; |
| import org.eclipse.swt.widgets.TableItem; |
| import org.eclipse.ui.PlatformUI; |
| |
| import com.motorola.studio.android.AndroidPlugin; |
| import com.motorola.studio.android.i18n.AndroidNLS; |
| |
| public class UninstallAppWizardPage extends WizardPage |
| { |
| |
| private Table packageTable; |
| |
| private Map<String, String> availablePackages; |
| |
| private static final String contextId = AndroidPlugin.PLUGIN_ID + ".uninstall_app"; //$NON-NLS-1$ |
| |
| private boolean filterSystem; |
| |
| private Thread animatedText = null; |
| |
| /** |
| * Create a new instance of this page, given the list of items to be |
| * displayed. |
| * |
| * @param applicationList |
| * : the list of app |
| * @param filterSystem |
| * : show only user applications if true |
| */ |
| public UninstallAppWizardPage(Map<String, String> applicationList, boolean filterSystem) |
| { |
| super("uninstall app page"); //$NON-NLS-1$ |
| this.filterSystem = filterSystem; |
| availablePackages = applicationList; |
| setTitle(AndroidNLS.UninstallAppWizardPage_PageTitle); |
| setDescription(AndroidNLS.UninstallAppWizardPage_PageDescription); |
| } |
| |
| public UninstallAppWizardPage(Map<String, String> applicationList) |
| { |
| this(applicationList, true); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets |
| * .Composite) |
| */ |
| public void createControl(Composite parent) |
| { |
| Composite mainComposite = new Composite(parent, SWT.FILL); |
| mainComposite.setLayout(new GridLayout()); |
| packageTable = new Table(mainComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); |
| packageTable.setHeaderVisible(true); |
| GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); |
| packageTable.setLayoutData(layoutData); |
| TableColumn packageNameColumn = new TableColumn(packageTable, SWT.CENTER); |
| TableColumn isSystemColumn = new TableColumn(packageTable, SWT.CENTER); |
| packageNameColumn.setText(AndroidNLS.UninstallAppWizardPage_ColumnPackageName); |
| isSystemColumn.setText(AndroidNLS.UninstallAppWizardPage_ColumnPackageKiind); |
| packageNameColumn.setWidth(200); |
| isSystemColumn.setWidth(100); |
| packageNameColumn.addSelectionListener(new SelectionListener() |
| { |
| |
| public void widgetSelected(SelectionEvent e) |
| { |
| sortItems(0); |
| } |
| |
| public void widgetDefaultSelected(SelectionEvent e) |
| { |
| // do nothing |
| } |
| }); |
| isSystemColumn.addSelectionListener(new SelectionListener() |
| { |
| |
| public void widgetSelected(SelectionEvent e) |
| { |
| sortItems(1); |
| } |
| |
| public void widgetDefaultSelected(SelectionEvent e) |
| { |
| // do nothing |
| } |
| }); |
| |
| populate(); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(mainComposite, contextId); |
| setControl(mainComposite); |
| } |
| |
| private void populate() |
| { |
| if (availablePackages != null) |
| { |
| Iterator<String> it = availablePackages.keySet().iterator(); |
| |
| while (it.hasNext()) |
| { |
| String packageName = it.next(); |
| String packagePath = availablePackages.get(packageName); |
| if (!filterSystem || !packagePath.toLowerCase().contains("system")) //$NON-NLS-1$ |
| { |
| TableItem item = new TableItem(packageTable, SWT.NONE); |
| item.setText(0, packageName); |
| item.setText(1, packagePath.contains("system") //$NON-NLS-1$ |
| ? AndroidNLS.UninstallAppWizardPage_SystemLabel |
| : AndroidNLS.UninstallAppWizardPage_UserLabel); |
| |
| } |
| } |
| packageTable.setLinesVisible(false); |
| packageTable.addSelectionListener(new SelectionListener() |
| { |
| |
| public void widgetSelected(SelectionEvent e) |
| { |
| validatePage(); |
| } |
| |
| public void widgetDefaultSelected(SelectionEvent e) |
| { |
| // do nothing |
| } |
| }); |
| } |
| else |
| { |
| final TableItem item = new TableItem(packageTable, SWT.NONE); |
| animatedText = new Thread("TextAnimator") //$NON-NLS-1$ |
| { |
| @Override |
| public void run() |
| { |
| int i = 0; |
| while (!isInterrupted()) |
| { |
| String text = |
| AndroidNLS.UninstallAppWizardPage_Loading_Applications; |
| for (int j = 0; j < (i % 4); j++) |
| { |
| text += "."; //$NON-NLS-1$ |
| } |
| final String finalText = text; |
| Display.getDefault().syncExec(new Runnable() |
| { |
| public void run() |
| { |
| if (!item.isDisposed()) |
| { |
| item.setText(0, finalText); |
| } |
| } |
| }); |
| i++; |
| try |
| { |
| sleep(1000); |
| } |
| catch (InterruptedException e) |
| { |
| break; |
| } |
| } |
| } |
| }; |
| animatedText.start(); |
| } |
| packageTable.layout(true); |
| validatePage(); |
| } |
| |
| private void validatePage() |
| { |
| setPageComplete(availablePackages != null ? packageTable.getSelection().length > 0 : false); |
| } |
| |
| /** |
| * get the list of selected packages to the uninstallation |
| * |
| * @return |
| */ |
| public List<String> getPackageList() |
| { |
| List<String> selectedPackages = new ArrayList<String>(); |
| for (TableItem item : packageTable.getSelection()) |
| { |
| selectedPackages.add(item.getText(0)); |
| } |
| |
| return selectedPackages; |
| } |
| |
| /** |
| * Sort items based on the given column |
| * |
| * @param column |
| */ |
| private void sortItems(int column) |
| { |
| // Improvement. Nothing to do here for now. |
| } |
| |
| public void setAvailablePackages(Map<String, String> applicationList) |
| { |
| availablePackages = applicationList; |
| if (animatedText != null) |
| { |
| animatedText.interrupt(); |
| } |
| Display.getDefault().syncExec(new Runnable() |
| { |
| |
| public void run() |
| { |
| packageTable.removeAll(); |
| populate(); |
| } |
| }); |
| |
| } |
| } |