summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llimview.cpp117
-rw-r--r--indra/newview/llimview.h7
-rw-r--r--indra/newview/llvoicechannel.cpp5
-rw-r--r--indra/newview/skins/default/xui/en/floater_outgoing_call.xml26
4 files changed, 104 insertions, 51 deletions
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index ad30b844a9..28d9f2170d 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -93,7 +93,8 @@ const static std::string ADHOC_NAME_SUFFIX(" Conference");
std::string LLCallDialogManager::sPreviousSessionlName = "";
std::string LLCallDialogManager::sCurrentSessionlName = "";
LLIMModel::LLIMSession* LLCallDialogManager::sSession = NULL;
-
+LLVoiceChannel::EState LLCallDialogManager::sOldState = LLVoiceChannel::STATE_READY;
+const LLUUID LLOutgoingCallDialog::OCD_KEY = LLUUID("7CF78E11-0CFE-498D-ADB9-1417BF03DDB4");
//
// Globals
//
@@ -1280,12 +1281,22 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)
void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction)
{
LLSD mCallDialogPayload;
- LLOutgoingCallDialog* ocd;
+ LLOutgoingCallDialog* ocd = NULL;
+
+ if(sOldState == new_state)
+ {
+ return;
+ }
+
+ sOldState = new_state;
mCallDialogPayload["session_id"] = sSession->mSessionID;
mCallDialogPayload["session_name"] = sSession->mName;
mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID;
mCallDialogPayload["old_channel_name"] = sPreviousSessionlName;
+ mCallDialogPayload["state"] = new_state;
+ mCallDialogPayload["disconnected_channel_name"] = sSession->mName;
+ mCallDialogPayload["session_type"] = sSession->mSessionType;
switch(new_state)
{
@@ -1295,46 +1306,10 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat
{
return;
}
-
- ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE));
- if (ocd)
- {
- ocd->getChild<LLTextBox>("calling")->setVisible(true);
- ocd->getChild<LLTextBox>("leaving")->setVisible(true);
- ocd->getChild<LLTextBox>("connecting")->setVisible(false);
- ocd->getChild<LLTextBox>("noanswer")->setVisible(false);
- ocd->getChild<LLButton>("Cancel")->setVisible(true);
- }
- return;
-
- case LLVoiceChannel::STATE_RINGING :
- ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE));
- if (ocd)
- {
- ocd->getChild<LLTextBox>("calling")->setVisible(false);
- ocd->getChild<LLTextBox>("leaving")->setVisible(true);
- ocd->getChild<LLTextBox>("connecting")->setVisible(true);
- ocd->getChild<LLTextBox>("noanswer")->setVisible(false);
- ocd->getChild<LLButton>("Cancel")->setVisible(true);
- }
- return;
-
- case LLVoiceChannel::STATE_ERROR :
- mCallDialogPayload["start_timer"] = true;
- ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE));
- if (ocd)
- {
- ocd->getChild<LLTextBox>("calling")->setVisible(false);
- ocd->getChild<LLTextBox>("leaving")->setVisible(false);
- ocd->getChild<LLTextBox>("connecting")->setVisible(false);
- ocd->getChild<LLTextBox>("noanswer")->setVisible(true);
- ocd->getChild<LLButton>("Cancel")->setVisible(false);
- }
- return;
+ break;
case LLVoiceChannel::STATE_CONNECTED :
- case LLVoiceChannel::STATE_HUNG_UP :
- ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE));
+ ocd = LLFloaterReg::findTypedInstance<LLOutgoingCallDialog>("outgoing_call", LLOutgoingCallDialog::OCD_KEY);
if (ocd)
{
ocd->closeFloater();
@@ -1345,6 +1320,11 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat
break;
}
+ ocd = LLFloaterReg::getTypedInstance<LLOutgoingCallDialog>("outgoing_call", LLOutgoingCallDialog::OCD_KEY);
+ if(ocd)
+ {
+ ocd->show(mCallDialogPayload);
+ }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1374,12 +1354,13 @@ void LLCallDialog::onOpen(const LLSD& key)
LLOutgoingCallDialog::LLOutgoingCallDialog(const LLSD& payload) :
LLCallDialog(payload)
{
- LLOutgoingCallDialog* instance = LLFloaterReg::findTypedInstance<LLOutgoingCallDialog>("outgoing_call", payload);
+ LLOutgoingCallDialog* instance = LLFloaterReg::findTypedInstance<LLOutgoingCallDialog>("outgoing_call", LLOutgoingCallDialog::OCD_KEY);
if(instance && instance->getVisible())
{
instance->onCancel(instance);
}
}
+
void LLOutgoingCallDialog::draw()
{
if (lifetimeHasExpired())
@@ -1408,10 +1389,14 @@ void LLOutgoingCallDialog::onLifetimeExpired()
closeFloater();
}
-void LLOutgoingCallDialog::onOpen(const LLSD& key)
+void LLOutgoingCallDialog::show(const LLSD& key)
{
- LLCallDialog::onOpen(key);
+ mPayload = key;
+
+ // hide all text at first
+ hideAllText();
+ // customize text strings
// tell the user which voice channel they are leaving
if (!mPayload["old_channel_name"].asString().empty())
{
@@ -1422,6 +1407,12 @@ void LLOutgoingCallDialog::onOpen(const LLSD& key)
childSetTextArg("leaving", "[CURRENT_CHAT]", getString("localchat"));
}
+ if (!mPayload["disconnected_channel_name"].asString().empty())
+ {
+ childSetTextArg("nearby", "[VOICE_CHANNEL_NAME]", mPayload["disconnected_channel_name"].asString());
+ childSetTextArg("nearby_P2P", "[VOICE_CHANNEL_NAME]", mPayload["disconnected_channel_name"].asString());
+ }
+
std::string callee_name = mPayload["session_name"].asString();
if (callee_name == "anonymous")
{
@@ -1438,12 +1429,48 @@ void LLOutgoingCallDialog::onOpen(const LLSD& key)
// stop timer by default
mLifetimeTimer.stop();
- if(mPayload.has("start_timer"))
+
+ // show only necessary strings and controls
+ switch(mPayload["state"].asInteger())
{
- mLifetimeTimer.reset();
+ case LLVoiceChannel::STATE_CALL_STARTED :
+ getChild<LLTextBox>("calling")->setVisible(true);
+ getChild<LLTextBox>("leaving")->setVisible(true);
+ break;
+ case LLVoiceChannel::STATE_RINGING :
+ getChild<LLTextBox>("leaving")->setVisible(true);
+ getChild<LLTextBox>("connecting")->setVisible(true);
+ break;
+ case LLVoiceChannel::STATE_ERROR :
+ getChild<LLTextBox>("noanswer")->setVisible(true);
+ getChild<LLButton>("Cancel")->setVisible(false);
+ mLifetimeTimer.start();
+ break;
+ case LLVoiceChannel::STATE_HUNG_UP :
+ if (mPayload["session_type"].asInteger() == LLIMModel::LLIMSession::P2P_SESSION)
+ {
+ getChild<LLTextBox>("nearby_P2P")->setVisible(true);
+ }
+ else
+ {
+ getChild<LLTextBox>("nearby")->setVisible(true);
+ }
+ getChild<LLButton>("Cancel")->setVisible(false);
+ mLifetimeTimer.start();
}
+
+ openFloater(LLOutgoingCallDialog::OCD_KEY);
}
+void LLOutgoingCallDialog::hideAllText()
+{
+ getChild<LLTextBox>("calling")->setVisible(false);
+ getChild<LLTextBox>("leaving")->setVisible(false);
+ getChild<LLTextBox>("connecting")->setVisible(false);
+ getChild<LLTextBox>("nearby_P2P")->setVisible(false);
+ getChild<LLTextBox>("nearby")->setVisible(false);
+ getChild<LLTextBox>("noanswer")->setVisible(false);
+}
//static
void LLOutgoingCallDialog::onCancel(void* user_data)
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 6eb3f3d07f..09f0c9df71 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -467,6 +467,7 @@ protected:
static std::string sPreviousSessionlName;
static std::string sCurrentSessionlName;
static LLIMModel::LLIMSession* sSession;
+ static LLVoiceChannel::EState sOldState;
};
class LLCallDialog : public LLDockableFloater
@@ -504,14 +505,18 @@ public:
LLOutgoingCallDialog(const LLSD& payload);
/*virtual*/ BOOL postBuild();
- /*virtual*/ void onOpen(const LLSD& key);
+ void show(const LLSD& key);
static void onCancel(void* user_data);
+ static const LLUUID OCD_KEY;
// check timer state
/*virtual*/ void draw();
private:
+
+ // hide all text boxes
+ void hideAllText();
// lifetime timer for NO_ANSWER notification
LLTimer mLifetimeTimer;
// lifetime duration for NO_ANSWER notification
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index fd4e7bb91f..60a2c3b638 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -229,7 +229,6 @@ void LLVoiceChannel::handleStatusChange(EStatusType type)
{
// if forceably removed from channel
// update the UI and revert to default channel
- LLNotificationsUtil::add("VoiceChannelDisconnected", mNotifyArgs);
deactivate();
}
mIgnoreNextSessionLeave = FALSE;
@@ -741,6 +740,7 @@ void LLVoiceChannelP2P::handleStatusChange(EStatusType type)
case STATUS_LEFT_CHANNEL:
if (callStarted() && !mIgnoreNextSessionLeave && !sSuspended)
{
+ // *TODO: use it to show DECLINE voice notification
if (mState == STATE_RINGING)
{
// other user declined call
@@ -748,8 +748,7 @@ void LLVoiceChannelP2P::handleStatusChange(EStatusType type)
}
else
{
- // other user hung up
- LLNotificationsUtil::add("VoiceChannelDisconnectedP2P", mNotifyArgs);
+ // other user hung up
}
deactivate();
}
diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml
index ae4d5042ef..c6bc093c6c 100644
--- a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml
+++ b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml
@@ -69,7 +69,29 @@ Calling [CALLEE_NAME]
word_wrap="true">
No Answer. Please try again later.
</text>
- <text
+ <text
+ font="SansSerifLarge"
+ height="40"
+ layout="topleft"
+ left="77"
+ name="nearby"
+ top="27"
+ width="315"
+ word_wrap="true">
+ You have been disconnected from [VOICE_CHANNEL_NAME]. You will now be reconnected to Nearby Voice Chat.
+ </text>
+ <text
+ font="SansSerifLarge"
+ height="40"
+ layout="topleft"
+ left="77"
+ name="nearby_P2P"
+ top="27"
+ width="315"
+ word_wrap="true">
+ [VOICE_CHANNEL_NAME] has ended the call. You will now be reconnected to Nearby Voice Chat.
+ </text>
+ <text
font="SansSerif"
height="50"
layout="topleft"
@@ -80,7 +102,7 @@ No Answer. Please try again later.
word_wrap="true">
Leaving [CURRENT_CHAT].
</text>
- <button
+ <button
height="24"
label="Cancel"
label_selected="Cancel"