Added Directory Search, bug fixes and updates to recents and meeting list. Made Meeting list modal/srl reusable for directory dial contact method modal.

This commit is contained in:
Neil Dorin
2017-10-12 17:51:04 -06:00
parent fb0a91b454
commit 41b42dbc8f
7 changed files with 239 additions and 75 deletions

View File

@@ -211,12 +211,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
public class Call
{
public string id { get; set; }
public Number Number { get; set; }
public Protocol Protocol { get; set; }
public CallRate CallRate { get; set; }
public CallType CallType { get; set; }
}
public class Calls
{
public List<Call> Call {get; set;}
}
public class ConnectMode
{
public string Value { get; set; }
@@ -224,12 +230,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
public class DialInfo
{
public List<Call> Calls { get; set; }
public Calls Calls { get; set; }
public ConnectMode ConnectMode { get; set; }
public DialInfo()
{
Calls = new List<Call>();
Calls = new Calls();
ConnectMode = new ConnectMode();
}
}
@@ -319,15 +326,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
if (b.DialInfo.ConnectMode.Value.ToLower() == "obtp" || b.DialInfo.ConnectMode.Value.ToLower() == "manual")
meeting.IsOneButtonToPushMeeting = true;
foreach (Call c in b.DialInfo.Calls)
if (b.DialInfo.Calls.Call != null)
{
meeting.Calls.Add(new PepperDash.Essentials.Devices.Common.Codec.Call()
foreach (Call c in b.DialInfo.Calls.Call)
{
Number = c.Number.Value,
Protocol = c.Protocol.Value,
CallRate = c.CallRate.Value,
CallType = c.CallType.Value
});
meeting.Calls.Add(new PepperDash.Essentials.Devices.Common.Codec.Call()
{
Number = c.Number.Value,
Protocol = c.Protocol.Value,
CallRate = c.CallRate.Value,
CallType = c.CallType.Value
});
}
}

View File

@@ -64,6 +64,8 @@ namespace PepperDash.Essentials.Room.Config
PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase;
var rm = new EssentialsHuddleVtc1Room(Key, Name, disp, codec, codec, props);
// Add Occupancy object from config
#warning Add in occupancy object from confic if found and link up device to occupancy feedback
rm.LogoUrl = props.Logo.GetUrl();
rm.SourceListKey = props.SourceListKey;
rm.DefaultSourceItem = props.DefaultSourceItem;
@@ -108,7 +110,7 @@ namespace PepperDash.Essentials.Room.Config
public EssentialsHelpPropertiesConfig Help { get; set; }
public EssentialsOneButtonMeetingPropertiesConfig OneButtonMeeting { get; set; }
public EssentialsRoomAddressPropertiesConfig Addresses { get; set; }
public EssentialsRoomOccSensorConfig OccupancySensors { get; set; }
public EssentialsRoomOccSensorConfig Occupancy { get; set; }
public EssentialsLogoPropertiesConfig Logo { get; set; }
public EssentialsRoomTechConfig Tech { get; set; }
public EssentialsRoomVolumesConfig Volumes { get; set; }
@@ -173,8 +175,7 @@ namespace PepperDash.Essentials.Room.Config
/// </summary>
public class EssentialsRoomOccSensorConfig
{
public string Mode { get; set; }
public List<string> Types { get; set; }
public string DeviceKey { get; set; }
}
public class EssentialsRoomTechConfig

View File

