commit dba93499d246bdc644fc4f64dadeae2ae41a768a Author: Fabio Mazza Date: Fri May 8 12:26:00 2026 +0200 Make textview to show status diff --git a/app/src/main/java/it/reyboz/bustorino/data/GtfsAlertDBDownloadWorker.kt b/app/src/main/java/it/reyboz/bustorino/data/GtfsAlertDBDownloadWorker.kt index dd5a2aa..6f54cb4 100644 --- a/app/src/main/java/it/reyboz/bustorino/data/GtfsAlertDBDownloadWorker.kt +++ b/app/src/main/java/it/reyboz/bustorino/data/GtfsAlertDBDownloadWorker.kt @@ -3,12 +3,15 @@ package it.reyboz.bustorino.data import android.app.NotificationManager import android.content.Context import android.util.Log +import androidx.lifecycle.LiveData import androidx.work.BackoffPolicy import androidx.work.CoroutineWorker import androidx.work.Data import androidx.work.ForegroundInfo import androidx.work.OneTimeWorkRequest import androidx.work.OutOfQuotaPolicy +import androidx.work.WorkInfo +import androidx.work.WorkManager import androidx.work.WorkerParameters import com.android.volley.Response import com.android.volley.VolleyError @@ -18,6 +21,7 @@ import it.reyboz.bustorino.R import it.reyboz.bustorino.backend.NetworkVolleyManager import it.reyboz.bustorino.backend.Notifications import it.reyboz.bustorino.backend.gtfs.GtfsRtAlertsRequest +import it.reyboz.bustorino.data.DBUpdateWorker.Companion.WORK_NAME import it.reyboz.bustorino.data.GtfsMaintenanceWorker.Companion.OPERATION_TYPE import it.reyboz.bustorino.data.gtfs.GtfsAlertsActivePeriods import it.reyboz.bustorino.data.gtfs.GtfsAlertsTranslation @@ -109,6 +113,7 @@ class GtfsAlertDBDownloadWorker(appContext: Context, workerParams: WorkerParamet private const val NOTIFICATION_ID = 271899102 private const val DEBUG_TAG = "BusTO-GTFSRTAlertsDown" + @JvmStatic fun makeOneTimeRequest(tag: String): OneTimeWorkRequest { //val data = Data.Builder().putString(OPERATION_TYPE, type).build() return OneTimeWorkRequest.Builder(GtfsAlertDBDownloadWorker::class.java) @@ -117,5 +122,11 @@ class GtfsAlertDBDownloadWorker(appContext: Context, workerParams: WorkerParamet .addTag(tag) .build() } + + @JvmStatic + fun getWorkInfoLiveData(context: Context): LiveData> { + val workManager = WorkManager.getInstance(context) + return workManager.getWorkInfosForUniqueWorkLiveData(WORK_NAME) + } } } \ No newline at end of file diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/AlertsFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/AlertsFragment.kt index b23d2c7..aa6af5a 100644 --- a/app/src/main/java/it/reyboz/bustorino/fragments/AlertsFragment.kt +++ b/app/src/main/java/it/reyboz/bustorino/fragments/AlertsFragment.kt @@ -30,6 +30,7 @@ class AlertsFragment : ScreenBaseFragment() { private val alertsViewModel: ServiceAlertsViewModel by activityViewModels() private lateinit var textView: TextView + private lateinit var statusTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { @@ -45,6 +46,7 @@ class AlertsFragment : ScreenBaseFragment() { // Inflate the layout for this fragment val root = inflater.inflate(R.layout.fragment_alerts, container, false) textView = root.findViewById(R.id.simpleTextView) + statusTextView = root.findViewById(R.id.statusTextView) alertsViewModel.allAlertsLiveData.observe(viewLifecycleOwner, { alerts -> if(alerts==null){ @@ -64,6 +66,19 @@ class AlertsFragment : ScreenBaseFragment() { } }) + alertsViewModel.getDownloadStatusLiveData(requireContext()).observe(viewLifecycleOwner, { workinfos -> + val sb = StringBuilder() + var c = 1 + if(workinfos!=null && workinfos.isNotEmpty()){ + for (worki in workinfos){ + sb.append("$c - state: ${worki.state}, attempt ${worki.runAttemptCount}").append("\n") + c++ + } + } + statusTextView.text = sb.toString() + }) + + alertsViewModel.setStopFilter("472") /*alertsViewModel.alertsForStop.observe(viewLifecycleOwner){ diff --git a/app/src/main/java/it/reyboz/bustorino/viewmodels/ServiceAlertsViewModel.kt b/app/src/main/java/it/reyboz/bustorino/viewmodels/ServiceAlertsViewModel.kt index 4812de7..d748863 100644 --- a/app/src/main/java/it/reyboz/bustorino/viewmodels/ServiceAlertsViewModel.kt +++ b/app/src/main/java/it/reyboz/bustorino/viewmodels/ServiceAlertsViewModel.kt @@ -1,17 +1,21 @@ package it.reyboz.bustorino.viewmodels import android.app.Application +import android.content.Context import android.util.Log import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.map import androidx.lifecycle.switchMap import androidx.lifecycle.viewModelScope import androidx.room.concurrent.AtomicBoolean import androidx.work.ExistingWorkPolicy +import androidx.work.WorkInfo import androidx.work.WorkManager import com.google.transit.realtime.GtfsRealtime.Alert import it.reyboz.bustorino.backend.NetworkVolleyManager +import it.reyboz.bustorino.data.DBUpdateWorker.Companion.WORK_NAME import it.reyboz.bustorino.data.GtfsAlertDBDownloadWorker import it.reyboz.bustorino.data.GtfsRepository import it.reyboz.bustorino.data.gtfs.GtfsDatabase @@ -94,7 +98,7 @@ class ServiceAlertsViewModel(app: Application) : AndroidViewModel(app) { currentTime > lastTimeRunningDownload.value!! + MINUTES_CHECK*60*1000){ //actually enqueue request Log.d(DEBUG_TAG, "Launching request to download alerts") - val req = GtfsAlertDBDownloadWorker.makeOneTimeRequest("alertsrn") + val req = GtfsAlertDBDownloadWorker.makeOneTimeRequest(WORK_TAG) workManager.enqueueUniqueWork("AlertsDownloadsRun", ExistingWorkPolicy.KEEP, req) lastTimeRunningDownload.postValue(System.currentTimeMillis()) } @@ -112,7 +116,10 @@ class ServiceAlertsViewModel(app: Application) : AndroidViewModel(app) { downloadWorkIfTimePassed() } - + fun getDownloadStatusLiveData(context: Context): LiveData>{ + val workManager = WorkManager.getInstance(context) + return workManager.getWorkInfosByTagLiveData(WORK_TAG) + } private fun filterAlertsForStop(stopId: String, alerts: ArrayList) : ArrayList{ @@ -174,6 +181,7 @@ class ServiceAlertsViewModel(app: Application) : AndroidViewModel(app) { companion object{ private const val DEBUG_TAG = "BusTO-GTFSRTAlerts" + public const val WORK_TAG = "AlertsDownloadWorker" } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_alerts.xml b/app/src/main/res/layout/fragment_alerts.xml index d4dffd9..e2e2bcd 100644 --- a/app/src/main/res/layout/fragment_alerts.xml +++ b/app/src/main/res/layout/fragment_alerts.xml @@ -7,15 +7,23 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragments.AlertsFragment"> - - + + android:layout_height="0dp" + android:layout_margin="10dp" + >