diff options
| author | android-build-team Robot <android-build-team-robot@google.com> | 2018-06-08 07:21:21 +0000 |
|---|---|---|
| committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-06-08 07:21:21 +0000 |
| commit | 9566fdca07d946145778c9c28829eff7de5a3d37 (patch) | |
| tree | f14ee81ce6e7b9daa57c0e4dac94bb13b064f517 | |
| parent | 68b854d5fc999a14fcdf8dea7aec9eea1857af9a (diff) | |
| parent | 317f803138b6f9757a3961771b7a07ce54f803f6 (diff) | |
| download | platform_packages_apps_Car_Radio-pie-cts-release.tar.gz platform_packages_apps_Car_Radio-pie-cts-release.tar.bz2 platform_packages_apps_Car_Radio-pie-cts-release.zip | |
Snap for 4829593 from 317f803138b6f9757a3961771b7a07ce54f803f6 to pi-releaseandroid-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r3android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-vts-9.0_r9android-vts-9.0_r8android-vts-9.0_r7android-vts-9.0_r6android-vts-9.0_r5android-vts-9.0_r4android-vts-9.0_r14android-vts-9.0_r13android-vts-9.0_r12android-vts-9.0_r11android-vts-9.0_r10android-cts-9.0_r9android-cts-9.0_r8android-cts-9.0_r7android-cts-9.0_r6android-cts-9.0_r5android-cts-9.0_r4android-cts-9.0_r3android-cts-9.0_r2android-cts-9.0_r13android-cts-9.0_r12android-cts-9.0_r11android-cts-9.0_r10android-cts-9.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r60android-9.0.0_r6android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r5android-9.0.0_r49android-9.0.0_r48android-9.0.0_r3android-9.0.0_r2android-9.0.0_r18android-9.0.0_r17android-9.0.0_r10android-9.0.0_r1security-pi-releasepie-vts-releasepie-security-releasepie-s2-releasepie-release-2pie-releasepie-r2-s2-releasepie-r2-s1-releasepie-r2-releasepie-cts-release
Change-Id: I90c762d3b8355b14b086ac73caa3f7f7077b3bb6
| -rw-r--r-- | src/com/android/car/radio/CarRadioActivity.java | 2 | ||||
| -rw-r--r-- | src/com/android/car/radio/RadioController.java | 105 | ||||
| -rw-r--r-- | src/com/android/car/radio/RadioService.java | 82 | ||||
| -rw-r--r-- | src/com/android/car/radio/service/IRadioCallback.aidl | 7 | ||||
| -rw-r--r-- | src/com/android/car/radio/service/IRadioManager.aidl | 11 | ||||
| -rw-r--r-- | src/com/android/car/radio/storage/RadioStorage.java | 56 | ||||
| -rw-r--r-- | src/com/android/car/radio/utils/ProgramSelectorUtils.java | 52 |
7 files changed, 125 insertions, 190 deletions
diff --git a/src/com/android/car/radio/CarRadioActivity.java b/src/com/android/car/radio/CarRadioActivity.java index 557b1c6..642e995 100644 --- a/src/com/android/car/radio/CarRadioActivity.java +++ b/src/com/android/car/radio/CarRadioActivity.java @@ -255,7 +255,7 @@ public class CarRadioActivity extends CarDrawerActivity implements public void onItemClick(int position) { getDrawerController().closeDrawer(); if (position < SUPPORTED_RADIO_BANDS.size()) { - mRadioController.openRadioBand(SUPPORTED_RADIO_BANDS.get(position).first); + mRadioController.switchBand(SUPPORTED_RADIO_BANDS.get(position).first); } else if (position == SUPPORTED_RADIO_BANDS.size()) { startManualTuner(); } else { diff --git a/src/com/android/car/radio/RadioController.java b/src/com/android/car/radio/RadioController.java index 3200295..713f64b 100644 --- a/src/com/android/car/radio/RadioController.java +++ b/src/com/android/car/radio/RadioController.java @@ -44,6 +44,7 @@ import com.android.car.broadcastradio.support.platform.ProgramSelectorExt; import com.android.car.radio.service.IRadioCallback; import com.android.car.radio.service.IRadioManager; import com.android.car.radio.storage.RadioStorage; +import com.android.car.radio.utils.ProgramSelectorUtils; import java.util.ArrayList; import java.util.List; @@ -106,11 +107,6 @@ public class RadioController implements RadioStorage.PresetsChangeListener { private final RadioStorage mRadioStorage; - /** - * The current radio band. This value is one of the BAND_* values from {@link RadioManager}. - * For example, {@link RadioManager#BAND_FM}. - */ - private int mCurrentRadioBand = RadioStorage.INVALID_RADIO_BAND; private final String mAmBandString; private final String mFmBandString; @@ -285,9 +281,11 @@ public class RadioController implements RadioStorage.PresetsChangeListener { /** * Returns the band this radio is currently tuned to. + * + * TODO(b/73950974): don't be AM/FM exclusive */ public int getCurrentRadioBand() { - return mCurrentRadioBand; + return ProgramSelectorUtils.getRadioBand(mCurrentProgram.getSelector()); } /** @@ -303,71 +301,23 @@ public class RadioController implements RadioStorage.PresetsChangeListener { } /** - * Opens the given current radio band. Currently, this only supports FM and AM bands. + * Switch radio band. Currently, this only supports FM and AM bands. * - * @param radioBand One of {@link RadioManager#BAND_FM}, {@link RadioManager#BAND_AM}, - * {@link RadioManager#BAND_FM_HD} or {@link RadioManager#BAND_AM_HD}. + * @param radioBand One of {@link RadioManager#BAND_FM}, {@link RadioManager#BAND_AM}. */ - public void openRadioBand(int radioBand) { - if (mRadioManager == null || radioBand == mCurrentRadioBand) { - return; - } - - setCurrentRadioBand(radioBand); - mRadioStorage.storeRadioBand(mCurrentRadioBand); - + public void switchBand(int radioBand) { try { - mRadioManager.openRadioBand(radioBand); - - updateAmFmDisplayState(); - - // Sets the initial mute state. This will resolve the mute state should be if an - // {@link AudioManager#AUDIOFOCUS_LOSS_TRANSIENT} event is received followed by an - // {@link AudioManager#AUDIOFOCUS_GAIN} event. In this case, the radio will un-mute itself - // if the user has not muted beforehand. - if (mUserHasMuted) { - mRadioManager.mute(); - } - - // Ensure the play button properly reflects the current mute state. - mRadioDisplayController.setPlayPauseButtonState(mRadioManager.isMuted()); - - maybeTuneToStoredRadioChannel(); + mRadioManager.switchBand(radioBand); } catch (RemoteException e) { - Log.e(TAG, "openRadioBand(); remote exception: " + e.getMessage()); + Log.e(TAG, "Couldn't switch band", e); } } /** - * Attempts to tune to the last played radio channel for a particular band. For example, if - * the user switches to the AM band from FM, this method will attempt to tune to the last - * AM band that the user was on. - * - * <p>If a stored radio station cannot be found, then this method will initiate a seek so that - * the radio is always on a valid radio station. + * Delegates to the {@link RadioDisplayController} to highlight the radio band. */ - private void maybeTuneToStoredRadioChannel() { - int storedChannel = mRadioStorage.getStoredRadioChannel(mCurrentRadioBand); - - if (storedChannel != RadioStorage.INVALID_RADIO_CHANNEL) { - Log.i(TAG, "Restoring stored program: " + storedChannel); - tune(ProgramSelectorExt.createAmFmSelector(storedChannel)); - } else { - Log.i(TAG, "No stored program, seeking forward to not play static"); - try { - mRadioManager.seekForward(); - } catch (RemoteException e) { - Log.e(TAG, "Couldn't seek forward", e); - } - } - } - - /** - * Delegates to the {@link RadioDisplayController} to highlight the radio band that matches - * up to {@link #mCurrentRadioBand}. - */ - private void updateAmFmDisplayState() { - switch (mCurrentRadioBand) { + private void updateAmFmDisplayState(int band) { + switch (band) { case RadioManager.BAND_FM: mRadioDisplayController.setChannelBand(mFmBandString); break; @@ -395,8 +345,7 @@ public class RadioController implements RadioStorage.PresetsChangeListener { mCurrentlyDisplayedChannel = 0; mRadioDisplayController.setChannelNumber(""); - mCurrentRadioBand = RadioStorage.INVALID_RADIO_BAND; - updateAmFmDisplayState(); + updateAmFmDisplayState(RadioStorage.INVALID_RADIO_BAND); return; } @@ -407,8 +356,7 @@ public class RadioController implements RadioStorage.PresetsChangeListener { boolean isAm = ProgramSelectorExt.isAmFrequency(freq); int band = isAm ? RadioManager.BAND_AM : RadioManager.BAND_FM; - mCurrentRadioBand = band; - updateAmFmDisplayState(); + updateAmFmDisplayState(band); if (isAm && wasAm || !isAm && wasFm) { mAnimator.setIntValues((int)mCurrentlyDisplayedChannel, (int)freq); @@ -494,13 +442,6 @@ public class RadioController implements RadioStorage.PresetsChangeListener { } /** - * Sets the internal {@link #mCurrentRadioBand} to be the given radio band. - */ - private void setCurrentRadioBand(int radioBand) { - mCurrentRadioBand = radioBand; - } - - /** * Closes any active {@link RadioTuner}s and releases audio focus. */ private void close() { @@ -573,8 +514,6 @@ public class RadioController implements RadioStorage.PresetsChangeListener { mRadioDisplayController.setChannelIsPreset(mRadioStorage.isPreset(sel)); - mRadioStorage.storeRadioChannel(mCurrentRadioBand, info.getChannel()); - // Notify that the current radio station has changed. if (mProgramInfoChangeListeners != null) { for (ProgramInfoChangeListener listener : mProgramInfoChangeListeners) { @@ -584,16 +523,6 @@ public class RadioController implements RadioStorage.PresetsChangeListener { } @Override - public void onRadioBandChanged(int radioBand) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "onRadioBandChanged: " + radioBand); - } - - setCurrentRadioBand(radioBand); - updateAmFmDisplayState(); - } - - @Override public void onRadioMuteChanged(boolean isMuted) { mRadioDisplayController.setPlayPauseButtonState(isMuted); } @@ -718,12 +647,6 @@ public class RadioController implements RadioStorage.PresetsChangeListener { mRadioManager.addRadioTunerCallback(mCallback); - int radioBand = mRadioStorage.getStoredRadioBand(); - - // Upon successful connection, open the radio. - openRadioBand(radioBand); - maybeTuneToStoredRadioChannel(); - // Notify listeners for (RadioServiceConnectionListener listener : mRadioServiceConnectionListeners) { listener.onRadioServiceConnected(); diff --git a/src/com/android/car/radio/RadioService.java b/src/com/android/car/radio/RadioService.java index 3683970..fc5a9ad 100644 --- a/src/com/android/car/radio/RadioService.java +++ b/src/com/android/car/radio/RadioService.java @@ -34,6 +34,7 @@ import android.util.Log; import com.android.car.broadcastradio.support.Program; import com.android.car.broadcastradio.support.media.BrowseTree; +import com.android.car.broadcastradio.support.platform.ProgramSelectorExt; import com.android.car.radio.audio.AudioStreamController; import com.android.car.radio.audio.IPlaybackStateListener; import com.android.car.radio.media.TunerSession; @@ -80,7 +81,6 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback private boolean mRadioSuccessfullyInitialized; private ProgramInfo mCurrentProgram; - private int mCurrentRadioBand = RadioManager.BAND_FM; private RadioManagerExt mRadioManager; private ImageMemoryCache mImageCache; @@ -139,7 +139,7 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback mAudioStreamController.addPlaybackStateListener(this); - openRadioBandInternal(mCurrentRadioBand); + openRadioBandInternal(mRadioStorage.getStoredRadioBand()); mRadioSuccessfullyInitialized = true; } @@ -176,7 +176,6 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback private int openRadioBandInternal(int radioBand) { if (!mAudioStreamController.requestMuted(false)) return RadioManager.STATUS_ERROR; - mCurrentRadioBand = radioBand; if (mRadioTuner == null) { mRadioTuner = mRadioManager.openSession(mInternalRadioTunerCallback, null); mProgramList = mRadioTuner.getDynamicProgramList(null); @@ -191,9 +190,31 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback // opened. mReOpenRadioTunerCount = 0; + tuneToDefault(radioBand); + return RadioManager.STATUS_OK; } + private void tuneToDefault(int band) { + if (!mAudioStreamController.preparePlayback(Optional.empty())) return; + + long storedChannel = mRadioStorage.getStoredRadioChannel(band); + if (storedChannel != RadioStorage.INVALID_RADIO_CHANNEL) { + Log.i(TAG, "Restoring stored program: " + storedChannel); + mRadioTuner.tune(ProgramSelectorExt.createAmFmSelector(storedChannel)); + } else { + Log.i(TAG, "No stored program, seeking forward to not play static"); + + // TODO(b/80500464): don't hardcode, pull from tuner config + long lastChannel; + if (band == RadioManager.BAND_AM) lastChannel = 1620; + else lastChannel = 108000; + mRadioTuner.tune(ProgramSelectorExt.createAmFmSelector(lastChannel)); + + mRadioTuner.scan(RadioTuner.DIRECTION_UP, true); + } + } + /* TODO(b/73950974): remove onRadioMuteChanged from IRadioCallback, * use IPlaybackStateListener directly. */ @@ -256,7 +277,7 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback if (!mAudioStreamController.preparePlayback(Optional.of(true))) return; if (mRadioTuner == null) { - int radioStatus = openRadioBandInternal(mCurrentRadioBand); + int radioStatus = openRadioBandInternal(mRadioStorage.getStoredRadioBand()); if (radioStatus == RadioManager.STATUS_ERROR) { return; } @@ -274,7 +295,7 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback if (!mAudioStreamController.preparePlayback(Optional.of(false))) return; if (mRadioTuner == null) { - int radioStatus = openRadioBandInternal(mCurrentRadioBand); + int radioStatus = openRadioBandInternal(mRadioStorage.getStoredRadioBand()); if (radioStatus == RadioManager.STATUS_ERROR) { return; } @@ -321,25 +342,9 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback mRadioStorage.removePreset(sel); } - /** - * Opens the radio for the given band. - * - * @param radioBand One of {@link RadioManager#BAND_FM}, {@link RadioManager#BAND_AM}, - * {@link RadioManager#BAND_FM_HD} or {@link RadioManager#BAND_AM_HD}. - * @return {@link RadioManager#STATUS_OK} if successful; otherwise, - * {@link RadioManager#STATUS_ERROR}. - */ @Override - public int openRadioBand(int radioBand) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "openRadioBand() for band: " + radioBand); - } - - if (mRadioManager == null) { - return RadioManager.STATUS_ERROR; - } - - return openRadioBandInternal(radioBand); + public void switchBand(int radioBand) { + tuneToDefault(radioBand); } /** @@ -407,6 +412,7 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback mCurrentProgram = Objects.requireNonNull(info); mMediaSession.notifyProgramInfoChanged(info); mAudioStreamController.notifyProgramInfoChanged(); + mRadioStorage.storeRadioChannel(info.getSelector()); for (IRadioCallback callback : mRadioTunerCallbacks) { try { @@ -418,31 +424,6 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback } @Override - public void onConfigurationChanged(RadioManager.BandConfig config) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "onConfigurationChanged(): config: " + config); - } - - if (config != null) { - mCurrentRadioBand = config.getType(); - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "onConfigurationChanged(): config type: " + mCurrentRadioBand); - } - - } - - try { - for (IRadioCallback callback : mRadioTunerCallbacks) { - callback.onRadioBandChanged(mCurrentRadioBand); - } - } catch (RemoteException e) { - Log.e(TAG, "onConfigurationChanged(); " - + "Failed to notify IRadioCallbacks: " + e.getMessage()); - } - } - - @Override public void onError(int status) { Log.e(TAG, "onError(); status: " + status); @@ -480,12 +461,13 @@ public class RadioService extends MediaBrowserServiceCompat implements IPlayback } if (mRadioTuner == null) { - openRadioBandInternal(mCurrentRadioBand); + openRadioBandInternal(mRadioStorage.getStoredRadioBand()); } } } - private final Runnable mOpenRadioTunerRunnable = () -> openRadioBandInternal(mCurrentRadioBand); + private final Runnable mOpenRadioTunerRunnable = + () -> openRadioBandInternal(mRadioStorage.getStoredRadioBand()); @Override public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundle rootHints) { diff --git a/src/com/android/car/radio/service/IRadioCallback.aidl b/src/com/android/car/radio/service/IRadioCallback.aidl index 0e79747..d1ecf93 100644 --- a/src/com/android/car/radio/service/IRadioCallback.aidl +++ b/src/com/android/car/radio/service/IRadioCallback.aidl @@ -31,13 +31,6 @@ oneway interface IRadioCallback { void onCurrentProgramInfoChanged(in RadioManager.ProgramInfo info); /** - * Called when the current radio band has changed. - * - * @param radioBand A radio band value from {@link RadioManager}. - */ - void onRadioBandChanged(int radioBand); - - /** * Called when the mute state of the radio has changed. * * @param isMuted {@code true} if the radio is muted. diff --git a/src/com/android/car/radio/service/IRadioManager.aidl b/src/com/android/car/radio/service/IRadioManager.aidl index d976e52..ba005ba 100644 --- a/src/com/android/car/radio/service/IRadioManager.aidl +++ b/src/com/android/car/radio/service/IRadioManager.aidl @@ -74,14 +74,13 @@ interface IRadioManager { void removeFavorite(in ProgramSelector sel); /** - * Opens the radio for the given band. + * Switches radio band. * - * @param radioBand One of {@link RadioManager#BAND_FM}, {@link RadioManager#BAND_AM}, - * {@link RadioManager#BAND_FM_HD} or {@link RadioManager#BAND_AM_HD}. - * @return {@link RadioManager#STATUS_OK} if successful; otherwise, - * {@link RadioManager#STATUS_ERROR}. + * Usually, this means tuning to the recently listened program on a given band. + * + * @param radioBand One of {@link RadioManager#BAND_FM}, {@link RadioManager#BAND_AM}. */ - int openRadioBand(int radioBand); + void switchBand(int radioBand); /** * Adds the given {@link IRadioCallback} to be notified of any radio metadata changes. diff --git a/src/com/android/car/radio/storage/RadioStorage.java b/src/com/android/car/radio/storage/RadioStorage.java index 732ef7f..b77a64c 100644 --- a/src/com/android/car/radio/storage/RadioStorage.java +++ b/src/com/android/car/radio/storage/RadioStorage.java @@ -27,6 +27,7 @@ import android.os.AsyncTask; import android.util.Log; import com.android.car.broadcastradio.support.Program; +import com.android.car.radio.utils.ProgramSelectorUtils; import java.util.ArrayList; import java.util.HashMap; @@ -164,31 +165,16 @@ public class RadioStorage { } /** - * Returns the stored radio band that was set in {@link #storeRadioBand(int)}. If a radio band + * Returns the stored radio band that was set in {@link #storeRadioChannel}. If a radio band * has not previously been stored, then {@link RadioManager#BAND_FM} is returned. * - * @return One of {@link RadioManager#BAND_FM}, {@link RadioManager#BAND_AM}, - * {@link RadioManager#BAND_FM_HD} or {@link RadioManager#BAND_AM_HD}. + * @return One of {@link RadioManager#BAND_FM} or {@link RadioManager#BAND_AM}. */ public int getStoredRadioBand() { - // No need to verify that the returned value is one of AM_BAND or FM_BAND because this is - // done in storeRadioBand(int). return sSharedPref.getInt(PREF_KEY_RADIO_BAND, RadioManager.BAND_FM); } /** - * Stores a radio band for later retrieval via {@link #getStoredRadioBand()}. - */ - public void storeRadioBand(int radioBand) { - // Ensure that an incorrect radio band is not stored. Currently only FM and AM supported. - if (radioBand != RadioManager.BAND_FM && radioBand != RadioManager.BAND_AM) { - return; - } - - sSharedPref.edit().putInt(PREF_KEY_RADIO_BAND, radioBand).apply(); - } - - /** * Returns the stored radio channel that was set in {@link #storeRadioChannel(int, int)}. If a * radio channel for the given band has not been previously stored, then * {@link #INVALID_RADIO_CHANNEL} is returned. @@ -196,13 +182,13 @@ public class RadioStorage { * @param band One of the BAND_* values from {@link RadioManager}. For example, * {@link RadioManager#BAND_AM}. */ - public int getStoredRadioChannel(int band) { + public long getStoredRadioChannel(int band) { switch (band) { case RadioManager.BAND_AM: - return sSharedPref.getInt(PREF_KEY_RADIO_CHANNEL_AM, INVALID_RADIO_CHANNEL); + return sSharedPref.getLong(PREF_KEY_RADIO_CHANNEL_AM, INVALID_RADIO_CHANNEL); case RadioManager.BAND_FM: - return sSharedPref.getInt(PREF_KEY_RADIO_CHANNEL_FM, INVALID_RADIO_CHANNEL); + return sSharedPref.getLong(PREF_KEY_RADIO_CHANNEL_FM, INVALID_RADIO_CHANNEL); default: return INVALID_RADIO_CHANNEL; @@ -213,28 +199,28 @@ public class RadioStorage { * Stores a radio channel (i.e. the radio frequency) for a particular band so it can be later * retrieved via {@link #getStoredRadioChannel(int band)}. */ - public void storeRadioChannel(int band, int channel) { + public void storeRadioChannel(@NonNull ProgramSelector sel) { if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, String.format("storeRadioChannel(); band: %s, channel %s", band, channel)); - } - - if (channel <= 0) { - return; + Log.d(TAG, "storeRadioChannel(" + sel + ")"); } // TODO(b/73950974): don't store if it's already the same - switch (band) { - case RadioManager.BAND_AM: - sSharedPref.edit().putInt(PREF_KEY_RADIO_CHANNEL_AM, channel).apply(); - break; - case RadioManager.BAND_FM: - sSharedPref.edit().putInt(PREF_KEY_RADIO_CHANNEL_FM, channel).apply(); - break; + int band = ProgramSelectorUtils.getRadioBand(sel); + if (band != RadioManager.BAND_AM && band != RadioManager.BAND_FM) return; - default: - Log.w(TAG, "Attempting to store channel for invalid band: " + band); + SharedPreferences.Editor editor = sSharedPref.edit(); + editor.putInt(PREF_KEY_RADIO_BAND, band); + + long freq = sel.getFirstId(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY); + if (band == RadioManager.BAND_AM) { + editor.putLong(PREF_KEY_RADIO_CHANNEL_AM, freq); + } + if (band == RadioManager.BAND_FM) { + editor.putLong(PREF_KEY_RADIO_CHANNEL_FM, freq); } + + editor.apply(); } /** diff --git a/src/com/android/car/radio/utils/ProgramSelectorUtils.java b/src/com/android/car/radio/utils/ProgramSelectorUtils.java new file mode 100644 index 0000000..c1d10f4 --- /dev/null +++ b/src/com/android/car/radio/utils/ProgramSelectorUtils.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.car.radio.utils; + +import android.annotation.NonNull; +import android.hardware.radio.ProgramSelector; +import android.hardware.radio.RadioManager; + +import com.android.car.broadcastradio.support.platform.ProgramSelectorExt; +import com.android.car.radio.storage.RadioStorage; + +/** + * Helper methods for android.hardware.radio.ProgramSelector. + * + * Most probably, this code will end up refactored out, less likely pushed to the platform. + */ +public class ProgramSelectorUtils { + /** + * Returns AM/FM band for a given ProgramSelector. + * + * @param sel ProgramSelector to check. + * @return {@link RadioManager#BAND_FM} if sel is FM program, + * {@link RadioManager#BAND_AM} if sel is AM program, + * {@link RadioStorage#INVALID_RADIO_BAND} otherwise. + */ + public static int getRadioBand(@NonNull ProgramSelector sel) { + if (!ProgramSelectorExt.isAmFmProgram(sel)) return RadioStorage.INVALID_RADIO_BAND; + if (!ProgramSelectorExt.hasId(sel, ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY)) { + return RadioStorage.INVALID_RADIO_BAND; + } + + long freq = sel.getFirstId(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY); + if (ProgramSelectorExt.isAmFrequency(freq)) return RadioManager.BAND_AM; + if (ProgramSelectorExt.isFmFrequency(freq)) return RadioManager.BAND_FM; + + return RadioStorage.INVALID_RADIO_BAND; + } +} |
