Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions app/src/main/java/org/obd/graphs/activity/Components.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import androidx.appcompat.app.AlertDialog
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.navigation.NavigationView
import org.obd.graphs.R
Expand All @@ -37,10 +36,6 @@ fun MainActivity.progressBar(func: (p: ProgressBar) -> Unit) {
func(findViewById(R.id.p_bar))
}

fun MainActivity.bottomNavigationView(func: (p: BottomNavigationView) -> Unit) {
func(findViewById(R.id.bottom_nav_view))
}

fun MainActivity.timer(func: (p: Chronometer) -> Unit) {
func(findViewById(R.id.timer))
}
Expand Down
23 changes: 22 additions & 1 deletion app/src/main/java/org/obd/graphs/activity/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import org.obd.graphs.BuildConfig
import org.obd.graphs.ExceptionHandler
import org.obd.graphs.MAIN_ACTIVITY_EVENT_DESTROYED
Expand Down Expand Up @@ -74,6 +77,7 @@ class MainActivity :
}

private val cache: MutableMap<String, Any> = mutableMapOf()
internal lateinit var appBarConfiguration: AppBarConfiguration

override fun onRequestPermissionsResult(
requestCode: Int,
Expand Down Expand Up @@ -123,15 +127,22 @@ class MainActivity :
sendBroadcastEvent(MAIN_ACTIVITY_EVENT_PAUSE)
}

override fun onSupportNavigateUp(): Boolean {
val navController = (supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment).navController
return NavigationUI.navigateUp(navController,appBarConfiguration) || super.onSupportNavigateUp()
}

override fun onCreate(savedInstanceState: Bundle?) {
setupStrictMode()
super.onCreate(savedInstanceState)

setActivityContext(this)
initCache()
setContentView(R.layout.activity_main)

screen.setupWindowManager(this)

this.appBarConfiguration = getAppBarConfiguration()

setupNavigationBar()
setupNavigationBarButtons()
registerReceiver()
Expand All @@ -153,6 +164,8 @@ class MainActivity :
setupBatteryOptimization()
backupManager = BackupManager(this)
displayAppSignature(this)

navigateToLastVisitedScreen()
}

override fun onResume() {
Expand All @@ -179,6 +192,14 @@ class MainActivity :
}


fun getAppBarConfiguration(): AppBarConfiguration = AppBarConfiguration(
setOf(
R.id.nav_giulia,
R.id.nav_graph,
R.id.nav_gauge,
),
findViewById<DrawerLayout>(R.id.drawer_layout)
)

