|
33 | 33 | s.writeJSON("launch.cache.json", launchCache); |
34 | 34 | } |
35 | 35 | let apps = launchCache.apps; |
36 | | - for (let i = 0; i < 4; i++) { // Initially only load icons for the current page. |
| 36 | + let page = (Bangle.dtHandlePagePersist&&Bangle.dtHandlePagePersist()) ?? (parseInt(s.read("dtlaunch.page")) ?? 0); |
| 37 | + for (let i = page*4; i < Math.min(page*4+4, apps.length); i++) { // Initially only load icons for the current page. |
37 | 38 | if (apps[i].icon) |
38 | 39 | apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area |
39 | 40 | } |
|
43 | 44 | let maxPage = Npages-1; |
44 | 45 | let selected = -1; |
45 | 46 | //let oldselected = -1; |
46 | | - let page = 0; |
47 | 47 | const XOFF = 24; |
48 | 48 | const YOFF = 30; |
49 | 49 |
|
|
99 | 99 |
|
100 | 100 | Bangle.drawWidgets(); // To immediately update widget field to follow current theme - remove leftovers if previous app set custom theme. |
101 | 101 | Bangle.loadWidgets(); |
102 | | - drawPage(0); |
| 102 | + drawPage(page); |
103 | 103 |
|
104 | | - for (let i = 4; i < apps.length; i++) { // Load the rest of the app icons that were not initially. |
| 104 | + for (let i = 0; i < apps.length; i++) { // Load the rest of the app icons that were not initially. |
| 105 | + if (i >= page*4 && i < Math.min(page*4+4, apps.length)) continue; |
105 | 106 | if (apps[i].icon) |
106 | 107 | apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area |
107 | 108 | } |
108 | 109 |
|
| 110 | + if (!Bangle.dtHandlePagePersist) { |
| 111 | + Bangle.dtHandlePagePersist = (page) => { |
| 112 | + // Function for persisting the active page when leaving dtlaunch. |
| 113 | + if (page===undefined) {return this.page||0;} |
| 114 | + |
| 115 | + if (!this.killHandler) { // Only register kill listener once. |
| 116 | + this.killHandler = () => { |
| 117 | + s.write("dtlaunch.page", this.page.toString()); |
| 118 | + }; |
| 119 | + E.on("kill", this.killHandler); // This is intentionally left around after fastloading into other apps. I.e. not removed in uiRemove. |
| 120 | + } |
| 121 | + |
| 122 | + this.page = page; |
| 123 | + }; |
| 124 | + Bangle.dtHandlePagePersist(page); |
| 125 | + } |
| 126 | + |
109 | 127 | let swipeListenerDt = function(dirLeftRight, dirUpDown){ |
110 | 128 | updateTimeoutToClock(); |
111 | 129 | selected = -1; |
|
142 | 160 | drawIcon(page,selected,false); |
143 | 161 | } else { |
144 | 162 | buzzLong(); |
| 163 | + Bangle.dtHandlePagePersist(page); |
145 | 164 | load(apps[page*4+i].src); |
146 | 165 | } |
147 | 166 | } |
|
162 | 181 | back : Bangle.showClock, |
163 | 182 | swipe : swipeListenerDt, |
164 | 183 | touch : touchListenerDt, |
165 | | - remove : ()=>{if (timeoutToClock) clearTimeout(timeoutToClock);} |
| 184 | + remove : ()=>{ |
| 185 | + if (timeoutToClock) {clearTimeout(timeoutToClock);} |
| 186 | + Bangle.dtHandlePagePersist(page); |
| 187 | + } |
166 | 188 | }); |
167 | 189 |
|
168 | 190 | // taken from Icon Launcher with minor alterations |
|
177 | 199 | updateTimeoutToClock(); |
178 | 200 |
|
179 | 201 | } // end of app scope |
180 | | - |
|
0 commit comments