diff --git a/playback/service/build.gradle b/playback/service/build.gradle index 219565696..e93035bbb 100644 --- a/playback/service/build.gradle +++ b/playback/service/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation project(':ui:chapters') annotationProcessor "androidx.annotation:annotation:$annotationVersion" + implementation "androidx.car.app:app:1.4.0-rc02" implementation "androidx.core:core:$coreVersion" implementation "androidx.appcompat:appcompat:$appcompatVersion" implementation "androidx.media:media:$mediaVersion" diff --git a/playback/service/src/main/java/de/danoeh/antennapod/playback/service/PlaybackService.java b/playback/service/src/main/java/de/danoeh/antennapod/playback/service/PlaybackService.java index 39ee4c3ad..4f9b7eb3c 100644 --- a/playback/service/src/main/java/de/danoeh/antennapod/playback/service/PlaybackService.java +++ b/playback/service/src/main/java/de/danoeh/antennapod/playback/service/PlaybackService.java @@ -45,9 +45,12 @@ import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.car.app.connection.CarConnection; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import androidx.core.content.ContextCompat; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; import androidx.media.MediaBrowserServiceCompat; import de.danoeh.antennapod.event.PlayerStatusEvent; @@ -170,6 +173,9 @@ public class PlaybackService extends MediaBrowserServiceCompat { private MediaSessionCompat mediaSession; private static volatile MediaType currentMediaType = MediaType.UNKNOWN; + private LiveData androidAutoConnectionState; + private boolean androidAutoConnected = false; + private Observer androidAutoConnectionObserver; private final IBinder mBinder = new LocalBinder(); @@ -226,6 +232,11 @@ public class PlaybackService extends MediaBrowserServiceCompat { stateManager = new PlaybackServiceStateManager(this); notificationBuilder = new PlaybackServiceNotificationBuilder(this); + androidAutoConnectionState = new CarConnection(this).getType(); + androidAutoConnectionObserver = connectionState -> { + androidAutoConnected = connectionState == CarConnection.CONNECTION_TYPE_PROJECTION; + }; + androidAutoConnectionState.observeForever(androidAutoConnectionObserver); ContextCompat.registerReceiver(this, autoStateUpdated, new IntentFilter("com.google.android.gms.car.media.STATUS"), ContextCompat.RECEIVER_EXPORTED); @@ -318,6 +329,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { currentMediaType = MediaType.UNKNOWN; castStateListener.destroy(); + androidAutoConnectionState.removeObserver(androidAutoConnectionObserver); cancelPositionObserver(); if (mediaSession != null) { mediaSession.release(); @@ -860,6 +872,10 @@ public class PlaybackService extends MediaBrowserServiceCompat { int currentHour = now.get(Calendar.HOUR_OF_DAY); autoEnableByTime = SleepTimerPreferences.isInTimeRange(fromSetting, toSetting, currentHour); } + if (androidAutoConnected) { + Log.i(TAG, "Android Auto is connected, sleep timer will not be auto-enabled"); + autoEnableByTime = false; + } if (newInfo.getOldPlayerStatus() != null && newInfo.getOldPlayerStatus() != PlayerStatus.SEEKING && SleepTimerPreferences.autoEnable() && autoEnableByTime && !sleepTimerActive()) {