Fjern hjemmeskjerm-widget
Widgeten har vært en vedlikeholdskostnad uten et klart produktformål: den duplikerte lokasjonslogikken fra hovedappen, kunne vise inntil 24 timer gammel GPS-posisjon uten alderindikator, og krevde en egen WorkManager-periodisk oppdatering. Den strategiske vurderingen (2026-04-17) konkluderte med at den samme nytten kan leveres via app-åpning eller en lettere mekanisme senere, og at flaten bør krympes før pitch mot offentlig sektor. Denne endringen fjerner widget/-pakken for begge flavors (standard + fdroid), AppWidgetProvider-mottakeren i manifestet, WidgetUpdateWorker, androidx.work:work-runtime-ktx-avhengigheten, widget_prefs SharedPreferences-lagringen i MainActivity, samt widget_*-strenger og linjen om «for hjemmeskjerm-widgeten» i about-dialogen. Dokumentasjonen i CLAUDE.md, ARCHITECTURE.md, README.md, STANDING_ON_SHOULDERS.md og fastlane-beskrivelsene er justert tilsvarende. Historiske changelogs (v3, v5, v6, v7) er bevisst urørt — de beskriver korrekt hva som ble levert i de versjonene. Eksisterende widget-plasseringer på brukernes hjemmeskjerm forsvinner automatisk neste gang appen oppdateres; Android fjerner foreldreløse provider-komponenter uten migreringskode. Begge debug-flavors bygger rent etter endringen. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4e6c03c301
commit
0743eac9dd
19 changed files with 9 additions and 1111 deletions
|
|
@ -39,18 +39,5 @@
|
|||
android:pathPrefix="/shelter/" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<receiver
|
||||
android:name=".widget.ShelterWidgetProvider"
|
||||
android:exported="true"
|
||||
android:label="@string/nearest_shelter">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
<action android:name="no.naiv.tilfluktsrom.widget.REFRESH" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/widget_info" />
|
||||
</receiver>
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ import no.naiv.tilfluktsrom.location.ShelterWithDistance
|
|||
import no.naiv.tilfluktsrom.ui.CivilDefenseInfoDialog
|
||||
import no.naiv.tilfluktsrom.ui.ShelterListAdapter
|
||||
import no.naiv.tilfluktsrom.util.DistanceUtils
|
||||
import no.naiv.tilfluktsrom.widget.ShelterWidgetProvider
|
||||
import org.osmdroid.util.GeoPoint
|
||||
import org.osmdroid.views.CustomZoomButtonsController
|
||||
import org.osmdroid.views.overlay.Marker
|
||||
|
|
@ -386,7 +385,6 @@ class MainActivity : AppCompatActivity(), SensorEventListener {
|
|||
try {
|
||||
locationProvider.locationUpdates().collectLatest { location ->
|
||||
currentLocation = location
|
||||
saveLastLocation(location)
|
||||
updateNearestShelters(location)
|
||||
|
||||
// Center map on first location fix
|
||||
|
|
@ -439,7 +437,6 @@ class MainActivity : AppCompatActivity(), SensorEventListener {
|
|||
}
|
||||
|
||||
updateSelectedShelterUI()
|
||||
ShelterWidgetProvider.requestUpdate(this)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -745,15 +742,6 @@ class MainActivity : AppCompatActivity(), SensorEventListener {
|
|||
binding.selectedShelterDetails.text = getString(R.string.status_shelters_loaded, allShelters.size)
|
||||
}
|
||||
|
||||
/** Persist last GPS fix so the widget can use it even when the app isn't running. */
|
||||
private fun saveLastLocation(location: Location) {
|
||||
getSharedPreferences("widget_prefs", Context.MODE_PRIVATE).edit()
|
||||
.putFloat("last_lat", location.latitude.toFloat())
|
||||
.putFloat("last_lon", location.longitude.toFloat())
|
||||
.putLong("last_time", System.currentTimeMillis())
|
||||
.apply()
|
||||
}
|
||||
|
||||
private fun isNetworkAvailable(): Boolean {
|
||||
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
|
||||
?: return false
|
||||
|
|
|
|||
|
|
@ -1,74 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/widgetRoot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/background"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:padding="8dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widgetIcon"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:contentDescription="@string/nearest_shelter"
|
||||
android:src="@drawable/ic_shelter" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widgetAddress"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="Storgata 1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widgetDetails"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/text_secondary"
|
||||
android:textSize="12sp"
|
||||
tools:text="400 places" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widgetTimestamp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/text_secondary"
|
||||
android:textSize="9sp"
|
||||
tools:text="14:32" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/widgetDistance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:textColor="@color/shelter_primary"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="1.2 km" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/widgetRefreshButton"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="4dp"
|
||||
android:padding="8dp"
|
||||
android:contentDescription="@string/action_refresh"
|
||||
android:src="@drawable/ic_refresh" />
|
||||
</LinearLayout>
|
||||
|
|
@ -20,7 +20,6 @@
|
|||
<!-- Tilfluktsrominfo -->
|
||||
<string name="shelter_capacity">%d plasser</string>
|
||||
<string name="shelter_room_nr">Rom %d</string>
|
||||
<string name="nearest_shelter">Nærmeste tilfluktsrom</string>
|
||||
<string name="no_shelters">Ingen tilfluktsromdata tilgjengelig</string>
|
||||
|
||||
<!-- Handlinger -->
|
||||
|
|
@ -46,13 +45,6 @@
|
|||
<string name="update_success">Tilfluktsromdata oppdatert</string>
|
||||
<string name="update_failed">Oppdatering mislyktes — bruker lagrede data</string>
|
||||
|
||||
<!-- Widget -->
|
||||
<string name="widget_description">Viser n\u00e6rmeste tilfluktsrom med avstand</string>
|
||||
<string name="widget_open_app">\u00c5pne appen for posisjon</string>
|
||||
<string name="widget_no_data">Ingen tilfluktsromdata</string>
|
||||
<string name="widget_no_location">Trykk for \u00e5 oppdatere</string>
|
||||
<string name="widget_updated_at">Oppdatert %s</string>
|
||||
|
||||
<!-- Dataferskhet -->
|
||||
<string name="freshness_fresh">Data er oppdatert</string>
|
||||
<string name="freshness_week">Data er %d dager gammel</string>
|
||||
|
|
@ -102,7 +94,7 @@
|
|||
<string name="about_data_title">Datakilder</string>
|
||||
<string name="about_data_body">Tilfluktsromdata er offentlig informasjon fra DSB (Direktoratet for samfunnssikkerhet og beredskap), distribuert via Geonorge. Kartfliser lastes fra OpenStreetMap. Begge lagres lokalt for frakoblet bruk.</string>
|
||||
<string name="about_stored_title">Lagret på enheten din</string>
|
||||
<string name="about_stored_body">• Tilfluktsromdatabase (offentlige data fra DSB)\n• Kartfliser for frakoblet bruk\n• Din siste GPS-posisjon (for hjemmeskjerm-widgeten)\n\nIngen data forlater enheten din bortsett fra forespørsler om å laste ned tilfluktsromdata og kartfliser.</string>
|
||||
<string name="about_stored_body">• Tilfluktsromdatabase (offentlige data fra DSB)\n• Kartfliser for frakoblet bruk\n\nIngen data forlater enheten din bortsett fra forespørsler om å laste ned tilfluktsromdata og kartfliser.</string>
|
||||
<string name="about_open_source">Åpen kildekode — kode.naiv.no/olemd/tilfluktsrom</string>
|
||||
<string name="action_about">Om denne appen</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
<!-- Tilfluktsrominfo -->
|
||||
<string name="shelter_capacity">%d plassar</string>
|
||||
<string name="shelter_room_nr">Rom %d</string>
|
||||
<string name="nearest_shelter">Næraste tilfluktsrom</string>
|
||||
<string name="no_shelters">Ingen tilfluktsromdata tilgjengeleg</string>
|
||||
|
||||
<!-- Handlingar -->
|
||||
|
|
@ -46,13 +45,6 @@
|
|||
<string name="update_success">Tilfluktsromdata oppdatert</string>
|
||||
<string name="update_failed">Oppdatering mislukkast — brukar lagra data</string>
|
||||
|
||||
<!-- Widget -->
|
||||
<string name="widget_description">Viser n\u00e6raste tilfluktsrom med avstand</string>
|
||||
<string name="widget_open_app">Opne appen for posisjon</string>
|
||||
<string name="widget_no_data">Ingen tilfluktsromdata</string>
|
||||
<string name="widget_no_location">Trykk for \u00e5 oppdatere</string>
|
||||
<string name="widget_updated_at">Oppdatert %s</string>
|
||||
|
||||
<!-- Dataferskheit -->
|
||||
<string name="freshness_fresh">Data er oppdatert</string>
|
||||
<string name="freshness_week">Data er %d dagar gammal</string>
|
||||
|
|
@ -102,7 +94,7 @@
|
|||
<string name="about_data_title">Datakjelder</string>
|
||||
<string name="about_data_body">Tilfluktsromdata er offentleg informasjon frå DSB (Direktoratet for samfunnstryggleik og beredskap), distribuert via Geonorge. Kartfliser vert lasta frå OpenStreetMap. Begge vert lagra lokalt for fråkopla bruk.</string>
|
||||
<string name="about_stored_title">Lagra på eininga di</string>
|
||||
<string name="about_stored_body">• Tilfluktsromdatabase (offentlege data frå DSB)\n• Kartfliser for fråkopla bruk\n• Din siste GPS-posisjon (for heimeskjerm-widgeten)\n\nIngen data forlèt eininga di bortsett frå førespurnader om å laste ned tilfluktsromdata og kartfliser.</string>
|
||||
<string name="about_stored_body">• Tilfluktsromdatabase (offentlege data frå DSB)\n• Kartfliser for fråkopla bruk\n\nIngen data forlèt eininga di bortsett frå førespurnader om å laste ned tilfluktsromdata og kartfliser.</string>
|
||||
<string name="about_open_source">Open kjeldekode — kode.naiv.no/olemd/tilfluktsrom</string>
|
||||
<string name="action_about">Om denne appen</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
<!-- Shelter info -->
|
||||
<string name="shelter_capacity">%d places</string>
|
||||
<string name="shelter_room_nr">Room %d</string>
|
||||
<string name="nearest_shelter">Nearest shelter</string>
|
||||
<string name="no_shelters">No shelter data available</string>
|
||||
|
||||
<!-- Actions -->
|
||||
|
|
@ -46,13 +45,6 @@
|
|||
<string name="update_success">Shelter data updated</string>
|
||||
<string name="update_failed">Update failed — using cached data</string>
|
||||
|
||||
<!-- Widget -->
|
||||
<string name="widget_description">Shows nearest shelter with distance</string>
|
||||
<string name="widget_open_app">Open app for location</string>
|
||||
<string name="widget_no_data">No shelter data</string>
|
||||
<string name="widget_no_location">Tap to refresh</string>
|
||||
<string name="widget_updated_at">Updated %s</string>
|
||||
|
||||
<!-- Data freshness -->
|
||||
<string name="freshness_fresh">Data is up to date</string>
|
||||
<string name="freshness_week">Data is %d days old</string>
|
||||
|
|
@ -103,7 +95,7 @@
|
|||
<string name="about_data_title">Data sources</string>
|
||||
<string name="about_data_body">Shelter data is public information from DSB (Norwegian Directorate for Civil Protection), distributed via Geonorge. Map tiles are loaded from OpenStreetMap. Both are cached locally for offline use.</string>
|
||||
<string name="about_stored_title">Stored on your device</string>
|
||||
<string name="about_stored_body">• Shelter database (public data from DSB)\n• Map tiles for offline use\n• Your last GPS position (for the home screen widget)\n\nNo data leaves your device except requests to download shelter data and map tiles.</string>
|
||||
<string name="about_stored_body">• Shelter database (public data from DSB)\n• Map tiles for offline use\n\nNo data leaves your device except requests to download shelter data and map tiles.</string>
|
||||
<string name="about_open_source">Open source — kode.naiv.no/olemd/tilfluktsrom</string>
|
||||
<string name="action_about">About this app</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:minWidth="250dp"
|
||||
android:minHeight="40dp"
|
||||
android:updatePeriodMillis="0"
|
||||
android:initialLayout="@layout/widget_nearest_shelter"
|
||||
android:resizeMode="horizontal"
|
||||
android:widgetCategory="home_screen"
|
||||
android:description="@string/widget_description" />
|
||||
Loading…
Add table
Add a link
Reference in a new issue