Merge "Implement front-end support for HAL 2.0 metadata." into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
71b71dada7
@@ -2115,8 +2115,15 @@ package android.hardware.radio {
|
||||
field public static final java.lang.String METADATA_KEY_ART = "android.hardware.radio.metadata.ART";
|
||||
field public static final java.lang.String METADATA_KEY_ARTIST = "android.hardware.radio.metadata.ARTIST";
|
||||
field public static final java.lang.String METADATA_KEY_CLOCK = "android.hardware.radio.metadata.CLOCK";
|
||||
field public static final java.lang.String METADATA_KEY_DAB_COMPONENT_NAME = "android.hardware.radio.metadata.DAB_COMPONENT_NAME";
|
||||
field public static final java.lang.String METADATA_KEY_DAB_COMPONENT_NAME_SHORT = "android.hardware.radio.metadata.DAB_COMPONENT_NAME_SHORT";
|
||||
field public static final java.lang.String METADATA_KEY_DAB_ENSEMBLE_NAME = "android.hardware.radio.metadata.DAB_ENSEMBLE_NAME";
|
||||
field public static final java.lang.String METADATA_KEY_DAB_ENSEMBLE_NAME_SHORT = "android.hardware.radio.metadata.DAB_ENSEMBLE_NAME_SHORT";
|
||||
field public static final java.lang.String METADATA_KEY_DAB_SERVICE_NAME = "android.hardware.radio.metadata.DAB_SERVICE_NAME";
|
||||
field public static final java.lang.String METADATA_KEY_DAB_SERVICE_NAME_SHORT = "android.hardware.radio.metadata.DAB_SERVICE_NAME_SHORT";
|
||||
field public static final java.lang.String METADATA_KEY_GENRE = "android.hardware.radio.metadata.GENRE";
|
||||
field public static final java.lang.String METADATA_KEY_ICON = "android.hardware.radio.metadata.ICON";
|
||||
field public static final java.lang.String METADATA_KEY_PROGRAM_NAME = "android.hardware.radio.metadata.PROGRAM_NAME";
|
||||
field public static final java.lang.String METADATA_KEY_RBDS_PTY = "android.hardware.radio.metadata.RBDS_PTY";
|
||||
field public static final java.lang.String METADATA_KEY_RDS_PI = "android.hardware.radio.metadata.RDS_PI";
|
||||
field public static final java.lang.String METADATA_KEY_RDS_PS = "android.hardware.radio.metadata.RDS_PS";
|
||||
|
||||
@@ -96,6 +96,48 @@ public final class RadioMetadata implements Parcelable {
|
||||
*/
|
||||
public static final String METADATA_KEY_CLOCK = "android.hardware.radio.metadata.CLOCK";
|
||||
|
||||
/**
|
||||
* Technology-independent program name (station name).
|
||||
*/
|
||||
public static final String METADATA_KEY_PROGRAM_NAME =
|
||||
"android.hardware.radio.metadata.PROGRAM_NAME";
|
||||
|
||||
/**
|
||||
* DAB ensemble name.
|
||||
*/
|
||||
public static final String METADATA_KEY_DAB_ENSEMBLE_NAME =
|
||||
"android.hardware.radio.metadata.DAB_ENSEMBLE_NAME";
|
||||
|
||||
/**
|
||||
* DAB ensemble name - short version (up to 8 characters).
|
||||
*/
|
||||
public static final String METADATA_KEY_DAB_ENSEMBLE_NAME_SHORT =
|
||||
"android.hardware.radio.metadata.DAB_ENSEMBLE_NAME_SHORT";
|
||||
|
||||
/**
|
||||
* DAB service name.
|
||||
*/
|
||||
public static final String METADATA_KEY_DAB_SERVICE_NAME =
|
||||
"android.hardware.radio.metadata.DAB_SERVICE_NAME";
|
||||
|
||||
/**
|
||||
* DAB service name - short version (up to 8 characters).
|
||||
*/
|
||||
public static final String METADATA_KEY_DAB_SERVICE_NAME_SHORT =
|
||||
"android.hardware.radio.metadata.DAB_SERVICE_NAME_SHORT";
|
||||
|
||||
/**
|
||||
* DAB component name.
|
||||
*/
|
||||
public static final String METADATA_KEY_DAB_COMPONENT_NAME =
|
||||
"android.hardware.radio.metadata.DAB_COMPONENT_NAME";
|
||||
|
||||
/**
|
||||
* DAB component name.
|
||||
*/
|
||||
public static final String METADATA_KEY_DAB_COMPONENT_NAME_SHORT =
|
||||
"android.hardware.radio.metadata.DAB_COMPONENT_NAME_SHORT";
|
||||
|
||||
|
||||
private static final int METADATA_TYPE_INVALID = -1;
|
||||
private static final int METADATA_TYPE_INT = 0;
|
||||
@@ -119,6 +161,13 @@ public final class RadioMetadata implements Parcelable {
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_ICON, METADATA_TYPE_BITMAP);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_ART, METADATA_TYPE_BITMAP);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_CLOCK, METADATA_TYPE_CLOCK);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_PROGRAM_NAME, METADATA_TYPE_TEXT);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_DAB_ENSEMBLE_NAME, METADATA_TYPE_TEXT);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_DAB_ENSEMBLE_NAME_SHORT, METADATA_TYPE_TEXT);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_DAB_SERVICE_NAME, METADATA_TYPE_TEXT);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_DAB_SERVICE_NAME_SHORT, METADATA_TYPE_TEXT);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_DAB_COMPONENT_NAME, METADATA_TYPE_TEXT);
|
||||
METADATA_KEYS_TYPE.put(METADATA_KEY_DAB_COMPONENT_NAME_SHORT, METADATA_TYPE_TEXT);
|
||||
}
|
||||
|
||||
// keep in sync with: system/media/radio/include/system/radio_metadata.h
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.hardware.broadcastradio.V2_0.AmFmRegionConfig;
|
||||
import android.hardware.broadcastradio.V2_0.Announcement;
|
||||
import android.hardware.broadcastradio.V2_0.DabTableEntry;
|
||||
import android.hardware.broadcastradio.V2_0.IdentifierType;
|
||||
import android.hardware.broadcastradio.V2_0.Metadata;
|
||||
import android.hardware.broadcastradio.V2_0.MetadataKey;
|
||||
import android.hardware.broadcastradio.V2_0.ProgramFilter;
|
||||
import android.hardware.broadcastradio.V2_0.ProgramIdentifier;
|
||||
import android.hardware.broadcastradio.V2_0.ProgramInfo;
|
||||
@@ -34,6 +36,7 @@ import android.hardware.broadcastradio.V2_0.VendorKeyValue;
|
||||
import android.hardware.radio.ProgramList;
|
||||
import android.hardware.radio.ProgramSelector;
|
||||
import android.hardware.radio.RadioManager;
|
||||
import android.hardware.radio.RadioMetadata;
|
||||
import android.os.ParcelableException;
|
||||
import android.util.Slog;
|
||||
|
||||
@@ -283,6 +286,77 @@ class Convert {
|
||||
secondaryIds, null);
|
||||
}
|
||||
|
||||
private enum MetadataType {
|
||||
INT, STRING
|
||||
}
|
||||
|
||||
private static class MetadataDef {
|
||||
private MetadataType type;
|
||||
private String key;
|
||||
private MetadataDef(MetadataType type, String key) {
|
||||
this.type = type;
|
||||
this.key = key;
|
||||
}
|
||||
}
|
||||
|
||||
private static final Map<Integer, MetadataDef> metadataKeys;
|
||||
static {
|
||||
metadataKeys = new HashMap<>();
|
||||
metadataKeys.put(MetadataKey.RDS_PS, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_RDS_PS));
|
||||
metadataKeys.put(MetadataKey.RDS_PTY, new MetadataDef(
|
||||
MetadataType.INT, RadioMetadata.METADATA_KEY_RDS_PTY));
|
||||
metadataKeys.put(MetadataKey.RBDS_PTY, new MetadataDef(
|
||||
MetadataType.INT, RadioMetadata.METADATA_KEY_RBDS_PTY));
|
||||
metadataKeys.put(MetadataKey.RDS_RT, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_RDS_RT));
|
||||
metadataKeys.put(MetadataKey.SONG_TITLE, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_TITLE));
|
||||
metadataKeys.put(MetadataKey.SONG_ARTIST, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_ARTIST));
|
||||
metadataKeys.put(MetadataKey.SONG_ALBUM, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_ALBUM));
|
||||
metadataKeys.put(MetadataKey.STATION_ICON, new MetadataDef(
|
||||
MetadataType.INT, RadioMetadata.METADATA_KEY_ICON));
|
||||
metadataKeys.put(MetadataKey.ALBUM_ART, new MetadataDef(
|
||||
MetadataType.INT, RadioMetadata.METADATA_KEY_ART));
|
||||
metadataKeys.put(MetadataKey.PROGRAM_NAME, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_PROGRAM_NAME));
|
||||
metadataKeys.put(MetadataKey.DAB_ENSEMBLE_NAME, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_DAB_ENSEMBLE_NAME));
|
||||
metadataKeys.put(MetadataKey.DAB_ENSEMBLE_NAME_SHORT, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_DAB_ENSEMBLE_NAME_SHORT));
|
||||
metadataKeys.put(MetadataKey.DAB_SERVICE_NAME, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_DAB_SERVICE_NAME));
|
||||
metadataKeys.put(MetadataKey.DAB_SERVICE_NAME_SHORT, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_DAB_SERVICE_NAME_SHORT));
|
||||
metadataKeys.put(MetadataKey.DAB_COMPONENT_NAME, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_DAB_COMPONENT_NAME));
|
||||
metadataKeys.put(MetadataKey.DAB_COMPONENT_NAME_SHORT, new MetadataDef(
|
||||
MetadataType.STRING, RadioMetadata.METADATA_KEY_DAB_COMPONENT_NAME_SHORT));
|
||||
}
|
||||
|
||||
private static @NonNull RadioMetadata metadataFromHal(@NonNull ArrayList<Metadata> meta) {
|
||||
RadioMetadata.Builder builder = new RadioMetadata.Builder();
|
||||
|
||||
for (Metadata entry : meta) {
|
||||
MetadataDef keyDef = metadataKeys.get(entry.key);
|
||||
if (keyDef == null) {
|
||||
Slog.i(TAG, "Ignored unknown metadata entry: " + MetadataKey.toString(entry.key));
|
||||
continue;
|
||||
}
|
||||
if (keyDef.type == MetadataType.STRING) {
|
||||
builder.putString(keyDef.key, entry.stringValue);
|
||||
} else { // MetadataType.INT
|
||||
/* Current java API use 32-bit values for int metadata,
|
||||
* but we might change it in the future */
|
||||
builder.putInt(keyDef.key, (int)entry.intValue);
|
||||
}
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
static @NonNull RadioManager.ProgramInfo programInfoFromHal(@NonNull ProgramInfo info) {
|
||||
Collection<ProgramSelector.Identifier> relatedContent = info.relatedContent.stream().
|
||||
map(id -> Objects.requireNonNull(programIdentifierFromHal(id))).
|
||||
@@ -295,7 +369,7 @@ class Convert {
|
||||
relatedContent,
|
||||
info.infoFlags,
|
||||
info.signalQuality,
|
||||
null, // TODO(b/69860743): metadata
|
||||
metadataFromHal(info.metadata),
|
||||
vendorInfoFromHal(info.vendorInfo)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user