144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer/* 244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * Copyright (C) 2016 The Android Open Source Project 344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * 444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * Licensed under the Apache License, Version 2.0 (the "License"); 544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * you may not use this file except in compliance with the License. 644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * You may obtain a copy of the License at 744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * 844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * http://www.apache.org/licenses/LICENSE-2.0 944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * 1044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * Unless required by applicable law or agreed to in writing, software 1144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * distributed under the License is distributed on an "AS IS" BASIS, 1244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * See the License for the specific language governing permissions and 1444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * limitations under the License. 1544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer */ 1644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 1744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyerpackage com.android.car.radio; 1844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 1944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyerimport android.content.Context; 2044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyerimport android.hardware.radio.RadioManager; 2144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyerimport com.android.car.radio.service.RadioStation; 2244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 2344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyerimport java.text.DecimalFormat; 2444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyerimport java.util.Locale; 2544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 2644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer/** 2744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * Common formatters for displaying channel numbers for various radio bands. 2844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer */ 2944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyerpublic final class RadioChannelFormatter { 3044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer private static final String FM_CHANNEL_FORMAT = "###.#"; 3144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer private static final String AM_CHANNEL_FORMAT = "####"; 3244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 3344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer private RadioChannelFormatter() {} 3444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 3544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer /** 3644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * The formatter for AM radio stations. 3744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer */ 3844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer public static final DecimalFormat FM_FORMATTER = new DecimalFormat(FM_CHANNEL_FORMAT); 3944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 4044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer /** 4144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * The formatter for FM radio stations. 4244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer */ 4344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer public static final DecimalFormat AM_FORMATTER = new DecimalFormat(AM_CHANNEL_FORMAT); 4444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 4544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer /** 4644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * Convenience method to format a given {@link RadioStation} based on the value in 4744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * {@link RadioStation#getRadioBand()}. If the band is invalid or support for its formatting is 4844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * not available, then an empty String is returned. 4944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * 5044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * @param band One of the band values specified in {@link RadioManager}. For example, 5144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * {@link RadioManager#BAND_FM}. 5244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * @param channelNumber The channel number to format. This value should be in KHz. 5344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * @return A correctly formatted channel number or an empty string if one cannot be formed. 5444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer */ 5544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer public static String formatRadioChannel(int band, int channelNumber) { 5644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer switch (band) { 5744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer case RadioManager.BAND_AM: 5844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer return AM_FORMATTER.format(channelNumber); 5944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 6044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer case RadioManager.BAND_FM: 6144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer // FM channels are displayed in KHz, so divide by 1000. 6244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer return FM_FORMATTER.format((float) channelNumber / 1000); 6344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 6444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer // TODO: Handle formats for AM and FM HD stations. 6544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 6644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer default: 6744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer return ""; 6844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer } 6944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer } 7044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 7144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer /** 7244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * Formats the given band value into a readable String. 7344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * 7444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * @param band One of the band values specified in {@link RadioManager}. For example, 7544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * {@link RadioManager#BAND_FM}. 7644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer * @return The formatted string or an empty string if the band is invalid. 7744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer */ 7844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer public static String formatRadioBand(Context context, int band) { 7944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer String radioBandText; 8044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 8144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer switch (band) { 8244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer case RadioManager.BAND_AM: 8344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer radioBandText = context.getString(R.string.radio_am_text); 8444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer break; 8544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 8644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer case RadioManager.BAND_FM: 8744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer radioBandText = context.getString(R.string.radio_fm_text); 8844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer break; 8944f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 9044f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer // TODO: Handle formats for AM and FM HD stations. 9144f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 9244f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer default: 9344f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer radioBandText = ""; 9444f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer } 9544f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer 9644f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer return radioBandText.toUpperCase(Locale.getDefault()); 9744f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer } 9844f17dab6698b8c5d87672f5df71c471bd4b91a3Rakesh Iyer} 99