private fun initCache() {
cacheManager.initCache(cache)
Expand Down
182 changes: 104 additions & 78 deletions app/src/main/java/org/obd/graphs/activity/Navigation.kt

Large diffs are not rendered by default.

19 changes: 11 additions & 8 deletions app/src/main/java/org/obd/graphs/activity/Receivers.kt
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ private const val EVENT_VEHICLE_STATUS_CHANGED = "event.vehicle.status.CHANGED"

internal fun MainActivity.receive(intent: Intent?) {
when (intent?.action) {

NAVIGATION_BUTTONS_VISIBILITY_CHANGED -> setupNavigationBar()
GOOGLE_SIGN_IN_NO_CREDENTIAL_FAILURE -> toast(org.obd.graphs.commons.R.string.main_activity_toast_google_signin_failed)
GOOGLE_SIGN_IN_GENERAL_FAILURE -> toast(org.obd.graphs.commons.R.string.main_activity_toast_google_signin_failed_restart)
TRIPS_UPLOAD_FAILED -> toast(org.obd.graphs.commons.R.string.main_activity_toast_trips_upload_failed)
Expand Down Expand Up @@ -171,10 +173,10 @@ internal fun MainActivity.receive(intent: Intent?) {
updateVehicleProfile()
updateAdapterConnectionType()

toggleNavigationItem(GIULIA_VIEW_ID, R.id.navigation_giulia)
toggleNavigationItem(GRAPH_VIEW_ID, R.id.navigation_graph)
toggleNavigationItem(DASH_VIEW_ID, R.id.navigation_dashboard)
toggleNavigationItem(GAUGE_VIEW_ID, R.id.navigation_gauge)
toggleNavigationItem(GIULIA_VIEW_ID, R.id.nav_giulia)
toggleNavigationItem(GRAPH_VIEW_ID, R.id.nav_graph)
toggleNavigationItem(DASH_VIEW_ID, R.id.nav_dashboard)
toggleNavigationItem(GAUGE_VIEW_ID, R.id.nav_gauge)
}

SCREEN_OFF_EVENT -> screen.lockScreen(this)
Expand All @@ -187,9 +189,9 @@ internal fun MainActivity.receive(intent: Intent?) {
toast(org.obd.graphs.commons.R.string.main_activity_toast_adapter_is_not_selected)
}

NOTIFICATION_GIULIA_VIEW_TOGGLE -> toggleNavigationItem(GIULIA_VIEW_ID, R.id.navigation_giulia)
NOTIFICATION_GRAPH_VIEW_TOGGLE -> toggleNavigationItem(GRAPH_VIEW_ID, R.id.navigation_graph)
NOTIFICATION_DASH_VIEW_TOGGLE -> toggleNavigationItem(DASH_VIEW_ID, R.id.navigation_dashboard)
NOTIFICATION_GIULIA_VIEW_TOGGLE -> toggleNavigationItem(GIULIA_VIEW_ID, R.id.nav_giulia)
NOTIFICATION_GRAPH_VIEW_TOGGLE -> toggleNavigationItem(GRAPH_VIEW_ID, R.id.nav_graph)
NOTIFICATION_DASH_VIEW_TOGGLE -> toggleNavigationItem(DASH_VIEW_ID, R.id.nav_dashboard)
NOTIFICATION_GAUGE_VIEW_TOGGLE -> toggleNavigationItem(GAUGE_VIEW_ID, R.id.navigation_gauge)

DATA_LOGGER_CONNECTING_EVENT -> {
Expand Down Expand Up @@ -289,7 +291,7 @@ internal fun MainActivity.toggleNavigationItem(
prefKey: String,
id: Int,
) {
bottomNavigationView {
bottomAppBar {
it.menu.findItem(id)?.run {
this.isVisible = Prefs.getBoolean(prefKey, true)
}
Expand Down Expand Up @@ -356,6 +358,7 @@ internal fun MainActivity.registerReceiver() {

it.addAction(REQUEST_NOTIFICATION_PERMISSIONS)
it.addAction(LOCATION_IS_DISABLED)
it.addAction(NAVIGATION_BUTTONS_VISIBILITY_CHANGED)
}

registerReceiver(this, powerReceiver) {
Expand Down
27 changes: 7 additions & 20 deletions app/src/main/java/org/obd/graphs/activity/Toobar.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,43 +19,30 @@ package org.obd.graphs.activity
import android.view.View
import androidx.core.view.isVisible
import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import org.obd.graphs.R

const val TOOLBAR_TOGGLE_ACTION: String = "toolbar.toggle.event"
const val TOOLBAR_SHOW: String = "toolbar.reset.animation"

private fun toolbarHide(
bottomNavigationView: BottomNavigationView,
bottomAppBar: BottomAppBar,
floatingActionButton: FloatingActionButton,
hide: Boolean,
) {
fun runAnim() {
val duration = 250L

val navHeight = bottomNavigationView.height.toFloat().takeIf { it > 0 } ?: 500f
val barHeight = bottomAppBar.height.toFloat().takeIf { it > 0 } ?: 500f
val fabHeight = barHeight + floatingActionButton.height.toFloat()

if (!hide) {
bottomNavigationView.translationY = navHeight
bottomAppBar.translationY = barHeight
floatingActionButton.translationY = fabHeight

bottomNavigationView.isVisible = true
bottomAppBar.isVisible = true
floatingActionButton.visibility = View.VISIBLE
}

bottomNavigationView
.animate()
.translationY(if (hide) navHeight else 0f)
.setDuration(duration)
.withEndAction { if (hide) bottomNavigationView.isVisible = false }
.start()

bottomAppBar
.animate()
.translationY(if (hide) barHeight else 0f)
Expand All @@ -72,19 +59,19 @@ private fun toolbarHide(
}.start()
}

bottomNavigationView.post { runAnim() }
bottomAppBar.post { runAnim() }
}

fun MainActivity.toolbarToggle() =
toolbar { a, b, c ->
toolbarHide(a, b, c, a.translationY == 0f && b.isVisible && c.isVisible)
toolbar { b, c ->
toolbarHide(b, c, b.isVisible && c.isVisible)
}

fun MainActivity.toolbarHide(hide: Boolean) =
toolbar { bottomNavigationView, bottomAppBar, floatingActionButton ->
toolbarHide(bottomNavigationView, bottomAppBar, floatingActionButton, hide)
toolbar { bottomAppBar, floatingActionButton ->
toolbarHide(bottomAppBar, floatingActionButton, hide)
}

private fun MainActivity.toolbar(func: (p: BottomNavigationView, r: BottomAppBar, c: FloatingActionButton) -> Unit) {
func(findViewById(R.id.bottom_nav_view), findViewById(R.id.bottom_app_bar), findViewById(R.id.connect_btn))
private fun MainActivity.toolbar(func: (r: BottomAppBar, c: FloatingActionButton) -> Unit) {
func(findViewById(R.id.bottom_app_bar), findViewById(R.id.connect_btn))
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ package org.obd.graphs.preferences
import android.content.Context
import android.graphics.Typeface
import android.util.AttributeSet
import android.util.Log
import androidx.preference.CheckBoxPreference
import androidx.preference.Preference.OnPreferenceChangeListener
import org.obd.graphs.sendBroadcastEvent
import org.obd.graphs.ui.common.COLOR_CARDINAL
import org.obd.graphs.ui.common.colorize
Expand All @@ -32,14 +32,16 @@ class BroadcastEventCheckBoxPreference(
private val experimental = getAttribute("experimental").toBooleanStrictOrNull() ?: false
private val broadcastEvent = getAttribute("broadcastEvent")

init {
onPreferenceChangeListener =
OnPreferenceChangeListener { _, _ ->
if (broadcastEvent != null && broadcastEvent.isNotEmpty()) {
sendBroadcastEvent(broadcastEvent)
}
true
override fun setChecked(checked: Boolean) {
val changed = isChecked != checked
super.setChecked(checked)

if (changed) {
if (broadcastEvent != null && broadcastEvent.isNotEmpty()) {
Log.d("BroadcastEventCheckBoxPreference", "Visibility changed to: $checked for $broadcastEvent")
sendBroadcastEvent(broadcastEvent)
}
}
}

override fun getSummary(): CharSequence? =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,22 +89,22 @@ class PreferencesFragment : PreferenceFragmentCompat() {
when (preference.source) {
"dash" -> {
openPIDsDialog("pref.dash.pids.selected", PREFERENCE_SCREEN_SOURCE_DASHBOARD)
{ navigateToScreen(R.id.navigation_dashboard) }
{ navigateToScreen(R.id.nav_dashboard) }
}

PREFERENCE_SCREEN_SOURCE_GRAPH -> {
openPIDsDialog(tripVirtualScreenManager.getVirtualScreenPrefKey(), preference.source)
{ navigateToScreen(R.id.navigation_graph) }
{ navigateToScreen(R.id.nav_graph) }
}

PREFERENCE_SCREEN_SOURCE_GIULIA -> {
openPIDsDialog(giuliaVirtualScreen.getVirtualScreenPrefKey(), preference.source)
{ navigateToScreen(R.id.navigation_giulia) }
{ navigateToScreen(R.id.nav_giulia) }
}

PREFERENCE_SCREEN_SOURCE_GAUGE -> {
openPIDsDialog(gaugeVirtualScreen.getVirtualScreenPrefKey(), preference.source)
{ navigateToScreen(R.id.navigation_gauge) }
{ navigateToScreen(R.id.nav_gauge) }
}

PREFERENCE_SCREEN_SOURCE_TRIP_INFO -> {
Expand Down Expand Up @@ -281,19 +281,19 @@ class PreferencesFragment : PreferenceFragmentCompat() {

PREFERENCE_SCREEN_KEY_DASH ->
openPIDsDialog("pref.dash.pids.selected", PREFERENCE_SCREEN_SOURCE_DASHBOARD)
{ navigateToScreen(R.id.navigation_dashboard) }
{ navigateToScreen(R.id.nav_dashboard) }

PREFERENCE_SCREEN_KEY_GAUGE ->
openPIDsDialog(gaugeVirtualScreen.getVirtualScreenPrefKey(), PREFERENCE_SCREEN_SOURCE_GAUGE)
{ navigateToScreen(R.id.navigation_gauge) }
{ navigateToScreen(R.id.nav_gauge) }

PREFERENCE_SCREEN_KEY_GIULIA ->
openPIDsDialog(giuliaVirtualScreen.getVirtualScreenPrefKey(), PREFERENCE_SCREEN_SOURCE_GIULIA)
{ navigateToScreen(R.id.navigation_giulia) }
{ navigateToScreen(R.id.nav_giulia) }

PREFERENCE_SCREEN_KEY_GRAPH ->
openPIDsDialog(tripVirtualScreenManager.getVirtualScreenPrefKey(), PREFERENCE_SCREEN_SOURCE_GRAPH)
{ navigateToScreen(R.id.navigation_graph) }
{ navigateToScreen(R.id.nav_graph) }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class TripLogListDialogFragment(
recyclerView.adapter = adapter

attachCloseButton(root) {
navigateToScreen(R.id.navigation_graph)
navigateToScreen(R.id.nav_graph)
}
if (enableDeleteButtons) {
root.findViewById<Button>(R.id.trip_action_delete_all).apply {
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/color/nav_item_color.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#FFFFFF" android:state_checked="true" />
<item android:color="#99FFFFFF" android:state_checked="false" />
</selector>
37 changes: 37 additions & 0 deletions app/src/main/res/drawable/ic_aa.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="64dp"
android:height="64dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">

<path
android:fillColor="#000000"
android:pathData="M6,2C3.79,2 2,3.79 2,6v12c0,2.21 1.79,4 4,4h12c2.21,0 4,-1.79 4,-4V6c0,-2.21 -1.79,-4 -4,-4H6zM6,3.5h12c1.38,0 2.5,1.12 2.5,2.5v12c0,1.38 -1.12,2.5 -2.5,2.5H6c-1.38,0 -2.5,-1.12 -2.5,-2.5V6c0,-1.38 1.12,-2.5 2.5,-2.5z"/>

<path
android:fillColor="#2E5941"
android:pathData="M7,4C5.34,4 4,5.34 4,7v10c0,1.66 1.34,3 3,3h10c1.66,0 3,-1.34 3,-3V7c0,-1.66 -1.34,-3 -3,-3H7z"/>

<path
android:fillColor="#FFFFFF"
android:pathData="M8,5C6.34,5 5,6.34 5,8v8c0,1.66 1.34,3 3,3h8c1.66,0 3,-1.34 3,-3V8c0,-1.66 -1.34,-3 -3,-3H8z"/>

<path
android:pathData="M12,7.5l-6.5,10.5 1.5,1 5,-2 5,2 1.5,-1z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="5.5"
android:startY="18"
android:endX="18.5"
android:endY="7.5"
android:type="linear">
<item android:offset="0.0" android:color="#FF2196F3"/> <item android:offset="0.5" android:color="#FFF44336"/> <item android:offset="1.0" android:color="#FFFFEB3B"/> </gradient>
</aapt:attr>
</path>

<path
android:fillColor="#FFFFFF"
android:pathData="M12,14.5l-2.5,1 2.5,-4 2.5,4z" />

</vector>
28 changes: 28 additions & 0 deletions app/src/main/res/drawable/ic_gauge.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="64dp"
android:height="64dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">

<path
android:fillColor="#000000"
android:pathData="M12,12m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0" />

<path
android:pathData="M18,13h-5l5,-6v6z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="13"
android:startY="13"
android:endX="18"
android:endY="7"
android:type="linear">
<item android:offset="0.0" android:color="#FF2196F3"/> <item android:offset="0.5" android:color="#FFF44336"/> <item android:offset="1.0" android:color="#FFFFEB3B"/> </gradient>
</aapt:attr>
</path>

<path
android:fillColor="#2E5941"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM19.07,16.24l-1.41,1.41C16.14,19.2 14.16,20 12,20c-4.41,0 -8,-3.59 -8,-8C4,7.59 7.59,4 12,4c4.41,0 8,3.59 8,8c0,1.33 -0.36,2.57 -0.99,3.64l1.49,1.49C21.49,15.76 22,13.95 22,12c0,-5.52 -4.48,-10 -10,-10S2,6.48 2,12s4.48,10 10,10c2.76,0 5.26,-1.12 7.07,-2.93z"/>
</vector>
Loading
Loading