/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * 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 net.java.sip.communicator.plugin.busylampfield; import net.java.sip.communicator.service.contactsource.*; import net.java.sip.communicator.service.customcontactactions.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.resources.*; import net.java.sip.communicator.util.*; import java.util.*; /** * Custom acction to show pickup call button. * * @author Damian Minkov */ public class CustomActionsBLFSourceContact implements CustomContactActionsService<SourceContact> { /** * Our logger. */ private final Logger logger = Logger.getLogger( CustomActionsBLFSourceContact.class); /** * List of actions. */ private final List<ContactAction<SourceContact>> actionsList = new LinkedList<ContactAction<SourceContact>>(); public CustomActionsBLFSourceContact() { actionsList.add(new PickupAction()); } /** * Returns the template class that this service has been initialized with * * @return the template class */ @Override public Class<SourceContact> getContactSourceClass() { return SourceContact.class; } /** * Returns all custom actions defined by this service. * * @return an iterator over a list of <tt>ContactAction</tt>s */ @Override public Iterator<ContactAction<SourceContact>> getCustomContactActions() { return actionsList.iterator(); } /** * Returns all custom actions menu items defined by this service. * * @return an iterator over a list of <tt>ContactActionMenuItem</tt>s */ @Override public Iterator<ContactActionMenuItem<SourceContact>> getCustomContactActionsMenuItems() { return null; } /** * Action that represents pickup button. */ private class PickupAction implements ContactAction<SourceContact> { /** * Invoked when an action occurs. * * @param actionSource the source of the action * @param x the x coordinate of the action * @param y the y coordinate of the action */ @Override public void actionPerformed(final SourceContact actionSource, int x, int y) throws OperationFailedException { if(!(actionSource instanceof BLFSourceContact)) return; new Thread(new Runnable() { public void run() { try { OperationSetTelephonyBLF.Line line = ((BLFSourceContact)actionSource).getLine(); OperationSetTelephonyBLF opset = line.getProvider().getOperationSet( OperationSetTelephonyBLF.class); opset.pickup(line); } catch(Exception ex) { logger.error("Error picking up call", ex); } } }).start(); } /** * The icon used by the UI to visualize this action. * @return the button icon. */ @Override public byte[] getIcon() { return ResourceManagementServiceUtils.getService( BLFActivator.bundleContext).getImageInBytes( "plugin.busylampfield.PICKUP_CALL"); } /** * The icon used by the UI to visualize this action. * @return the button icon. */ @Override public byte[] getRolloverIcon() { return ResourceManagementServiceUtils.getService( BLFActivator.bundleContext).getImageInBytes( "plugin.busylampfield.PICKUP_CALL_ROLLOVER"); } /** * The icon used by the UI to visualize this action. * @return the button icon. */ @Override public byte[] getPressedIcon() { return ResourceManagementServiceUtils.getService( BLFActivator.bundleContext).getImageInBytes( "plugin.busylampfield.PICKUP_CALL_PRESSED"); } /** * Returns the tool tip text of the component to create for this contact * action. * * @return the tool tip text of the component to create for this contact * action */ @Override public String getToolTipText() { return ResourceManagementServiceUtils.getService( BLFActivator.bundleContext).getI18NString( "plugin.busylampfield.PICKUP"); } /** * Indicates if this action is visible for the * given <tt>actionSource</tt>. * * @param actionSource the action source for which we're verifying the * action. * @return <tt>true</tt> if the action should be visible for the given * <tt>actionSource</tt>, <tt>false</tt> - otherwise */ @Override public boolean isVisible(SourceContact actionSource) { if(actionSource.getPresenceStatus() .equals(BLFPresenceStatus.BLF_RINGING)) return true; else return false; } } }