MCPcopy Create free account
hub / github.com/crosspoint-reader/crosspoint-reader / render

Method render

src/activities/settings/OtaUpdateActivity.cpp:81–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

79}
80
81void OtaUpdateActivity::render(RenderLock&&) {
82 const auto& metrics = UITheme::getInstance().getMetrics();
83 const auto pageWidth = renderer.getScreenWidth();
84 const auto pageHeight = renderer.getScreenHeight();
85
86 renderer.clearScreen();
87
88 GUI.drawHeader(renderer, Rect{0, metrics.topPadding, pageWidth, metrics.headerHeight}, tr(STR_UPDATE));
89 const auto height = renderer.getLineHeight(UI_10_FONT_ID);
90 const auto top = (pageHeight - height) / 2;
91
92 float updaterProgress = 0;
93 if (state == UPDATE_IN_PROGRESS) {
94 LOG_DBG("OTA", "Update progress: %d / %d", updater.getProcessedSize(), updater.getTotalSize());
95 updaterProgress = static_cast<float>(updater.getProcessedSize()) / static_cast<float>(updater.getTotalSize());
96 // Only update every 2% at the most
97 if (static_cast<int>(updaterProgress * 50) == lastUpdaterPercentage / 2) {
98 return;
99 }
100 lastUpdaterPercentage = static_cast<int>(updaterProgress * 100);
101 }
102
103 if (state == CHECKING_FOR_UPDATE) {
104 renderer.drawCenteredText(UI_10_FONT_ID, top, tr(STR_CHECKING_UPDATE));
105 } else if (state == WAITING_CONFIRMATION) {
106 renderer.drawCenteredText(UI_10_FONT_ID, top, tr(STR_NEW_UPDATE), true, EpdFontFamily::BOLD);
107 renderer.drawText(UI_10_FONT_ID, metrics.contentSidePadding, top + height + metrics.verticalSpacing,
108 (std::string(tr(STR_CURRENT_VERSION)) + CROSSPOINT_VERSION).c_str());
109 renderer.drawText(UI_10_FONT_ID, metrics.contentSidePadding, top + height * 2 + metrics.verticalSpacing * 2,
110 (std::string(tr(STR_NEW_VERSION)) + updater.getLatestVersion()).c_str());
111
112 const auto labels = mappedInput.mapLabels(tr(STR_CANCEL), tr(STR_UPDATE), "", "");
113 GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
114 } else if (state == UPDATE_IN_PROGRESS) {
115 renderer.drawCenteredText(UI_10_FONT_ID, top, tr(STR_UPDATING));
116
117 int y = top + height + metrics.verticalSpacing;
118 GUI.drawProgressBar(
119 renderer,
120 Rect{metrics.contentSidePadding, y, pageWidth - metrics.contentSidePadding * 2, metrics.progressBarHeight},
121 static_cast<int>(updaterProgress * 100), 100);
122
123 y += metrics.progressBarHeight + metrics.verticalSpacing;
124 // Percent label is drawn by BaseTheme::drawProgressBar; this slot is left intentionally empty
125 // so the bytes line below stays at the same Y it was at when the activity drew its own percent.
126 y += height + metrics.verticalSpacing;
127 renderer.drawCenteredText(
128 UI_10_FONT_ID, y,
129 (std::to_string(updater.getProcessedSize()) + " / " + std::to_string(updater.getTotalSize())).c_str());
130 } else if (state == NO_UPDATE) {
131 renderer.drawCenteredText(UI_10_FONT_ID, top, tr(STR_NO_UPDATE), true, EpdFontFamily::BOLD);
132 const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", "");
133 GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
134 } else if (state == FAILED) {
135 renderer.drawCenteredText(UI_10_FONT_ID, top, tr(STR_UPDATE_FAILED), true, EpdFontFamily::BOLD);
136 const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", "");
137 GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4);
138 } else if (state == FINISHED) {

Callers

nothing calls this directly

Calls 13

getScreenWidthMethod · 0.80
getScreenHeightMethod · 0.80
getLineHeightMethod · 0.80
getProcessedSizeMethod · 0.80
getTotalSizeMethod · 0.80
drawTextMethod · 0.80
mapLabelsMethod · 0.80
drawProgressBarMethod · 0.80
clearScreenMethod · 0.45
drawHeaderMethod · 0.45
drawCenteredTextMethod · 0.45
drawButtonHintsMethod · 0.45

Tested by

no test coverage detected