Merge "MediaMetrics: Add typed property keys" into rvc-dev
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
package android.media;
|
package android.media;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.annotation.TestApi;
|
import android.annotation.TestApi;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
@@ -24,6 +25,7 @@ import java.nio.ByteBuffer;
|
|||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MediaMetrics is the Java interface to the MediaMetrics service.
|
* MediaMetrics is the Java interface to the MediaMetrics service.
|
||||||
@@ -49,6 +51,77 @@ public class MediaMetrics {
|
|||||||
// The charset used for encoding Strings to bytes.
|
// The charset used for encoding Strings to bytes.
|
||||||
private static final Charset MEDIAMETRICS_CHARSET = StandardCharsets.UTF_8;
|
private static final Charset MEDIAMETRICS_CHARSET = StandardCharsets.UTF_8;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key interface.
|
||||||
|
*
|
||||||
|
* The presence of this {@code Key} interface on an object allows
|
||||||
|
* it to be used to set metrics.
|
||||||
|
*
|
||||||
|
* @param <T> type of value associated with {@code Key}.
|
||||||
|
*/
|
||||||
|
public interface Key<T> {
|
||||||
|
/**
|
||||||
|
* Returns the internal name of the key.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
String getName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the class type of the associated value.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
Class<T> getValueClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a Key object with the correct interface for MediaMetrics.
|
||||||
|
*
|
||||||
|
* @param name The name of the key.
|
||||||
|
* @param type The class type of the value represented by the key.
|
||||||
|
* @param <T> The type of value.
|
||||||
|
* @return a new key interface.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static <T> Key<T> createKey(@NonNull String name, @NonNull Class<T> type) {
|
||||||
|
// Implementation specific.
|
||||||
|
return new Key<T>() {
|
||||||
|
private final String mName = name;
|
||||||
|
private final Class<T> mType = type;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NonNull
|
||||||
|
public String getName() {
|
||||||
|
return mName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NonNull
|
||||||
|
public Class<T> getValueClass() {
|
||||||
|
return mType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if the name and the type of two objects are the same.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj == this) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(obj instanceof Key)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Key<?> other = (Key<?>) obj;
|
||||||
|
return mName.equals(other.getName()) && mType.equals(other.getValueClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(mName, mType);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item records properties and delivers to the MediaMetrics service
|
* Item records properties and delivers to the MediaMetrics service
|
||||||
*
|
*
|
||||||
@@ -201,6 +274,28 @@ public class MediaMetrics {
|
|||||||
mBuffer.putInt(0); // number of properties (to be later filled in by record()).
|
mBuffer.putInt(0); // number of properties (to be later filled in by record()).
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a metrics typed key
|
||||||
|
* @param key
|
||||||
|
* @param value
|
||||||
|
* @param <T>
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public <T> Item set(@NonNull Key<T> key, @Nullable T value) {
|
||||||
|
if (value instanceof Integer) {
|
||||||
|
putInt(key.getName(), (int) value);
|
||||||
|
} else if (value instanceof Long) {
|
||||||
|
putLong(key.getName(), (long) value);
|
||||||
|
} else if (value instanceof Double) {
|
||||||
|
putDouble(key.getName(), (double) value);
|
||||||
|
} else if (value instanceof String) {
|
||||||
|
putString(key.getName(), (String) value);
|
||||||
|
}
|
||||||
|
// if value is null, etc. no error is raised.
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the property with key to an integer (32 bit) value.
|
* Sets the property with key to an integer (32 bit) value.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user