summaryrefslogtreecommitdiff
path: root/car-broadcastradio-support/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'car-broadcastradio-support/src/com')
-rw-r--r--car-broadcastradio-support/src/com/android/car/broadcastradio/support/Program.java5
-rw-r--r--car-broadcastradio-support/src/com/android/car/broadcastradio/support/media/BrowseTree.java46
-rw-r--r--car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ImageResolver.java3
-rw-r--r--car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramInfoExt.java89
-rw-r--r--car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExt.java18
-rw-r--r--car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/RadioMetadataExt.java13
6 files changed, 96 insertions, 78 deletions
diff --git a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/Program.java b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/Program.java
index af57c90..21f3cdf 100644
--- a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/Program.java
+++ b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/Program.java
@@ -16,14 +16,15 @@
package com.android.car.broadcastradio.support;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.graphics.Bitmap;
import android.hardware.radio.ProgramSelector;
import android.hardware.radio.RadioManager.ProgramInfo;
import android.os.Parcel;
import android.os.Parcelable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import com.android.car.broadcastradio.support.platform.ProgramInfoExt;
import java.util.Objects;
diff --git a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/media/BrowseTree.java b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/media/BrowseTree.java
index 39d23dc..4d6624b 100644
--- a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/media/BrowseTree.java
+++ b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/media/BrowseTree.java
@@ -16,23 +16,24 @@
package com.android.car.broadcastradio.support.media;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.StringRes;
import android.graphics.Bitmap;
import android.hardware.radio.ProgramList;
import android.hardware.radio.ProgramSelector;
import android.hardware.radio.RadioManager;
import android.hardware.radio.RadioManager.BandDescriptor;
import android.hardware.radio.RadioMetadata;
-import android.media.MediaDescription;
-import android.media.browse.MediaBrowser.MediaItem;
import android.os.Bundle;
-import android.service.media.MediaBrowserService;
-import android.service.media.MediaBrowserService.BrowserRoot;
-import android.service.media.MediaBrowserService.Result;
+import android.support.v4.media.MediaBrowserCompat.MediaItem;
+import android.support.v4.media.MediaDescriptionCompat;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.media.MediaBrowserServiceCompat;
+import androidx.media.MediaBrowserServiceCompat.BrowserRoot;
+import androidx.media.MediaBrowserServiceCompat.Result;
+
import com.android.car.broadcastradio.support.Program;
import com.android.car.broadcastradio.support.R;
import com.android.car.broadcastradio.support.platform.ImageResolver;
@@ -133,7 +134,7 @@ public class BrowseTree {
private final BrowserRoot mRoot = new BrowserRoot(NODE_ROOT, null);
private final Object mLock = new Object();
- private final @NonNull MediaBrowserService mBrowserService;
+ private final @NonNull MediaBrowserServiceCompat mBrowserService;
private final @Nullable ImageResolver mImageResolver;
private List<MediaItem> mRootChildren;
@@ -155,7 +156,7 @@ public class BrowseTree {
@Nullable Set<Program> mFavorites;
@Nullable private List<MediaItem> mFavoritesCache;
- public BrowseTree(@NonNull MediaBrowserService browserService,
+ public BrowseTree(@NonNull MediaBrowserServiceCompat browserService,
@Nullable ImageResolver imageResolver) {
mBrowserService = Objects.requireNonNull(browserService);
mImageResolver = imageResolver;
@@ -165,9 +166,10 @@ public class BrowseTree {
return mRoot;
}
- private static MediaItem createChild(MediaDescription.Builder descBuilder,
- String mediaId, String title, ProgramSelector sel, Bitmap icon) {
- MediaDescription desc = descBuilder
+ private static MediaItem createChild(
+ MediaDescriptionCompat.Builder descBuilder, String mediaId, String title,
+ ProgramSelector sel, Bitmap icon) {
+ MediaDescriptionCompat desc = descBuilder
.setMediaId(mediaId)
.setMediaUri(ProgramSelectorExt.toUri(sel))
.setTitle(title)
@@ -176,13 +178,13 @@ public class BrowseTree {
return new MediaItem(desc, MediaItem.FLAG_PLAYABLE);
}
- private static MediaItem createFolder(MediaDescription.Builder descBuilder, String mediaId,
- String title, boolean isBrowseable, boolean isPlayable, long folderType,
- Bundle extras) {
+ private static MediaItem createFolder(
+ MediaDescriptionCompat.Builder descBuilder, String mediaId, String title,
+ boolean isBrowseable, boolean isPlayable, long folderType, Bundle extras) {
if (extras == null) extras = new Bundle();
extras.putLong(EXTRA_BCRADIO_FOLDER_TYPE, folderType);
- MediaDescription desc = descBuilder
+ MediaDescriptionCompat desc = descBuilder
.setMediaId(mediaId).setTitle(title).setExtras(extras).build();
int flags = 0;
@@ -273,7 +275,7 @@ public class BrowseTree {
if (mProgramListCache != null) return mProgramListCache;
mProgramListCache = new ArrayList<>();
- MediaDescription.Builder dbld = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder dbld = new MediaDescriptionCompat.Builder();
for (RadioManager.ProgramInfo program : mProgramListSnapshot) {
ProgramSelector sel = program.getSelector();
@@ -330,7 +332,7 @@ public class BrowseTree {
if (mFavoritesCache != null) return mFavoritesCache;
mFavoritesCache = new ArrayList<>();
- MediaDescription.Builder dbld = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder dbld = new MediaDescriptionCompat.Builder();
for (Program fav : mFavorites) {
ProgramSelector sel = fav.getSelector();
@@ -348,7 +350,7 @@ public class BrowseTree {
if (mRootChildren != null) return mRootChildren;
mRootChildren = new ArrayList<>();
- MediaDescription.Builder dbld = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder dbld = new MediaDescriptionCompat.Builder();
if (mProgramList != null) {
mRootChildren.add(createFolder(dbld, NODE_PROGRAMS,
mBrowserService.getString(R.string.program_list_text),
@@ -409,7 +411,7 @@ public class BrowseTree {
if (isEmpty()) return null;
Bundle extras = new Bundle();
extras.putString(EXTRA_BCRADIO_BAND_NAME_EN, mBandNameEn);
- return createFolder(new MediaDescription.Builder(), mMediaId,
+ return createFolder(new MediaDescriptionCompat.Builder(), mMediaId,
mBrowserService.getString(mBandName), true, true, BCRADIO_FOLDER_TYPE_BAND,
extras);
}
@@ -420,7 +422,7 @@ public class BrowseTree {
if (isEmpty()) return null;
mChannels = new ArrayList<>();
- MediaDescription.Builder dbld = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder dbld = new MediaDescriptionCompat.Builder();
for (BandDescriptor band : mBands) {
final int lowerLimit = band.getLowerLimit();
diff --git a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ImageResolver.java b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ImageResolver.java
index 5538a58..fd14045 100644
--- a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ImageResolver.java
+++ b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ImageResolver.java
@@ -16,9 +16,10 @@
package com.android.car.broadcastradio.support.platform;
-import android.annotation.Nullable;
import android.graphics.Bitmap;
+import androidx.annotation.Nullable;
+
/**
* Resolves metadata images.
*/
diff --git a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramInfoExt.java b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramInfoExt.java
index c96521a..a48dec2 100644
--- a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramInfoExt.java
+++ b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramInfoExt.java
@@ -16,18 +16,20 @@
package com.android.car.broadcastradio.support.platform;
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.graphics.Bitmap;
import android.hardware.radio.ProgramSelector;
import android.hardware.radio.RadioManager;
import android.hardware.radio.RadioManager.ProgramInfo;
import android.hardware.radio.RadioMetadata;
-import android.media.MediaMetadata;
-import android.media.Rating;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.RatingCompat;
+import android.support.v4.media.session.MediaSessionCompat;
import android.util.Log;
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Comparator;
@@ -50,9 +52,9 @@ public class ProgramInfoExt {
/**
* Flags to control how to fetch program name with {@link #getProgramName}.
*
- * Lower 16 bits are reserved for {@link ProgramSelectorExt#NameFlag}.
+ * Lower 16 bits are reserved for {@link ProgramSelectorExt.NameFlag}.
*/
- @IntDef(prefix = { "NAME_" }, flag = true, value = {
+ @IntDef(flag = true, value = {
ProgramSelectorExt.NAME_NO_MODULATION,
ProgramSelectorExt.NAME_MODULATION_ONLY,
NAME_NO_CHANNEL_FALLBACK,
@@ -128,7 +130,7 @@ public class ProgramInfoExt {
}
/**
- * Proposed reimplementation of {@link RadioManager#ProgramInfo#getMetadata}.
+ * Proposed reimplementation of {@link RadioManager.ProgramInfo#getMetadata}.
*
* As opposed to the original implementation, it never returns null.
*/
@@ -142,35 +144,35 @@ public class ProgramInfoExt {
}
/**
- * Converts {@link ProgramInfo} to {@link MediaMetadata} for displaying.
+ * Converts {@link ProgramInfo} to {@link MediaMetadataCompat} for displaying.
*
* <p>This method is meant to be used for displaying the currently playing station in
- * {@link MediaSession}, only a subset of keys populated in {@link ProgramInfo#toMediaMetadata}
+ * {@link MediaSessionCompat}, only a subset of keys populated in {@link #toMediaMetadata}
* will be populated in this method.
*
* <ul>
- * The following keys will be populated in the {@link MediaMetadata}:
- * <li>{@link MediaMetadata#METADATA_KEY_DISPLAY_TITLE}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_DISPLAY_SUBTITLE}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_ALBUM_ART}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_USER_RATING}</li>
+ * The following keys will be populated in the {@link MediaMetadataCompat}:
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_DISPLAY_TITLE}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_DISPLAY_SUBTITLE}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_ALBUM_ART}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_USER_RATING}</li>
* <ul/>
*
* @param info {@link ProgramInfo} to convert
* @param isFavorite {@code true}, if a given program is a favorite
* @param imageResolver metadata images resolver/cache
* @param programNameOrder order of keys to look for program name in {@link ProgramInfo}
- * @return {@link MediaMetadata} object
+ * @return {@link MediaMetadataCompat} object
*/
@NonNull
- public static MediaMetadata toMediaDisplayMetadata(@NonNull ProgramInfo info,
+ public static MediaMetadataCompat toMediaDisplayMetadata(@NonNull ProgramInfo info,
boolean isFavorite, @NonNull ImageResolver imageResolver,
@NonNull String[] programNameOrder) {
Objects.requireNonNull(info, "info can not be null.");
Objects.requireNonNull(imageResolver, "imageResolver can not be null.");
Objects.requireNonNull(programNameOrder, "programNameOrder can not be null.");
- MediaMetadata.Builder bld = new MediaMetadata.Builder();
+ MediaMetadataCompat.Builder bld = new MediaMetadataCompat.Builder();
ProgramSelector selector;
ProgramSelector.Identifier logicallyTunedTo = info.getLogicallyTunedTo();
@@ -181,58 +183,60 @@ public class ProgramInfoExt {
selector = info.getSelector();
}
String displayTitle = ProgramSelectorExt.getDisplayName(selector, info.getChannel());
- bld.putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, displayTitle);
+ bld.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, displayTitle);
String subtitle = getProgramName(info, /* flags= */ 0, programNameOrder);
- bld.putString(MediaMetadata.METADATA_KEY_DISPLAY_SUBTITLE, subtitle);
+ bld.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, subtitle);
Bitmap bm = resolveAlbumArtBitmap(info.getMetadata(), imageResolver);
- if (bm != null) bld.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, bm);
+ if (bm != null) bld.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bm);
- bld.putRating(MediaMetadata.METADATA_KEY_USER_RATING, Rating.newHeartRating(isFavorite));
+ bld.putRating(MediaMetadataCompat.METADATA_KEY_USER_RATING,
+ RatingCompat.newHeartRating(isFavorite));
return bld.build();
}
/**
- * Converts {@link ProgramInfo} to {@link MediaMetadata}.
+ * Converts {@link ProgramInfo} to {@link MediaMetadataCompat}.
*
- * <p>This method is meant to be used for currently playing station in {@link MediaSession}.
+ * <p>This method is meant to be used for currently playing station in
+ * {@link MediaSessionCompat}.
*
* <ul>
- * The following keys will be populated in the {@link MediaMetadata}:
- * <li>{@link MediaMetadata#METADATA_KEY_DISPLAY_TITLE}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_TITLE}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_ARTIST}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_ALBUM}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_DISPLAY_SUBTITLE}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_ALBUM_ART}</li>
- * <li>{@link MediaMetadata#METADATA_KEY_USER_RATING}</li>
+ * The following keys will be populated in the {@link MediaMetadataCompat}:
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_DISPLAY_TITLE}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_TITLE}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_ARTIST}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_ALBUM}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_DISPLAY_SUBTITLE}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_ALBUM_ART}</li>
+ * <li>{@link MediaMetadataCompat#METADATA_KEY_USER_RATING}</li>
* <ul/>
*
* @param info {@link ProgramInfo} to convert
* @param isFavorite {@code true}, if a given program is a favorite
* @param imageResolver metadata images resolver/cache
- * @return {@link MediaMetadata} object
+ * @return {@link MediaMetadataCompat} object
*/
- public static @NonNull MediaMetadata toMediaMetadata(@NonNull ProgramInfo info,
+ public static @NonNull MediaMetadataCompat toMediaMetadata(@NonNull ProgramInfo info,
boolean isFavorite, @Nullable ImageResolver imageResolver) {
- MediaMetadata.Builder bld = new MediaMetadata.Builder();
+ MediaMetadataCompat.Builder bld = new MediaMetadataCompat.Builder();
- bld.putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, getProgramName(info, 0));
+ bld.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, getProgramName(info, 0));
RadioMetadata meta = info.getMetadata();
if (meta != null) {
String title = meta.getString(RadioMetadata.METADATA_KEY_TITLE);
if (title != null) {
- bld.putString(MediaMetadata.METADATA_KEY_TITLE, title);
+ bld.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title);
}
String artist = meta.getString(RadioMetadata.METADATA_KEY_ARTIST);
if (artist != null) {
- bld.putString(MediaMetadata.METADATA_KEY_ARTIST, artist);
+ bld.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist);
}
String album = meta.getString(RadioMetadata.METADATA_KEY_ALBUM);
if (album != null) {
- bld.putString(MediaMetadata.METADATA_KEY_ALBUM, album);
+ bld.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album);
}
if (title != null || artist != null) {
String subtitle;
@@ -243,14 +247,15 @@ public class ProgramInfoExt {
} else {
subtitle = title + TITLE_SEPARATOR + artist;
}
- bld.putString(MediaMetadata.METADATA_KEY_DISPLAY_SUBTITLE, subtitle);
+ bld.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, subtitle);
}
Bitmap bm = resolveAlbumArtBitmap(meta, imageResolver);
- if (bm != null) bld.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, bm);
+ if (bm != null) bld.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bm);
}
- bld.putRating(MediaMetadata.METADATA_KEY_USER_RATING, Rating.newHeartRating(isFavorite));
+ bld.putRating(MediaMetadataCompat.METADATA_KEY_USER_RATING,
+ RatingCompat.newHeartRating(isFavorite));
return bld.build();
}
diff --git a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExt.java b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExt.java
index 555176d..c0a4390 100644
--- a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExt.java
+++ b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExt.java
@@ -16,15 +16,16 @@
package com.android.car.broadcastradio.support.platform;
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.hardware.radio.ProgramSelector;
import android.hardware.radio.ProgramSelector.Identifier;
import android.hardware.radio.RadioManager;
import android.net.Uri;
import android.util.Log;
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.text.DecimalFormat;
@@ -73,9 +74,9 @@ public class ProgramSelectorExt {
/**
* Flags to control how channel values are converted to string with {@link #getDisplayName}.
*
- * Upper 16 bits are reserved for {@link ProgramInfoExt#NameFlag}.
+ * Upper 16 bits are reserved for {@link ProgramInfoExt.NameFlag}.
*/
- @IntDef(prefix = { "NAME_" }, flag = true, value = {
+ @IntDef(flag = true, value = {
NAME_NO_MODULATION,
NAME_MODULATION_ONLY,
})
@@ -113,7 +114,7 @@ public class ProgramSelectorExt {
}
// when pushed to the framework, remove similar code from HAL 2.0 service
- private static @ProgramSelector.ProgramType int identifierToProgramType(
+ private static int identifierToProgramType(
@NonNull Identifier primaryId) {
int idType = primaryId.getType();
switch (idType) {
@@ -230,8 +231,7 @@ public class ProgramSelectorExt {
* @param type identifier type to check for
* @return true, if sel contains any identifier of a given type
*/
- public static boolean hasId(@NonNull ProgramSelector sel,
- @ProgramSelector.IdentifierType int type) {
+ public static boolean hasId(@NonNull ProgramSelector sel, int type) {
try {
sel.getFirstId(type);
return true;
@@ -533,7 +533,7 @@ public class ProgramSelectorExt {
}
public long getStationId() {
- return mValue & 0xFFFFFFFF;
+ return mValue & 0xFFFFFFFFL;
}
public int getSubchannel() {
diff --git a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/RadioMetadataExt.java b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/RadioMetadataExt.java
index e7b6f3b..4192e83 100644
--- a/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/RadioMetadataExt.java
+++ b/car-broadcastradio-support/src/com/android/car/broadcastradio/support/platform/RadioMetadataExt.java
@@ -16,9 +16,13 @@
package com.android.car.broadcastradio.support.platform;
-import android.annotation.NonNull;
+import static android.hardware.radio.RadioMetadata.METADATA_KEY_ART;
+import static android.hardware.radio.RadioMetadata.METADATA_KEY_ICON;
+
import android.hardware.radio.RadioMetadata;
+import androidx.annotation.NonNull;
+
/**
* Proposed extensions to android.hardware.radio.RadioMetadata.
*
@@ -43,7 +47,7 @@ public class RadioMetadataExt {
* deprecation here and jump straight to the correct solution.
*/
public static long getGlobalBitmapId(@NonNull RadioMetadata meta, @NonNull String key) {
- int localId = meta.getBitmapId(key);
+ int localId = getBitmapId(meta, key);
if (localId == 0) return 0;
/* When generating global bitmap ID, we want them to remain stable between sessions
@@ -57,4 +61,9 @@ public class RadioMetadataExt {
*/
return ((long) sModuleId << 32) | localId;
}
+
+ private static int getBitmapId(@NonNull RadioMetadata meta, @NonNull String key) {
+ if (!METADATA_KEY_ICON.equals(key) && !METADATA_KEY_ART.equals(key)) return 0;
+ return meta.getInt(key);
+ }
}