PhoneAppCallback

Combined callback interface for the phone app to receive all events from Android Auto.

This interface aggregates all AA callback categories into a single interface for convenience. It extends the four focused callback interfaces that follow the Interface Segregation Principle (ISP):

Purpose

  • Convenience: Single interface to implement all AA callbacks

  • Backward Compatibility: Existing code using PhoneAppCallback continues to work

  • Flexibility: Callers can also use individual interfaces when needed

Interface Hierarchy

PhoneAppCallback
├── AAConnectionCallback (3 methods)
│ ├── onAAConnected()
│ ├── onAADisconnected()
│ └── onAAScreenStateChanged(state)
│
├── AASurfaceLifecycleCallback (2 methods)
│ ├── onAARequestingInit()
│ └── onAAReleasing()
│
├── AANavigationCallback (4 methods)
│ ├── onAANavigationStarted(useDemoMode)
│ ├── onAANavigationEnded()
│ ├── onAARequestsMapReset()
│ └── isDemoModeEnabled()
│
└── AARouteCallback (4 methods)
├── onDestinationSelected(lat, lon, title)
├── onAARouteSelected(index)
├── onAARouteCancelled()
└── onAARecenterOnRoute()

Usage

Implement this interface in your MainActivity and register it with the manager:

class MainActivity : ComponentActivity() {
private val aaCallback = object : PhoneAppCallback {
// Connection events
override fun onAAConnected() {
viewModel.onAndroidAutoConnectionChanged(true)
}
override fun onAADisconnected() {
viewModel.onAndroidAutoConnectionChanged(false)
}
override fun onAAScreenStateChanged(state: AndroidAutoScreenState) {
viewModel.onAAScreenStateChanged(state)
}

// Surface lifecycle events
override fun onAARequestingInit() {
viewModel.onAARequestingInit()
}
override fun onAAReleasing() {
viewModel.onAAReleasing()
}

// Navigation events
override fun onAANavigationStarted(useDemoMode: Boolean) {
viewModel.onAANavigationStarted(useDemoMode)
}
override fun onAANavigationEnded() {
viewModel.onAANavigationEnded()
}
override fun onAARequestsMapReset() {
viewModel.resetMapViewForTracking()
}
override fun isDemoModeEnabled(): Boolean {
return viewModel.isDemoModeEnabled()
}

// Route events
override fun onDestinationSelected(latitude: Double, longitude: Double, title: String) {
viewModel.showDestinationOnMap(latitude, longitude, title)
}
override fun onAARouteSelected(index: Int) {
viewModel.onAARouteSelected(index)
}
override fun onAARouteCancelled() {
viewModel.onAARouteCancelled()
}
override fun onAARecenterOnRoute() {
viewModel.onAARecenterOnRoute()
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidAutoSurfaceManager.setPhoneAppCallback(aaCallback)
}
}

Why Split Interfaces?

The original single interface had 14 methods, which violated ISP because:

  • Callers had to know about all methods even if they only used a subset

  • The interface mixed unrelated responsibilities

  • Documentation was harder to organize

The split provides:

  • Clear Responsibilities: Each interface has a focused purpose

  • Better Documentation: Grouped methods are easier to understand

  • Future Flexibility: Callers can reference specific interfaces in their types

See also

Functions

Link copied to clipboard
abstract fun isDemoModeEnabled(): Boolean

Returns whether demo mode is enabled in the app settings.

Link copied to clipboard
abstract fun onAAConnected()

Called when Android Auto session is created (user opened app on AA).

Link copied to clipboard
abstract fun onAADisconnected()

Called when Android Auto session is destroyed (user exited app on AA).

Link copied to clipboard
abstract fun onAANavigationEnded()

Called when navigation ends on Android Auto.

Link copied to clipboard
abstract fun onAANavigationStarted(useDemoMode: Boolean)

Called when navigation starts on Android Auto.

Link copied to clipboard
abstract fun onAARecenterOnRoute()

Called when user presses the recenter button on Android Auto route preview screen.

Link copied to clipboard
abstract fun onAAReleasing()

Called when Android Auto is releasing its MapView (surface destroyed).

Link copied to clipboard
abstract fun onAARequestingInit()

Called when Android Auto is ready to initialize its MapView.

Link copied to clipboard
abstract fun onAARequestsMapReset()

Called when Android Auto needs to reset the MapView to tracking mode.

Link copied to clipboard
abstract fun onAARouteCancelled()

Called when user cancels route preview on Android Auto.

Link copied to clipboard
abstract fun onAARouteSelected(index: Int)

Called when user selects a route on Android Auto route preview screen.

Link copied to clipboard

Called when Android Auto screen state changes.

Link copied to clipboard
abstract fun onDestinationSelected(latitude: Double, longitude: Double, title: String)

Called when user selects a destination on Android Auto search screen.