Merge "Cleanup CarAudioService - part 2"
diff --git a/car-lib/api/current.txt b/car-lib/api/current.txt
index d7e1fa8..b14948c 100644
--- a/car-lib/api/current.txt
+++ b/car-lib/api/current.txt
@@ -278,12 +278,10 @@
package android.car.media {
public final class CarAudioManager {
- method public void abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
method public android.media.AudioAttributes getAudioAttributesForCarUsage(int) throws android.car.CarNotConnectedException;
method public int getUsageMaxVolume(int) throws android.car.CarNotConnectedException;
method public int getUsageMinVolume(int) throws android.car.CarNotConnectedException;
method public int getUsageVolume(int) throws android.car.CarNotConnectedException;
- method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
method public void setUsageVolume(int, int, int) throws android.car.CarNotConnectedException;
field public static final int CAR_AUDIO_USAGE_ALARM = 6; // 0x6
field public static final int CAR_AUDIO_USAGE_DEFAULT = 0; // 0x0
diff --git a/car-lib/src/android/car/media/CarAudioManager.java b/car-lib/src/android/car/media/CarAudioManager.java
index 5e11666..1953937 100644
--- a/car-lib/src/android/car/media/CarAudioManager.java
+++ b/car-lib/src/android/car/media/CarAudioManager.java
@@ -22,8 +22,6 @@
import android.car.CarNotConnectedException;
import android.content.Context;
import android.media.AudioAttributes;
-import android.media.AudioManager;
-import android.media.AudioManager.OnAudioFocusChangeListener;
import android.media.IVolumeController;
import android.os.Handler;
import android.os.IBinder;
@@ -125,7 +123,6 @@
public static final String CAR_EXTERNAL_SOURCE_TYPE_EXT_SAFETY_ALERT = "EXT_SAFETY_ALERT";
private final ICarAudio mService;
- private final AudioManager mAudioManager;
/**
* Get {@link AudioAttributes} relevant for the given usage in car.
@@ -142,103 +139,9 @@
}
/**
- * Get AudioAttributes for radio. This is necessary when there are multiple types of radio
- * in system.
- *
- * @param radioType String specifying the desired radio type. Should use only what is listed in
- * {@link #getSupportedRadioTypes()}.
- * @return
- * @throws IllegalArgumentException If not supported type is passed.
- *
- * @hide
- */
- public AudioAttributes getAudioAttributesForRadio(String radioType)
- throws CarNotConnectedException, IllegalArgumentException {
- try {
- return mService.getAudioAttributesForRadio(radioType);
- } catch (RemoteException e) {
- throw new CarNotConnectedException();
- }
- }
-
- /**
- * Get AudioAttributes for external audio source.
- *
- * @param externalSourceType String specifying the desired source type. Should use only what is
- * listed in {@link #getSupportedExternalSourceTypes()}.
- * @return
- * @throws IllegalArgumentException If not supported type is passed.
- *
- * @hide
- */
- public AudioAttributes getAudioAttributesForExternalSource(String externalSourceType)
- throws CarNotConnectedException, IllegalArgumentException {
- try {
- return mService.getAudioAttributesForExternalSource(externalSourceType);
- } catch (RemoteException e) {
- throw new CarNotConnectedException();
- }
- }
-
- /**
- * List all supported external audio sources.
- *
- * @return
- *
- * @hide
- */
- public String[] getSupportedExternalSourceTypes() throws CarNotConnectedException {
- try {
- return mService.getSupportedExternalSourceTypes();
- } catch (RemoteException e) {
- throw new CarNotConnectedException();
- }
- }
-
- /**
- * List all supported radio sources.
- *
- * @return
- *
- * @hide
- */
- public String[] getSupportedRadioTypes() throws CarNotConnectedException {
- try {
- return mService.getSupportedRadioTypes();
- } catch (RemoteException e) {
- throw new CarNotConnectedException();
- }
- }
-
- /**
- * Request audio focus.
- * Send a request to obtain the audio focus.
- * @param l
- * @param requestAttributes
- * @param durationHint
- * @param flags
- */
- public int requestAudioFocus(OnAudioFocusChangeListener l,
- AudioAttributes requestAttributes,
- int durationHint,
- int flags)
- throws CarNotConnectedException, IllegalArgumentException {
- return mAudioManager.requestAudioFocus(l, requestAttributes, durationHint, flags);
- }
-
- /**
- * Abandon audio focus. Causes the previous focus owner, if any, to receive focus.
- * @param l
- * @param aa
- */
- public void abandonAudioFocus(OnAudioFocusChangeListener l, AudioAttributes aa) {
- mAudioManager.abandonAudioFocus(l, aa);
- }
-
- /**
* Sets the volume index for a particular usage.
*
- * Requires {@link android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
+ * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
*
* @param carUsage The car audio usage whose volume index should be set.
* @param index The volume index to set. See
@@ -260,7 +163,7 @@
/**
* Registers a global volume controller interface.
*
- * Requires {@link android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
+ * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
*
* @hide
*/
@@ -278,7 +181,7 @@
/**
* Returns the maximum volume index for a particular usage.
*
- * Requires {@link android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
+ * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
*
* @param carUsage The car audio usage whose maximum volume index is returned.
* @return The maximum valid volume index for the usage.
@@ -296,7 +199,7 @@
/**
* Returns the minimum volume index for a particular usage.
*
- * Requires {@link android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
+ * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
*
* @param carUsage The car audio usage whose maximum volume index is returned.
* @return The maximum valid volume index for the usage.
@@ -314,7 +217,7 @@
/**
* Returns the current volume index for a particular usage.
*
- * Requires {@link android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
+ * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
*
* @param carUsage The car audio usage whose volume index is returned.
* @return The current volume index for the usage.
@@ -340,6 +243,5 @@
/** @hide */
public CarAudioManager(IBinder service, Context context, Handler handler) {
mService = ICarAudio.Stub.asInterface(service);
- mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}
}
diff --git a/car-support-lib/api/current.txt b/car-support-lib/api/current.txt
index 8410557..f58f491 100644
--- a/car-support-lib/api/current.txt
+++ b/car-support-lib/api/current.txt
@@ -179,14 +179,12 @@
public abstract class CarAudioManager {
ctor public CarAudioManager();
- method public abstract void abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
method public abstract android.support.car.media.CarAudioRecord createCarAudioRecord(int) throws android.support.car.CarNotConnectedException, java.lang.SecurityException;
method public abstract android.media.AudioAttributes getAudioAttributesForCarUsage(int) throws android.support.car.CarNotConnectedException;
method public abstract android.media.AudioFormat getAudioRecordAudioFormat() throws android.support.car.CarNotConnectedException;
method public abstract int getAudioRecordMaxBufferSize() throws android.support.car.CarNotConnectedException;
method public abstract int getAudioRecordMinBufferSize() throws android.support.car.CarNotConnectedException;
method public abstract boolean isAudioRecordSupported() throws android.support.car.CarNotConnectedException;
- method public abstract int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int) throws android.support.car.CarNotConnectedException, java.lang.IllegalArgumentException;
field public static final int CAR_AUDIO_USAGE_ALARM = 6; // 0x6
field public static final int CAR_AUDIO_USAGE_DEFAULT = 0; // 0x0
field public static final int CAR_AUDIO_USAGE_MUSIC = 1; // 0x1
diff --git a/car-support-lib/src/android/support/car/media/CarAudioManager.java b/car-support-lib/src/android/support/car/media/CarAudioManager.java
index e69d7ed..9fc998f 100644
--- a/car-support-lib/src/android/support/car/media/CarAudioManager.java
+++ b/car-support-lib/src/android/support/car/media/CarAudioManager.java
@@ -19,7 +19,6 @@
import android.media.AudioAttributes;
import android.media.AudioFormat;
import android.media.AudioManager;
-import android.media.AudioManager.OnAudioFocusChangeListener;
import android.support.annotation.IntDef;
import android.support.annotation.RequiresPermission;
import android.support.car.CarManagerBase;
@@ -96,46 +95,6 @@
throws CarNotConnectedException;
/**
- * Request audio focus. Send a request to obtain audio focus.
- *
- * @param listener The listener to be notified of audio focus changes.
- * @param requestAttributes Obtained from {@link #getAudioAttributesForCarUsage(int)}.
- * @param durationHint Use {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT} to indicate this
- * focus request is temporary and focus will be abandoned shortly. Examples of transient
- * requests include playback of driving directions and notification sounds.
- * </p>
- * Use {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK} to indicate it's OK for the
- * previous focus owner to keep playing if it ducks its audio output.
- * </p>
- * Use {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE} for a temporary request that
- * benefits from the system not playing disruptive sounds such as notifications, for use cases
- * such as voice memo recording, or speech recognition.
- * </p>
- * Use {@link AudioManager#AUDIOFOCUS_GAIN} for a focus request of unknown duration, such as
- * the playback of a song or a video.
- * @return {@link AudioManager#AUDIOFOCUS_REQUEST_FAILED}, or
- * {@link AudioManager#AUDIOFOCUS_REQUEST_GRANTED}.
- * @throws IllegalArgumentException
- */
- public abstract int requestAudioFocus(OnAudioFocusChangeListener listener,
- AudioAttributes requestAttributes,
- int durationHint) throws CarNotConnectedException, IllegalArgumentException;
-
- /**
- * @hide
- */
- public abstract int requestAudioFocus(OnAudioFocusChangeListener listener,
- AudioAttributes requestAttributes,
- int durationHint,
- int flags) throws CarNotConnectedException, IllegalArgumentException;
- /**
- * Abandon audio focus. Causes the previous focus owner (if any) to receive focus.
- * @param listener The listener with which focus was requested.
- * @param aa
- */
- public abstract void abandonAudioFocus(OnAudioFocusChangeListener listener, AudioAttributes aa);
-
- /**
* Get {@link AudioFormat} for audio record.
* @return {@link AudioFormat} for audio record.
*/
diff --git a/car-support-lib/src/android/support/car/media/CarAudioManagerEmbedded.java b/car-support-lib/src/android/support/car/media/CarAudioManagerEmbedded.java
index 713ffd3..1747d63 100644
--- a/car-support-lib/src/android/support/car/media/CarAudioManagerEmbedded.java
+++ b/car-support-lib/src/android/support/car/media/CarAudioManagerEmbedded.java
@@ -55,35 +55,6 @@
}
@Override
- public int requestAudioFocus(OnAudioFocusChangeListener listener,
- AudioAttributes requestAttributes,
- int durationHint,
- int flags) throws CarNotConnectedException, IllegalArgumentException {
- try {
- return mManager.requestAudioFocus(listener, requestAttributes, durationHint, flags);
- } catch (android.car.CarNotConnectedException e) {
- throw new CarNotConnectedException(e);
- }
- }
-
- @Override
- public int requestAudioFocus(OnAudioFocusChangeListener listener,
- AudioAttributes requestAttributes,
- int durationHint) throws CarNotConnectedException, IllegalArgumentException {
- try {
- return mManager.requestAudioFocus(listener, requestAttributes, durationHint,
- 0 /*flags*/);
- } catch (android.car.CarNotConnectedException e) {
- throw new CarNotConnectedException(e);
- }
- }
-
- @Override
- public void abandonAudioFocus(OnAudioFocusChangeListener listener, AudioAttributes aa) {
- mManager.abandonAudioFocus(listener, aa);
- }
-
- @Override
public boolean isAudioRecordSupported() throws CarNotConnectedException {
//always true in embedded
return true;
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/radio.xml b/tests/EmbeddedKitchenSinkApp/res/layout/radio.xml
index 590e7f1..fd47687 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/radio.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/radio.xml
@@ -50,38 +50,6 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1" >
- <Button
- android:id="@+id/button_get_radio_focus"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/radio_get_radio_focus" />
- <Button
- android:id="@+id/button_release_radio_focus"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/radio_release_radio_focus" />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_weight="1" >
- <Button
- android:id="@+id/button_get_focus_in_radio"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/radio_get_focus" />
- <Button
- android:id="@+id/button_release_focus_in_radio"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/radio_release_focus" />
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_weight="1" >
<EditText
android:id="@+id/edittext_station_frequency"
android:layout_width="wrap_content"
diff --git a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
index e8fa534..51a9223 100644
--- a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
@@ -178,10 +178,6 @@
<string name="radio_close">Close</string>
<string name="radio_muted">Muted</string>
<string name="radio_unmuted">Unmuted</string>
- <string name="radio_get_radio_focus">Get Radio focus</string>
- <string name="radio_release_radio_focus">Release Radio focus</string>
- <string name="radio_get_focus">Get Audio focus</string>
- <string name="radio_release_focus">Release Audio focus</string>
<string name="radio_next">Next</string>
<string name="radio_prev">Previous</string>
<string name="radio_scan_cancel">Cancel scan</string>
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
index c19a3e8..5a160f1 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
@@ -35,11 +35,8 @@
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
@@ -47,7 +44,6 @@
import com.google.android.car.kitchensink.CarEmulator;
import com.google.android.car.kitchensink.R;
-import com.google.android.car.kitchensink.audio.AudioPlayer.PlayStateListener;
public class AudioTestFragment extends Fragment {
private static final String TAG = "CAR.AUDIO.KS";
@@ -55,24 +51,6 @@
private AudioManager mAudioManager;
private FocusHandler mAudioFocusHandler;
- private Button mNavPlayOnce;
- private Button mVrPlayOnce;
- private Button mSystemPlayOnce;
- private Button mMediaPlay;
- private Button mMediaPlayOnce;
- private Button mMediaStop;
- private Button mWavPlay;
- private Button mWavStop;
- private Button mNavStart;
- private Button mNavEnd;
- private Button mVrStart;
- private Button mVrEnd;
- private Button mRadioStart;
- private Button mRadioEnd;
- private Button mSpeakerPhoneOn;
- private Button mSpeakerPhoneOff;
- private Button mMicrophoneOn;
- private Button mMicrophoneOff;
private ToggleButton mEnableMocking;
private ToggleButton mRejectFocus;
@@ -97,26 +75,14 @@
private AudioAttributes mSystemSoundAudioAttrib;
private CarEmulator mCarEmulator;
- private final AudioManager.OnAudioFocusChangeListener mNavFocusListener =
- new AudioManager.OnAudioFocusChangeListener() {
- @Override
- public void onAudioFocusChange(int focusChange) {
- Log.i(TAG, "Nav focus change:" + focusChange);
- }
+ private final AudioManager.OnAudioFocusChangeListener mNavFocusListener = (focusChange) -> {
+ Log.i(TAG, "Nav focus change:" + focusChange);
};
- private final AudioManager.OnAudioFocusChangeListener mVrFocusListener =
- new AudioManager.OnAudioFocusChangeListener() {
- @Override
- public void onAudioFocusChange(int focusChange) {
- Log.i(TAG, "VR focus change:" + focusChange);
- }
+ private final AudioManager.OnAudioFocusChangeListener mVrFocusListener = (focusChange) -> {
+ Log.i(TAG, "VR focus change:" + focusChange);
};
- private final AudioManager.OnAudioFocusChangeListener mRadioFocusListener =
- new AudioManager.OnAudioFocusChangeListener() {
- @Override
- public void onAudioFocusChange(int focusChange) {
- Log.i(TAG, "Radio focus change:" + focusChange);
- }
+ private final AudioManager.OnAudioFocusChangeListener mRadioFocusListener = (focusChange) -> {
+ Log.i(TAG, "Radio focus change:" + focusChange);
};
private final CarAppFocusManager.OnAppFocusOwnershipCallback mOwnershipCallbacks =
@@ -211,232 +177,120 @@
mAudioManager = (AudioManager) mContext.getSystemService(
Context.AUDIO_SERVICE);
mAudioFocusHandler = new FocusHandler(
- (RadioGroup) view.findViewById(R.id.button_focus_request_selection),
- (Button) view.findViewById(R.id.button_audio_focus_request),
- (TextView) view.findViewById(R.id.text_audio_focus_state));
- mMediaPlay = (Button) view.findViewById(R.id.button_media_play_start);
- mMediaPlay.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- boolean requestFocus = true;
- boolean repeat = true;
- mMusicPlayer.start(requestFocus, repeat, AudioManager.AUDIOFOCUS_GAIN);
+ view.findViewById(R.id.button_focus_request_selection),
+ view.findViewById(R.id.button_audio_focus_request),
+ view.findViewById(R.id.text_audio_focus_state));
+ view.findViewById(R.id.button_media_play_start).setOnClickListener(v -> {
+ boolean requestFocus = true;
+ boolean repeat = true;
+ mMusicPlayer.start(requestFocus, repeat, AudioManager.AUDIOFOCUS_GAIN);
+ });
+ view.findViewById(R.id.button_media_play_once).setOnClickListener(v -> {
+ mMusicPlayerShort.start(true, false, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+ // play only for 1 sec and stop
+ mHandler.postDelayed(() -> mMusicPlayerShort.stop(), 1000);
+ });
+ view.findViewById(R.id.button_media_play_stop).setOnClickListener(v -> mMusicPlayer.stop());
+ view.findViewById(R.id.button_wav_play_start).setOnClickListener(
+ v -> mWavPlayer.start(true, true, AudioManager.AUDIOFOCUS_GAIN));
+ view.findViewById(R.id.button_wav_play_stop).setOnClickListener(v -> mWavPlayer.stop());
+ view.findViewById(R.id.button_nav_play_once).setOnClickListener(v -> {
+ if (mAppFocusManager == null) {
+ return;
+ }
+ if (DBG) {
+ Log.i(TAG, "Nav start");
+ }
+ try {
+ mAppFocusManager.requestAppFocus(
+ CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, mOwnershipCallbacks);
+ } catch (CarNotConnectedException e) {
+ Log.e(TAG, "Failed to set active focus", e);
+ }
+ if (!mNavGuidancePlayer.isPlaying()) {
+ mNavGuidancePlayer.start(true, false,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
+ () -> mAppFocusManager.abandonAppFocus(mOwnershipCallbacks,
+ CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION));
}
});
- mMediaPlayOnce = (Button) view.findViewById(R.id.button_media_play_once);
- mMediaPlayOnce.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mMusicPlayerShort.start(true, false, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
- // play only for 1 sec and stop
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mMusicPlayerShort.stop();
- }
- }, 1000);
+ view.findViewById(R.id.button_vr_play_once).setOnClickListener(v -> {
+ if (mAppFocusManager == null) {
+ return;
+ }
+ if (DBG) {
+ Log.i(TAG, "VR start");
+ }
+ try {
+ mAppFocusManager.requestAppFocus(
+ CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, mOwnershipCallbacks);
+ } catch (CarNotConnectedException e) {
+ Log.e(TAG, "Failed to set active focus", e);
+ }
+ if (!mVrPlayer.isPlaying()) {
+ mVrPlayer.start(true, false,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
+ () -> mAppFocusManager.abandonAppFocus(mOwnershipCallbacks,
+ CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND));
}
});
- mMediaStop = (Button) view.findViewById(R.id.button_media_play_stop);
- mMediaStop.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mMusicPlayer.stop();
+ view.findViewById(R.id.button_system_play_once).setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "System start");
+ }
+ if (!mSystemPlayer.isPlaying()) {
+ // system sound played without focus
+ mSystemPlayer.start(false, false, 0);
}
});
- mWavPlay = (Button) view.findViewById(R.id.button_wav_play_start);
- mWavPlay.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mWavPlayer.start(true, true, AudioManager.AUDIOFOCUS_GAIN);
- }
- });
- mWavStop = (Button) view.findViewById(R.id.button_wav_play_stop);
- mWavStop.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mWavPlayer.stop();
- }
- });
- mNavPlayOnce = (Button) view.findViewById(R.id.button_nav_play_once);
- mNavPlayOnce.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mAppFocusManager == null) {
- return;
- }
- if (DBG) {
- Log.i(TAG, "Nav start");
- }
- if (!mNavGuidancePlayer.isPlaying()) {
- try {
- mAppFocusManager.requestAppFocus(
- CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, mOwnershipCallbacks);
- } catch (CarNotConnectedException e) {
- Log.e(TAG, "Failed to set active focus", e);
- }
- mNavGuidancePlayer.start(true, false,
- AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
- new PlayStateListener() {
- @Override
- public void onCompletion() {
- mAppFocusManager.abandonAppFocus(mOwnershipCallbacks,
- CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
- }
- });
- }
- }
- });
- mVrPlayOnce = (Button) view.findViewById(R.id.button_vr_play_once);
- mVrPlayOnce.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mAppFocusManager == null) {
- return;
- }
- if (DBG) {
- Log.i(TAG, "VR start");
- }
- try {
- mAppFocusManager.requestAppFocus(
- CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, mOwnershipCallbacks);
- } catch (CarNotConnectedException e) {
- Log.e(TAG, "Failed to set active focus", e);
- }
- if (!mVrPlayer.isPlaying()) {
- mVrPlayer.start(true, false, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
- new PlayStateListener() {
- @Override
- public void onCompletion() {
- mAppFocusManager.abandonAppFocus(mOwnershipCallbacks,
- CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND);
- }
- });
- }
- }
- });
- mSystemPlayOnce = (Button) view.findViewById(R.id.button_system_play_once);
- mSystemPlayOnce.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "System start");
- }
- if (!mSystemPlayer.isPlaying()) {
- // system sound played without focus
- mSystemPlayer.start(false, false, 0);
- }
- }
- });
- mNavStart = (Button) view.findViewById(R.id.button_nav_start);
- mNavStart.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- handleNavStart();
- }
- });
- mNavEnd = (Button) view.findViewById(R.id.button_nav_end);
- mNavEnd.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- handleNavEnd();
- }
- });
- mVrStart = (Button) view.findViewById(R.id.button_vr_start);
- mVrStart.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- handleVrStart();
- }
- });
- mVrEnd = (Button) view.findViewById(R.id.button_vr_end);
- mVrEnd.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- handleVrEnd();
- }
- });
- mRadioStart = (Button) view.findViewById(R.id.button_radio_start);
- mRadioStart.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- handleRadioStart();
- }
- });
- mRadioEnd = (Button) view.findViewById(R.id.button_radio_end);
- mRadioEnd.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- handleRadioEnd();
- }
- });
- mSpeakerPhoneOn = (Button) view.findViewById(R.id.button_speaker_phone_on);
- mSpeakerPhoneOn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mAudioManager.setSpeakerphoneOn(true);
- }
- });
- mSpeakerPhoneOff = (Button) view.findViewById(R.id.button_speaker_phone_off);
- mSpeakerPhoneOff.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mAudioManager.setSpeakerphoneOn(false);
- }
- });
- mMicrophoneOn = (Button) view.findViewById(R.id.button_microphone_on);
- mMicrophoneOn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mAudioManager.setMicrophoneMute(false); // Turn the microphone on.
- }
- });
- mMicrophoneOff = (Button) view.findViewById(R.id.button_microphone_off);
- mMicrophoneOff.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mAudioManager.setMicrophoneMute(true); // Mute the microphone.
- }
- });
+ view.findViewById(R.id.button_nav_start).setOnClickListener(v -> handleNavStart());
+ view.findViewById(R.id.button_nav_end).setOnClickListener(v -> handleNavEnd());
+ view.findViewById(R.id.button_vr_start).setOnClickListener(v -> handleVrStart());
+ view.findViewById(R.id.button_vr_end).setOnClickListener(v -> handleVrEnd());
+ view.findViewById(R.id.button_radio_start).setOnClickListener(v -> handleRadioStart());
+ view.findViewById(R.id.button_radio_end).setOnClickListener(v -> handleRadioEnd());
+ view.findViewById(R.id.button_speaker_phone_on).setOnClickListener(
+ v -> mAudioManager.setSpeakerphoneOn(true));
+ view.findViewById(R.id.button_speaker_phone_off).setOnClickListener(
+ v -> mAudioManager.setSpeakerphoneOn(false));
+ view.findViewById(R.id.button_microphone_on).setOnClickListener(
+ v -> mAudioManager.setMicrophoneMute(false));
+ view.findViewById(R.id.button_microphone_off).setOnClickListener(
+ v -> mAudioManager.setMicrophoneMute(true));
- mRejectFocus = (ToggleButton) view.findViewById(R.id.button_reject_audio_focus);
- mRejectFocus.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (mCarEmulator == null) {
- return;
- }
- if (!mEnableMocking.isChecked()) {
- return;
- }
- if (isChecked) {
- mCarEmulator.setAudioFocusControl(true);
- } else {
- mCarEmulator.setAudioFocusControl(false);
- }
+ mRejectFocus = view.findViewById(R.id.button_reject_audio_focus);
+ mRejectFocus.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ if (mCarEmulator == null) {
+ return;
+ }
+ if (!mEnableMocking.isChecked()) {
+ return;
+ }
+ if (isChecked) {
+ mCarEmulator.setAudioFocusControl(true);
+ } else {
+ mCarEmulator.setAudioFocusControl(false);
}
});
mRejectFocus.setActivated(false);
- mEnableMocking = (ToggleButton) view.findViewById(R.id.button_mock_audio);
- mEnableMocking.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (mCarEmulator == null) {
- //TODO(pavelm): need to do a full switch between emulated and normal mode
- // all Car*Manager references should be invalidated.
- Toast.makeText(AudioTestFragment.this.getContext(),
- "Not supported yet :(", Toast.LENGTH_SHORT).show();
- return;
- }
- if (isChecked) {
- mRejectFocus.setActivated(true);
- mCarEmulator.start();
- } else {
- mRejectFocus.setActivated(false);
- mCarEmulator.stop();
- mCarEmulator = null;
- }
+
+ mEnableMocking = view.findViewById(R.id.button_mock_audio);
+ mEnableMocking.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ if (mCarEmulator == null) {
+ //TODO(pavelm): need to do a full switch between emulated and normal mode
+ // all Car*Manager references should be invalidated.
+ Toast.makeText(AudioTestFragment.this.getContext(),
+ "Not supported yet :(", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if (isChecked) {
+ mRejectFocus.setActivated(true);
+ mCarEmulator.start();
+ } else {
+ mRejectFocus.setActivated(false);
+ mCarEmulator.stop();
+ mCarEmulator = null;
}
});
return view;
@@ -466,16 +320,13 @@
if (mAppFocusManager == null) {
return;
}
- if (mCarAudioManager == null) {
- return;
- }
if (DBG) {
Log.i(TAG, "Nav start");
}
try {
mAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION,
mOwnershipCallbacks);
- mCarAudioManager.requestAudioFocus(mNavFocusListener, mNavAudioAttrib,
+ mAudioManager.requestAudioFocus(mNavFocusListener, mNavAudioAttrib,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
} catch (CarNotConnectedException e) {
Log.e(TAG, "Failed to set active focus", e);
@@ -486,31 +337,25 @@
if (mAppFocusManager == null) {
return;
}
- if (mCarAudioManager == null) {
- return;
- }
if (DBG) {
Log.i(TAG, "Nav end");
}
+ mAudioManager.abandonAudioFocus(mNavFocusListener, mNavAudioAttrib);
mAppFocusManager.abandonAppFocus(mOwnershipCallbacks,
CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
- mCarAudioManager.abandonAudioFocus(mNavFocusListener, mNavAudioAttrib);
}
private void handleVrStart() {
if (mAppFocusManager == null) {
return;
}
- if (mCarAudioManager == null) {
- return;
- }
if (DBG) {
Log.i(TAG, "VR start");
}
try {
mAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND,
mOwnershipCallbacks);
- mCarAudioManager.requestAudioFocus(mVrFocusListener, mVrAudioAttrib,
+ mAudioManager.requestAudioFocus(mVrFocusListener, mVrAudioAttrib,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, 0);
} catch (CarNotConnectedException e) {
Log.e(TAG, "Failed to set active focus", e);
@@ -521,40 +366,27 @@
if (mAppFocusManager == null) {
return;
}
- if (mCarAudioManager == null) {
- return;
- }
if (DBG) {
Log.i(TAG, "VR end");
}
+ mAudioManager.abandonAudioFocus(mVrFocusListener, mVrAudioAttrib);
mAppFocusManager.abandonAppFocus(mOwnershipCallbacks,
CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND);
- mCarAudioManager.abandonAudioFocus(mVrFocusListener, mVrAudioAttrib);
}
private void handleRadioStart() {
- if (mCarAudioManager == null) {
- return;
- }
if (DBG) {
Log.i(TAG, "Radio start");
}
- try {
- mCarAudioManager.requestAudioFocus(mRadioFocusListener, mRadioAudioAttrib,
- AudioManager.AUDIOFOCUS_GAIN, 0);
- } catch (CarNotConnectedException e) {
- Log.e(TAG, "failed", e);
- }
+ mAudioManager.requestAudioFocus(mRadioFocusListener, mRadioAudioAttrib,
+ AudioManager.AUDIOFOCUS_GAIN, 0);
}
private void handleRadioEnd() {
- if (mCarAudioManager == null) {
- return;
- }
if (DBG) {
Log.i(TAG, "Radio end");
}
- mCarAudioManager.abandonAudioFocus(mRadioFocusListener, mRadioAudioAttrib);
+ mAudioManager.abandonAudioFocus(mRadioFocusListener, mRadioAudioAttrib);
}
private class FocusHandler {
@@ -571,24 +403,21 @@
mRequestSelection.check(R.id.focus_gain);
setFocusText(AUDIO_FOCUS_STATE_RELEASED_UNKNOWN);
mFocusListener = new AudioFocusListener();
- requestButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- int selectedButtonId = mRequestSelection.getCheckedRadioButtonId();
- int focusRequest = AudioManager.AUDIOFOCUS_GAIN;
- if (selectedButtonId == R.id.focus_gain_transient_duck) {
- focusRequest = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
- } else if (selectedButtonId == R.id.focus_release) {
- mAudioManager.abandonAudioFocus(mFocusListener);
- setFocusText(AUDIO_FOCUS_STATE_RELEASED_UNKNOWN);
- return;
- }
- int ret = mAudioManager.requestAudioFocus(mFocusListener,
- AudioManager.STREAM_MUSIC, focusRequest);
- Log.i(TAG, "requestAudioFocus returned " + ret);
- if (ret == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
- setFocusText(AUDIO_FOCUS_STATE_GAIN);
- }
+ requestButton.setOnClickListener(v -> {
+ int selectedButtonId = mRequestSelection.getCheckedRadioButtonId();
+ int focusRequest = AudioManager.AUDIOFOCUS_GAIN;
+ if (selectedButtonId == R.id.focus_gain_transient_duck) {
+ focusRequest = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
+ } else if (selectedButtonId == R.id.focus_release) {
+ mAudioManager.abandonAudioFocus(mFocusListener);
+ setFocusText(AUDIO_FOCUS_STATE_RELEASED_UNKNOWN);
+ return;
+ }
+ int ret = mAudioManager.requestAudioFocus(mFocusListener,
+ AudioManager.STREAM_MUSIC, focusRequest);
+ Log.i(TAG, "requestAudioFocus returned " + ret);
+ if (ret == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+ setFocusText(AUDIO_FOCUS_STATE_GAIN);
}
});
}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/radio/RadioTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/radio/RadioTestFragment.java
index 0214791..1b0f029 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/radio/RadioTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/radio/RadioTestFragment.java
@@ -26,11 +26,8 @@
import android.hardware.radio.RadioManager;
import android.hardware.radio.RadioMetadata;
import android.hardware.radio.RadioTuner;
-import android.media.AudioAttributes;
-import android.media.AudioManager;
import android.os.Bundle;
import android.os.IBinder;
-import android.os.Looper;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
@@ -40,7 +37,6 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ToggleButton;
@@ -56,22 +52,6 @@
private static final boolean DBG = true;
private static final int MAX_LOG_MESSAGES = 100;
- private final AudioManager.OnAudioFocusChangeListener mRadioFocusListener =
- new AudioManager.OnAudioFocusChangeListener() {
- @Override
- public void onAudioFocusChange(int focusChange) {
- addLog(Log.INFO, "Radio focus change:" + focusChange);
- }
- };
-
- private final AudioManager.OnAudioFocusChangeListener mSecondaryFocusListener =
- new AudioManager.OnAudioFocusChangeListener() {
- @Override
- public void onAudioFocusChange(int focusChange) {
- addLog(Log.INFO, "Secondary focus change:" + focusChange);
- }
- };
-
private final RadioTuner.Callback mRadioCallback = new RadioTuner.Callback() {
@Override
public void onError(int status) {
@@ -110,10 +90,6 @@
private Button mOpenRadio;
private Button mCloseRadio;
- private Button mGetRadioFocus;
- private Button mReleaseRadioFocus;
- private Button mGetFocus;
- private Button mReleaseFocus;
private Button mRadioNext;
private Button mRadioPrev;
private Button mRadioScanCancel;
@@ -132,10 +108,6 @@
private Car mCar;
private CarAudioManager mCarAudioManager;
- private AudioAttributes mRadioAudioAttrib;
- private AudioManager mAudioManager;
- private boolean mHasRadioFocus;
- private boolean mHasSecondaryFocus;
private RadioTuner mRadioTuner;
private RadioManager mRadioManager;
private RadioManager.FmBandDescriptor mFmDescriptor;
@@ -162,32 +134,28 @@
init();
View view = inflater.inflate(R.layout.radio, container, false);
- mOpenRadio = (Button) view.findViewById(R.id.button_open_radio);
- mCloseRadio = (Button) view.findViewById(R.id.button_close_radio);
- mGetRadioFocus = (Button) view.findViewById(R.id.button_get_radio_focus);
- mReleaseRadioFocus = (Button) view.findViewById(R.id.button_release_radio_focus);
- mGetFocus = (Button) view.findViewById(R.id.button_get_focus_in_radio);
- mReleaseFocus = (Button) view.findViewById(R.id.button_release_focus_in_radio);
- mRadioNext = (Button) view.findViewById(R.id.button_radio_next);
- mRadioPrev = (Button) view.findViewById(R.id.button_radio_prev);
- mRadioScanCancel = (Button) view.findViewById(R.id.button_radio_scan_cancel);
- mRadioGetProgramInfo = (Button) view.findViewById(R.id.button_radio_get_program_info);
- mRadioTuneToStation = (Button) view.findViewById(R.id.button_radio_tune_to_station);
- mRadioStepUp = (Button) view.findViewById(R.id.button_radio_step_up);
- mRadioStepDown = (Button) view.findViewById(R.id.button_radio_step_down);
+ mOpenRadio = view.findViewById(R.id.button_open_radio);
+ mCloseRadio = view.findViewById(R.id.button_close_radio);
+ mRadioNext = view.findViewById(R.id.button_radio_next);
+ mRadioPrev = view.findViewById(R.id.button_radio_prev);
+ mRadioScanCancel = view.findViewById(R.id.button_radio_scan_cancel);
+ mRadioGetProgramInfo = view.findViewById(R.id.button_radio_get_program_info);
+ mRadioTuneToStation = view.findViewById(R.id.button_radio_tune_to_station);
+ mRadioStepUp = view.findViewById(R.id.button_radio_step_up);
+ mRadioStepDown = view.findViewById(R.id.button_radio_step_down);
- mStationFrequency = (EditText) view.findViewById(R.id.edittext_station_frequency);
+ mStationFrequency = view.findViewById(R.id.edittext_station_frequency);
- mToggleMuteRadio = (ToggleButton) view.findViewById(R.id.togglebutton_mute_radio);
+ mToggleMuteRadio = view.findViewById(R.id.togglebutton_mute_radio);
mToggleMuteRadio.setChecked(true);
- mRadioBand = (ToggleButton) view.findViewById(R.id.button_band_selection);
+ mRadioBand = view.findViewById(R.id.button_band_selection);
- mStationInfo = (TextView) view.findViewById(R.id.radio_station_info);
- mChannelInfo = (TextView) view.findViewById(R.id.radio_channel_info);
- mSongInfo = (TextView) view.findViewById(R.id.radio_song_info);
- mArtistInfo = (TextView) view.findViewById(R.id.radio_artist_info);
+ mStationInfo = view.findViewById(R.id.radio_station_info);
+ mChannelInfo = view.findViewById(R.id.radio_channel_info);
+ mSongInfo = view.findViewById(R.id.radio_song_info);
+ mArtistInfo = view.findViewById(R.id.radio_artist_info);
- mLog = (TextView) view.findViewById(R.id.radio_log);
+ mLog = view.findViewById(R.id.radio_log);
mLog.setMovementMethod(new ScrollingMovementMethod());
mNaString = getContext().getString(R.string.radio_na);
@@ -213,8 +181,6 @@
public void onServiceConnected(ComponentName name, IBinder service) {
try {
mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
- mRadioAudioAttrib = mCarAudioManager.getAudioAttributesForCarUsage(
- CarAudioManager.CAR_AUDIO_USAGE_RADIO);
} catch (CarNotConnectedException e) {
Log.e(TAG, "Car not connected", e);
}
@@ -225,7 +191,6 @@
}
});
mCar.connect();
- mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
initializeRadio();
}
@@ -275,186 +240,103 @@
}
private void addHandlers() {
- mOpenRadio.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- handleRadioStart();
- updateStates();
+ mOpenRadio.setOnClickListener(v -> {
+ handleRadioStart();
+ updateStates();
+ });
+ mCloseRadio.setOnClickListener(v -> {
+ handleRadioEnd();
+ mToggleMuteRadio.setChecked(true);
+ updateStates();
+ });
+ mToggleMuteRadio.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "Toggle mute radio");
+ }
+ mRadioTuner.setMute(!mRadioTuner.getMute());
+ updateStates();
+ });
+ mRadioNext.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "Next radio station");
+ }
+ if (mRadioTuner != null) {
+ mRadioTuner.scan(RadioTuner.DIRECTION_UP, true);
+ }
+ updateStates();
+ });
+ mRadioPrev.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "Previous radio station");
+ }
+ if (mRadioTuner != null) {
+ mRadioTuner.scan(RadioTuner.DIRECTION_DOWN, true);
+ }
+ updateStates();
+ });
+ mRadioScanCancel.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "Cancel radio scan");
+ }
+ if (mRadioTuner != null) {
+ mRadioTuner.cancel();
+ }
+ updateStates();
+ });
+ mRadioTuneToStation.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "Tuning to station");
+ }
+ String station = mStationFrequency.getText().toString().trim();
+ if (mRadioTuner != null && !(station.equals(""))) {
+ mRadioTuner.tune(Integer.parseInt(station), 0);
+ }
+ resetMessages();
+ updateMessages();
+ updateStates();
+ });
+ mRadioStepUp.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "Step up");
+ }
+ if (mRadioTuner != null) {
+ mRadioTuner.step(RadioTuner.DIRECTION_UP, false);
+ }
+ resetMessages();
+ updateMessages();
+ updateStates();
+ });
+ mRadioStepDown.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "Step down");
+ }
+ if (mRadioTuner != null) {
+ mRadioTuner.step(RadioTuner.DIRECTION_DOWN, false);
+ }
+ resetMessages();
+ updateMessages();
+ updateStates();
+ });
+ mRadioGetProgramInfo.setOnClickListener(v -> {
+ if (DBG) {
+ Log.i(TAG, "getProgramInformation");
+ }
+ if (mRadioTuner != null) {
+ RadioManager.ProgramInfo[] programInfos = new RadioManager.ProgramInfo[1];
+ mRadioTuner.getProgramInformation(programInfos);
+ addLog(Log.INFO, "mRadioTuner.getProgramInformation() =>" + programInfos[0]);
}
});
- mCloseRadio.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- handleRadioEnd();
- mToggleMuteRadio.setChecked(true);
- updateStates();
+ mRadioBand.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ if (DBG) {
+ Log.i(TAG, "Changing radio band");
}
- });
- mToggleMuteRadio.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Toggle mute radio");
- }
- mRadioTuner.setMute(!mRadioTuner.getMute());
- updateStates();
+ if (mRadioTuner != null) {
+ mRadioTuner.setConfiguration(mRadioBand.isChecked() ? mFmConfig : mAmConfig);
}
- });
- mGetRadioFocus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Get radio focus");
- }
- try {
- mCarAudioManager.requestAudioFocus(mRadioFocusListener, mRadioAudioAttrib,
- AudioManager.AUDIOFOCUS_GAIN, 0);
- } catch (CarNotConnectedException e) {
- //ignore for now
- }
- mHasRadioFocus = true;
- updateStates();
- }
- });
- mReleaseRadioFocus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Release radio focus");
- }
- mCarAudioManager.abandonAudioFocus(mRadioFocusListener, mRadioAudioAttrib);
- mHasRadioFocus = false;
- updateStates();
- }
- });
- mGetFocus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Get secondary focus");
- }
- mAudioManager.requestAudioFocus(mSecondaryFocusListener,
- AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
- mHasSecondaryFocus = true;
- updateStates();
- }
- });
- mReleaseFocus.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Release secondary focus");
- }
- mAudioManager.abandonAudioFocus(mSecondaryFocusListener);
- mHasSecondaryFocus = false;
- updateStates();
- }
- });
- mRadioNext.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Next radio station");
- }
- if (mRadioTuner != null) {
- mRadioTuner.scan(RadioTuner.DIRECTION_UP, true);
- }
- updateStates();
- }
- });
- mRadioPrev.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Previous radio station");
- }
- if (mRadioTuner != null) {
- mRadioTuner.scan(RadioTuner.DIRECTION_DOWN, true);
- }
- updateStates();
- }
- });
- mRadioScanCancel.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Cancel radio scan");
- }
- if (mRadioTuner != null) {
- mRadioTuner.cancel();
- }
- updateStates();
- }
- });
- mRadioTuneToStation.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Tuning to station");
- }
- String station = mStationFrequency.getText().toString().trim();
- if (mRadioTuner != null && !(station.equals(""))) {
- mRadioTuner.tune(Integer.parseInt(station), 0);
- }
- resetMessages();
- updateMessages();
- updateStates();
- }
- });
- mRadioStepUp.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Step up");
- }
- if (mRadioTuner != null) {
- mRadioTuner.step(RadioTuner.DIRECTION_UP, false);
- }
- resetMessages();
- updateMessages();
- updateStates();
- }
- });
- mRadioStepDown.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "Step down");
- }
- if (mRadioTuner != null) {
- mRadioTuner.step(RadioTuner.DIRECTION_DOWN, false);
- }
- resetMessages();
- updateMessages();
- updateStates();
- }
- });
- mRadioGetProgramInfo.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (DBG) {
- Log.i(TAG, "getProgramInformation");
- }
- if (mRadioTuner != null) {
- RadioManager.ProgramInfo[] programInfos = new RadioManager.ProgramInfo[1];
- mRadioTuner.getProgramInformation(programInfos);
- addLog(Log.INFO, "mRadioTuner.getProgramInformation() =>" + programInfos[0]);
- }
- }
- });
- mRadioBand.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (DBG) {
- Log.i(TAG, "Changing radio band");
- }
- if (mRadioTuner != null) {
- mRadioTuner.setConfiguration(mRadioBand.isChecked() ? mFmConfig : mAmConfig);
- }
- resetMessages();
- updateMessages();
- updateStates();
- }
+ resetMessages();
+ updateMessages();
+ updateStates();
});
}
@@ -462,10 +344,6 @@
mOpenRadio.setEnabled(mRadioTuner == null);
mCloseRadio.setEnabled(mRadioTuner != null);
mToggleMuteRadio.setEnabled(mRadioTuner != null);
- mGetRadioFocus.setEnabled(!mHasRadioFocus);
- mReleaseRadioFocus.setEnabled(mHasRadioFocus);
- mGetFocus.setEnabled(!mHasSecondaryFocus);
- mReleaseFocus.setEnabled(mHasSecondaryFocus);
mRadioNext.setEnabled(mRadioTuner != null);
mRadioPrev.setEnabled(mRadioTuner != null);
mRadioBand.setEnabled(mRadioTuner != null);