mirror of
https://github.com/samsonjs/media.git
synced 2026-03-27 09:45:47 +00:00
Initialising the fields as Integer and then getting a String on compute
time is slow. Instead we directly initialise these fields as String.
Improves the time taken in bundling PlayerInfo further to less than
200ms from ~300ms.
Also modified a test to improve productive coverage.
PiperOrigin-RevId: 500003935
(cherry picked from commit 578f2de48f)
86 lines
3 KiB
Java
86 lines
3 KiB
Java
/*
|
|
* Copyright 2021 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 androidx.media3.common;
|
|
|
|
import static java.lang.annotation.ElementType.TYPE_USE;
|
|
|
|
import android.os.Bundle;
|
|
import androidx.annotation.IntDef;
|
|
import androidx.media3.common.util.UnstableApi;
|
|
import androidx.media3.common.util.Util;
|
|
import java.lang.annotation.Documented;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.lang.annotation.Target;
|
|
|
|
/**
|
|
* A rating for media content. The style of a rating can be one of {@link HeartRating}, {@link
|
|
* PercentageRating}, {@link StarRating}, or {@link ThumbRating}.
|
|
*/
|
|
public abstract class Rating implements Bundleable {
|
|
|
|
/** A float value that denotes the rating is unset. */
|
|
/* package */ static final float RATING_UNSET = -1.0f;
|
|
|
|
// Default package-private constructor to prevent extending Rating class outside this package.
|
|
/* package */ Rating() {}
|
|
|
|
/** Whether the rating exists or not. */
|
|
public abstract boolean isRated();
|
|
|
|
// Bundleable implementation.
|
|
|
|
@Documented
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@Target(TYPE_USE)
|
|
@IntDef({
|
|
RATING_TYPE_UNSET,
|
|
RATING_TYPE_HEART,
|
|
RATING_TYPE_PERCENTAGE,
|
|
RATING_TYPE_STAR,
|
|
RATING_TYPE_THUMB
|
|
})
|
|
/* package */ @interface RatingType {}
|
|
|
|
/* package */ static final int RATING_TYPE_UNSET = -1;
|
|
/* package */ static final int RATING_TYPE_HEART = 0;
|
|
/* package */ static final int RATING_TYPE_PERCENTAGE = 1;
|
|
/* package */ static final int RATING_TYPE_STAR = 2;
|
|
/* package */ static final int RATING_TYPE_THUMB = 3;
|
|
|
|
/* package */ static final String FIELD_RATING_TYPE = Util.intToStringMaxRadix(0);
|
|
|
|
/** Object that can restore a {@link Rating} from a {@link Bundle}. */
|
|
@UnstableApi public static final Creator<Rating> CREATOR = Rating::fromBundle;
|
|
|
|
private static Rating fromBundle(Bundle bundle) {
|
|
@RatingType
|
|
int ratingType = bundle.getInt(FIELD_RATING_TYPE, /* defaultValue= */ RATING_TYPE_UNSET);
|
|
switch (ratingType) {
|
|
case RATING_TYPE_HEART:
|
|
return HeartRating.CREATOR.fromBundle(bundle);
|
|
case RATING_TYPE_PERCENTAGE:
|
|
return PercentageRating.CREATOR.fromBundle(bundle);
|
|
case RATING_TYPE_STAR:
|
|
return StarRating.CREATOR.fromBundle(bundle);
|
|
case RATING_TYPE_THUMB:
|
|
return ThumbRating.CREATOR.fromBundle(bundle);
|
|
case RATING_TYPE_UNSET:
|
|
default:
|
|
throw new IllegalArgumentException("Unknown RatingType: " + ratingType);
|
|
}
|
|
}
|
|
}
|