checkpoint
This commit is contained in:
parent
62189f9e61
commit
b0edefcb4b
18 changed files with 65 additions and 105 deletions
|
@ -142,44 +142,80 @@ class TrackerService: Service()
|
|||
|
||||
private fun createLocationListener(): LocationListener
|
||||
{
|
||||
return object : LocationListener {
|
||||
return object : LocationListener
|
||||
{
|
||||
override fun onLocationChanged(location: Location)
|
||||
{
|
||||
Log.i("VOUSSOIR", "Processing point ${location.latitude}, ${location.longitude} ${location.time}.")
|
||||
|
||||
if (! isBetterLocation(location, currentBestLocation))
|
||||
{
|
||||
Log.i("VOUSSOIR", "Not better than previous.")
|
||||
return
|
||||
}
|
||||
|
||||
currentBestLocation = location
|
||||
|
||||
if (trackingState != Keys.STATE_TRACKING_ACTIVE)
|
||||
{
|
||||
return
|
||||
}
|
||||
Log.i("VOUSSOIR", "Processing point ${location.latitude}, ${location.longitude} ${location.time}.")
|
||||
if (should_keep_point((location)))
|
||||
|
||||
displayNotification()
|
||||
|
||||
if(! trackbook.database.ready)
|
||||
{
|
||||
val now: Long = location.time
|
||||
// val now: Date = GregorianCalendar.getInstance().time
|
||||
val trkpt = Trkpt(location=location)
|
||||
trackbook.database.insert_trkpt(device_id, trkpt)
|
||||
recent_trkpts.add(trkpt)
|
||||
while (recent_trkpts.size > RECENT_TRKPT_COUNT)
|
||||
Log.i("VOUSSOIR", "Omitting due to database not ready.")
|
||||
return
|
||||
}
|
||||
if (location.latitude == 0.0 || location.longitude == 0.0)
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to 0,0 location.")
|
||||
return
|
||||
}
|
||||
if (! isRecentEnough(location))
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to not recent enough.")
|
||||
return
|
||||
}
|
||||
if (! isAccurateEnough(location, Keys.DEFAULT_THRESHOLD_LOCATION_ACCURACY))
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to not accurate enough.")
|
||||
return
|
||||
}
|
||||
for (homepoint in trackbook.homepoints)
|
||||
{
|
||||
if (homepoint.location.distanceTo(location) < homepoint.radius)
|
||||
{
|
||||
recent_trkpts.removeFirst()
|
||||
}
|
||||
|
||||
recent_displacement_trkpts.add(trkpt)
|
||||
while (recent_displacement_trkpts.size > 5)
|
||||
{
|
||||
recent_displacement_trkpts.removeFirst()
|
||||
}
|
||||
|
||||
if (now - lastCommit > Keys.COMMIT_INTERVAL)
|
||||
{
|
||||
trackbook.database.commit()
|
||||
lastCommit = now
|
||||
Log.i("VOUSSOIR", "Omitting due to homepoint ${homepoint.name}.")
|
||||
return
|
||||
}
|
||||
}
|
||||
displayNotification()
|
||||
if (! (recent_displacement_trkpts.isEmpty() || isDifferentEnough(recent_displacement_trkpts.first().toLocation(), location, omitRests)))
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to too close to previous.")
|
||||
return
|
||||
}
|
||||
|
||||
val trkpt = Trkpt(location=location)
|
||||
trackbook.database.insert_trkpt(device_id, trkpt)
|
||||
recent_trkpts.add(trkpt)
|
||||
while (recent_trkpts.size > RECENT_TRKPT_COUNT)
|
||||
{
|
||||
recent_trkpts.removeFirst()
|
||||
}
|
||||
|
||||
recent_displacement_trkpts.add(trkpt)
|
||||
while (recent_displacement_trkpts.size > 5)
|
||||
{
|
||||
recent_displacement_trkpts.removeFirst()
|
||||
}
|
||||
|
||||
if (location.time - lastCommit > Keys.COMMIT_INTERVAL)
|
||||
{
|
||||
trackbook.database.commit()
|
||||
lastCommit = location.time
|
||||
}
|
||||
}
|
||||
override fun onProviderEnabled(provider: String)
|
||||
{
|
||||
|
@ -414,46 +450,4 @@ class TrackerService: Service()
|
|||
/*
|
||||
* End of inner class
|
||||
*/
|
||||
|
||||
fun should_keep_point(location: Location): Boolean
|
||||
{
|
||||
if(! trackbook.database.ready)
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to database not ready.")
|
||||
return false
|
||||
}
|
||||
if (location.latitude == 0.0 || location.longitude == 0.0)
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to 0,0 location.")
|
||||
return false
|
||||
}
|
||||
if (! isRecentEnough(location))
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to not recent enough.")
|
||||
return false
|
||||
}
|
||||
if (! isAccurateEnough(location, Keys.DEFAULT_THRESHOLD_LOCATION_ACCURACY))
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to not accurate enough.")
|
||||
return false
|
||||
}
|
||||
for (homepoint in trackbook.homepoints)
|
||||
{
|
||||
if (homepoint.location.distanceTo(location) < homepoint.radius)
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to homepoint ${homepoint.name}.")
|
||||
return false
|
||||
}
|
||||
}
|
||||
if (recent_displacement_trkpts.isEmpty())
|
||||
{
|
||||
return true
|
||||
}
|
||||
if (! isDifferentEnough(recent_displacement_trkpts.first().toLocation(), location, omitRests))
|
||||
{
|
||||
Log.i("VOUSSOIR", "Omitting due to too close to previous.")
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
<string name="button_save">Gem</string>
|
||||
<!-- dialogs -->
|
||||
<string name="dialog_share_gpx">Del GPX fil med</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook har ingen rutepunkter endnu.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Fortsæt optagelse</string>
|
||||
<!-- toast messages -->
|
||||
<string name="toast_message_elevation_info">Tip: nøjagtigheden af højde målingerne afhænger af din enhed. Op ad og nedadgående højder på hele ruten måles.</string>
|
||||
<string name="toast_message_install_file_helper">Kan ikke gemme. Installer venligst en filhåndteringsprogram først.</string>
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
<string name="button_save">Speichern</string>
|
||||
<!-- dialogs -->
|
||||
<string name="dialog_share_gpx">GPX-Datei teilen mit</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook hat noch keine Wegpunkte aufgenommen.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Aufnahme fortsetzen</string>
|
||||
<!-- toast messages -->
|
||||
<string name="toast_message_copied_to_clipboard">In die Zwischenablage kopiert.</string>
|
||||
<string name="toast_message_elevation_info">Hinweis: Die Genauigkeit der Höhenmeter-Werte ist geräteabhängig. Gemessen werden Steigungen und Gefälle der Gesamtstrecke.</string>
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
<string name="button_save">Guardar</string>
|
||||
<string name="dialog_generic_button_okay">OK</string>
|
||||
<string name="dialog_generic_details_button">Mostrar detalles</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook no registró ningún punto de referencia hasta el momento.</string>
|
||||
<string name="dialog_rename_track_input_hint">Introduce un nombre nuevo</string>
|
||||
<string name="dialog_share_gpx">Compartir el archivo GPX con</string>
|
||||
<string name="dialog_yes_no_positive_button_default">Si</string>
|
||||
|
@ -38,7 +37,6 @@
|
|||
<string name="dialog_yes_no_message_delete_recording">¿Eliminar esta grabación\?</string>
|
||||
<string name="toast_message_copied_to_clipboard">Copiado al portapapeles.</string>
|
||||
<string name="toast_message_install_file_helper">No se puede guardar. Primero instala un administrador de archivos.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Continuar grabación</string>
|
||||
<string name="toast_message_poi_added">Se agregó un marcador de punto de interés.</string>
|
||||
<string name="toast_message_poi_removed">Se elimino un marcador de punto de interés.</string>
|
||||
<string name="toast_message_save_gpx">Guardando grabacion como GPX.</string>
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
<string name="button_delete">Supprimer</string>
|
||||
<string name="button_save">Sauvegarder</string>
|
||||
<!-- dialogs -->
|
||||
<string name="dialog_error_empty_recording_button_resume">Reprendre l\'enregistrement</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook n\'a enregistré aucun point de parcours jusqu\'à présent.</string>
|
||||
<string name="dialog_share_gpx">Partager le fichier GPX avec</string>
|
||||
<!-- toast messages -->
|
||||
<string name="toast_message_elevation_info">Astuce : La précision des données d\'altitude dépend de votre appareil. La dénivellation globale du parcours est mesurée.</string>
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
<string name="toast_message_elevation_info">Savjet: Točnost podataka o visinskoj razlici ovisi o tvom uređaju. Mjeri se visinska razlika cijele rute.</string>
|
||||
<string name="app_name">Trackbook</string>
|
||||
<string name="statistics_sheet_p_distance">Ukupna udaljenost:</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook do sada još nije snimio niti jednu točku rute.</string>
|
||||
<string name="quick_settings_tile_title_start">Počni snimati</string>
|
||||
<string name="abbreviation_seconds">s</string>
|
||||
<string name="dialog_rename_track_button">Preimenuj</string>
|
||||
|
@ -76,7 +75,6 @@
|
|||
<string name="statistics_sheet_p_duration">Ukupno trajanje:</string>
|
||||
<string name="statistics_sheet_p_waypoints">Snimljene točke rute:</string>
|
||||
<string name="layout_onboarding_description_app_icon">Ikona programa Trackbook</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Nastavi snimati</string>
|
||||
<string name="pref_maintenance_title">Održavanje</string>
|
||||
<string name="dialog_yes_no_positive_button_delete_non_starred">Izbriši</string>
|
||||
<string name="track_list_onboarding_h1_part_2">… će se ovdje prikazati.</string>
|
||||
|
|
|
@ -174,8 +174,6 @@
|
|||
<string name="dialog_share_gpx">Bagikan file GPX dengan</string>
|
||||
<string name="dialog_rename_track_input_hint">Masukkan nama baru</string>
|
||||
<string name="dialog_rename_track_button">Ubah nama</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Lanjutkan Perekaman</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook tidak merekam titik arah sejauh ini.</string>
|
||||
<string name="dialog_generic_details_button">Tampilkan detil</string>
|
||||
<string name="dialog_generic_button_okay">Oke</string>
|
||||
<string name="dialog_generic_button_cancel">Batalkan</string>
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
<string name="dialog_generic_button_cancel">Annulla</string>
|
||||
<string name="dialog_generic_button_okay">OK</string>
|
||||
<string name="dialog_generic_details_button">Dettagli</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook non ha registrato nessuna tappa intermedia finora.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Riprendi la registrazione</string>
|
||||
<string name="dialog_rename_track_button">Rinomina</string>
|
||||
<string name="dialog_rename_track_input_hint">Inserisci un nuovo nome</string>
|
||||
<string name="dialog_share_gpx">Condividi il file GPX con</string>
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
<string name="button_save">保存してクリア</string>
|
||||
<!-- dialogs -->
|
||||
<string name="dialog_share_gpx">GPX ファイルを共有...</string>
|
||||
<string name="dialog_error_empty_recording_message">トラックブックはこれまでウェイポイントを記録していません。</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">記録を再開</string>
|
||||
<!-- toast messages -->
|
||||
<string name="toast_message_elevation_info">ヒント: 標高データの精度は、お使いのデバイスによって異なります。ルート全体の上り坂と下り坂の標高を測定します。</string>
|
||||
<string name="toast_message_install_file_helper">先にファイルマネージャか GPX トレースビューアーをインストールしてください。</string>
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
<string name="button_save">Lagre og tøm</string>
|
||||
<!-- dialogs -->
|
||||
<string name="dialog_share_gpx">Del GPX-fil med</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook har ikke registrert noen veipunkter så langt.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Gjenoppta opptak</string>
|
||||
<!-- toast messages -->
|
||||
<string name="toast_message_elevation_info">Hint: Høydedataens nøyaktighet avhenger av enheten din. Opp og ned-stigningen for hele ruten måles.</string>
|
||||
<string name="toast_message_install_file_helper">Klarte ikke å lagre. Installer en filbehandler først.</string>
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
<string name="button_save">Opslaan</string>
|
||||
<!-- dialogs -->
|
||||
<string name="dialog_share_gpx">GPX-bestand delen met</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook heeft nog geen routepunten vastgelegd.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Opnemen hervatten</string>
|
||||
<!-- toast messages -->
|
||||
<string name="toast_message_elevation_info">Tip: De nauwkeurigheid van de hoogtemeter hangt af van uw toestel. De stijging en daling van de hele afstand wordt gemeten.</string>
|
||||
<string name="toast_message_install_file_helper">Kan niet opslaan. Installeer eerst een bestandsbeheerder.</string>
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
<string name="marker_description_time">Czas</string>
|
||||
<string name="snackbar_message_location_permission_denied">Nie udzielono zezwolenia na lokalizację. Trackbook nie będzie działać.</string>
|
||||
<string name="dialog_rename_track_input_hint">Wpisz nową nazwę</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Zapis życiorysu</string>
|
||||
<string name="toast_message_elevation_info">Wskazówka: Dokładność danych dotyczących wysokości zależy od urządzenia użytkownika. Mierzone jest wzniesienie i zejście całej trasy.</string>
|
||||
<string name="toast_message_install_file_helper">Nie można zapisać. Proszę najpierw zainstalować menedżera plików.</string>
|
||||
<string name="statistics_sheet_p_steps">Podjęte kroki:</string>
|
||||
|
@ -91,6 +90,5 @@
|
|||
<string name="toast_message_copied_to_clipboard">Skopiowane do schowka.</string>
|
||||
<string name="dialog_share_gpx">Udostępnianie pliku GPX</string>
|
||||
<string name="dialog_yes_no_positive_button_default">Tak</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook nie zarejestrował dotychczas żadnych waypointów.</string>
|
||||
<string name="app_name">Trackbook</string>
|
||||
</resources>
|
|
@ -25,8 +25,6 @@
|
|||
<string name="dialog_generic_button_cancel">Cancelar</string>
|
||||
<string name="dialog_generic_button_okay">OK</string>
|
||||
<string name="dialog_generic_details_button">Mostrar detalhes</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook não registrou nenhum ponto de passagem até agora.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Retomar gravação</string>
|
||||
<string name="dialog_rename_track_button">Renomear</string>
|
||||
<string name="dialog_rename_track_input_hint">Insira um novo nome</string>
|
||||
<string name="dialog_share_gpx">Compartilhar arquivo GPX com</string>
|
||||
|
|
|
@ -28,8 +28,6 @@
|
|||
<string name="dialog_share_gpx">Поделиться файлом GPX через</string>
|
||||
<string name="dialog_rename_track_input_hint">Введите новое имя</string>
|
||||
<string name="dialog_rename_track_button">Переименовать</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Возобновить запись</string>
|
||||
<string name="dialog_error_empty_recording_message">В Trackbook пока что не записаны путевые точки.</string>
|
||||
<string name="dialog_generic_details_button">Показать подробности</string>
|
||||
<string name="dialog_generic_button_okay">ОЕ</string>
|
||||
<string name="dialog_generic_button_cancel">Отмена</string>
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
<string name="button_save">Spara</string>
|
||||
<!-- dialogs -->
|
||||
<string name="dialog_share_gpx">Dela GPX-fil med</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook spelade inte in några vägpunkter så här långt.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Återuppta inspelning</string>
|
||||
<!-- toast messages -->
|
||||
<!--<string name="toast_message_permissions_granted"></string>-->
|
||||
<!--<string name="toast_message_no_external_storage"></string>-->
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
<string name="layout_onboarding_description_app_icon">Trackbook Uygulama Simgesi</string>
|
||||
<string name="quick_settings_tile_title_pause">Kaydı Durdur</string>
|
||||
<string name="quick_settings_tile_title_start">Kaydı Başlat</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Kaydı Devam Ettir</string>
|
||||
<string name="quick_settings_tile_title_default">Kayıt</string>
|
||||
<string name="statistics_sheet_p_velocity">Ortalama hız:</string>
|
||||
<string name="statistics_sheet_p_negative_elevation">Yükseklik (yokuş aşağı):</string>
|
||||
|
@ -74,7 +73,6 @@
|
|||
<string name="dialog_share_gpx">GPX dosyasını paylaş</string>
|
||||
<string name="dialog_rename_track_input_hint">Yeni bir ad girin</string>
|
||||
<string name="dialog_rename_track_button">Yeniden adlandır</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook şu ana kadar herhangi bir ara nokta kaydetmedi.</string>
|
||||
<string name="dialog_generic_details_button">Ayrıntıları göster</string>
|
||||
<string name="dialog_generic_button_okay">Tamam</string>
|
||||
<string name="dialog_generic_button_cancel">İptal</string>
|
||||
|
|
|
@ -29,8 +29,6 @@
|
|||
<string name="dialog_generic_button_cancel">取消</string>
|
||||
<string name="dialog_generic_button_okay">确定</string>
|
||||
<string name="dialog_generic_details_button">显示详情</string>
|
||||
<string name="dialog_error_empty_recording_message">Trackbook 目前未记录任何航点。</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">恢复记录</string>
|
||||
<string name="dialog_rename_track_button">重命名</string>
|
||||
<string name="dialog_rename_track_input_hint">请输入一个新名称</string>
|
||||
<string name="dialog_share_gpx">分享 GPX 文件到</string>
|
||||
|
|
|
@ -30,8 +30,6 @@
|
|||
<string name="dialog_generic_button_cancel">Cancel</string>
|
||||
<string name="dialog_generic_button_okay">OK</string>
|
||||
<string name="dialog_generic_details_button">Show details</string>
|
||||
<string name="dialog_error_empty_recording_message">Unable to save. Trackbook did not record any waypoints so far.</string>
|
||||
<string name="dialog_error_empty_recording_button_resume">Resume Recording</string>
|
||||
<string name="dialog_rename_track_button">Rename</string>
|
||||
<string name="dialog_rename_track_input_hint">Enter a new name</string>
|
||||
<string name="dialog_share_gpx">Share GPX file with</string>
|
||||
|
@ -55,13 +53,13 @@
|
|||
<string name="statistics_sheet_p_distance">Total distance:</string>
|
||||
<string name="statistics_sheet_p_steps">Steps taken:</string>
|
||||
<string name="statistics_sheet_p_steps_no_pedometer">pedometer not available</string>
|
||||
<string name="statistics_sheet_p_waypoints">Recorded waypoints:</string>
|
||||
<string name="statistics_sheet_p_waypoints">Recorded trackpoints:</string>
|
||||
<string name="statistics_sheet_p_duration">Total duration:</string>
|
||||
<string name="statistics_sheet_p_recording_paused">Recording paused:</string>
|
||||
<string name="statistics_sheet_p_recording_start">Recording started:</string>
|
||||
<string name="statistics_sheet_p_recording_stop">Recording stopped:</string>
|
||||
<string name="statistics_sheet_p_max_altitude">Highest waypoint:</string>
|
||||
<string name="statistics_sheet_p_min_altitude">Lowest waypoint:</string>
|
||||
<string name="statistics_sheet_p_max_altitude">Highest trackpoint:</string>
|
||||
<string name="statistics_sheet_p_min_altitude">Lowest trackpoint:</string>
|
||||
<string name="statistics_sheet_p_positive_elevation">Elevation (uphill):</string>
|
||||
<string name="statistics_sheet_p_negative_elevation">Elevation (downhill):</string>
|
||||
<string name="statistics_sheet_p_velocity">Average velocity:</string>
|
||||
|
@ -82,7 +80,7 @@
|
|||
<string name="pref_app_version_title">App Version</string>
|
||||
<string name="pref_accuracy_threshold_summary">Discard location fixes with an accuracy larger than (meters):</string>
|
||||
<string name="pref_accuracy_threshold_title">Accuracy Threshold</string>
|
||||
<string name="pref_altitude_smoothing_value_summary" translatable="false">Number of waypoints used to smooth the elevation curve.</string>
|
||||
<string name="pref_altitude_smoothing_value_summary" translatable="false">Number of trackpoints used to smooth the elevation curve.</string>
|
||||
<string name="pref_altitude_smoothing_value_title" translatable="false">Altitude Smoothing</string>
|
||||
<string name="pref_auto_export_interval_summary">Automatically export GPX file after this many hours.</string>
|
||||
<string name="pref_device_id_summary">A unique ID to distinguish tracks recorded across multiple devices:</string>
|
||||
|
@ -104,8 +102,8 @@
|
|||
<string name="pref_imperial_measurement_units_summary_metric">Currently using metric units (Kilometer, Meter).</string>
|
||||
<string name="pref_imperial_measurement_units_summary_imperial">Currently using imperial units (Miles, Feet).</string>
|
||||
<string name="pref_imperial_measurement_units_title">Use Imperial Measurements</string>
|
||||
<string name="pref_omit_rests_on">Waypoints will not be recorded if they are too close to the previous waypoint.</string>
|
||||
<string name="pref_omit_rests_off">All waypoints will be recorded, even while standing still.</string>
|
||||
<string name="pref_omit_rests_on">Trackpoints will not be recorded if they are too close to your recent trackpoints.</string>
|
||||
<string name="pref_omit_rests_off">All trackpoints will be recorded, even while standing still.</string>
|
||||
<string name="pref_omit_rests_title">Omit repeated points</string>
|
||||
<string name="pref_report_issue_summary">Report bugs and suggest improvements on GitHub.</string>
|
||||
<string name="pref_report_issue_title">Report Issue</string>
|
||||
|
|
Loading…
Reference in a new issue