⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callmanager.java.svn-base

📁 开源项目openfire的完整源程序
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
                } else if (callState.equals(Call.RINGING)) {

                } else if (callState.equals(Call.BUSY)) {
                    closeToaster(interlocutorUI);
                } else if (callState.equals(Call.ALERTING)) {
                    showIncomingCall(interlocutorUI);
                    PhoneManager.getInstance().addCurrentCall(callNumber);
                }
            }
        });

        final String callState = interlocutorUI.getCallState();
        if (callState != null && (callState.equals(Call.DIALING)) || callState.equals(Call.RINGING)) {
            showOutgoingCall(interlocutorUI);
        }
    }

    private void showCallAnswered(InterlocutorUI interlocutorUI) {
        final ChatManager chatManager = SparkManager.getChatManager();

        String phoneNumber = interlocutorUI.getCall().getNumber();
        phoneNumber = SoftPhoneManager.getNumbersFromPhone(phoneNumber);

        PhonePanel panel = calls.get(phoneNumber);
        ChatRoom chatRoom = null;
        if (panel == null) {

            // Let's check to see if the Contact Exists
            final VCard vcard = SparkManager.getVCardManager().searchPhoneNumber(phoneNumber);
            if (vcard != null) {
                panel = new RosterMemberPanel();
                panel.setInterlocutorUI(interlocutorUI);

                String jid = vcard.getJabberId();
                String nickname = SparkManager.getUserManager().getUserNicknameFromJID(jid);
                chatRoom = chatManager.createChatRoom(jid, nickname, nickname);
                chatRoom.getSplitPane().setRightComponent(panel);
                chatRoom.getSplitPane().setResizeWeight(.80);
                chatRoom.getSplitPane().setDividerSize(5);

                chatManager.getChatContainer().activateChatRoom(chatRoom);
            } else {
                panel = new NonRosterPanel();
                panel.setInterlocutorUI(interlocutorUI);
                chatManager.getChatContainer().addContainerComponent(panel);
                chatManager.getChatContainer().activateComponent(panel);
            }

            calls.put(phoneNumber, panel);
        } else {
            panel.setInterlocutorUI(interlocutorUI);
        }

        if (chatRoom != null) {
            SoftPhoneManager.getInstance().addCallSession(chatRoom, SoftPhoneManager.CallRoomState.inCall);
            SparkManager.getChatManager().notifySparkTabHandlers(chatRoom);
        } else {
            SoftPhoneManager.getInstance().addCallSession(panel, SoftPhoneManager.CallRoomState.inCall);
            SparkManager.getChatManager().notifySparkTabHandlers(panel);
        }
    }

    public void interlocutorRemoved(final InterlocutorUI interlocutorUI) {
        if (softPhone.getInterlocutors().size() == 0) {

            if (offPhonePresence == null) {

                // Set user to available when all phone calls are hung up.
                Presence availablePresence = new Presence(Presence.Type.available, "Available", 1, Presence.Mode.available);
                SparkManager.getSessionManager().changePresence(availablePresence);

            } else {

                // Set user presence to last one choosed
                SparkManager.getSessionManager().changePresence(offPhonePresence);

            }

            offPhonePresence = null;

        }

        final SwingWorker delay = new SwingWorker() {
            public Object construct() {
                try {
                    Thread.sleep(2000);
                }
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return true;
            }

            public void finished() {
                String phoneNumber = interlocutorUI.getCall().getNumber();
                phoneNumber = SoftPhoneManager.getNumbersFromPhone(phoneNumber);

                final PhonePanel phonePanel = calls.get(phoneNumber);
                if (phonePanel == null) {
                    return;
                }

                for (ChatRoom room : SparkManager.getChatManager().getChatContainer().getChatRooms()) {
                    Component comp = room.getSplitPane().getRightComponent();
                    if (comp != null && comp instanceof PhonePanel) {
                        final PhonePanel cp = (PhonePanel) comp;
                        if (cp == phonePanel) {
                            room.getSplitPane().setRightComponent(null);
                            removePhonePanel(cp);

                            // Remove state mapping
                            softPhone.removeCallSession(room);

                            SparkManager.getChatManager().notifySparkTabHandlers(room);
                        }
                        return;
                    }
                }
            }
        };

        delay.start();
    }

    /**
     * Removes PhonePanel from ChatContainer or associated ChatRoom.
     *
     * @param component the PhonePanel or ChatRoom containing the PhonePanel.
     */
    private void removePhonePanel(Component component) {
        String phoneNumber = null;
        if (component instanceof PhonePanel) {
            final PhonePanel phonePanel = (PhonePanel) component;
            phoneNumber = phonePanel.getPhoneNumber();
            phoneNumber = SoftPhoneManager.getNumbersFromPhone(phoneNumber);
        } else if (component instanceof ChatRoom) {
            ChatRoom chatRoom = (ChatRoom) component;
            Component comp = chatRoom.getSplitPane().getRightComponent();
            if (comp != null && comp instanceof PhonePanel) {
                final PhonePanel phonePanel = (PhonePanel) comp;
                phoneNumber = phonePanel.getPhoneNumber();
                phoneNumber = SoftPhoneManager.getNumbersFromPhone(phoneNumber);
            }
        }

        if (phoneNumber != null) {
            calls.remove(phoneNumber);
        }
    }

    /**
     * Retrieves the <code>PhonePanel</code> object from the <code>ChatRoom</code>.
     * If no PhonePanel exists, then null is returned.
     *
     * @param chatRoom the ChatRoom.
     * @return the PhonePanel.
     */
    public PhonePanel getPhonePanel(ChatRoom chatRoom) {
        Component comp = chatRoom.getSplitPane().getRightComponent();
        if (comp != null && comp instanceof PhonePanel) {
            final PhonePanel phonePanel = (PhonePanel) comp;
            return phonePanel;
        }

        return null;
    }

    /**
     * Returns the associated Chat Room if one exists.
     *
     * @param phonePanel the <code>PhonePanel</code>.
     * @return the ChatRoom.
     */
    public ChatRoom getAssociatedChatRoom(PhonePanel phonePanel) {
        for (ChatRoom chatRoom : SparkManager.getChatManager().getChatContainer().getChatRooms()) {
            Component comp = chatRoom.getSplitPane().getRightComponent();
            if (phonePanel.equals(comp)) {
                return chatRoom;
            }
        }

        return null;
    }

    /**
     * Returns the <code>SparkTab</code> that acts as a container to this PhonePanel.
     *
     * @param phonePanel the <code>PhonePanel</code>
     * @return the SparkTab.
     */
    public SparkTab getSparkTab(PhonePanel phonePanel) {
        final ChatContainer chatContainer = SparkManager.getChatManager().getChatContainer();
        int tabCount = chatContainer.getTabCount();
        for (int i = 0; i < tabCount; i++) {
            SparkTab sparkTab = chatContainer.getTabAt(i);
            Component containerComponent = chatContainer.getComponentInTab(sparkTab);
            if (containerComponent.equals(phonePanel)) {
                return sparkTab;
            }

            if (containerComponent instanceof ChatRoom) {
                ChatRoom chatRoom = (ChatRoom) containerComponent;
                Component rightComponent = chatRoom.getSplitPane().getRightComponent();
                if (phonePanel.equals(rightComponent)) {
                    return sparkTab;
                }
            }
        }


        return null;
    }

    private void closeToaster(InterlocutorUI ic) {
        SparkToaster toaster = toasters.get(ic);
        if (toaster != null) {
            toaster.close();
            toasters.remove(ic);
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -