diff --git a/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
index 81be9002..dd454d97 100644
--- a/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
+++ b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
@@ -948,5 +948,24 @@ namespace PepperDash.Essentials
/// 15214
///
public const uint PinDialogDot4 = 15214;
+
+ // Password Prompt Dialog **************************
+
+ ///
+ /// 15301
+ ///
+ public const uint PasswordPromptDialogVisible = 15301;
+ ///
+ /// 15302
+ ///
+ public const uint PasswordPromptTextPress = 15302;
+ ///
+ /// 15306
+ ///
+ public const uint PasswordPromptCancelPress = 15306;
+ ///
+ /// 15307
+ ///
+ public const uint PasswordPromptErrorVisible = 15307;
}
}
\ No newline at end of file
diff --git a/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs b/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs
index 9b2b8a95..67a5c6e2 100644
--- a/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs
+++ b/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs
@@ -118,6 +118,14 @@ namespace PepperDash.Essentials
//----- through 3120
+ ///
+ /// 3201
+ ///
+ public const uint PasswordPromptMessageText = 3201;
+ ///
+ /// 3202
+ ///
+ public const uint PasswordPromptPasswordText = 3202;
///
/// 3812
diff --git a/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
index 612f7eeb..f92e0114 100644
--- a/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
+++ b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
@@ -83,6 +83,9 @@ namespace PepperDash.Essentials.UIDrivers.VC
StringBuilder SearchStringBuilder = new StringBuilder();
BoolFeedback SearchStringBackspaceVisibleFeedback;
+ StringFeedback PasswordStringFeedback;
+ StringBuilder PasswordStringBuilder = new StringBuilder();
+
ModalDialog IncomingCallModal;
eKeypadMode KeypadMode;
@@ -180,8 +183,22 @@ namespace PepperDash.Essentials.UIDrivers.VC
});
SearchStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecDirectorySearchEntryText]);
- SetupDirectoryList();
+ PasswordStringFeedback = new StringFeedback(() =>
+ {
+ if (PasswordStringBuilder.Length > 0)
+ {
+ Parent.Keyboard.EnableGoButton();
+ return PasswordStringBuilder.ToString();
+ }
+ else
+ {
+ Parent.Keyboard.DisableGoButton();
+ return "Tap for keyboard";
+ }
+ });
+ PasswordStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.PasswordPromptPasswordText]);
+ SetupDirectoryList();
SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0);
SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]);
@@ -199,6 +216,12 @@ namespace PepperDash.Essentials.UIDrivers.VC
triList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500,
StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress);
+
+ if (Codec is IPasswordPrompt)
+ {
+ SetupPasswordPrompt();
+ }
+
}
catch (Exception e)
{
@@ -1328,7 +1351,21 @@ namespace PepperDash.Essentials.UIDrivers.VC
///
void RevealKeyboard()
{
- if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
+ if (_passwordPromptDialogVisible)
+ {
+ Debug.Console(2, "Attaching Keyboard to PasswordPromptDialog");
+ DetachDialKeyboard();
+ DetachSearchKeyboard();
+ var kb = Parent.Keyboard;
+ kb.KeyPress -= Keyboard_PasswordKeyPress;
+ kb.KeyPress += Keyboard_PasswordKeyPress;
+ kb.HideAction = this.DetachPasswordKeyboard;
+ kb.GoButtonText = "Submit";
+ kb.GoButtonVisible = true;
+ PasswordStringCheckEnables();
+ kb.Show();
+ }
+ else if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
{
var kb = Parent.Keyboard;
kb.KeyPress -= Keyboard_DialKeyPress;
@@ -1350,6 +1387,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
SearchStringKeypadCheckEnables();
kb.Show();
}
+
}
///
@@ -1405,6 +1443,32 @@ namespace PepperDash.Essentials.UIDrivers.VC
}
}
+ ///
+ /// Event handler for keyboard dialing
+ ///
+ void Keyboard_PasswordKeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e)
+ {
+ if (_passwordPromptDialogVisible)
+ {
+ if (e.Text != null)
+ PasswordStringBuilder.Append(e.Text);
+ else
+ {
+ if (e.SpecialKey == KeyboardSpecialKey.Backspace)
+ PasswordKeypadBackspacePress();
+ else if (e.SpecialKey == KeyboardSpecialKey.Clear)
+ PasswordKeypadClear();
+ else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
+ {
+ (Codec as IPasswordPrompt).SubmitPassword(PasswordStringBuilder.ToString());
+ HidePasswordPrompt();
+ }
+ }
+ PasswordStringFeedback.FireUpdate();
+ PasswordStringCheckEnables();
+ }
+ }
+
///
/// Call
///
@@ -1418,6 +1482,11 @@ namespace PepperDash.Essentials.UIDrivers.VC
Parent.Keyboard.KeyPress -= Keyboard_SearchKeyPress;
}
+ void DetachPasswordKeyboard()
+ {
+ Parent.Keyboard.KeyPress -= Keyboard_PasswordKeyPress;
+ }
+
///
/// Shows the camera controls subpage
///
@@ -1671,6 +1740,40 @@ namespace PepperDash.Essentials.UIDrivers.VC
Parent.Keyboard.DisableGoButton();
}
+ ///
+ /// Clears the Password keypad
+ ///
+ void PasswordKeypadClear()
+ {
+ PasswordStringBuilder.Remove(0, SearchStringBuilder.Length);
+ PasswordStringFeedback.FireUpdate();
+ PasswordStringCheckEnables();
+
+ }
+
+ ///
+ ///
+ ///
+ void PasswordKeypadBackspacePress()
+ {
+ PasswordStringBuilder.Remove(PasswordStringBuilder.Length - 1, 1);
+
+ PasswordStringFeedback.FireUpdate();
+ PasswordStringCheckEnables();
+ }
+
+ ///
+ /// Checks the enabled states of various elements around the keypad
+ ///
+ void PasswordStringCheckEnables()
+ {
+ var textIsEntered = PasswordStringBuilder.Length > 0;
+ if (textIsEntered)
+ Parent.Keyboard.EnableGoButton();
+ else
+ Parent.Keyboard.DisableGoButton();
+ }
+
///
/// Returns the text value for the keypad dial entry field
@@ -1716,5 +1819,58 @@ namespace PepperDash.Essentials.UIDrivers.VC
Dial = 0,
DTMF
}
+
+ void SetupPasswordPrompt()
+ {
+ var passwordPromptCodec = Codec as IPasswordPrompt;
+
+ passwordPromptCodec.PasswordRequired += new EventHandler(passwordPromptCodec_PasswordRequired);
+
+ TriList.SetSigFalseAction(UIBoolJoin.PasswordPromptCancelPress, HidePasswordPrompt);
+ TriList.SetSigFalseAction(UIBoolJoin.PasswordPromptTextPress, RevealKeyboard);
+ }
+
+ void passwordPromptCodec_PasswordRequired(object sender, PasswordPromptEventArgs e)
+ {
+ if (e.LoginAttemptCancelled)
+ {
+ HidePasswordPrompt();
+ return;
+ }
+
+ if (!string.IsNullOrEmpty(e.Message))
+ {
+ TriList.SetString(UIStringJoin.PasswordPromptMessageText, e.Message);
+ }
+
+ if (e.LoginAttemptFailed)
+ {
+ // TODO: Show a message modal to indicate the login attempt failed
+ return;
+ }
+
+ TriList.SetBool(UIBoolJoin.PasswordPromptErrorVisible, e.LastAttemptWasIncorrect);
+
+ ShowPasswordPrompt();
+ }
+
+ private bool _passwordPromptDialogVisible;
+
+ void ShowPasswordPrompt()
+ {
+ // Clear out any previous data
+ PasswordStringBuilder.Remove(0, PasswordStringBuilder.Length);
+
+ _passwordPromptDialogVisible = true;
+ TriList.SetBool(UIBoolJoin.PasswordPromptDialogVisible, _passwordPromptDialogVisible);
+ RevealKeyboard();
+ }
+
+ void HidePasswordPrompt()
+ {
+ _passwordPromptDialogVisible = false;
+ Parent.Keyboard.Hide();
+ TriList.SetBool(UIBoolJoin.PasswordPromptDialogVisible, _passwordPromptDialogVisible);
+ }
}
}
\ No newline at end of file
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 05602001..ce4ff852 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
@@ -1359,6 +1359,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
OnPasswordRequired(meetingNeedsPassword.WrongAndRetry, false, false, prompt);
}
+ else
+ {
+ OnPasswordRequired(false, false, true, "");
+ }
break;
}
@@ -2062,6 +2066,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
///
public void Dial(string number, string password)
{
+ Debug.Console(2, this, "Dialing meeting number: {0} with password: {1}", number, password);
SendText(string.Format("zCommand Dial Join meetingNumber: {0} password: {1}", number, password));
}
@@ -2700,6 +2705,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void SubmitPassword(string password)
{
+ Debug.Console(2, this, "Password Submitted: {0}", password);
Dial(_lastDialedMeetingNumber, password);
}