Skip to content
Snippets Groups Projects
Commit 74b3c9e0 authored by Mike Antipov's avatar Mike Antipov
Browse files

Fixed normal bug EXT-3880 ( [BSI] functionality loss - online status in profile)

-- removed logic implemented for EXT-2022 (show "Online" status or nothing)
-- removed deprecated method LLPanelProfileView::togglePanel
-- implemented required bihavior (for friends):
--- Online when online and privacy settings allow to show
--- Offline when offline and privacy settings allow to show
--- Else: nothing
-- also implemented bihavior for non-friends to use global Preference: "Only Friends & Groups can see when I am online"
--- Online when online and was not set in Preferences/"Only Friends & Groups can see when I am online"
--- Else: Offline

--HG--
branch : product-engine
parent 6ffc21e0
No related branches found
No related tags found
No related merge requests found
......@@ -101,8 +101,6 @@ void LLPanelProfileView::onOpen(const LLSD& key)
id = key["id"];
}
// subscribe observer to get online status. Request will be sent by LLPanelAvatarProfile itself
mAvatarStatusObserver->subscribe();
if(id.notNull() && getAvatarId() != id)
{
setAvatarId(id);
......@@ -111,12 +109,9 @@ void LLPanelProfileView::onOpen(const LLSD& key)
// Update the avatar name.
gCacheName->get(getAvatarId(), FALSE,
boost::bind(&LLPanelProfileView::onAvatarNameCached, this, _1, _2, _3, _4));
/*
// disable this part of code according to EXT-2022. See processOnlineStatus
// status should only show if viewer has permission to view online/offline. EXT-453
mStatusText->setVisible(isGrantedToSeeOnlineStatus());
updateOnlineStatus();
*/
LLPanelProfile::onOpen(key);
}
......@@ -164,27 +159,43 @@ bool LLPanelProfileView::isGrantedToSeeOnlineStatus()
// *NOTE: GRANT_ONLINE_STATUS is always set to false while changing any other status.
// When avatar disallow me to see her online status processOfflineNotification Message is received by the viewer
// see comments for ChangeUserRights template message. EXT-453.
// return relationship->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS);
return true;
// If GRANT_ONLINE_STATUS flag is changed it will be applied when viewer restarts. EXT-3880
return relationship->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS);
}
// method was disabled according to EXT-2022. Re-enabled & improved according to EXT-3880
void LLPanelProfileView::updateOnlineStatus()
{
// set text box visible to show online status for non-friends who has not set in Preferences
// "Only Friends & Groups can see when I am online"
mStatusText->setVisible(TRUE);
const LLRelationship* relationship = LLAvatarTracker::instance().getBuddyInfo(getAvatarId());
if (NULL == relationship)
return;
{
// this is non-friend avatar. Status will be updated from LLAvatarPropertiesProcessor.
// in LLPanelProfileView::processOnlineStatus()
bool online = relationship->isOnline();
// subscribe observer to get online status. Request will be sent by LLPanelAvatarProfile itself.
// do not subscribe for friend avatar because online status can be wrong overridden
// via LLAvatarData::flags if Preferences: "Only Friends & Groups can see when I am online" is set.
mAvatarStatusObserver->subscribe();
return;
}
// For friend let check if he allowed me to see his status
std::string status = getString(online ? "status_online" : "status_offline");
// status should only show if viewer has permission to view online/offline. EXT-453, EXT-3880
mStatusText->setVisible(isGrantedToSeeOnlineStatus());
mStatusText->setValue(status);
bool online = relationship->isOnline();
processOnlineStatus(online);
}
void LLPanelProfileView::processOnlineStatus(bool online)
{
mAvatarIsOnline = online;
mStatusText->setVisible(online);
std::string status = getString(online ? "status_online" : "status_offline");
mStatusText->setValue(status);
}
void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group)
......@@ -193,17 +204,4 @@ void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string&
getChild<LLUICtrl>("user_name", FALSE)->setValue(first_name + " " + last_name);
}
void LLPanelProfileView::togglePanel(LLPanel* panel, const LLSD& key)
{
// *TODO: unused method?
LLPanelProfile::togglePanel(panel);
if(FALSE == panel->getVisible())
{
// LLPanelProfile::togglePanel shows/hides all children,
// we don't want to display online status for non friends, so re-hide it here
mStatusText->setVisible(mAvatarIsOnline);
}
}
// EOF
......@@ -64,8 +64,6 @@ class LLPanelProfileView : public LLPanelProfile
/*virtual*/ BOOL postBuild();
/*virtual*/ void togglePanel(LLPanel* panel, const LLSD& key = LLSD());
BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
BOOL drop, EDragAndDropType cargo_type,
void *cargo_data, EAcceptance *accept,
......@@ -81,8 +79,21 @@ class LLPanelProfileView : public LLPanelProfile
protected:
void onBackBtnClick();
bool isGrantedToSeeOnlineStatus(); // deprecated after EXT-2022 is implemented
void updateOnlineStatus(); // deprecated after EXT-2022 is implemented
bool isGrantedToSeeOnlineStatus();
/**
* Displays avatar's online status if possible.
*
* Requirements from EXT-3880:
* For friends:
* - Online when online and privacy settings allow to show
* - Offline when offline and privacy settings allow to show
* - Else: nothing
* For other avatars:
* - Online when online and was not set in Preferences/"Only Friends & Groups can see when I am online"
* - Else: Offline
*/
void updateOnlineStatus();
void processOnlineStatus(bool online);
private:
......@@ -96,7 +107,6 @@ class LLPanelProfileView : public LLPanelProfile
LLTextBox* mStatusText;
AvatarStatusObserver* mAvatarStatusObserver;
bool mAvatarIsOnline;
};
#endif //LL_LLPANELPROFILEVIEW_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment