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:
Ole-Morten Duesund 2026-04-20 09:57:45 +02:00
commit 0743eac9dd
19 changed files with 9 additions and 1111 deletions

View file

@ -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>

View file

@ -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

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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" />