| /* |
| * Copyright (C) 2016 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; |
| |
| import android.content.Context; |
| import android.hardware.radio.RadioManager; |
| import android.support.annotation.ColorInt; |
| import android.support.annotation.NonNull; |
| import com.android.car.radio.service.RadioStation; |
| |
| /** |
| * A class that will take a {@link RadioStation} and return its corresponding color. The colors |
| * for different channels can be found on go/aae-ncar-por in the radio section. |
| */ |
| public class RadioChannelColorMapper { |
| // AM values range from 530 - 1700. The following two values represent where this range is cut |
| // into thirds. |
| private static final int AM_LOW_THIRD_RANGE = 920; |
| private static final int AM_HIGH_THIRD_RANGE = 1210; |
| |
| // FM values range from 87.9 - 108.1 kHz. The following two values represent where this range |
| // is cut into thirds. |
| private static final int FM_LOW_THIRD_RANGE = 94600; |
| private static final int FM_HIGH_THIRD_RANGE = 101300; |
| |
| @ColorInt private final int mDefaultColor; |
| @ColorInt private final int mAmRange1Color; |
| @ColorInt private final int mAmRange2Color; |
| @ColorInt private final int mAmRange3Color; |
| @ColorInt private final int mFmRange1Color; |
| @ColorInt private final int mFmRange2Color; |
| @ColorInt private final int mFmRange3Color; |
| |
| public static RadioChannelColorMapper getInstance(Context context) { |
| return new RadioChannelColorMapper(context); |
| } |
| |
| private RadioChannelColorMapper(Context context) { |
| mDefaultColor = context.getColor(R.color.car_radio_bg_color); |
| mAmRange1Color = context.getColor(R.color.am_range_1_bg_color); |
| mAmRange2Color = context.getColor(R.color.am_range_2_bg_color); |
| mAmRange3Color = context.getColor(R.color.am_range_3_bg_color); |
| mFmRange1Color = context.getColor(R.color.fm_range_1_bg_color); |
| mFmRange2Color = context.getColor(R.color.fm_range_2_bg_color); |
| mFmRange3Color = context.getColor(R.color.fm_range_3_bg_color); |
| } |
| |
| /** |
| * Returns the default color for the radio. |
| */ |
| @ColorInt |
| public int getDefaultColor() { |
| return mDefaultColor; |
| } |
| |
| /** |
| * Convenience method for returning a color based on a {@link RadioStation}. |
| * |
| * @see #getColorForStation(int, int) |
| */ |
| @ColorInt |
| public int getColorForStation(@NonNull RadioStation radioStation) { |
| return getColorForStation(radioStation.getRadioBand(), radioStation.getChannelNumber()); |
| } |
| |
| /** |
| * Returns the color that should be used for the given radio band and channel. If a match cannot |
| * be made, then {@link #mDefaultColor} is returned. |
| * |
| * @param band One of {@link RadioManager}'s band values. (e.g. {@link RadioManager#BAND_AM}. |
| * @param channel The channel frequency in Hertz. |
| */ |
| @ColorInt |
| public int getColorForStation(int band, int channel) { |
| switch (band) { |
| case RadioManager.BAND_AM: |
| if (channel < AM_LOW_THIRD_RANGE) { |
| return mAmRange1Color; |
| } else if (channel > AM_HIGH_THIRD_RANGE) { |
| return mAmRange3Color; |
| } |
| |
| return mAmRange2Color; |
| |
| case RadioManager.BAND_FM: |
| if (channel < FM_LOW_THIRD_RANGE) { |
| return mFmRange1Color; |
| } else if (channel > FM_HIGH_THIRD_RANGE) { |
| return mFmRange3Color; |
| } |
| |
| return mFmRange2Color; |
| |
| default: |
| return mDefaultColor; |
| } |
| } |
| } |