Skip to content

Commit 7fb1426

Browse files
authored
refactoring: data logger service enhancements
1 parent f2f3fba commit 7fb1426

File tree

52 files changed

+1564
-1103
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1564
-1103
lines changed

app/src/main/java/org/obd/graphs/PowerBroadcastReceiver.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import android.util.Log
2525
import org.obd.graphs.activity.LOG_TAG
2626
import org.obd.graphs.activity.MainActivity
2727
import org.obd.graphs.bl.datalogger.DATA_LOGGER_SCHEDULED_START_EVENT
28-
import org.obd.graphs.bl.datalogger.dataLogger
28+
import org.obd.graphs.bl.datalogger.DATA_LOGGER_SCHEDULED_STOP_EVENT
2929

3030
const val SCREEN_OFF_EVENT = "power.screen.off"
3131
const val SCREEN_ON_EVENT = "power.screen.on"
@@ -65,12 +65,7 @@ internal class PowerBroadcastReceiver : BroadcastReceiver() {
6565
}
6666

6767
if (powerPreferences.connectOnPower) {
68-
Log.d(
69-
LOG_TAG,
70-
"Stop data logging",
71-
)
72-
dataLogger.stop()
73-
dataLogger.scheduledStop()
68+
sendBroadcastEvent(DATA_LOGGER_SCHEDULED_STOP_EVENT)
7469
}
7570