@@ -234,13 +234,11 @@ namespace PepperDash.Essentials
{
IsWarmingUpFeedback.FireUpdate();
if (!IsWarmingUpFeedback.BoolValue)
(DefaultDisplay as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
};
disp.IsCoolingDownFeedback.OutputChange += (o, a) =>
{
IsCoolingDownFeedback.FireUpdate();
if (IsCoolingDownFeedback.BoolValue)
(DefaultDisplay as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
};
}

View File

@@ -190,17 +190,23 @@ namespace PepperDash.Essentials
/// <summary>
/// 1241 For touching the text area to bring up keyboard
/// </summary>
public const uint VCDirectoryTextEntryPress = 1241;
public const uint VCDirectorySearchTextPress = 1241;
/// <summary>
/// 1242
/// </summary>
public const uint VCStagingSelfViewLayoutPress = 1242;
/// <summary>
/// 1243
/// </summary>
public const uint VCDirectoryBackVisible = 1243;
/// <summary>
/// 1244
/// </summary>
public const uint VCDirectoryBackspacePress = 1244;
/// <summary>
/// 1245
/// </summary>
public const uint VCDirectoryBackspaceVisible = 1245;
/// <summary>
/// 1251
/// </summary>
@@ -215,23 +221,6 @@ namespace PepperDash.Essentials
public const uint VCSelfViewPipTogglePress = 1253;
//******************************************************
// Keyboard
/// <summary>
/// 2901
/// </summary>
public const uint KeyboardVisible = 2901;
/// <summary>
/// 2902
/// </summary>
public const uint KeyboardClosePress = 2902;
/// <summary>
/// 2903
/// </summary>
public const uint KeyboardButton1Press = 2903;
/// <summary>
/// 2904
/// </summary>
public const uint KeyboardButton2Press = 2904;
// Letter joins start at 2921;
@@ -550,7 +539,7 @@ namespace PepperDash.Essentials
/// <summary>
/// 15046
/// </summary>
public const uint MeetingsListVisible = 15046;
public const uint MeetingsOrContacMethodsListVisible = 15046;
/// <summary>
/// 15047 The "Join" button on the next meeting ribbon
/// </summary>

View File

@@ -18,7 +18,11 @@ namespace PepperDash.Essentials
/// <summary>
/// 1001
/// </summary>
public const uint CodecAddressEntryText = 1001;
public const uint CodecAddressEntryText = 1001;
/// <summary>
/// 1002
/// </summary>
public const uint CodecDirectorySearchEntryText = 1002;
/// <summary>
/// 1201 - 1230 range of joins for recents list
@@ -217,6 +221,17 @@ namespace PepperDash.Essentials
/// <summary>
/// 3972
/// </summary>
public const uint NextMeetingFollowingMeetingText = 3972;
public const uint NextMeetingFollowingMeetingText = 3972;
/// <summary>
/// 3996
/// </summary>
public const uint MeetingsOrContactMethodListIcon = 3996;
/// <summary>
/// 3997
/// </summary>
public const uint MeetingsOrContactMethodListTitleText = 3997;
}
}

View File

@@ -93,7 +93,7 @@ namespace PepperDash.Essentials
/// <summary>
///
/// </summary>
SubpageReferenceList MeetingsSrl;
public SubpageReferenceList MeetingOrContactMethodModalSrl { get; set; }
/// <summary>
/// The list of buttons on the header. Managed with visibility only
@@ -199,7 +199,7 @@ namespace PepperDash.Essentials
ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1);
EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(3, 1);
MeetingsSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5);
MeetingOrContactMethodModalSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5);
// buttons are added in SetCurrentRoom
@@ -454,7 +454,7 @@ namespace PepperDash.Essentials
void CalendarPress()
{
RefreshMeetingsList();
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsListVisible);
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible);
}
/// <summary>
@@ -968,17 +968,21 @@ namespace PepperDash.Essentials
/// </summary>
void RefreshMeetingsList()
{
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Calendar");
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Today's Meetings");
ushort i = 0;
foreach (var m in CurrentRoom.ScheduleSource.CodecSchedule.Meetings)
{
i++;
MeetingsSrl.StringInputSig(i, 1).StringValue = m.StartTime.ToShortTimeString();
MeetingsSrl.StringInputSig(i, 2).StringValue = m.EndTime.ToShortTimeString();
MeetingsSrl.StringInputSig(i, 3).StringValue = m.Title;
MeetingsSrl.StringInputSig(i, 4).StringValue = "Join";
MeetingsSrl.BoolInputSig(i, 2).BoolValue = m.Joinable;
MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = m.StartTime.ToShortTimeString();
MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = m.EndTime.ToShortTimeString();
MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = m.Title;
MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = string.Format("<br>{0}",m.Organizer);
MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Join";
MeetingOrContactMethodModalSrl.BoolInputSig(i, 2).BoolValue = m.Joinable;
var mm = m; // lambda scope
MeetingsSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() =>
MeetingOrContactMethodModalSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() =>
{
PopupInterlock.Hide();
var d = CurrentRoom.ScheduleSource as VideoCodecBase;
@@ -986,7 +990,7 @@ namespace PepperDash.Essentials
RoomOnAndDialMeeting(mm);
});
}
MeetingsSrl.Count = i;
MeetingOrContactMethodModalSrl.Count = i;
}
/// <summary>
@@ -1247,5 +1251,6 @@ namespace PepperDash.Essentials
void HideNotificationRibbon();
HeaderListButton HeaderGearButton { get; }
HeaderListButton HeaderCallButton { get; }
SubpageReferenceList MeetingOrContactMethodModalSrl { get; }
}
}

