/*
* 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.model;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.wizard.IWizardContainer;
import com.motorola.studio.android.codeutils.CodeUtilsActivator;
import com.motorola.studio.android.common.exception.AndroidException;
import com.motorola.studio.android.common.log.StudioLogger;
import com.motorola.studio.android.common.log.UsageDataConstants;
/**
* Launcher Controller Model. As part of a MVC architecture, this class should
* communicate with the Wizard UI to provide all needed information to create a
* functional Launcher Building Block (Activity, Service or Broadcast Receiver).
*/
public abstract class Launcher extends BuildingBlockModel
{
private final Set<String> intentFilterCategories = new HashSet<String>();
private final Set<String> intentFilterActions = new HashSet<String>();
private final Set<String> intentFilterPermissions = new HashSet<String>();
/**
* Constructor for the Launcher.
*
* @param superClass
* The super class for this Launcher
*/
public Launcher(String superClass)
{
super(superClass);
}
/**
* Creates a Launcher with a Default Intent Filter
*
* @param superClass
* the launcher superclass
* @param category
* the intent filter category
* @param action
* the intent filter action
*/
public Launcher(String superClass, String category, String action)
{
super(superClass);
intentFilterCategories.add(category);
intentFilterActions.add(action);
}
/**
* Adds an Intent Filter Action to this Launcher.
*
* @param action
*/
public void addIntentFilterAction(String action)
{
this.intentFilterActions.add(action);
}
/**
* Adds an intent filter category to this launcher.
*
* @param category
*/
public void addIntentFilterCategories(String category)
{
intentFilterCategories.add(category);
}
/**
* Adds an intent filter category to this launcher.
*
* @param category
*/
@Override
public void addIntentFilterPermissions(String permission)
{
intentFilterPermissions.add(permission);
}
/**
* Return all intent filter actions as Array.
*
* @return
*/
public String[] getIntentFilterActionsAsArray()
{
return intentFilterActions.toArray(new String[intentFilterActions.size()]);
}
/**
* Returns all intent filter actions.
*
* @return
*/
public Set<String> getIntentFilterActions()
{
return intentFilterActions;
}
/**
* Returns all intent filter categories.
*
* @return
*/
public Set<String> getIntentFilterCategories()
{
return intentFilterCategories;
}
/**
* Returns all intent filter categories.
*
* @return
*/
@Override
public Set<String> getIntentFilterPermissions()
{
return intentFilterPermissions;
}
/**
* Return all Filter Categories as an Array.
*
* @return
*/
public String[] getIntentFilterCategoriesAsArray()
{
return intentFilterCategories.toArray(new String[intentFilterCategories.size()]);
}
/**
* Return all Filter Permissions as an Array.
*
* @return
*/
@Override
public String[] getIntentFilterPermissionsAsArray()
{
return intentFilterPermissions.toArray(new String[intentFilterPermissions.size()]);
}
/**
* Remove the Intent filter action.
*
* @param action
*/
public void removeIntentFilterAction(String action)
{
intentFilterActions.remove(action);
}
/**
* Remove intent filter category.
*
* @param category
*/
public void removeIntentFilterCategories(String category)
{
intentFilterCategories.remove(category);
}
/**
* Remove intent filter category.
*
* @param category
*/
@Override
public void removeIntentFilterPermissions(String permission)
{
intentFilterPermissions.remove(permission);
}
/**
* Remove all Intent Filters action.
*/
public void removeAllIntentFilterActions()
{
intentFilterActions.clear();
}
/**
* Remove all intent filters categories.
*/
public void removeAllIntentFilterCategories()
{
intentFilterCategories.clear();
}
/**
* Logs to UDC all permissions used
*/
public boolean save(IWizardContainer container, IProgressMonitor monitor)
throws AndroidException
{
StringBuffer permissionList = new StringBuffer("Added building block permissions: ");
int selectedPermissionsSize = getIntentFilterPermissionsAsArray().length;
for (int i = 0; i < selectedPermissionsSize; i++)
{
String permission = getIntentFilterPermissionsAsArray()[i];
permissionList.append(permission);
if (i < (selectedPermissionsSize - 1))
{
permissionList.append(", ");
}
}
if (selectedPermissionsSize > 0)
{
// Logs to UDC the permissions selected
StudioLogger.collectUsageData(
UsageDataConstants.WHAT_BUILDINGBLOCK_PERMISSION, //$NON-NLS-1$
UsageDataConstants.KIND_BUILDINGBLOCK_PERMISSION,
"permissions: " + permissionList.toString(), //$NON-NLS-1$
CodeUtilsActivator.PLUGIN_ID, CodeUtilsActivator.getDefault().getBundle()
.getVersion().toString());
}
return true;
}
}