7671
if (powerPreferences.screenOnOff) {

app/src/main/java/org/obd/graphs/activity/MainActivity.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ import org.obd.graphs.MAIN_ACTIVITY_EVENT_DESTROYED
3838
import org.obd.graphs.MAIN_ACTIVITY_EVENT_PAUSE
3939
import org.obd.graphs.Permissions
4040
import org.obd.graphs.R
41-
import org.obd.graphs.bl.datalogger.dataLogger
41+
import org.obd.graphs.bl.datalogger.DataLoggerRepository
4242
import org.obd.graphs.bl.drag.dragRacingMetricsProcessor
4343
import org.obd.graphs.bl.extra.vehicleStatusMetricsProcessor
4444
import org.obd.graphs.bl.generator.MetricsGenerator
4545
import org.obd.graphs.bl.gps.gpsMetricsEmitter
4646
import org.obd.graphs.bl.trip.tripManager
4747
import org.obd.graphs.cacheManager
4848
import org.obd.graphs.network
49+
import org.obd.graphs.preferences.initPrefs
4950
import org.obd.graphs.profile.profile
5051
import org.obd.graphs.sendBroadcastEvent
5152
import org.obd.graphs.setActivityContext
@@ -58,7 +59,6 @@ const val LOG_TAG = "MainActivity"
5859
class MainActivity :
5960
AppCompatActivity(),
6061
EasyPermissions.PermissionCallbacks {
61-
6262
lateinit var lockScreenDialog: AlertDialog
6363
internal lateinit var backupManager: BackupManager
6464

@@ -125,13 +125,14 @@ class MainActivity :
125125

126126
override fun onSupportNavigateUp(): Boolean {
127127
val navController = (supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment).navController
128-
return NavigationUI.navigateUp(navController,appBarConfiguration) || super.onSupportNavigateUp()
128+
return NavigationUI.navigateUp(navController, appBarConfiguration) || super.onSupportNavigateUp()
129129
}
130130

131131
override fun onCreate(savedInstanceState: Bundle?) {
132132
setupStrictMode()
133133
super.onCreate(savedInstanceState)
134134
setActivityContext(this)
135+
initPrefs(this)
135136
initCache()
136137
setContentView(R.layout.activity_main)
137138

@@ -164,7 +165,6 @@ class MainActivity :
164165
validatePermissions()
165166
}
166167

167-
168168
override fun onResume() {
169169
super.onResume()
170170
screen.setupWindowManager(this)
@@ -188,15 +188,15 @@ class MainActivity :
188188
Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler())
189189
}
190190

191-
192-
fun getAppBarConfiguration(): AppBarConfiguration = AppBarConfiguration(
193-
setOf(
194-
R.id.nav_giulia,
195-
R.id.nav_graph,
196-
R.id.nav_gauge,
197-
),
198-
findViewById<DrawerLayout>(R.id.drawer_layout)
199-
)
191+
fun getAppBarConfiguration(): AppBarConfiguration =
192+
AppBarConfiguration(
193+
setOf(
194+
R.id.nav_giulia,
195+
R.id.nav_graph,
196+
R.id.nav_gauge,
197+
),
198+
findViewById<DrawerLayout>(R.id.drawer_layout),
199+
)
200200

201201
private fun initCache() {
202202
cacheManager.initCache(cache)
@@ -244,14 +244,14 @@ class MainActivity :
244244
}
245245

246246
private fun setupMetricsProcessors() {
247-
dataLogger
247+
DataLoggerRepository
248248
.observe(dragRacingMetricsProcessor)
249249
.observe(tripManager)
250250
.observe(vehicleStatusMetricsProcessor)
251251
.observe(gpsMetricsEmitter)
252252

253253
if (BuildConfig.DEBUG) {
254-
dataLogger.observe(MetricsGenerator(BuildConfig.DEBUG))
254+
DataLoggerRepository.observe(MetricsGenerator(BuildConfig.DEBUG))
255255
}
256256
}
257257

app/src/main/java/org/obd/graphs/activity/Navigation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import androidx.core.os.bundleOf
2323
import androidx.core.view.GravityCompat
2424
import androidx.navigation.ui.NavigationUI
2525
import org.obd.graphs.R
26-
import org.obd.graphs.bl.datalogger.dataLogger
26+
import org.obd.graphs.bl.datalogger.DataLoggerRepository
2727
import org.obd.graphs.getContext
2828
import org.obd.graphs.preferences.PREFERENCE_SCREEN_KEY
2929
import org.obd.graphs.preferences.Prefs
@@ -99,7 +99,7 @@ internal fun MainActivity.setupNavigationBar() {
9999
navController.addOnDestinationChangedListener { _, destination, _ ->
100100

101101
bottomAppBar {
102-
it.menu.findItem(R.id.ctx_menu_dtc).isVisible = dataLogger.isDTCEnabled()
102+
it.menu.findItem(R.id.ctx_menu_dtc).isVisible = DataLoggerRepository.isDTCEnabled() ?: false
103103
it.menu.findItem(R.id.ctx_menu_android_auto)?.let {
104104
if (NavigationRouter.isAndroidAutoEnabled(this)) {
105105
val spanString = SpannableString(it.title.toString())

app/src/main/java/org/obd/graphs/activity/Receivers.kt

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,11 @@ import org.obd.graphs.bl.datalogger.DATA_LOGGER_DTC_AVAILABLE
6060
import org.obd.graphs.bl.datalogger.DATA_LOGGER_ERROR_CONNECT_EVENT
6161
import org.obd.graphs.bl.datalogger.DATA_LOGGER_ERROR_EVENT
6262
import org.obd.graphs.bl.datalogger.DATA_LOGGER_NO_NETWORK_EVENT
63+
import org.obd.graphs.bl.datalogger.DATA_LOGGER_SCHEDULED_STOP_EVENT
6364
import org.obd.graphs.bl.datalogger.DATA_LOGGER_STOPPED_EVENT
6465
import org.obd.graphs.bl.datalogger.DATA_LOGGER_WIFI_INCORRECT
6566
import org.obd.graphs.bl.datalogger.DATA_LOGGER_WIFI_NOT_CONNECTED
66-
import org.obd.graphs.bl.datalogger.dataLogger
67+
import org.obd.graphs.bl.datalogger.DataLoggerRepository
6768
import org.obd.graphs.bl.datalogger.dataLoggerSettings
6869
import org.obd.graphs.bl.extra.EVENT_VEHICLE_STATUS_IGNITION_OFF
6970
import org.obd.graphs.bl.extra.EVENT_VEHICLE_STATUS_IGNITION_ON
@@ -81,6 +82,7 @@ import org.obd.graphs.registerReceiver
8182
import org.obd.graphs.ui.common.COLOR_CARDINAL
8283
import org.obd.graphs.ui.common.COLOR_PHILIPPINE_GREEN
8384
import org.obd.graphs.ui.common.toast
85+
import org.obd.graphs.ui.withDataLogger
8486

8587
internal val powerReceiver = PowerBroadcastReceiver()
8688
const val NOTIFICATION_GRAPH_VIEW_TOGGLE = "view.graph.toggle"
@@ -96,6 +98,16 @@ private const val EVENT_VEHICLE_STATUS_CHANGED = "event.vehicle.status.CHANGED"
9698

9799
internal fun MainActivity.receive(intent: Intent?) {
98100
when (intent?.action) {
101+
DATA_LOGGER_SCHEDULED_STOP_EVENT -> {
102+
Log.d(
103+
LOG_TAG,
104+
"Stop data logging",
105+
)
106+
withDataLogger {
107+
stop()
108+
scheduledStop()
109+
}
110+
}
99111

100112
NAVIGATION_BUTTONS_VISIBILITY_CHANGED -> setupNavigationBar()
101113
GOOGLE_SIGN_IN_NO_CREDENTIAL_FAILURE -> toast(org.obd.graphs.commons.R.string.main_activity_toast_google_signin_failed)
@@ -150,7 +162,9 @@ internal fun MainActivity.receive(intent: Intent?) {
150162
UsbManager.ACTION_USB_DEVICE_DETACHED -> {
151163
val usbDevice: UsbDevice = intent.extras?.get(UsbManager.EXTRA_DEVICE) as UsbDevice
152164
toast(R.string.pref_usb_device_detached, usbDevice.productName!!)
153-
dataLogger.stop()
165+
withDataLogger {
166+
stop()
167+
}
154168
}
155169

156170
USB_DEVICE_ATTACHED_EVENT -> {
@@ -211,7 +225,9 @@ internal fun MainActivity.receive(intent: Intent?) {
211225
ContextCompat.getColorStateList(applicationContext, org.obd.graphs.commons.R.color.cardinal)
212226
it.setOnClickListener {
213227
Log.i(LOG_TAG, "Stop data logging ")
214-
dataLogger.stop()
228+
withDataLogger {
229+
stop()
230+
}
215231
}
216232
it.refreshDrawableState()
217233
}
@@ -264,7 +280,9 @@ internal fun MainActivity.receive(intent: Intent?) {
264280
updateVehicleStatus("Key off")
265281
if (dataLoggerSettings.instance().vehicleStatusDisconnectWhenOff) {
266282
Log.i(LOG_TAG, "Received vehicle status OFF event. Closing the session.")
267-
dataLogger.stop()
283+
withDataLogger {
284+
stop()
285+
}
268286
}
269287
}
270288
}
@@ -301,7 +319,7 @@ internal fun MainActivity.toggleNavigationItem(
301319
internal fun MainActivity.unregisterReceiver() {
302320
unregisterReceiver(activityBroadcastReceiver)
303321
unregisterReceiver(powerReceiver)
304-
unregisterReceiver(dataLogger.eventsReceiver)
322+
unregisterReceiver(DataLoggerRepository.eventsReceiver)
305323
}
306324

307325
internal fun MainActivity.registerReceiver() {
@@ -359,14 +377,15 @@ internal fun MainActivity.registerReceiver() {
359377
it.addAction(REQUEST_NOTIFICATION_PERMISSIONS)
360378
it.addAction(LOCATION_IS_DISABLED)
361379
it.addAction(NAVIGATION_BUTTONS_VISIBILITY_CHANGED)
380+
it.addAction(DATA_LOGGER_SCHEDULED_STOP_EVENT)
362381
}
363382

364383
registerReceiver(this, powerReceiver) {
365384
it.addAction("android.intent.action.ACTION_POWER_CONNECTED")
366385
it.addAction("android.intent.action.ACTION_POWER_DISCONNECTED")
367386
}
368387

369-
registerReceiver(this, dataLogger.eventsReceiver) {
388+
registerReceiver(this, DataLoggerRepository.eventsReceiver) {
370389
it.addAction(MODULES_LIST_CHANGED_EVENT)
371390
it.addAction(PROFILE_CHANGED_EVENT)
372391
}

app/src/main/java/org/obd/graphs/preferences/PreferencesFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import android.view.ViewGroup
2727
import androidx.preference.*
2828
import org.obd.graphs.R
2929
import org.obd.graphs.activity.*
30-
import org.obd.graphs.bl.datalogger.dataLogger
30+
import org.obd.graphs.bl.datalogger.DataLoggerRepository
3131
import org.obd.graphs.bl.trip.tripVirtualScreenManager
3232
import org.obd.graphs.preferences.dtc.DiagnosticTroubleCodeListPreferences
3333
import org.obd.graphs.preferences.dtc.DiagnosticTroubleCodePreferenceDialogFragment
@@ -191,7 +191,7 @@ class PreferencesFragment : PreferenceFragmentCompat() {
191191

192192
private fun hidePreferences() {
193193
findPreference<PreferenceCategory>("pref.dtc.category")?.isVisible =
194-
dataLogger.isDTCEnabled()
194+
DataLoggerRepository.isDTCEnabled()
195195
}
196196

197197
private fun registerListeners() {

app/src/main/java/org/obd/graphs/preferences/pid/PidDefinitionPreferenceDialogFragment.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import androidx.recyclerview.widget.ItemTouchHelper
3535
import androidx.recyclerview.widget.RecyclerView
3636
import org.obd.graphs.R
3737
import org.obd.graphs.ViewPreferencesSerializer
38-
import org.obd.graphs.bl.datalogger.dataLogger
38+
import org.obd.graphs.bl.datalogger.DataLoggerRepository
3939
import org.obd.graphs.bl.datalogger.dataLoggerSettings
4040
import org.obd.graphs.bl.datalogger.serialize
4141
import org.obd.graphs.bl.datalogger.vehicleCapabilitiesManager
@@ -317,12 +317,12 @@ open class PidDefinitionPreferenceDialogFragment(
317317
private fun getAdapter() = (getRecyclerView(root).adapter as PidViewAdapter)
318318

319319
private fun sourceList(): MutableList<PidDefinitionDetails> {
320-
val all = dataLogger.getPidDefinitionRegistry().findAll()
320+
val all = DataLoggerRepository.getPidDefinitionRegistry().findAll()
321321
val individualQuery = dataLoggerSettings.instance().adapter.individualQueryStrategyEnabled
322322

323323
val sourceList: List<PidDefinitionDetails> =
324324
if (source == PREFERENCE_SCREEN_SOURCE_TRIP_INFO) {
325-
val pidRegistry = dataLogger.getPidDefinitionRegistry()
325+
val pidRegistry = DataLoggerRepository.getPidDefinitionRegistry()
326326
val list =
327327
Query
328328
.instance(QueryStrategyType.TRIP_INFO_QUERY)
@@ -331,7 +331,7 @@ open class PidDefinitionPreferenceDialogFragment(
331331
.toMutableList()
332332
list.map { PidDefinitionDetails(it, checked = false, supported = true) }
333333
} else if (source == PREFERENCE_SCREEN_SOURCE_PERFORMANCE) {
334-
val pidRegistry = dataLogger.getPidDefinitionRegistry()
334+
val pidRegistry = DataLoggerRepository.getPidDefinitionRegistry()
335335
val list =
336336
Query
337337
.instance(QueryStrategyType.PERFORMANCE_QUERY)
@@ -340,18 +340,18 @@ open class PidDefinitionPreferenceDialogFragment(
340340
.toMutableList()
341341
list.map { PidDefinitionDetails(it, checked = false, supported = true) }
342342
} else if (individualQuery) {
343-
findPidDefinitionByPriority(dataLogger.getPidDefinitionRegistry().findAll()) { true }
343+
findPidDefinitionByPriority(DataLoggerRepository.getPidDefinitionRegistry().findAll()) { true }
344344
} else {
345345
when (source) {
346346
"low" -> findPidDefinitionByPriority(all) { pidDefinition -> pidDefinition.priority > 0 }
347347
"high" -> findPidDefinitionByPriority(all) { pidDefinition -> pidDefinition.priority == 0 }
348-
"edit" -> findPidDefinitionByPriority(dataLogger.getPidDefinitionRegistry().findAll()) { true }
348+
"edit" -> findPidDefinitionByPriority(DataLoggerRepository.getPidDefinitionRegistry().findAll()) { true }
349349
"dashboard" -> map(all)
350350
"graph" -> map(all)
351351
"gauge" -> map(all)
352352
"giulia" -> map(all)
353353
"aa" -> map(all)
354-
else -> findPidDefinitionByPriority(dataLogger.getPidDefinitionRegistry().findAll()) { true }
354+
else -> findPidDefinitionByPriority(DataLoggerRepository.getPidDefinitionRegistry().findAll()) { true }
355355
}
356356
}
357357

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/**
2+
* Copyright 2019-2026, Tomasz Żebrowski
3+
*
4+
* <p>Licensed to the Apache Software Foundation (ASF) under one or more contributor license
5+
* agreements. See the NOTICE file distributed with this work for additional information regarding
6+
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance with the License. You may obtain a
8+
* copy of the License at
9+
*
10+
* <p>http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* <p>Unless required by applicable law or agreed to in writing, software distributed under the
13+
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14+
* express or implied. See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package org.obd.graphs.ui
18+
19+
import android.util.Log
20+
import androidx.activity.ComponentActivity
21+
import androidx.core.content.ContextCompat
22+
import androidx.fragment.app.Fragment
23+
import com.google.android.material.floatingactionbutton.FloatingActionButton
24+
import org.obd.graphs.R
25+
import org.obd.graphs.bl.datalogger.DataLoggerRepository
26+
import org.obd.graphs.bl.datalogger.DataLoggerService
27+
import org.obd.graphs.bl.query.Query
28+
29+
fun Fragment.withDataLogger(action: DataLoggerService.() -> Unit) {
30+
org.obd.graphs.bl.datalogger.withDataLogger(requireContext(), action)
31+
}
32+
33+
fun ComponentActivity.withDataLogger(action: DataLoggerService.() -> Unit) {
34+
org.obd.graphs.bl.datalogger.withDataLogger(this, action)
35+
}
36+
37+
fun Fragment.configureActionButton(query: Query) {
38+
activity?.let {
39+
val btn = it.findViewById<FloatingActionButton>(R.id.connect_btn)
40+
41+
btn?.setOnClickListener {
42+
if (DataLoggerRepository.isRunning()) {
43+
withDataLogger {
44+
Log.i("Fragment", "Stop data logging")
45+
stop()
46+
}
47+
} else {
48+
withDataLogger {
49+
Log.i("Fragment", "Start data logging")
50+
start(query)
51+
}
52+
}
53+
}
54+
55+
btn?.backgroundTintList =
56+
ContextCompat.getColorStateList(
57+
it,
58+
if (DataLoggerRepository.isRunning()) {
59+
org.obd.graphs.commons.R.color.cardinal
60+
} else {
61+
org.obd.graphs.commons.R.color.philippine_green
62+
},
63+
)
64+
}
65+
}

0 commit comments

Comments
 (0)