blob: b278eb4e9517f7b1b702a2b4ca4bf6a02b059a3e [file] [log] [blame]
/*
* 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();
}
});
}
}