@@ -28,6 +28,8 @@ import android.widget.Button
2828import android.widget.TextView
2929import androidx.core.graphics.ColorUtils
3030import androidx.core.view.isVisible
31+ import androidx.fragment.app.Fragment
32+ import androidx.fragment.app.commitNow
3133import androidx.lifecycle.lifecycleScope
3234import com.github.mikephil.charting.charts.LineChart
3335import com.github.mikephil.charting.components.AxisBase
@@ -80,17 +82,13 @@ import org.openhab.habdroid.model.withValue
8082import org.openhab.habdroid.util.HttpClient
8183import org.openhab.habdroid.util.ItemClient
8284import org.openhab.habdroid.util.appendQueryParameter
83- import org.openhab.habdroid.util.compress
8485import org.openhab.habdroid.util.determineDataUsagePolicy
85- import org.openhab.habdroid.util.extractParcelable
8686import org.openhab.habdroid.util.map
8787import org.openhab.habdroid.util.orDefaultIfEmpty
8888import org.openhab.habdroid.util.parcelable
8989import org.openhab.habdroid.util.resolveThemedColor
9090import org.openhab.habdroid.util.resolveThemedColorArray
9191import org.openhab.habdroid.util.serializable
92- import org.openhab.habdroid.util.toByteArray
93- import org.openhab.habdroid.util.uncompress
9492
9593class ChartWidgetActivity : AbstractBaseActivity () {
9694 private lateinit var widget: Widget
@@ -101,9 +99,10 @@ class ChartWidgetActivity : AbstractBaseActivity() {
10199 private lateinit var errorText: TextView
102100 private lateinit var retryButton: Button
103101 private lateinit var seriesColors: Array <Int >
102+ private val dataCacheFragment get() =
103+ supportFragmentManager.findFragmentByTag(" cache" ) as ? ChartDataCacheFragment
104104 private var period: TemporalAmount = Duration .ofDays(1 )
105105 private var serverFlags: Int = 0
106- private var loadedChartData: ChartData ? = null
107106
108107 override fun onCreate (savedInstanceState : Bundle ? ) {
109108 super .onCreate(savedInstanceState)
@@ -125,7 +124,12 @@ class ChartWidgetActivity : AbstractBaseActivity() {
125124 if (savedInstanceState != null ) {
126125 savedInstanceState.serializable<Period >(PERIOD )?.let { period = it }
127126 savedInstanceState.serializable<Duration >(PERIOD )?.let { period = it }
128- loadedChartData = savedInstanceState.getByteArray(DATA )?.uncompress()?.extractParcelable()
127+ }
128+
129+ if (dataCacheFragment == null ) {
130+ supportFragmentManager.commitNow {
131+ add(ChartDataCacheFragment (), " cache" )
132+ }
129133 }
130134
131135 seriesColors = resolveThemedColorArray(R .attr.chartSeriesColors)
@@ -141,7 +145,7 @@ class ChartWidgetActivity : AbstractBaseActivity() {
141145
142146 override fun onCreateOptionsMenu (menu : Menu ): Boolean {
143147 Log .d(TAG , " onCreateOptionsMenu()" )
144- loadedChartData ?.let { data ->
148+ dataCacheFragment?.loadedData ?.let { data ->
145149 menuInflater.inflate(R .menu.chart_menu, menu)
146150 menu.removeItem(R .id.show_legend)
147151
@@ -186,13 +190,12 @@ class ChartWidgetActivity : AbstractBaseActivity() {
186190 is Period -> outState.putSerializable(PERIOD , p)
187191 is Duration -> outState.putSerializable(PERIOD , p)
188192 }
189- outState.putByteArray(DATA , loadedChartData?.toByteArray()?.compress())
190193 super .onSaveInstanceState(outState)
191194 }
192195
193196 override fun onStart () {
194197 super .onStart()
195- val data = loadedChartData
198+ val data = dataCacheFragment?.loadedData
196199 val loadExistingData = data?.let {
197200 val dataUsagePolicy = determineDataUsagePolicy(ConnectionFactory .activeUsableConnection?.connection)
198201 val now = Instant .now().atZone(data.timestamp.zone)
@@ -219,7 +222,7 @@ class ChartWidgetActivity : AbstractBaseActivity() {
219222 return @launch
220223 }
221224
222- loadedChartData = null
225+ dataCacheFragment?.loadedData = null
223226 invalidateOptionsMenu()
224227 showLoadingIndicator()
225228
@@ -252,7 +255,7 @@ class ChartWidgetActivity : AbstractBaseActivity() {
252255 }
253256
254257 configureChartForData(data)
255- loadedChartData = data
258+ dataCacheFragment?.loadedData = data
256259 invalidateOptionsMenu()
257260 showChart()
258261 }
@@ -678,6 +681,14 @@ class ChartWidgetActivity : AbstractBaseActivity() {
678681
679682 private class StateParsingException (cause : Throwable , val item : Item ) : Exception(cause)
680683
684+ @Suppress(" DEPRECATION" )
685+ class ChartDataCacheFragment : Fragment () {
686+ var loadedData: ChartData ? = null
687+ init {
688+ retainInstance = true
689+ }
690+ }
691+
681692 companion object {
682693 private val TAG = ChartWidgetActivity ::class .java.simpleName
683694
@@ -700,7 +711,6 @@ class ChartWidgetActivity : AbstractBaseActivity() {
700711 private const val DATA_POINT_LIMIT = 500000
701712
702713 private const val PERIOD = " period"
703- private const val DATA = " data"
704714 const val EXTRA_WIDGET = " widget"
705715 const val EXTRA_SERVER_FLAGS = " server_flags"
706716 }
0 commit comments