diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
index 5526ea9f..9045335b 100644
--- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
+++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
@@ -346,6 +346,9 @@ namespace PepperDash.Essentials
/// 12345
///
public const uint AvNoControlsSubVisible = 12345;
+
+ // 10000 - 14999 are general "source" pages
+
///
/// 15001
///
@@ -610,5 +613,36 @@ namespace PepperDash.Essentials
/// 15091
///
public const uint SetupFullDistrib = 15091;
+
+ // PIN dialogs ************************************
+
+ ///
+ /// 15201
+ ///
+ public const uint PinDialog4DigitVisible = 15201;
+ ///
+ /// 15206
+ ///
+ public const uint PinDialogCancelPress = 15206;
+ ///
+ /// 15207
+ ///
+ public const uint PinDialogErrorVisible = 15207;
+ ///
+ /// 15211
+ ///
+ public const uint PinDialogDot1 = 15211;
+ ///
+ /// 15212
+ ///
+ public const uint PinDialogDot2 = 15212;
+ ///
+ /// 15213
+ ///
+ public const uint PinDialogDot3 = 15213;
+ ///
+ /// 15214
+ ///
+ public const uint PinDialogDot4 = 15214;
}
}
\ No newline at end of file
diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
index 8a58c340..eb79c655 100644
--- a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
+++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
@@ -37,6 +37,10 @@
/// 3902 Tech page statuses
///
public const uint TechStatusList = 3902;
+ ///
+ /// 3903
+ ///
+ public const uint TechPinDialogKeypad = 3903;
}
}
\ No newline at end of file
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs
index 23615504..641bfc1f 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs
@@ -42,6 +42,16 @@ namespace PepperDash.Essentials.UIDrivers
///
public const uint JoinText = 1;
+ CTimer PinAuthorizedTimer;
+
+ string Pin;
+
+ StringBuilder PinEntryBuilder = new StringBuilder(4);
+
+ bool IsAuthorized;
+
+ SmartObjectNumeric PinKeypad;
+
///
@@ -49,10 +59,12 @@ namespace PepperDash.Essentials.UIDrivers
///
///
///
- public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, IAVDriver parent)
+ public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, IAVDriver parent, string pin)
: base(trilist)
{
Parent = parent;
+ Pin = pin;
+
PagesInterlock = new JoinedSigInterlock(trilist);
PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible);
@@ -83,6 +95,8 @@ namespace PepperDash.Essentials.UIDrivers
MenuList.Count = 3;
BuildStatusList();
+
+ SetupPinModal();
}
///
@@ -90,9 +104,21 @@ namespace PepperDash.Essentials.UIDrivers
///
public override void Show()
{
- TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
- PagesInterlock.Show();
- base.Show();
+ // divert to PIN if we need auth
+ if (IsAuthorized)
+ {
+ // Cancel the auth timer so we don't deauth after coming back in
+ if (PinAuthorizedTimer != null)
+ PinAuthorizedTimer.Stop();
+
+ TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
+ PagesInterlock.Show();
+ base.Show();
+ }
+ else
+ {
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true);
+ }
}
///
@@ -100,11 +126,93 @@ namespace PepperDash.Essentials.UIDrivers
///
public override void Hide()
{
+ // Leave it authorized for 60 seconds.
+ if (IsAuthorized)
+ PinAuthorizedTimer = new CTimer(o => {
+ IsAuthorized = false;
+ PinAuthorizedTimer = null;
+ }, 60000);
TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
PagesInterlock.Hide();
base.Hide();
}
+ ///
+ /// Wire up the keypad and buttons
+ ///
+ void SetupPinModal()
+ {
+ TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog);
+ PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true);
+ PinKeypad.Digit0.UserObject = new Action(b => { if (b)DialPinDigit('0'); });
+ PinKeypad.Digit1.UserObject = new Action(b => { if (b)DialPinDigit('1'); });
+ PinKeypad.Digit2.UserObject = new Action(b => { if (b)DialPinDigit('2'); });
+ PinKeypad.Digit3.UserObject = new Action(b => { if (b)DialPinDigit('3'); });
+ PinKeypad.Digit4.UserObject = new Action(b => { if (b)DialPinDigit('4'); });
+ PinKeypad.Digit5.UserObject = new Action(b => { if (b)DialPinDigit('5'); });
+ PinKeypad.Digit6.UserObject = new Action(b => { if (b)DialPinDigit('6'); });
+ PinKeypad.Digit7.UserObject = new Action(b => { if (b)DialPinDigit('7'); });
+ PinKeypad.Digit8.UserObject = new Action(b => { if (b)DialPinDigit('8'); });
+ PinKeypad.Digit9.UserObject = new Action(b => { if (b)DialPinDigit('9'); });
+ }
+
+ ///
+ ///
+ ///
+ ///
+ void DialPinDigit(char d)
+ {
+ PinEntryBuilder.Append(d);
+ var len = PinEntryBuilder.Length;
+ SetPinDotsFeedback(len);
+
+ // check it!
+ if (len == 4)
+ {
+ if (Pin == PinEntryBuilder.ToString())
+ {
+ IsAuthorized = true;
+ SetPinDotsFeedback(0);
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
+ Show();
+ }
+ else
+ {
+ SetPinDotsFeedback(0);
+ TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true);
+ new CTimer(o =>
+ {
+ TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false);
+ }, 1500);
+ }
+
+ PinEntryBuilder.Remove(0, len); // clear it either way
+ }
+ }
+
+ ///
+ /// Draws the dots as pin is entered
+ ///
+ ///
+ void SetPinDotsFeedback(int len)
+ {
+ TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1);
+ TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2);
+ TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3);
+ TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4);
+
+ }
+
+ ///
+ /// Does what it says
+ ///
+ void CancelPinDialog()
+ {
+ PinEntryBuilder.Remove(0, PinEntryBuilder.Length);
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
+ }
+
+
///
///
///
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
index c5fc71c0..e62ddbbf 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
@@ -139,7 +139,8 @@ namespace PepperDash.Essentials
get
{
if (_TechDriver == null)
- _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, this);
+#warning Make PIN come from config!
+ _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, this, "1234");
return _TechDriver;
}
}
diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz
index 6686bf14..1871f08c 100644
Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ
diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll
index a759adfe..48850cd2 100644
Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