Skip to content

Commit 1a3540b

Browse files
committed
better missed-timer-handling when in always-on mode
1 parent 932f556 commit 1a3540b

File tree

4 files changed

+44
-23
lines changed

4 files changed

+44
-23
lines changed

www/scripts/sepiaFW.alwaysOn.js

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,21 @@ function sepiaFW_build_always_on(){
44

55
var AVATAR_FADE_DELAY = 120000;
66
var CONTROLS_FADE_DELAY = 5000;
7+
var INFO_FADE_DELAY = 5000;
78
var ALARM_ANIMATION_ACTIVE = 12000;
89

910
//elements
1011
var $mainWindow = undefined;
1112
var $carouselPanes = undefined;
1213
var $alarmArea = undefined;
1314
var $topLayer = undefined;
15+
var $avatar = undefined;
1416
var $activityArea = undefined;
1517
var $avatarEyelid = undefined;
1618
var $avatarMouth = undefined;
19+
var $clock = undefined;
20+
var $notes = undefined;
21+
var $battery = undefined;
1722

1823
//some states
1924
AlwaysOn.isOpen = false;
@@ -26,6 +31,7 @@ function sepiaFW_build_always_on(){
2631
//some settings
2732
AlwaysOn.autoEnableVoice = true;
2833
AlwaysOn.autoLoadOnPowerPlug = true;
34+
var preventNoteIndicatorFadeIfNotZero = true; //keep the missed notes indicator alive?
2935

3036
//Load always-on screen
3137
AlwaysOn.start = function(){
@@ -55,10 +61,14 @@ function sepiaFW_build_always_on(){
5561
$mainWindow = $('#sepiaFW-main-window');
5662
$carouselPanes = $('.sepiaFW-carousel-pane');
5763
$alarmArea = $('.sepiaFW-alwaysOn-navbar');
58-
$topLayer = $('#sepiaFW-alwaysOn-avatar').closest('.sepiaFW-top-layer-view');
59-
$activityArea = $('#sepiaFW-alwaysOn-avatar').find('.avatar-activity');
60-
$avatarEyelid = $("#sepiaFW-alwaysOn-avatar").find(".avatar-eyelid");
61-
$avatarMouth = $("#sepiaFW-alwaysOn-avatar").find(".avatar-mouth");
64+
$avatar = $("#sepiaFW-alwaysOn-avatar");
65+
$topLayer = $avatar.closest('.sepiaFW-top-layer-view');
66+
$activityArea = $avatar.find('.avatar-activity');
67+
$avatarEyelid = $avatar.find(".avatar-eyelid");
68+
$avatarMouth = $avatar.find(".avatar-mouth");
69+
$clock = $('#sepiaFW-alwaysOn-clock');
70+
$notes = $('#sepiaFW-alwaysOn-notifications');
71+
$battery = $('#sepiaFW-alwaysOn-battery');
6272
}
6373

6474
//On open
@@ -75,7 +85,7 @@ function sepiaFW_build_always_on(){
7585
//show avatar and stuff
7686
if (openFadeTimer) clearTimeout(openFadeTimer);
7787
openFadeTimer = setTimeout(function(){
78-
$("#sepiaFW-alwaysOn-avatar").css({opacity:'0'}).show().animate({opacity:'1.0'}, {complete:function(){
88+
$avatar.css({opacity:'0'}).show().animate({opacity:'1.0'}, {complete:function(){
7989
fadeOutNavbarControlsAfterDelay(CONTROLS_FADE_DELAY);
8090
fadeAvatarToRandomPosAfterDelay(AVATAR_FADE_DELAY);
8191
}, duration: 1000});
@@ -103,7 +113,7 @@ function sepiaFW_build_always_on(){
103113
//console.log('close');
104114
//stop reposition script
105115
if (fadeAvatarTimer) clearTimeout(fadeAvatarTimer);
106-
$("#sepiaFW-alwaysOn-avatar").fadeOut(300);
116+
$avatar.fadeOut(300);
107117
//allow sleep again
108118
AlwaysOn.allowSleep();
109119
//restore designs - TODO: we should reduce the necessary modifiers!
@@ -134,7 +144,7 @@ function sepiaFW_build_always_on(){
134144
wakeAvatar();
135145
//show info items for a while
136146
showLocalTimeAndFade();
137-
showNotificationsAndFade();
147+
showNotificationsAndFade(INFO_FADE_DELAY, preventNoteIndicatorFadeIfNotZero);
138148
showBatteryAndFade();
139149
}
140150
AlwaysOn.avatarIdle = function(){
@@ -216,6 +226,8 @@ function sepiaFW_build_always_on(){
216226
}
217227
//remove animation
218228
removeAlarmAnimation();
229+
//remove missed event (since the user actively stopped it)
230+
SepiaFW.ui.addMissedMessage(-1);
219231
}
220232
}
221233
function removeAlarmAnimation(){
@@ -268,7 +280,6 @@ function sepiaFW_build_always_on(){
268280

269281
//Fade out avatar slowly after a certain delay and respawn at random pos (OLED screen protection)
270282
function fadeAvatarToRandomPosAfterDelay(delay){
271-
var $avatar = $("#sepiaFW-alwaysOn-avatar");
272283
//stop any running timers and animations and restore opacity
273284
if (fadeAvatarTimer) clearTimeout(fadeAvatarTimer);
274285
$avatar.stop().css({opacity:'1.0'});
@@ -287,14 +298,13 @@ function sepiaFW_build_always_on(){
287298
}, delay);
288299
//show info items for a while
289300
showLocalTimeAndFade();
290-
showNotificationsAndFade();
301+
showNotificationsAndFade(INFO_FADE_DELAY, preventNoteIndicatorFadeIfNotZero);
291302
showBatteryAndFade();
292303
}
293304
var fadeAvatarTimer;
294305

295306
//Move Avatar to new random position withing view
296307
function setNewAvatarRandomPosition(){
297-
var $avatar = $("#sepiaFW-alwaysOn-avatar");
298308
var availableHeight = $('#sepiaFW-alwaysOn-view').height();
299309
var availableWidth = $('#sepiaFW-alwaysOn-view').width();
300310
var avatarHeigth = $avatar.height();
@@ -315,10 +325,9 @@ function sepiaFW_build_always_on(){
315325
var short = true;
316326
var timeWithIcon =
317327
'<i class="material-icons md-txt">access_time</i>&nbsp;' + SepiaFW.tools.getLocalTime(short);
318-
$clock = $('#sepiaFW-alwaysOn-clock');
319328
$clock.html(timeWithIcon);
320329
$clock.stop().fadeIn(500, function(){
321-
if (fadeOutAfterDelay == undefined) fadeOutAfterDelay = 5000;
330+
if (fadeOutAfterDelay == undefined) fadeOutAfterDelay = INFO_FADE_DELAY;
322331
if (fadeClockTimer) clearTimeout(fadeClockTimer);
323332
fadeClockTimer = setTimeout(function(){
324333
$clock.fadeOut(3000);
@@ -328,16 +337,17 @@ function sepiaFW_build_always_on(){
328337
var fadeClockTimer;
329338

330339
//Show missed notifications for a while
331-
function showNotificationsAndFade(fadeOutAfterDelay){
340+
function showNotificationsAndFade(fadeOutAfterDelay, keepIfNotZero){
332341
var missedNotesWithIcon =
333342
'<i class="material-icons md-txt">notifications_none</i>&nbsp;' + SepiaFW.ui.getNumberOfMissedMessages();
334-
$notes = $('#sepiaFW-alwaysOn-notifications');
335343
$notes.html(missedNotesWithIcon);
336344
$notes.stop().fadeIn(500, function(){
337-
if (fadeOutAfterDelay == undefined) fadeOutAfterDelay = 5000;
345+
if (fadeOutAfterDelay == undefined) fadeOutAfterDelay = INFO_FADE_DELAY;
338346
if (fadeNotificationsTimer) clearTimeout(fadeNotificationsTimer);
339347
fadeNotificationsTimer = setTimeout(function(){
340-
$notes.fadeOut(3000);
348+
if (!keepIfNotZero || SepiaFW.ui.getNumberOfMissedMessages() <= 0){
349+
$notes.fadeOut(3000);
350+
}
341351
}, fadeOutAfterDelay);
342352
});
343353
}
@@ -360,15 +370,16 @@ function sepiaFW_build_always_on(){
360370
}
361371
var batteryWithIcon =
362372
'<i class="material-icons md-txt">' + batteryIcon + '</i>&nbsp;' + AlwaysOn.batteryPercentage;
363-
$battery = $('#sepiaFW-alwaysOn-battery');
364373
$battery.html(batteryWithIcon);
365374
$battery.stop().fadeIn(500, function(){
366-
if (fadeOutAfterDelay == undefined) fadeOutAfterDelay = 5000;
375+
if (fadeOutAfterDelay == undefined) fadeOutAfterDelay = INFO_FADE_DELAY;
367376
if (fadeBatteryTimer) clearTimeout(fadeBatteryTimer);
368377
fadeBatteryTimer = setTimeout(function(){
369378
$battery.fadeOut(3000);
370379
}, fadeOutAfterDelay);
371380
});
381+
}else{
382+
$battery.hide();
372383
}
373384
}
374385
var fadeBatteryTimer;

www/scripts/sepiaFW.ui.cards.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,10 @@ function sepiaFW_build_ui_cards(){
638638
$(SepiaFW.ui.JQ_RES_VIEW_IDS).find('[data-id="' + Timer.data.eventId + '"]').each(function(){
639639
removeTimeEventElement(this);
640640
});
641+
//linked messages:
642+
$(SepiaFW.ui.JQ_RES_VIEW_IDS).find('[data-msg-custom-tag="' + Timer.data.eventId + '"]').each(function(){
643+
this.remove();
644+
});
641645
}else{
642646
removeTimeEventElement(timeEventEle[0]);
643647
}

www/scripts/sepiaFW.ui.events.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,8 @@ function sepiaFW_build_events(){
657657
(SepiaFW.frames && SepiaFW.frames.isOpen)
658658
){
659659
SepiaFW.ui.addMissedMessage();
660-
SepiaFW.ui.showInfo(SepiaFW.local.g('missed') + "? " + titleS + " " + textS);
660+
var customTag = Timer.data.eventId;
661+
SepiaFW.ui.showInfo(SepiaFW.local.g('missed') + "? " + titleS + " " + textS, true, customTag);
661662
}
662663
//broadcast event
663664
broadcastAlarmTrigger();

www/scripts/sepiaFW.ui.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ function sepiaFW_build_ui(){
44

55
//some constants
66
UI.version = "v0.15.2";
7-
UI.JQ_RES_VIEW_IDS = "#sepiaFW-result-view, #sepiaFW-chat-output, #sepiaFW-my-view"; //a selector to get all result views e.g. $(UI.JQ_RES_VIEW_IDS).find(...)
7+
UI.JQ_RES_VIEW_IDS = "#sepiaFW-result-view, #sepiaFW-chat-output, #sepiaFW-my-view"; //a selector to get all result views e.g. $(UI.JQ_RES_VIEW_IDS).find(...) - TODO: same as $('.sepiaFW-results-container') ??
88
UI.JQ_ALL_MAIN_VIEWS = "#sepiaFW-result-view, #sepiaFW-chat-output, #sepiaFW-my-view, #sepiaFW-teachUI-editor, #sepiaFW-teachUI-manager, #sepiaFW-frame-page-1, #sepiaFW-frame-page-2"; //TODO: frames can have more ...
99
UI.JQ_ALL_SETTINGS_VIEWS = ".sepiaFW-chat-menu-list-container";
1010
UI.JQ_ALL_MAIN_CONTAINERS = "#sepiaFW-my-view, #sepiaFW-chat-output-container, #sepiaFW-result-view";
@@ -157,10 +157,13 @@ function sepiaFW_build_ui(){
157157
});
158158

159159
//make an info message
160-
UI.showInfo = function(text, isErrorMessage){
160+
UI.showInfo = function(text, isErrorMessage, customTag){
161161
if (UI.build){
162162
var message = UI.build.makeMessageObject(text, 'UI', 'client', '');
163163
var sEntry = UI.build.statusMessage(message, 'username', true); //we handle UI messages as errors for now
164+
if (customTag){
165+
sEntry.dataset.msgCustomTag = customTag;
166+
}
164167
//get right view
165168
var targetViewName = "chat";
166169
var resultView = UI.getResultViewByName(targetViewName);
@@ -266,11 +269,13 @@ function sepiaFW_build_ui(){
266269
var missedMessages = 0;
267270
UI.addMissedMessage = function(missed){
268271
if (missed){
269-
missedMessages += missed;
272+
missedMessages += missed; //Note: use negative to substract
270273
}else{
271274
missedMessages++;
272275
}
273-
if ($('#sepiaFW-nav-label-note').css('display') === "none"){
276+
if (missedMessages <= 0){
277+
$('#sepiaFW-nav-label-note').hide();
278+
}else if ($('#sepiaFW-nav-label-note').css('display') === "none"){
274279
$('#sepiaFW-nav-label-note').fadeIn(300);
275280
}
276281
if (missedMessages < 999){

0 commit comments

Comments
 (0)