Java tutorial
/* * 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.impl.growlnotification; import net.java.sip.communicator.service.systray.*; import net.java.sip.communicator.service.systray.event.*; import net.java.sip.communicator.util.*; import org.apache.commons.lang3.*; import org.growl4j.*; import org.jitsi.service.resources.*; import org.osgi.framework.*; /** * The Growl Notification Service displays on-screen information such as * messages or call received, etc. * * @author Romain Kuntz * @author Egidijus Jankauskas * @author Lyubomir Marinov */ public class GrowlNotificationServiceImpl extends AbstractPopupMessageHandler implements GrowlCallbacksListener { /** * The <tt>Logger</tt> used by the <tt>GrowlNotificationServiceImpl</tt> * class and its instance for logging output. */ private static final Logger logger = Logger.getLogger(GrowlNotificationServiceImpl.class); /** * The notification type (in Growl terms) to be specified to * {@link Growl#notifyGrowlOf(String, String, String, byte[], Object)} * when called by {@link #showPopupMessage(PopupMessage)}. */ private static final String SHOW_POPUP_MESSAGE_TYPE = "Default"; /** * The <tt>Growl</tt> object. */ private Growl growl; /** * Starts the service. Creates a Growl notifier, and check the current * registered protocol providers which supports BasicIM and adds message * listener to them. * * @param bc a currently valid bundle context */ public void start(BundleContext bc) { if (logger.isDebugEnabled()) logger.debug("Starting the Growl Notification implementation."); ResourceManagementService resources = GrowlNotificationActivator.getResources(); byte[] sipIcon = resources.getImageInBytes("service.gui.SIP_COMMUNICATOR_LOGO_45x45"); String[] dict = { SHOW_POPUP_MESSAGE_TYPE }; growl = new Growl(resources.getSettingsString("service.gui.APPLICATION_NAME"), "net.sip-communicator", sipIcon, dict, dict); growl.addClickedNotificationsListener(this); } /** * Stops the service. * * @param bc BundleContext */ public void stop(BundleContext bc) { if (growl != null) { growl.doFinalCleanUp(); growl = null; } } /** * Implements <tt>PopupMessageHandler#showPopupMessage()</tt> * * @param popupMessage the message we will show */ public void showPopupMessage(PopupMessage popupMessage) { String messageBody = popupMessage.getMessage(); String messageTitle = popupMessage.getMessageTitle(); // remove eventual HTML code before showing the pop-up message messageBody = messageBody.replaceAll("</?\\w++[^>]*+>", ""); messageTitle = messageTitle.replaceAll("</?\\w++[^>]*+>", ""); // unescape any chars that can be escaped inside the text messageBody = StringEscapeUtils.unescapeHtml4(messageBody); messageTitle = StringEscapeUtils.unescapeHtml4(messageTitle); growl.notifyGrowlOf(messageTitle, messageBody, SHOW_POPUP_MESSAGE_TYPE, popupMessage.getIcon(), popupMessage.getTag()); } /** * This method is called by Growl when the Growl notification is not clicked * * @param context an object identifying the notification */ public void growlNotificationTimedOut(Object context) { if (logger.isTraceEnabled()) logger.trace("Growl notification timed out: " + context); } /** * This method is called by Growl when the Growl notification is clicked * * @param context an object identifying the notification */ public void growlNotificationWasClicked(final Object context) { // release the native thread new Thread(new Runnable() { public void run() { firePopupMessageClicked(new SystrayPopupMessageEvent(this, context)); if (logger.isTraceEnabled()) logger.trace("Growl notification clicked: " + context); } }).start(); } /** * Implements <tt>toString</tt> from <tt>PopupMessageHandler</tt>. * * @return a description of this handler */ @Override public String toString() { return GrowlNotificationActivator.getResources() .getI18NString("impl.growlnotification.POPUP_MESSAGE_HANDLER"); } /** * Implements <tt>getPreferenceIndex</tt> from <tt>PopupMessageHandler</tt>. * This handler is able to show images, detect clicks, match a click to a * message, and use a native popup mechanism, thus the index is 4. * * @return a preference index */ public int getPreferenceIndex() { return 4; } }