diff options
author | Live Channels Team <no-reply@google.com> | 2018-04-27 14:17:31 -0700 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2018-05-16 15:55:44 -0700 |
commit | 0b389cbec4b66034a0391cb651c0a26781bf4f04 (patch) | |
tree | fad1d2220e0465256909289790b8196093c4ad02 | |
parent | 3654ae7288c2365c6379ff6e74cdbf0b606c55db (diff) | |
download | TV-0b389cbec4b66034a0391cb651c0a26781bf4f04.tar.gz |
Move needToShowSampleRate and getMultiAudioString from Utils to TvTrackInfoUtils.
PiperOrigin-RevId: 194591872
Change-Id: Ied0a5b3c23d092c8f2b7269424552ea12f0394f1
-rw-r--r-- | src/com/android/tv/MainActivity.java | 8 | ||||
-rw-r--r-- | src/com/android/tv/ui/sidepanel/MultiAudioFragment.java | 7 | ||||
-rw-r--r-- | src/com/android/tv/util/TvTrackInfoUtils.java | 94 | ||||
-rw-r--r-- | src/com/android/tv/util/Utils.java | 87 | ||||
-rw-r--r-- | tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java | 127 |
5 files changed, 104 insertions, 219 deletions
diff --git a/src/com/android/tv/MainActivity.java b/src/com/android/tv/MainActivity.java index dba3acd0..4a33643f 100644 --- a/src/com/android/tv/MainActivity.java +++ b/src/com/android/tv/MainActivity.java @@ -1899,7 +1899,8 @@ public class MainActivity extends Activity selectTrack(TvTrackInfo.TYPE_AUDIO, bestTrack, UNDEFINED_TRACK_INDEX); } else { mTvOptionsManager.onMultiAudioChanged( - Utils.getMultiAudioString(this, bestTrack, false)); + TvTrackInfoUtils + .getMultiAudioString(this, bestTrack, false)); } return; } @@ -2548,7 +2549,10 @@ public class MainActivity extends Activity mTvView.selectTrack(type, track == null ? null : track.getId()); if (type == TvTrackInfo.TYPE_AUDIO) { mTvOptionsManager.onMultiAudioChanged( - track == null ? null : Utils.getMultiAudioString(this, track, false)); + track == null + ? null + : TvTrackInfoUtils + .getMultiAudioString(this, track, false)); } else if (type == TvTrackInfo.TYPE_SUBTITLE) { mTvOptionsManager.onClosedCaptionsChanged(track, trackIndex); } diff --git a/src/com/android/tv/ui/sidepanel/MultiAudioFragment.java b/src/com/android/tv/ui/sidepanel/MultiAudioFragment.java index 03b71c8c..7a65247f 100644 --- a/src/com/android/tv/ui/sidepanel/MultiAudioFragment.java +++ b/src/com/android/tv/ui/sidepanel/MultiAudioFragment.java @@ -20,7 +20,7 @@ import android.media.tv.TvTrackInfo; import android.text.TextUtils; import android.view.KeyEvent; import com.android.tv.R; -import com.android.tv.util.Utils; +import com.android.tv.util.TvTrackInfoUtils; import java.util.ArrayList; import java.util.List; @@ -51,12 +51,13 @@ public class MultiAudioFragment extends SideFragment { List<Item> items = new ArrayList<>(); if (tracks != null) { - boolean needToShowSampleRate = Utils.needToShowSampleRate(getActivity(), tracks); + boolean needToShowSampleRate = TvTrackInfoUtils + .needToShowSampleRate(getActivity(), tracks); int pos = 0; for (final TvTrackInfo track : tracks) { RadioButtonItem item = new MultiAudioOptionItem( - Utils.getMultiAudioString( + TvTrackInfoUtils.getMultiAudioString( getActivity(), track, needToShowSampleRate), track.getId()); if (track.getId().equals(mSelectedTrackId)) { diff --git a/src/com/android/tv/util/TvTrackInfoUtils.java b/src/com/android/tv/util/TvTrackInfoUtils.java index c73a0622..0eeb8894 100644 --- a/src/com/android/tv/util/TvTrackInfoUtils.java +++ b/src/com/android/tv/util/TvTrackInfoUtils.java @@ -15,14 +15,28 @@ */ package com.android.tv.util; +import android.content.Context; import android.media.tv.TvTrackInfo; +import android.text.TextUtils; +import android.util.Log; +import com.android.tv.R; import java.util.Comparator; +import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Objects; +import java.util.Set; /** Static utilities for {@link TvTrackInfo}. */ public class TvTrackInfoUtils { + private static final String TAG = "TvTrackInfoUtils"; + private static final int AUDIO_CHANNEL_NONE = 0; + private static final int AUDIO_CHANNEL_MONO = 1; + private static final int AUDIO_CHANNEL_STEREO = 2; + private static final int AUDIO_CHANNEL_SURROUND_6 = 6; + private static final int AUDIO_CHANNEL_SURROUND_8 = 8; + /** * Compares how closely two {@link android.media.tv.TvTrackInfo}s match {@code language}, {@code * channelCount} and {@code id} in that precedence. @@ -93,5 +107,85 @@ public class TvTrackInfoUtils { return best; } + public static boolean needToShowSampleRate(Context context, List<TvTrackInfo> tracks) { + Set<String> multiAudioStrings = new HashSet<>(); + for (TvTrackInfo track : tracks) { + String multiAudioString = getMultiAudioString(context, track, false); + if (multiAudioStrings.contains(multiAudioString)) { + return true; + } + multiAudioStrings.add(multiAudioString); + } + return false; + } + + public static String getMultiAudioString( + Context context, TvTrackInfo track, boolean showSampleRate) { + if (track.getType() != TvTrackInfo.TYPE_AUDIO) { + throw new IllegalArgumentException("Not an audio track: " + track); + } + String language = context.getString(R.string.multi_audio_unknown_language); + if (!TextUtils.isEmpty(track.getLanguage())) { + language = new Locale(track.getLanguage()).getDisplayName(); + } else { + Log.d(TAG, "No language information found for the audio track: " + track); + } + + StringBuilder metadata = new StringBuilder(); + switch (track.getAudioChannelCount()) { + case AUDIO_CHANNEL_NONE: + break; + case AUDIO_CHANNEL_MONO: + metadata.append(context.getString(R.string.multi_audio_channel_mono)); + break; + case AUDIO_CHANNEL_STEREO: + metadata.append(context.getString(R.string.multi_audio_channel_stereo)); + break; + case AUDIO_CHANNEL_SURROUND_6: + metadata.append(context.getString(R.string.multi_audio_channel_surround_6)); + break; + case AUDIO_CHANNEL_SURROUND_8: + metadata.append(context.getString(R.string.multi_audio_channel_surround_8)); + break; + default: + if (track.getAudioChannelCount() > 0) { + metadata.append( + context.getString( + R.string.multi_audio_channel_suffix, + track.getAudioChannelCount())); + } else { + Log.d( + TAG, + "Invalid audio channel count (" + + track.getAudioChannelCount() + + ") found for the audio track: " + + track); + } + break; + } + if (showSampleRate) { + int sampleRate = track.getAudioSampleRate(); + if (sampleRate > 0) { + if (metadata.length() > 0) { + metadata.append(", "); + } + int integerPart = sampleRate / 1000; + int tenths = (sampleRate % 1000) / 100; + metadata.append(integerPart); + if (tenths != 0) { + metadata.append("."); + metadata.append(tenths); + } + metadata.append("kHz"); + } + } + + if (metadata.length() == 0) { + return language; + } + return context.getString( + R.string.multi_audio_display_string_with_channel, language, metadata.toString()); + } + private TvTrackInfoUtils() {} } diff --git a/src/com/android/tv/util/Utils.java b/src/com/android/tv/util/Utils.java index ed57f1d3..ca1e2112 100644 --- a/src/com/android/tv/util/Utils.java +++ b/src/com/android/tv/util/Utils.java @@ -29,7 +29,6 @@ import android.media.tv.TvContract; import android.media.tv.TvContract.Channels; import android.media.tv.TvContract.Programs.Genres; import android.media.tv.TvInputInfo; -import android.media.tv.TvTrackInfo; import android.net.Uri; import android.os.Looper; import android.preference.PreferenceManager; @@ -99,12 +98,6 @@ public class Utils { private static final int VIDEO_ULTRA_HD_WIDTH = 2048; private static final int VIDEO_ULTRA_HD_HEIGHT = 1536; - private static final int AUDIO_CHANNEL_NONE = 0; - private static final int AUDIO_CHANNEL_MONO = 1; - private static final int AUDIO_CHANNEL_STEREO = 2; - private static final int AUDIO_CHANNEL_SURROUND_6 = 6; - private static final int AUDIO_CHANNEL_SURROUND_8 = 8; - private static final long RECORDING_FAILED_REASON_NONE = 0; private static final long HALF_MINUTE_MS = TimeUnit.SECONDS.toMillis(30); private static final long ONE_DAY_MS = TimeUnit.DAYS.toMillis(1); @@ -587,86 +580,6 @@ public class Utils { return ""; } - public static boolean needToShowSampleRate(Context context, List<TvTrackInfo> tracks) { - Set<String> multiAudioStrings = new HashSet<>(); - for (TvTrackInfo track : tracks) { - String multiAudioString = getMultiAudioString(context, track, false); - if (multiAudioStrings.contains(multiAudioString)) { - return true; - } - multiAudioStrings.add(multiAudioString); - } - return false; - } - - public static String getMultiAudioString( - Context context, TvTrackInfo track, boolean showSampleRate) { - if (track.getType() != TvTrackInfo.TYPE_AUDIO) { - throw new IllegalArgumentException("Not an audio track: " + track); - } - String language = context.getString(R.string.multi_audio_unknown_language); - if (!TextUtils.isEmpty(track.getLanguage())) { - language = new Locale(track.getLanguage()).getDisplayName(); - } else { - Log.d(TAG, "No language information found for the audio track: " + track); - } - - StringBuilder metadata = new StringBuilder(); - switch (track.getAudioChannelCount()) { - case AUDIO_CHANNEL_NONE: - break; - case AUDIO_CHANNEL_MONO: - metadata.append(context.getString(R.string.multi_audio_channel_mono)); - break; - case AUDIO_CHANNEL_STEREO: - metadata.append(context.getString(R.string.multi_audio_channel_stereo)); - break; - case AUDIO_CHANNEL_SURROUND_6: - metadata.append(context.getString(R.string.multi_audio_channel_surround_6)); - break; - case AUDIO_CHANNEL_SURROUND_8: - metadata.append(context.getString(R.string.multi_audio_channel_surround_8)); - break; - default: - if (track.getAudioChannelCount() > 0) { - metadata.append( - context.getString( - R.string.multi_audio_channel_suffix, - track.getAudioChannelCount())); - } else { - Log.d( - TAG, - "Invalid audio channel count (" - + track.getAudioChannelCount() - + ") found for the audio track: " - + track); - } - break; - } - if (showSampleRate) { - int sampleRate = track.getAudioSampleRate(); - if (sampleRate > 0) { - if (metadata.length() > 0) { - metadata.append(", "); - } - int integerPart = sampleRate / 1000; - int tenths = (sampleRate % 1000) / 100; - metadata.append(integerPart); - if (tenths != 0) { - metadata.append("."); - metadata.append(tenths); - } - metadata.append("kHz"); - } - } - - if (metadata.length() == 0) { - return language; - } - return context.getString( - R.string.multi_audio_display_string_with_channel, language, metadata.toString()); - } - public static boolean isEqualLanguage(String lang1, String lang2) { if (lang1 == null) { return lang2 == null; diff --git a/tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java b/tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java deleted file mode 100644 index d84a90d4..00000000 --- a/tests/unit/src/com/android/tv/util/TvTrackInfoUtilsTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2015 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.tv.util; - -import static com.android.tv.util.TvTrackInfoUtils.getBestTrackInfo; -import static com.google.common.truth.Truth.assertWithMessage; - -import android.media.tv.TvTrackInfo; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import com.android.tv.testing.ComparatorTester; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** Tests for {@link com.android.tv.util.TvTrackInfoUtils}. */ -@SmallTest -@RunWith(AndroidJUnit4.class) -public class TvTrackInfoUtilsTest { - private static final String UN_MATCHED_ID = "no matching ID"; - - private static final TvTrackInfo INFO_1_EN_1 = create("1", "en", 1); - - private static final TvTrackInfo INFO_2_EN_5 = create("2", "en", 5); - - private static final TvTrackInfo INFO_3_FR_8 = create("3", "fr", 8); - - private static final TvTrackInfo INFO_4_NULL_2 = create("4", null, 2); - - private static final TvTrackInfo INFO_5_NULL_6 = create("5", null, 6); - - private static TvTrackInfo create(String id, String fr, int audioChannelCount) { - return new TvTrackInfo.Builder(TvTrackInfo.TYPE_AUDIO, id) - .setLanguage(fr) - .setAudioChannelCount(audioChannelCount) - .build(); - } - - private static final List<TvTrackInfo> ALL = - Arrays.asList(INFO_1_EN_1, INFO_2_EN_5, INFO_3_FR_8, INFO_4_NULL_2, INFO_5_NULL_6); - private static final List<TvTrackInfo> NULL_LANGUAGE_TRACKS = - Arrays.asList(INFO_4_NULL_2, INFO_5_NULL_6); - - @Test - public void testGetBestTrackInfo_empty() { - TvTrackInfo result = getBestTrackInfo(Collections.emptyList(), UN_MATCHED_ID, "en", 1); - assertWithMessage("best track ").that(result).isEqualTo(null); - } - - @Test - public void testGetBestTrackInfo_exactMatch() { - TvTrackInfo result = getBestTrackInfo(ALL, "1", "en", 1); - assertWithMessage("best track ").that(result).isEqualTo(INFO_1_EN_1); - } - - @Test - public void testGetBestTrackInfo_langAndChannelCountMatch() { - TvTrackInfo result = getBestTrackInfo(ALL, UN_MATCHED_ID, "en", 5); - assertWithMessage("best track ").that(result).isEqualTo(INFO_2_EN_5); - } - - @Test - public void testGetBestTrackInfo_languageOnlyMatch() { - TvTrackInfo result = getBestTrackInfo(ALL, UN_MATCHED_ID, "fr", 1); - assertWithMessage("best track ").that(result).isEqualTo(INFO_3_FR_8); - } - - @Test - public void testGetBestTrackInfo_channelCountOnlyMatchWithNullLanguage() { - TvTrackInfo result = getBestTrackInfo(ALL, UN_MATCHED_ID, null, 8); - assertWithMessage("best track ").that(result).isEqualTo(INFO_3_FR_8); - } - - @Test - public void testGetBestTrackInfo_noMatches() { - TvTrackInfo result = getBestTrackInfo(ALL, UN_MATCHED_ID, "kr", 1); - assertWithMessage("best track ").that(result).isEqualTo(INFO_1_EN_1); - } - - @Test - public void testGetBestTrackInfo_noMatchesWithNullLanguage() { - TvTrackInfo result = getBestTrackInfo(ALL, UN_MATCHED_ID, null, 0); - assertWithMessage("best track ").that(result).isEqualTo(INFO_1_EN_1); - } - - @Test - public void testGetBestTrackInfo_channelCountAndIdMatch() { - TvTrackInfo result = getBestTrackInfo(NULL_LANGUAGE_TRACKS, "5", null, 6); - assertWithMessage("best track ").that(result).isEqualTo(INFO_5_NULL_6); - } - - @Test - public void testComparator() { - Comparator<TvTrackInfo> comparator = TvTrackInfoUtils.createComparator("1", "en", 1); - ComparatorTester.withoutEqualsTest(comparator) - // lang not match - .addComparableGroup( - create("1", "kr", 1), - create("2", "kr", 2), - create("1", "ja", 1), - create("1", "ch", 1)) - // lang match not count match - .addComparableGroup( - create("2", "en", 2), create("3", "en", 3), create("1", "en", 2)) - // lang and count match - .addComparableGroup(create("2", "en", 1), create("3", "en", 1)) - // all match - .addComparableGroup(create("1", "en", 1), create("1", "en", 1)) - .test(); - } -} |