Removed radio app service start audio from create method. am: 1e039f0718
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/Radio/+/17952354
Change-Id: Ia7a5da5b8e0ac28dbf614be074189df3a32571f1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/car/radio/audio/AudioStreamController.java b/src/com/android/car/radio/audio/AudioStreamController.java
index c29811f..2b92a9b 100644
--- a/src/com/android/car/radio/audio/AudioStreamController.java
+++ b/src/com/android/car/radio/audio/AudioStreamController.java
@@ -21,6 +21,7 @@
import android.media.AudioFocusRequest;
import android.media.AudioManager;
import android.media.session.PlaybackState;
+import android.util.IndentingPrintWriter;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
@@ -80,7 +81,7 @@
*
* It may be ducked, transiently lost or delayed.
*/
- private boolean mHasSomeFocus = false;
+ private boolean mHasSomeFocus;
private int mCurrentPlaybackState = PlaybackState.STATE_NONE;
private Object mTuningToken;
@@ -231,6 +232,7 @@
* @return true, if request has succeeded (maybe delayed)
*/
public boolean requestMuted(boolean muted) {
+ Log.v(TAG, "requestMuted(" + muted + ")");
synchronized (mLock) {
if (muted) {
if (mTuningToken == null) {
@@ -272,4 +274,19 @@
}
}
}
+
+ /**
+ * Dumps the current audio stream controller state
+ */
+ public void dump(IndentingPrintWriter writer) {
+ writer.println("AudioStreamController");
+ writer.increaseIndent();
+ synchronized (mLock) {
+ writer.printf("Focus Request: %s\n", mGainFocusReq);
+ writer.printf("Has Some Focus: %b\n", mHasSomeFocus);
+ writer.printf("PlayBack State: %d\n", mCurrentPlaybackState);
+ writer.printf("Is Tuning Token Available: %s\n", mTuningToken != null);
+ }
+ writer.decreaseIndent();
+ }
}
diff --git a/src/com/android/car/radio/media/TunerSession.java b/src/com/android/car/radio/media/TunerSession.java
index 0cda1f3..3d9c70c 100644
--- a/src/com/android/car/radio/media/TunerSession.java
+++ b/src/com/android/car/radio/media/TunerSession.java
@@ -149,6 +149,7 @@
@Override
public void onPlay() {
+ mAppService.tuneToDefaultIfNeeded();
mAppService.setMuted(false);
}
diff --git a/src/com/android/car/radio/service/IRadioAppService.aidl b/src/com/android/car/radio/service/IRadioAppService.aidl
index 6ece15a..66f9211 100644
--- a/src/com/android/car/radio/service/IRadioAppService.aidl
+++ b/src/com/android/car/radio/service/IRadioAppService.aidl
@@ -95,4 +95,9 @@
* Returns current region config (like frequency ranges for AM/FM).
*/
RegionConfig getRegionConfig();
+
+ /**
+ * Tunes to the previously selected program or the default channel.
+ */
+ void tuneToDefaultIfNeeded();
}
diff --git a/src/com/android/car/radio/service/RadioAppService.java b/src/com/android/car/radio/service/RadioAppService.java
index f6446d7..e906bcd 100644
--- a/src/com/android/car/radio/service/RadioAppService.java
+++ b/src/com/android/car/radio/service/RadioAppService.java
@@ -32,7 +32,9 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.service.media.MediaBrowserService;
+import android.util.IndentingPrintWriter;
+import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
@@ -92,10 +94,13 @@
private TunerSession mMediaSession;
// current observables state for newly bound IRadioAppCallbacks
+ @GuardedBy("mLock")
private ProgramInfo mCurrentProgram = null;
+ @GuardedBy("mLock")
private int mCurrentPlaybackState = PlaybackState.STATE_NONE;
+ @GuardedBy("mLock")
private long mLastProgramListPush;
-
+ @GuardedBy("mLock")
private RegionConfig mRegionConfigCache;
private SkipController mSkipController;
@@ -139,14 +144,13 @@
mProgramList.addOnCompleteListener(this::pushProgramListUpdate);
}
- tuneToDefault(null);
- mAudioStreamController.requestMuted(false);
-
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
+ Log.d(TAG, "onStartCommand intent [%s] flags[%d] startId[%d]",
+ intent.toString(), flags, startId);
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
if (BrowseTree.ACTION_PLAY_BROADCASTRADIO.equals(intent.getAction())) {
Log.i(TAG, "Executing general play radio intent");
@@ -160,6 +164,7 @@
@Override
public IBinder onBind(Intent intent) {
+ Log.i(TAG, "onBind intent[" + intent + "]");
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
if (mRadioTuner == null) return null;
if (ACTION_APP_SERVICE.equals(intent.getAction())) {
@@ -193,6 +198,7 @@
}
private void onPlaybackStateChanged(int newState) {
+ Log.d(TAG, "onPlaybackStateChanged new state [%d]", newState);
synchronized (mLock) {
mCurrentPlaybackState = newState;
for (IRadioAppCallback callback : mRadioAppCallbacks) {
@@ -289,10 +295,25 @@
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- if (mSkipController != null) {
- pw.println("SkipController:"); mSkipController.dump(pw, " ");
- } else {
- pw.println("no SkipController");
+ try (IndentingPrintWriter writer = new IndentingPrintWriter(pw)) {
+ pw.println("RadioAppService:");
+ writer.increaseIndent();
+ if (mSkipController != null) {
+ writer.increaseIndent();
+ mSkipController.dump(writer);
+ writer.decreaseIndent();
+ } else {
+ pw.println("No SkipController");
+ }
+
+ if (mAudioStreamController != null) {
+ writer.increaseIndent();
+ mAudioStreamController.dump(writer);
+ writer.decreaseIndent();
+ } else {
+ pw.println("No AudioStreamController");
+ }
+ writer.decreaseIndent();
}
}
@@ -381,6 +402,21 @@
}
@Override
+ public void tuneToDefaultIfNeeded() {
+ synchronized (mLock) {
+ if (mRadioTuner == null) {
+ throw new IllegalStateException("Tuner session is closed");
+ }
+
+ if (mCurrentPlaybackState != PlaybackState.STATE_NONE) {
+ return;
+ }
+ }
+
+ tuneToDefault(null);
+ }
+
+ @Override
public void switchBand(ProgramType band) {
tuneToDefault(band);
}
diff --git a/src/com/android/car/radio/service/RadioAppServiceWrapper.java b/src/com/android/car/radio/service/RadioAppServiceWrapper.java
index 154a408..cfd07af 100644
--- a/src/com/android/car/radio/service/RadioAppServiceWrapper.java
+++ b/src/com/android/car/radio/service/RadioAppServiceWrapper.java
@@ -365,6 +365,13 @@
}
/**
+ * Tunes to the previously selected program or the default channel.
+ */
+ public void tuneToDefaultIfNeeded() {
+ callService(service -> service.tuneToDefaultIfNeeded());
+ }
+
+ /**
* Tune to a default channel of a given program type (band).
*
* Usually, this means tuning to the recently listened program of a given band.
diff --git a/src/com/android/car/radio/service/SkipController.java b/src/com/android/car/radio/service/SkipController.java
index 574399b..5df31cb 100644
--- a/src/com/android/car/radio/service/SkipController.java
+++ b/src/com/android/car/radio/service/SkipController.java
@@ -16,6 +16,7 @@
package com.android.car.radio.service;
import android.os.RemoteException;
+import android.util.IndentingPrintWriter;
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
@@ -26,7 +27,6 @@
import com.android.car.radio.SkipMode;
import com.android.car.radio.util.Log;
-import java.io.PrintWriter;
import java.util.List;
/**
@@ -41,13 +41,13 @@
private final IRadioAppService.Stub mService;
- @GuardedBy("mlock")
+ @GuardedBy("mLock")
private List<Program> mFavorites;
- @GuardedBy("mlock")
+ @GuardedBy("mLock")
private int mCurrentIndex;
- @GuardedBy("mlock")
+ @GuardedBy("mLock")
private SkipMode mSkipMode;
SkipController(@NonNull IRadioAppService.Stub service,
@@ -128,25 +128,27 @@
return program;
}
- void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
+ void dump(IndentingPrintWriter pw) {
+ pw.println("SkipController");
+ pw.increaseIndent();
synchronized (mLock) {
- pw.print(prefix); pw.print("mode: "); pw.println(mSkipMode);
- pw.print(prefix); pw.print("current index: "); pw.println(mCurrentIndex);
+ pw.printf("mode: %s\n", mSkipMode);
+ pw.printf("current index: %d\n", mCurrentIndex);
if (mFavorites == null || mFavorites.isEmpty()) {
- pw.print(prefix); pw.println("no favorites");
- return;
- }
- int size = mFavorites.size();
- pw.print(prefix); pw.print(size); pw.println(" favorites: ");
- String prefix2 = prefix + " ";
- for (int i = 0; i < size; i++) {
- pw.print(prefix2);
- pw.print(i); pw.print(": "); pw.print(mFavorites.get(i).getName());
- if (i == mCurrentIndex) {
- pw.print(" (current)");
+ pw.println("no favorites");
+ } else {
+ pw.printf("%d favorites:\n", mFavorites.size());
+ pw.increaseIndent();
+ for (int i = 0; i < mFavorites.size(); i++) {
+ pw.printf("Favorite[%d]: %s ", i, mFavorites.get(i).getName());
+ if (i == mCurrentIndex) {
+ pw.printf(" is current");
+ }
+ pw.println();
}
- pw.println();
+ pw.decreaseIndent();
}
}
+ pw.decreaseIndent();
}
}