Merge branch 'feat-weather' of https://github.com/jpirnay/crosspoint-reader into mybuild
This commit is contained in:
@@ -230,7 +230,7 @@ void HomeActivity::render(RenderLock&&) {
|
||||
// Build menu items dynamically
|
||||
std::vector<const char*> menuItems = {tr(STR_BROWSE_FILES), tr(STR_MENU_RECENT_BOOKS), tr(STR_FILE_TRANSFER),
|
||||
tr(STR_WEATHER), tr(STR_SETTINGS_TITLE)};
|
||||
std::vector<UIIcon> menuIcons = {Folder, Recent, Transfer, Library, Settings};
|
||||
std::vector<UIIcon> menuIcons = {Folder, Recent, Transfer, Weather, Settings};
|
||||
|
||||
if (hasOpdsUrl) {
|
||||
// Insert OPDS Browser after Recents (before File Transfer)
|
||||
|
||||
@@ -124,8 +124,8 @@ void WeatherActivity::onEnter() {
|
||||
void WeatherActivity::onExit() {
|
||||
Activity::onExit();
|
||||
|
||||
// Restore orientation from settings
|
||||
renderer.setOrientation(static_cast<GfxRenderer::Orientation>(SETTINGS.orientation));
|
||||
// Weather screen is always landscape; restore app UI to portrait on exit.
|
||||
renderer.setOrientation(GfxRenderer::Orientation::Portrait);
|
||||
|
||||
WiFi.mode(WIFI_OFF);
|
||||
}
|
||||
@@ -405,12 +405,12 @@ void WeatherActivity::renderCurrentConditions(int x, int y, int w, int h) {
|
||||
textY += 15;
|
||||
}
|
||||
|
||||
// Weather icon (WEATHER_ICON_LARGE x WEATHER_ICON_LARGE)
|
||||
// Weather icon (WEATHER_ICON_SIZE x WEATHER_ICON_SIZE)
|
||||
auto iconType = getWeatherIconType(cur.weatherCode, cur.isDay);
|
||||
const uint8_t* icon = getWeatherIconLarge(iconType);
|
||||
int iconX = x + (w - WEATHER_ICON_LARGE) / 2;
|
||||
drawWeatherIconWithOrientation(renderer, icon, iconX, textY + 2, WEATHER_ICON_LARGE);
|
||||
textY += WEATHER_ICON_LARGE + 5;
|
||||
int iconX = x + (w - WEATHER_ICON_SIZE) / 2;
|
||||
drawWeatherIconWithOrientation(renderer, icon, iconX, textY + 2, WEATHER_ICON_SIZE);
|
||||
textY += WEATHER_ICON_SIZE + 5;
|
||||
|
||||
// Temperature (large)
|
||||
char tempBuf[16];
|
||||
@@ -528,12 +528,12 @@ void WeatherActivity::renderDailyForecast(int x, int y, int w, int h) {
|
||||
renderer.drawText(SMALL_FONT_ID, cardX + (cardWidth - dateWidth) / 2, textY, dateBuf);
|
||||
textY += 18;
|
||||
|
||||
// Weather icon (WEATHER_ICON_LARGE for all days)
|
||||
// Weather icon (WEATHER_ICON_SIZE for all days)
|
||||
auto iconType = getWeatherIconType(day.weatherCode, true);
|
||||
const uint8_t* icon = getWeatherIconLarge(iconType);
|
||||
int iconX = cardX + (cardWidth - WEATHER_ICON_LARGE) / 2;
|
||||
drawWeatherIconWithOrientation(renderer, icon, iconX, textY, WEATHER_ICON_LARGE);
|
||||
textY += WEATHER_ICON_LARGE + 8;
|
||||
int iconX = cardX + (cardWidth - WEATHER_ICON_SIZE) / 2;
|
||||
drawWeatherIconWithOrientation(renderer, icon, iconX, textY, WEATHER_ICON_SIZE);
|
||||
textY += WEATHER_ICON_SIZE + 8;
|
||||
|
||||
// Weather description (short)
|
||||
const char* desc = I18N.get(getWeatherDescriptionStrId(day.weatherCode));
|
||||
|
||||
@@ -55,12 +55,15 @@ void WeatherSettingsActivity::loop() {
|
||||
}
|
||||
|
||||
buttonNavigator.onNext([this] {
|
||||
selectedIndex = (selectedIndex + 1) % searchResults.size();
|
||||
if (searchResults.empty()) return;
|
||||
selectedIndex = (selectedIndex + 1) % static_cast<int>(searchResults.size());
|
||||
requestUpdate();
|
||||
});
|
||||
|
||||
buttonNavigator.onPrevious([this] {
|
||||
selectedIndex = (selectedIndex + searchResults.size() - 1) % searchResults.size();
|
||||
if (searchResults.empty()) return;
|
||||
const int size = static_cast<int>(searchResults.size());
|
||||
selectedIndex = (selectedIndex + size - 1) % size;
|
||||
requestUpdate();
|
||||
});
|
||||
return;
|
||||
|
||||
@@ -24,13 +24,15 @@ class WeatherSettingsActivity final : public Activity {
|
||||
|
||||
private:
|
||||
ButtonNavigator buttonNavigator;
|
||||
size_t selectedIndex = 0;
|
||||
int selectedIndex = 0;
|
||||
|
||||
// City search results (populated when user searches)
|
||||
std::vector<GeocodingResult> searchResults;
|
||||
bool showingSearchResults = false;
|
||||
bool searchInProgress = false;
|
||||
std::string searchQuery;
|
||||
|
||||
static constexpr size_t MENU_ITEMS = 6; // Location, Lat, Lon, TempUnit, WindUnit, PrecipUnit
|
||||
static constexpr int MENU_ITEMS = 6; // Location, Lat, Lon, TempUnit, WindUnit, PrecipUnit
|
||||
|
||||
void handleSelection();
|
||||
void launchCitySearch();
|
||||
|
||||
Reference in New Issue
Block a user