/*
* 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.gui.main.call;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.customcontrols.*;
import net.java.sip.communicator.impl.gui.main.*;
import net.java.sip.communicator.impl.gui.main.contactlist.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.util.*;
import net.java.sip.communicator.util.skin.*;
/**
* The <tt>CallHistoryButton</tt> is the button shown on the top of the contact
* list.
* @author Yana Stamcheva
* @author Adam Netocny
*/
public class CallHistoryButton
extends SIPCommNotificationsButton
implements UINotificationListener,
ActionListener,
Skinnable
{
/**
* The tool tip shown by default over the history button.
*/
private final static String callHistoryToolTip
= GuiActivator.getResources().getI18NString(
"service.gui.CALL_HISTORY_TOOL_TIP");
/**
* The tool tip shown when we're in history view.
*/
private final static String showContactListToolTip
= GuiActivator.getResources().getI18NString(
"service.gui.SHOW_CONTACT_LIST_TOOL_TIP");
/**
* Creates a <tt>CallHistoryButton</tt>.
*/
public CallHistoryButton()
{
super("");
UINotificationManager.addNotificationListener(this);
this.setToolTipText(callHistoryToolTip);
this.addActionListener(this);
}
/**
* Action performed on clicking the button.
* @param e
*/
public void actionPerformed(ActionEvent e)
{
if(isToggleDisabled()
&& GuiActivator.getContactList().getCurrentFilter()
.equals(TreeContactList.historyFilter))
return;
if (!isToggleDisabled()
&& isHistoryVisible() && !hasNotifications())
{
GuiActivator.getContactList()
.setDefaultFilter(TreeContactList.presenceFilter);
GuiActivator.getContactList().applyDefaultFilter();
setHistoryVisible(false);
}
else
{
GuiActivator.getContactList()
.setDefaultFilter(TreeContactList.historyFilter);
GuiActivator.getContactList().applyDefaultFilter();
UINotificationManager.removeAllNotifications();
setHistoryVisible(true);
}
setHistoryView();
GuiActivator.getContactList().requestFocusInWindow();
repaint();
}
/**
* Indicates that a new notification is received.
*
* @param notification the notification that was received
*/
public void notificationReceived(UINotification notification)
{
Collection<UINotificationGroup> notificationGroups
= UINotificationManager.getNotificationGroups();
if (!isHistoryVisible() && notificationGroups.size() > 0)
{
setNotificationView(notificationGroups);
}
else
{
setHistoryView();
}
this.revalidate();
this.repaint();
}
/**
* Does nothing because this class causes the clearing.
*/
@Override
public void notificationCleared(UINotification notification)
{
}
/**
* Sets the history view.
*/
private void setHistoryView()
{
clearNotifications();
if (!isToggleDisabled() && isHistoryVisible())
{
setToolTipText(showContactListToolTip);
}
else
{
setToolTipText(callHistoryToolTip);
}
}
/**
* Sets the notifications view of this button.
*
* @param notificationGroups the list of unread notification groups
*/
private void setNotificationView(
final Collection<UINotificationGroup> notificationGroups)
{
if(!SwingUtilities.isEventDispatchThread())
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
setNotificationView(notificationGroups);
}
});
return;
}
int notificationCount = 0;
Iterator<UINotificationGroup> groupsIter
= notificationGroups.iterator();
String tooltipText = "<html>";
while (groupsIter.hasNext())
{
UINotificationGroup group = groupsIter.next();
tooltipText += "<b>" + group.getGroupDisplayName() + "</b><br/>";
notificationCount += group.getUnreadNotificationsCount();
int visibleNotifsPerGroup = 5;
Iterator<UINotification> notifsIter = group.getUnreadNotifications();
while (notifsIter.hasNext() && visibleNotifsPerGroup > 0)
{
UINotification missedCall = notifsIter.next();
tooltipText += GuiUtils.formatTime(missedCall.getTime())
+ " " + missedCall.getDisplayName() + "<br/>";
visibleNotifsPerGroup--;
if (visibleNotifsPerGroup == 0 && notifsIter.hasNext())
tooltipText += GuiActivator.getResources()
.getI18NString("service.gui.MISSED_CALLS_MORE_TOOL_TIP",
new String[]{ new Integer(
notificationCount - 5).toString()});
}
}
this.setToolTipText(tooltipText + "</html>");
setNotifications(notificationCount);
}
private boolean isHistoryVisible()
{
return isDefaultViewVisible();
}
private void setHistoryVisible(boolean value)
{
setDefaultViewVisible(value);
}
/**
* Loads images and sets history view.
*/
@Override
public void loadSkin()
{
defaultImage
= ImageLoader.getImage(ImageLoader.CALL_HISTORY_BUTTON);
if(!isToggleDisabled())
pressedImage
= ImageLoader.getImage(ImageLoader.CALL_HISTORY_BUTTON_PRESSED);
setHistoryView();
super.loadSkin();
}
}