View File

@@ -70,6 +70,10 @@ namespace PepperDash.Essentials.UIDrivers.VC
StringBuilder DialStringBuilder = new StringBuilder();
BoolFeedback DialStringBackspaceVisibleFeedback;
StringFeedback SearchStringFeedback;
StringBuilder SearchStringBuilder = new StringBuilder();
BoolFeedback SearchStringBackspaceVisibleFeedback;
ModalDialog IncomingCallModal;
eKeypadMode KeypadMode;
@@ -134,6 +138,24 @@ namespace PepperDash.Essentials.UIDrivers.VC
DialStringBackspaceVisibleFeedback
.LinkInputSig(TriList.BooleanInput[UIBoolJoin.VCKeypadBackspaceVisible]);
SearchStringFeedback = new StringFeedback(() =>
{
if (SearchStringBuilder.Length > 0)
{
Parent.Keyboard.EnableGoButton();
return SearchStringBuilder.ToString();
}
else
{
Parent.Keyboard.DisableGoButton();
return "Touch to Search";
}
});
SearchStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecDirectorySearchEntryText]);
SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0);
SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]);
TriList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackPress, GetDirectoryParentFolderContents);
DirectoryBackButtonVisibleFeedback = new BoolFeedback(() => CurrentDirectoryResult != (codec as IHasDirectory).DirectoryRoot);
@@ -142,6 +164,10 @@ namespace PepperDash.Essentials.UIDrivers.VC
TriList.SetSigFalseAction(UIBoolJoin.VCKeypadTextPress, RevealKeyboard);
TriList.SetSigFalseAction(UIBoolJoin.VCDirectorySearchTextPress, RevealKeyboard);
TriList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackspacePress, SearchKeypadBackspacePress);
// Address and number
}
@@ -400,9 +426,9 @@ namespace PepperDash.Essentials.UIDrivers.VC
string iconName = null;
if (c.OccurenceType == eCodecOccurrenceType.Received)
iconName = "Left";
iconName = "Misc-18_Light";
else if (c.OccurenceType == eCodecOccurrenceType.Placed)
iconName = "Right";
iconName = "Misc-17_Light";
else
iconName = "Help";
RecentCallsList.SetItemIcon(i, iconName);
@@ -522,7 +548,10 @@ namespace PepperDash.Essentials.UIDrivers.VC
/// <param name="folderId"></param>
void GetDirectoryFolderContents(DirectoryFolder folder)
{
LastFolderRequestedParentFolderId = folder.ParentFolderId;
if (!string.IsNullOrEmpty(folder.ParentFolderId))
LastFolderRequestedParentFolderId = folder.ParentFolderId;
else
LastFolderRequestedParentFolderId = string.Empty;
(Codec as IHasDirectory).GetDirectoryFolderContents(folder.FolderId);
}
@@ -567,16 +596,17 @@ namespace PepperDash.Essentials.UIDrivers.VC
DirectoryList.SetItemMainText(i, r.Name);
var dc = r as DirectoryContact;
// if more than one contact method, pop up modal to choose
// otherwiese dial 0 entry
if (dc.ContactMethods.Count == 1)
{
DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); });
}
else
{
}
DirectoryList.SetItemButtonAction(i, b =>
{
if (!b)
{
// Refresh the contact methods list
RefreshContactMethodsModalList(dc);
Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible);
}
});
}
else // is DirectoryFolder
{
@@ -597,6 +627,34 @@ namespace PepperDash.Essentials.UIDrivers.VC
DirectoryList.Count = i;
}
void RefreshContactMethodsModalList(DirectoryContact contact)
{
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Users");
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Contact Methods");
ushort i = 0;
foreach (var c in contact.ContactMethods)
{
i++;
Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = c.Device.ToString();
Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = c.CallType.ToString();
Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = c.Number;
Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = "";
Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Connect";
Parent.MeetingOrContactMethodModalSrl.BoolInputSig(i, 2).BoolValue = true;
var cc = c; // lambda scope
Parent.MeetingOrContactMethodModalSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() =>
{
Parent.PopupInterlock.Hide();
var codec = Codec as VideoCodecBase;
if (codec != null)
codec.Dial(c.Number);
});
}
Parent.MeetingOrContactMethodModalSrl.Count = i;
}
/// <summary>
///
/// </summary>
@@ -624,7 +682,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
/// </summary>
void RevealKeyboard()
{
if (KeypadMode == eKeypadMode.Dial)
if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadVisible && KeypadMode == eKeypadMode.Dial)
{
var kb = Parent.Keyboard;
kb.KeyPress += new EventHandler<PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs>(Keyboard_KeyPress);
@@ -634,6 +692,16 @@ namespace PepperDash.Essentials.UIDrivers.VC
DialStringKeypadCheckEnables();
kb.Show();
}
else if(VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible)
{
var kb = Parent.Keyboard;
kb.KeyPress += Keyboard_KeyPress;
kb.HideAction = this.DetachKeyboard;
kb.GoButtonText = "Search";
kb.GoButtonVisible = true;
SearchStringKeypadCheckEnables();
kb.Show();
}
}
/// <summary>
@@ -641,22 +709,47 @@ namespace PepperDash.Essentials.UIDrivers.VC
/// </summary>
void Keyboard_KeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e)
{
if (e.Text != null)
DialStringBuilder.Append(e.Text);
else
if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadVisible)
{
if (e.SpecialKey == KeyboardSpecialKey.Backspace)
DialKeypadBackspacePress();
else if (e.SpecialKey == KeyboardSpecialKey.Clear)
DialKeypadClear();
else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
{
ConnectPress();
Parent.Keyboard.Hide();
}
if (KeypadMode == eKeypadMode.Dial)
if (e.Text != null)
DialStringBuilder.Append(e.Text);
else
{
if (e.SpecialKey == KeyboardSpecialKey.Backspace)
DialKeypadBackspacePress();
else if (e.SpecialKey == KeyboardSpecialKey.Clear)
DialKeypadClear();
else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
{
ConnectPress();
Parent.Keyboard.Hide();
}
}
DialStringFeedback.FireUpdate();
DialStringKeypadCheckEnables();
}
DialStringFeedback.FireUpdate();
DialStringKeypadCheckEnables();
else if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible)
{
if (e.Text != null)
SearchStringBuilder.Append(e.Text);
else
{
if (e.SpecialKey == KeyboardSpecialKey.Backspace)
SearchKeypadBackspacePress();
else if (e.SpecialKey == KeyboardSpecialKey.Clear)
SearchKeypadClear();
else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
{
SearchPress();
Parent.Keyboard.Hide();
}
}
SearchStringFeedback.FireUpdate();
SearchStringKeypadCheckEnables();
}
}
void DetachKeyboard()
@@ -778,6 +871,59 @@ namespace PepperDash.Essentials.UIDrivers.VC
Parent.Keyboard.DisableGoButton();
}
void SearchPress()
{
(Codec as IHasDirectory).SearchDirectory(SearchStringBuilder.ToString());
}
void SearchKeypadPress(string i)
{
SearchStringBuilder.Append(i);
SearchStringFeedback.FireUpdate();
SearchStringKeypadCheckEnables();
}
/// <summary>
///
/// </summary>
void SearchKeypadBackspacePress()
{
SearchStringBuilder.Remove(SearchStringBuilder.Length - 1, 1);
if (SearchStringBuilder.Length == 0)
SetCurrentDirectoryToRoot();
SearchStringFeedback.FireUpdate();
SearchStringKeypadCheckEnables();
}
/// <summary>
/// Clears the Search keypad
/// </summary>
void SearchKeypadClear()
{
SearchStringBuilder.Remove(0, SearchStringBuilder.Length);
SearchStringFeedback.FireUpdate();
SearchStringKeypadCheckEnables();
SetCurrentDirectoryToRoot();
}
/// <summary>
/// Checks the enabled states of various elements around the keypad
/// </summary>
void SearchStringKeypadCheckEnables()
{
var textIsEntered = SearchStringBuilder.Length > 0;
TriList.SetBool(UIBoolJoin.VCDirectoryBackspaceVisible, textIsEntered);
if (textIsEntered)
Parent.Keyboard.EnableGoButton();
else
Parent.Keyboard.DisableGoButton();
}
/// <summary>
///
/// </summary>