diff --git a/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
index aaecb81a..81be9002 100644
--- a/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
+++ b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
@@ -752,10 +752,10 @@ namespace PepperDash.Essentials
/// 15044 Close button for source modal overlay
///
public const uint SourceBackgroundOverlayClosePress = 15044;
- ///
- /// 15045 - Visibility for the bar containing call navigation button list
- ///
- public const uint CallStagingBarVisible = 15045;
+ /////
+ ///// 15045 - Visibility for the bar containing call navigation button list
+ /////
+ //public const uint CallStagingBarVisible = 15045;
///
/// 15046
///
diff --git a/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
index a1ceb50b..55a4a16c 100644
--- a/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
+++ b/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
@@ -173,10 +173,28 @@ namespace PepperDash.Essentials
///
public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; }
+
+ private UiDisplayMode _currentMode;
+
///
/// The mode showing. Presentation or call.
///
- UiDisplayMode CurrentMode = UiDisplayMode.Start;
+ UiDisplayMode CurrentMode
+ {
+ get
+ {
+ return _currentMode;
+ }
+ set
+ {
+ if (value != _currentMode)
+ {
+ _currentMode = value;
+
+ SetActivityFooterFeedbacks();
+ }
+ }
+ }
CTimer NextMeetingTimer;
@@ -207,6 +225,7 @@ namespace PepperDash.Essentials
MeetingOrContactMethodModalSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5);
+ CurrentMode = UiDisplayMode.Start;
// buttons are added in SetCurrentRoom
//HeaderButtonsList = new SmartObjectHeaderButtonList(TriList.SmartObjects[UISmartObjectJoin.HeaderButtonList]);
@@ -607,11 +626,21 @@ namespace PepperDash.Essentials
///
void SetActivityFooterFeedbacks()
{
- CallButtonSig.BoolValue = CurrentMode == UiDisplayMode.Call
- && CurrentRoom.ShutdownType == eShutdownType.None;
- ShareButtonSig.BoolValue = CurrentMode == UiDisplayMode.Presentation
- && CurrentRoom.ShutdownType == eShutdownType.None;
- EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != eShutdownType.None;
+ if (CurrentRoom != null)
+ {
+ var startMode = CurrentMode == UiDisplayMode.Start;
+ var presentationMode = CurrentMode == UiDisplayMode.Presentation;
+ var callMode = CurrentMode == UiDisplayMode.Call;
+
+ TriList.SetBool(StartPageVisibleJoin, startMode ? true : false);
+ TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, presentationMode ? true : false);
+
+ CallButtonSig.BoolValue = callMode
+ && CurrentRoom.ShutdownType == eShutdownType.None;
+ ShareButtonSig.BoolValue = presentationMode
+ && CurrentRoom.ShutdownType == eShutdownType.None;
+ EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != eShutdownType.None;
+ }
}
///
@@ -623,14 +652,13 @@ namespace PepperDash.Essentials
return;
HideLogo();
HideNextMeetingPopup();
- TriList.SetBool(StartPageVisibleJoin, false);
- TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false);
- TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
+ //TriList.SetBool(StartPageVisibleJoin, false);
+ //TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false);
+ //TriList.SetBool(UIBoolJoin.SelectASourceVisible, false);
if (CurrentSourcePageManager != null)
CurrentSourcePageManager.Hide();
PowerOnFromCall();
CurrentMode = UiDisplayMode.Call;
- SetActivityFooterFeedbacks();
VCDriver.Show();
}
@@ -643,9 +671,6 @@ namespace PepperDash.Essentials
if (VCDriver.IsVisible)
VCDriver.Hide();
HideNextMeetingPopup();
- TriList.SetBool(StartPageVisibleJoin, false);
- TriList.SetBool(UIBoolJoin.CallStagingBarVisible, false);
- TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, true);
// Run default source when room is off and share is pressed
if (!CurrentRoom.OnFeedback.BoolValue)
{
@@ -665,7 +690,6 @@ namespace PepperDash.Essentials
}
CurrentMode = UiDisplayMode.Presentation;
SetupSourceList();
- SetActivityFooterFeedbacks();
}
///
@@ -707,6 +731,8 @@ namespace PepperDash.Essentials
if (CurrentRoom.CurrentSourceInfo == null)
return;
+ CurrentMode = UiDisplayMode.Presentation;
+
if (CurrentRoom.CurrentSourceInfo.SourceDevice == null)
{
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
@@ -1218,9 +1244,8 @@ namespace PepperDash.Essentials
VCDriver.Hide();
SetupActivityFooterWhenRoomOff();
ShowLogo();
- SetActivityFooterFeedbacks();
- TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = false;
- TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false;
+ //TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = false;
+ //TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false;
// Clear this so that the pesky meeting warning can resurface every minute when off
LastMeetingDismissedId = null;
}
diff --git a/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
index 53efb69f..f2bbcead 100644
--- a/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
+++ b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
@@ -1080,10 +1080,12 @@ namespace PepperDash.Essentials.UIDrivers.VC
{
var codec = Codec as IHasDirectory;
- SetCurrentDirectoryToRoot();
+ if (codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue)
+ {
+ SetCurrentDirectoryToRoot();
- RefreshDirectory();
-
+ RefreshDirectory();
+ }
}
///
@@ -1161,10 +1163,23 @@ namespace PepperDash.Essentials.UIDrivers.VC
});
}
+ else if (dc.ContactMethods.Count == 1)
+ {
+ var invitableContact = dc as IInvitableContact;
+
+ if (invitableContact != null)
+ {
+ DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(invitableContact); });
+ }
+ else
+ {
+ // If only one contact method, just dial that method
+ DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); });
+ }
+ }
else
{
- // If only one contact method, just dial that method
- DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); });
+ Debug.Console(1, "Unable to dial contact. No availble ContactMethod(s) specified");
}
}
else // is DirectoryFolder
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasDirectory.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasDirectory.cs
index 3a59b62d..29a46466 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasDirectory.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasDirectory.cs
@@ -69,6 +69,22 @@ namespace PepperDash.Essentials.Devices.Common.Codec
[JsonProperty("directoryResults")]
public List CurrentDirectoryResults { get; private set; }
+ public List Contacts
+ {
+ get
+ {
+ return CurrentDirectoryResults.OfType().Cast().ToList();
+ }
+ }
+
+ public List Folders
+ {
+ get
+ {
+ return CurrentDirectoryResults.OfType().Cast().ToList();
+ }
+ }
+
///
/// Used to store the ID of the current folder for CurrentDirectoryResults
///
@@ -104,6 +120,15 @@ namespace PepperDash.Essentials.Devices.Common.Codec
SortDirectory();
}
+ ///
+ /// Filters the CurrentDirectoryResults by the predicate
+ ///
+ ///
+ public void FilterContacts(Func predicate)
+ {
+ CurrentDirectoryResults = CurrentDirectoryResults.Where(predicate).ToList();
+ }
+
///
/// Sorts the DirectoryResults list to display all folders alphabetically, then all contacts alphabetically
///
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs
index 708abe34..21d8c3df 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs
@@ -276,6 +276,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
if (zoomRooms.Count > 0)
{
// If so, setup a rooms and contacts folder and add them.
+
+ directory.ResultsFolderId = "root";
+
roomFolder.Name = "Rooms";
roomFolder.ParentFolderId = "root";
roomFolder.FolderId = "rooms";
@@ -292,22 +295,26 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
try
{
- if (zoomContacts.Count == 0) return directory;
+ if (zoomContacts.Count == 0)
+ {
+ return directory;
+ }
+
+ foreach (Contact c in zoomContacts)
{
- foreach (Contact c in zoomContacts)
+ var contact = new ZoomDirectoryContact { Name = c.ScreenName, ContactId = c.Jid };
+
+ contact.ContactMethods.Add(new ContactMethod() { Number = c.Jid, Device = eContactMethodDevice.Video, CallType = eContactMethodCallType.Video, ContactMethodId = c.Jid });
+
+ if (folders.Count > 0)
{
- var contact = new ZoomDirectoryContact { Name = c.ScreenName, ContactId = c.Jid };
-
- if (folders.Count > 0)
- {
- contact.ParentFolderId = c.IsZoomRoom ? "rooms" : "contacts";
- }
-
- contacts.Add(contact);
+ contact.ParentFolderId = c.IsZoomRoom ? "rooms" : "contacts";
}
- directory.AddContactsToDirectory(contacts);
+ contacts.Add(contact);
}
+
+ directory.AddContactsToDirectory(contacts);
}
catch (Exception e)
{
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs
index f9ba49df..bfcd293d 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs
@@ -361,6 +361,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public CodecDirectory CurrentDirectoryResult
{
get { return _currentDirectoryResult; }
+ private set
+ {
+ _currentDirectoryResult = value;
+
+ Debug.Console(2, this, "CurrentDirectoryResult Updated. ResultsFolderId: {0}", _currentDirectoryResult.ResultsFolderId);
+
+ CurrentDirectoryResultIsNotDirectoryRoot.FireUpdate();
+
+ OnDirectoryResultReturned(_currentDirectoryResult);
+ }
}
public CodecPhonebookSyncState PhonebookSyncState { get; private set; }
@@ -374,9 +384,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
c => c.Name.IndexOf(searchString, 0, StringComparison.OrdinalIgnoreCase) > -1));
DirectoryBrowseHistoryStack.Clear();
- _currentDirectoryResult = directoryResults;
+ CurrentDirectoryResult = directoryResults;
- OnDirectoryResultReturned(directoryResults);
}
public void GetDirectoryFolderContents(string folderId)
@@ -388,19 +397,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
DirectoryBrowseHistoryStack.Push(_currentDirectoryResult);
- _currentDirectoryResult = directoryResults;
+ CurrentDirectoryResult = directoryResults;
- OnDirectoryResultReturned(directoryResults);
}
public void SetCurrentDirectoryToRoot()
{
DirectoryBrowseHistoryStack.Clear();
- _currentDirectoryResult = DirectoryRoot;
-
- OnDirectoryResultReturned(DirectoryRoot);
- }
+ CurrentDirectoryResult = DirectoryRoot;
+ }
public void GetDirectoryParentFolderContents()
{
@@ -411,10 +417,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
var currentDirectory = DirectoryBrowseHistoryStack.Pop();
- _currentDirectoryResult = currentDirectory;
-
- OnDirectoryResultReturned(currentDirectory);
- }
+ CurrentDirectoryResult = currentDirectory;
+ }
public BoolFeedback CurrentDirectoryResultIsNotDirectoryRoot { get; private set; }
@@ -680,16 +684,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
private void SetUpDirectory()
{
- DirectoryRoot = new CodecDirectory();
+ DirectoryRoot = new CodecDirectory() { ResultsFolderId = "root" };
- _currentDirectoryResult = DirectoryRoot;
+ CurrentDirectoryResultIsNotDirectoryRoot = new BoolFeedback(() => CurrentDirectoryResult.ResultsFolderId != "root");
+
+ CurrentDirectoryResult = DirectoryRoot;
DirectoryBrowseHistory = new List();
DirectoryBrowseHistoryStack = new Stack();
- CurrentDirectoryResultIsNotDirectoryRoot = new BoolFeedback(() => _currentDirectoryResult != DirectoryRoot);
-
- CurrentDirectoryResultIsNotDirectoryRoot.FireUpdate();
}
private void SetUpRouting()
@@ -1063,24 +1066,30 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
case "phonebooklistresult":
{
+ // This result will always be the complete contents of the directory and never
+ // A subset of the results via a search
+
JsonConvert.PopulateObject(responseObj.ToString(), Status.Phonebook);
+ var directoryResults =
+ zStatus.Phonebook.ConvertZoomContactsToGeneric(Status.Phonebook.Contacts);
+
if (!PhonebookSyncState.InitialSyncComplete)
{
PhonebookSyncState.InitialPhonebookFoldersReceived();
PhonebookSyncState.PhonebookRootEntriesReceived();
- PhonebookSyncState.SetPhonebookHasFolders(false);
+ PhonebookSyncState.SetPhonebookHasFolders(true);
PhonebookSyncState.SetNumberOfContacts(Status.Phonebook.Contacts.Count);
}
- var directoryResults =
- zStatus.Phonebook.ConvertZoomContactsToGeneric(Status.Phonebook.Contacts);
+ if (directoryResults.ResultsFolderId != "root")
+ {
+ directoryResults.ResultsFolderId = "root";
+ }
- DirectoryRoot = directoryResults;
+ DirectoryRoot = directoryResults;
- _currentDirectoryResult = DirectoryRoot;
-
- OnDirectoryResultReturned(directoryResults);
+ CurrentDirectoryResult = directoryResults;
break;
}
@@ -1236,7 +1245,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
Direction = eCodecCallDirection.Incoming,
Status = eCodecCallStatus.Ringing,
- Type = eCodecCallType.Unknown,
+ Type = eCodecCallType.Video,
Name = incomingCall.callerName,
Id = incomingCall.callerJID
};
@@ -1589,8 +1598,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
var newCall = new CodecActiveCallItem
{
Name = Status.Call.Info.meeting_list_item.meetingName,
+ Number = Status.Call.Info.meeting_id,
Id = Status.Call.Info.meeting_id,
- Status = newStatus
+ Status = newStatus,
+ Type = eCodecCallType.Video,
};
ActiveCalls.Add(newCall);
@@ -2008,18 +2019,43 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
///
private void OnDirectoryResultReturned(CodecDirectory result)
{
- CurrentDirectoryResultIsNotDirectoryRoot.FireUpdate();
+ try
+ {
+ Debug.Console(2, this, "OnDirectoryResultReturned");
- // This will return the latest results to all UIs. Multiple indendent UI Directory browsing will require a different methodology
- var handler = DirectoryResultReturned;
- if (handler != null)
- {
- handler(this, new DirectoryEventArgs
- {
- Directory = result,
- DirectoryIsOnRoot = !CurrentDirectoryResultIsNotDirectoryRoot.BoolValue
- });
- }
+ var directoryResult = new CodecDirectory();
+
+ // If result is Root, create a copy and filter out contacts whose parent folder is not root
+ if (!CurrentDirectoryResultIsNotDirectoryRoot.BoolValue)
+ {
+ Debug.Console(2, this, "Filtering DirectoryRoot to remove contacts for display");
+
+ directoryResult.ResultsFolderId = result.ResultsFolderId;
+ directoryResult.AddFoldersToDirectory(result.Folders);
+ directoryResult.AddContactsToDirectory(result.Contacts.Where((c) => c.ParentFolderId == result.ResultsFolderId).ToList());
+ }
+ else
+ {
+ directoryResult = result;
+ }
+
+ Debug.Console(2, this, "Updating directoryResult. IsOnRoot: {0}", !CurrentDirectoryResultIsNotDirectoryRoot.BoolValue);
+
+ // This will return the latest results to all UIs. Multiple indendent UI Directory browsing will require a different methodology
+ var handler = DirectoryResultReturned;
+ if (handler != null)
+ {
+ handler(this, new DirectoryEventArgs
+ {
+ Directory = directoryResult,
+ DirectoryIsOnRoot = !CurrentDirectoryResultIsNotDirectoryRoot.BoolValue
+ });
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.Console(2, this, "Error: {0}", e);
+ }
//PrintDirectory(result);
}