From c0b94c2014a4480d21d60d93befc1d1c54a69d0e Mon Sep 17 00:00:00 2001 From: Andrey Novikov Date: Fri, 16 Feb 2024 11:44:48 +0300 Subject: [PATCH] Prepare for continuous delivery --- .../java/mobi/maptrek/dialogs/WhatsNew.java | 101 +++------- .../main/res/drawable/circle_background.xml | 8 + app/src/main/res/layout/list_item_change.xml | 27 ++- .../res/layout/list_item_change_title.xml | 32 ---- app/src/main/res/xml-ru/changelog.xml | 177 ++++++++---------- app/src/main/res/xml/changelog.xml | 177 ++++++++---------- 6 files changed, 198 insertions(+), 324 deletions(-) create mode 100644 app/src/main/res/drawable/circle_background.xml delete mode 100644 app/src/main/res/layout/list_item_change_title.xml diff --git a/app/src/main/java/mobi/maptrek/dialogs/WhatsNew.java b/app/src/main/java/mobi/maptrek/dialogs/WhatsNew.java index 33914ab3..05b5a237 100644 --- a/app/src/main/java/mobi/maptrek/dialogs/WhatsNew.java +++ b/app/src/main/java/mobi/maptrek/dialogs/WhatsNew.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Andrey Novikov + * Copyright 2024 Andrey Novikov * * This program is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software @@ -20,7 +20,6 @@ import android.app.Dialog; import android.content.res.XmlResourceParser; import android.os.Bundle; -import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -36,11 +35,8 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; -import java.util.Locale; +import java.util.Collections; import mobi.maptrek.Configuration; import mobi.maptrek.MapTrek; @@ -48,11 +44,9 @@ public class WhatsNew extends DialogFragment { private static final String TAG_CHANGELOG = "changelog"; - private static final String TAG_RELEASE = "release"; private static final String TAG_CHANGE = "change"; private static final String ATTRIBUTE_VERSION_CODE = "versioncode"; - private static final String ATTRIBUTE_VERSION = "version"; - private static final String ATTRIBUTE_DATE = "date"; + private static final String ATTRIBUTE_PRIORITY = "priority"; private final ArrayList mChangelog = new ArrayList<>(); @@ -78,8 +72,15 @@ public void show(@NonNull FragmentManager manager, String tag) { MapTrek application = MapTrek.getApplication(); int lastCode = Configuration.getLastSeenChangelog(); getChangelog(application, lastCode); - if (mChangelog.size() > 0) - super.show(manager, tag); + if (mChangelog.size() > 0) { + Collections.sort(mChangelog, (o1, o2) -> { + int result = Integer.compare(o1.priority, o2.priority); + if (result == 0) + result = Integer.compare(o2.version, o1.version); + return result; + }); + super.show(manager, tag); + } } public static boolean shouldShow() { @@ -103,17 +104,19 @@ private void getChangelog(MapTrek application, int version) { continue; } String name = parser.getName(); - if (name.equals(TAG_RELEASE)) { + if (name.equals(TAG_CHANGE)) { + parser.require(XmlPullParser.START_TAG, null, TAG_CHANGE); int code = Integer.parseInt(parser.getAttributeValue(null, ATTRIBUTE_VERSION_CODE)); if (code > version) { ChangeListItem changeItem = new ChangeListItem(); - changeItem.version = parser.getAttributeValue(null, ATTRIBUTE_VERSION); - changeItem.date = parser.getAttributeValue(null, ATTRIBUTE_DATE); + changeItem.version = code; + changeItem.priority = Integer.parseInt(parser.getAttributeValue(null, ATTRIBUTE_PRIORITY)); + changeItem.change = readText(parser); mChangelog.add(changeItem); - readRelease(parser); } else { skip(parser); } + parser.require(XmlPullParser.END_TAG, null, TAG_CHANGE); } else { skip(parser); } @@ -123,26 +126,6 @@ private void getChangelog(MapTrek application, int version) { } } - private void readRelease(XmlResourceParser parser) throws XmlPullParserException, IOException { - parser.require(XmlPullParser.START_TAG, null, TAG_RELEASE); - while (parser.next() != XmlPullParser.END_TAG) { - if (parser.getEventType() != XmlPullParser.START_TAG) { - continue; - } - String name = parser.getName(); - if (name.equals(TAG_CHANGE)) { - parser.require(XmlPullParser.START_TAG, null, TAG_CHANGE); - ChangeListItem changeItem = new ChangeListItem(); - changeItem.change = readText(parser); - mChangelog.add(changeItem); - parser.require(XmlPullParser.END_TAG, null, TAG_CHANGE); - } else { - skip(parser); - } - } - parser.require(XmlPullParser.END_TAG, null, TAG_RELEASE); - } - @NonNull private static String readText(XmlPullParser parser) throws IOException, XmlPullParserException { String result = ""; @@ -170,17 +153,6 @@ private static void skip(XmlPullParser parser) throws XmlPullParserException, IO } } - private String parseDate(final String dateString) { - final SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault()); - try { - final Date parsedDate = dateFormat.parse(dateString); - if (parsedDate != null) - return DateFormat.getDateFormat(getContext()).format(parsedDate); - } catch (ParseException ignored) { - } - return dateString; - } - private class ChangeListAdapter extends BaseAdapter { @Override public ChangeListItem getItem(int position) { @@ -209,28 +181,14 @@ public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { itemHolder = new WhatsNew.ChangeListItemHolder(); - if (item.version != null) { - convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_change_title, parent, false); - itemHolder.divider = convertView.findViewById(R.id.group_divider); - itemHolder.version = convertView.findViewById(R.id.version); - itemHolder.date = convertView.findViewById(R.id.date); - } else { - convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_change, parent, false); - itemHolder.change = convertView.findViewById(R.id.change); - } + convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_change, parent, false); + itemHolder.change = convertView.findViewById(R.id.change); convertView.setTag(itemHolder); } else { itemHolder = (WhatsNew.ChangeListItemHolder) convertView.getTag(); } - if (item.version != null) { - itemHolder.divider.setVisibility(position > 0 ? View.VISIBLE : View.GONE); - itemHolder.version.setText(item.version); - if (item.date != null) - itemHolder.date.setText(parseDate(item.date)); - } else { - itemHolder.change.setText(item.change); - } + itemHolder.change.setText(item.change); return convertView; } @@ -239,28 +197,15 @@ public View getView(final int position, View convertView, ViewGroup parent) { public boolean hasStableIds() { return true; } - - @Override - public int getItemViewType(int position) { - return mChangelog.get(position).version != null ? 0 : 1; - } - - @Override - public int getViewTypeCount() { - return 2; - } } private static class ChangeListItem { - String version; - String date; + int version; + int priority; String change; } private static class ChangeListItemHolder { - View divider; - TextView version; - TextView date; TextView change; } } diff --git a/app/src/main/res/drawable/circle_background.xml b/app/src/main/res/drawable/circle_background.xml new file mode 100644 index 00000000..4824b4e8 --- /dev/null +++ b/app/src/main/res/drawable/circle_background.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/layout/list_item_change.xml b/app/src/main/res/layout/list_item_change.xml index 0b0ced37..34299bed 100644 --- a/app/src/main/res/layout/list_item_change.xml +++ b/app/src/main/res/layout/list_item_change.xml @@ -1,20 +1,27 @@ - - - + android:layout_height="wrap_content" + android:background="@drawable/circle_background" + app:layout_constraintBaseline_toBaselineOf="@+id/change" + app:layout_constraintEnd_toStartOf="@id/change" + app:layout_constraintStart_toStartOf="parent" /> - \ No newline at end of file + android:layout_width="0dp" + android:layout_height="wrap_content" + android:textColor="@color/textColorPrimary" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/circle" + app:layout_constraintTop_toTopOf="parent" + tools:text="Added new cool feature" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/list_item_change_title.xml b/app/src/main/res/layout/list_item_change_title.xml deleted file mode 100644 index e11c8ecc..00000000 --- a/app/src/main/res/layout/list_item_change_title.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/xml-ru/changelog.xml b/app/src/main/res/xml-ru/changelog.xml index 88d84369..fcbfa9ca 100644 --- a/app/src/main/res/xml-ru/changelog.xml +++ b/app/src/main/res/xml-ru/changelog.xml @@ -1,105 +1,78 @@ - - Новые объекты карты: городская площадь, грузовой лифт - Новый интерфейс записи треков - Добавлена возможность приостанавливать запись трека - Добавлено устранение неполадок в настройки - Добавлена поддержка ночной темы, управляемой системой - Добавлен перевод на французский - Исправлено открытие длинных треков - Исправлено чрезмерное масштабирование карты при просмотре некоторых треков - Исправлено отображение деревьев на некоторых поверхностях - - - Пересмотрен экспорт файлов - Возрождён плагин обмена положением - Новый API для плагинов - Добавлна статистика изменения высоты трека - Добавлено обнаружение ссылок в описании точки - Обновлён интерфейс - Исправлен поиск координат - - - Добавлена поддержка навигации по маршруту в обратную сторону - Добавлена возможность поделиться маршрутом - Добавлена возможность сохранения данных при удалении приложения - Исправлено обнаружение плагинов - Исправлена навигация в фоновом режиме - Исправлено возобнавление навигации после постановки на паузу - - - Добавлена поддержка GPX маршрутов - Добавлена базовая поддержка навигации по маршруту - Прекращена поддержка Lite версии - Исправлено отображение приборов - Исправлено открытие местоположения из других приложений - - - Исправлена загрузка карт на Android 12 - Исправлена обработка пользовательских карт при вращении устройства - - - Восстановлена запись трека в фоновом режиме - Включён выход по двойному нажатию назад - Исправлена повышенная точность для расстояния - - - Исправлен белый экран при старте на современных устройствах - Исправлена невозможность запуска на современных устройствах - Удалена возможность переноса файлов на внешние файловые хранилища - Удалена поддержка полноэкранного режима на старых устройствах - - - Новый элемент: пересыхающий водоём - Исправлено неудаление устаревших объектов из базы карт - - - Велосипедный режим отображает велосипедную инфраструктуру - Новые объекты: форт, городские ворота, автомобильные запчасти, зарядная станция, место ремонта велосипеда, велопарковка - Новые элементы: горный хребет, охотничья вышка, значительный камень - Значки платности и доступности объектов - Добавлена возможность импорта файлов данных и карт из приложения - Обновленый стиль карты - - - Новые объекты: мотомагазины, водяные мельницы - Новые элементы: земли аборигенов, колодцы, водяные колонки, трубопроводы - Настраиваемый пользовательский масштаб карты - Названия приоритизируются по площади объекта карты - Обновленый стиль карты - Поведение кнопки 'Запись трека' поменялось местами - Исправлен цвет панели навигации в ночном режиме - Поддержка плагинов оффлайн-карт - - - Поиск безымянных и конкретных объектов - Возможность отображать несколько пользовательских карт - Исправлено пропадание пользовательских карт - Исправлены некоторые проблемы при работе с SD-картами - - - Новая категория - Красота и здоровье - Новые объекты: художественная галерея, котедж, посольство, стоматология, массажный салон, конюшня - Новые элементы: марина, область сервиса и отдыха, насыпь, место для разведения костра, перекат, высыхающие реки и ручьи, второстепенные железные дороги - Добавлена базовая поддержка файлов KMZ - Исправлена ошибка чтения некоторых файлов KML - Адаптивная иконка приложения - - - Расширенная информация об объектах на карте, требует обновления карт - Новые объекты: статуя, бюст, табличка, камень, придорожная часовня - Переработано отображения сложности и видимости пеших маршрутов - Исправлена невозможность импорта треков и карт на некоторых устройствах - - - Упрощённая ночная тема карты для облегчения долгих ночных поездок - Условные обозначения, подстраивающиеся под выбранную активность и тип карты - Лесные и полевые дороги теперь классифицируются по степени проходимости - Новые объекты: прокат лодок, центр развлечений, археологические раскопки, пляжный курорт, баня, душ, пристань - Много изменений в теме карты - - - Многострочные названия - + Добавлено создание простых маршрутов + Исправлена ошибка чтения GPX файлов + Отображение названий мест + Отображение лицензии выбранной онлайн карты + Новые объекты карты: городская площадь, грузовой лифт + Новый интерфейс записи треков + Добавлена возможность приостанавливать запись трека + Добавлено устранение неполадок в настройки + Добавлена поддержка ночной темы, управляемой системой + Добавлен перевод на французский + Исправлено открытие длинных треков + Исправлено чрезмерное масштабирование карты при просмотре некоторых треков + Исправлено отображение деревьев на некоторых поверхностях + Пересмотрен экспорт файлов + Возрождён плагин обмена положением + Новый API для плагинов + Добавлна статистика изменения высоты трека + Добавлено обнаружение ссылок в описании точки + Обновлён интерфейс + Исправлен поиск координат + Добавлена поддержка навигации по маршруту в обратную сторону + Добавлена возможность поделиться маршрутом + Добавлена возможность сохранения данных при удалении приложения + Исправлено обнаружение плагинов + Исправлена навигация в фоновом режиме + Исправлено возобнавление навигации после постановки на паузу + Добавлена поддержка GPX маршрутов + Добавлена базовая поддержка навигации по маршруту + Исправлено отображение приборов + Исправлено открытие местоположения из других приложений + Исправлена загрузка карт на Android 12 + Исправлена обработка пользовательских карт при вращении устройства + Восстановлена запись трека в фоновом режиме + Включён выход по двойному нажатию назад + Исправлена повышенная точность для расстояния + Исправлен белый экран при старте на современных устройствах + Исправлена невозможность запуска на современных устройствах + Удалена возможность переноса файлов на внешние файловые хранилища + Удалена поддержка полноэкранного режима на старых устройствах + Новый элемент: пересыхающий водоём + Исправлено неудаление устаревших объектов из базы карт + Велосипедный режим отображает велосипедную инфраструктуру + Новые объекты: форт, городские ворота, автомобильные запчасти, зарядная станция, место ремонта велосипеда, велопарковка + Новые элементы: горный хребет, охотничья вышка, значительный камень + Значки платности и доступности объектов + Добавлена возможность импорта файлов данных и карт из приложения + Обновленый стиль карты + Новые объекты: мотомагазины, водяные мельницы + Новые элементы: земли аборигенов, колодцы, водяные колонки, трубопроводы + Настраиваемый пользовательский масштаб карты + Названия приоритизируются по площади объекта карты + Обновленый стиль карты + Поведение кнопки 'Запись трека' поменялось местами + Исправлен цвет панели навигации в ночном режиме + Поддержка плагинов оффлайн-карт + Поиск безымянных и конкретных объектов + Возможность отображать несколько пользовательских карт + Исправлено пропадание пользовательских карт + Исправлены некоторые проблемы при работе с SD-картами + Новая категория - Красота и здоровье + Новые объекты: художественная галерея, котедж, посольство, стоматология, массажный салон, конюшня + Новые элементы: марина, область сервиса и отдыха, насыпь, место для разведения костра, перекат, высыхающие реки и ручьи, второстепенные железные дороги + Добавлена базовая поддержка файлов KMZ + Исправлена ошибка чтения некоторых файлов KML + Адаптивная иконка приложения + Расширенная информация об объектах на карте, требует обновления карт + Новые объекты: статуя, бюст, табличка, камень, придорожная часовня + Переработано отображения сложности и видимости пеших маршрутов + Исправлена невозможность импорта треков и карт на некоторых устройствах + Упрощённая ночная тема карты для облегчения долгих ночных поездок + Условные обозначения, подстраивающиеся под выбранную активность и тип карты + Лесные и полевые дороги теперь классифицируются по степени проходимости + Новые объекты: прокат лодок, центр развлечений, археологические раскопки, пляжный курорт, баня, душ, пристань + Много изменений в теме карты + Многострочные названия \ No newline at end of file diff --git a/app/src/main/res/xml/changelog.xml b/app/src/main/res/xml/changelog.xml index 4aad11f7..3cf07535 100644 --- a/app/src/main/res/xml/changelog.xml +++ b/app/src/main/res/xml/changelog.xml @@ -1,105 +1,78 @@ - - New map objects: town square, goods lift - New track recording interface - Added ability to pause track recording - Added troubleshooting options in settings - Added support for system controlled night theme - Added French translation - Fixed opening long tracks - Fixed map over-scale when viewing some tracks - Fixed showing trees on some ground surfaces - - - Revised file export - Revived location sharing plugin - New API for plugins - Added track elevation statistics - Added link detection in place description - Refreshed UI icons - Fixed coordinates search - - - Added route reverse navigation - Added route sharing - Added ability to keep data on app removal - Fixed plugin discovery - Fixed navigation in background - Fixed resuming navigation after pause - - - Added support for GPX routes - Added basic support for route navigation - Discontinued Lite version - Fixed gauge layout - Fixed opening locations from other apps - - - Fixed maps download on Android 12 - Fixed custom maps processing on device rotation - - - Restored background track writing - Enabled double back press to exit - Fixed extra precision for distance - - - Fixed blank screen on newer devices - Fixed crash on start on newer devices - Removed option to store files on external storage - Removed fullscreen mode on older devices - - - New map object: intermittent pond - Fixed gone amenities were not removed from map database - - - Cycling activity reveals bicycle infrastructure - New amenities: fort, city gate, car parts, charging station, bicycle repair station, bicycle parking - New map objects: mountain ridge, hunting stand, rock - Fee and wheelchair amenity badges - Added ability to import data and map files from application - Updated map styling - - - New amenities: motorcycle shops, watermills - New map objects: aboriginal lands, water wells, water pumps, pipelines - Configurable map user scale - Labels prioritized by map object area - Updated map styling - Track record button behavior swapped - Fixed navigation bar color in dark mode - Support for offline map plugins - - - Search for unnamed and specific amenities - Ability to show multiple user maps - Fixed disappearing of user maps - Fixed some problems with SD card management - - - Health and beauty amenity group - New amenities: art gallery, holiday cottage, embassy, dentist office, massage shop, horse riding - New map objects: marina, highway services, rest area, embankment, kissing gate, stile, fire pit, weir, intermittent rivers and streams, insignificant railways - Added the most basic support for KMZ files - Fixed failure to open some KML files - Adaptive application icon - - - Amenities can be tapped for extended information, requires maps update - Statue, bust, plague, stone, wayside shrine amenities - Reworked hiking path SAC scale and visibility style - Fixed inability to import tracks and maps on some devices - - - Simplified night map theme designed to make long night journeys more comfortable - Map legend that adjusts to selected activity and map kind - Forest and field roads are now classified by smoothness - New amenities: boat rental, amusement center, archaeological site, beach resort, sauna, shower, ferry terminal - Many amendments to map style - - - Multi-line labels - + Added simple route creation + Fixed GPX file reading error + Draw place titles + Show selected online map license + New map objects: town square, goods lift + New track recording interface + Added ability to pause track recording + Added troubleshooting options in settings + Added support for system controlled night theme + Added French translation + Fixed opening long tracks + Fixed map over-scale when viewing some tracks + Fixed showing trees on some ground surfaces + Revised file export + Revived location sharing plugin + New API for plugins + Added track elevation statistics + Added link detection in place description + Refreshed UI icons + Fixed coordinates search + Added route reverse navigation + Added route sharing + Added ability to keep data on app removal + Fixed plugin discovery + Fixed navigation in background + Fixed resuming navigation after pause + Added support for GPX routes + Added basic support for route navigation + Fixed gauge layout + Fixed opening locations from other apps + Fixed maps download on Android 12 + Fixed custom maps processing on device rotation + Restored background track writing + Enabled double back press to exit + Fixed extra precision for distance + Fixed blank screen on newer devices + Fixed crash on start on newer devices + Removed option to store files on external storage + Removed fullscreen mode on older devices + New map object: intermittent pond + Fixed gone amenities were not removed from map database + Cycling activity reveals bicycle infrastructure + New amenities: fort, city gate, car parts, charging station, bicycle repair station, bicycle parking + New map objects: mountain ridge, hunting stand, rock + Fee and wheelchair amenity badges + Added ability to import data and map files from application + Updated map styling + New amenities: motorcycle shops, watermills + New map objects: aboriginal lands, water wells, water pumps, pipelines + Configurable map user scale + Labels prioritized by map object area + Updated map styling + Track record button behavior swapped + Fixed navigation bar color in dark mode + Support for offline map plugins + Search for unnamed and specific amenities + Ability to show multiple user maps + Fixed disappearing of user maps + Fixed some problems with SD card management + Health and beauty amenity group + New amenities: art gallery, holiday cottage, embassy, dentist office, massage shop, horse riding + New map objects: marina, highway services, rest area, embankment, kissing gate, stile, fire pit, weir, intermittent rivers and streams, insignificant railways + Added the most basic support for KMZ files + Fixed failure to open some KML files + Adaptive application icon + Amenities can be tapped for extended information, requires maps update + Statue, bust, plague, stone, wayside shrine amenities + Reworked hiking path SAC scale and visibility style + Fixed inability to import tracks and maps on some devices + Simplified night map theme designed to make long night journeys more comfortable + Map legend that adjusts to selected activity and map kind + Forest and field roads are now classified by smoothness + New amenities: boat rental, amusement center, archaeological site, beach resort, sauna, shower, ferry terminal + Many amendments to map style + Multi-line labels \ No newline at end of file