1fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang/* 2fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Copyright 2018 The Android Open Source Project 3fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 4fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Licensed under the Apache License, Version 2.0 (the "License"); 5fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * you may not use this file except in compliance with the License. 6fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * You may obtain a copy of the License at 7fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 8fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * http://www.apache.org/licenses/LICENSE-2.0 9fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 10fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Unless required by applicable law or agreed to in writing, software 11fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * distributed under the License is distributed on an "AS IS" BASIS, 12fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * See the License for the specific language governing permissions and 14fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * limitations under the License. 15fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 16fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 17fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangpackage androidx.media; 18fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 19fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP; 20fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 21fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.os.Bundle; 22fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.util.Log; 23fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 24fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.annotation.IntDef; 25fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.annotation.Nullable; 26fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.annotation.RestrictTo; 27fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.core.util.ObjectsCompat; 28fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 29fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport java.lang.annotation.Retention; 30fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport java.lang.annotation.RetentionPolicy; 31fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 32fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang/** 33fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A class to encapsulate rating information used as content metadata. 34fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A rating is defined by its rating style (see {@link #RATING_HEART}, 35fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link #RATING_THUMB_UP_DOWN}, {@link #RATING_3_STARS}, {@link #RATING_4_STARS}, 36fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link #RATING_5_STARS} or {@link #RATING_PERCENTAGE}) and the actual rating value (which may 37fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * be defined as "unrated"), both of which are defined when the rating instance is constructed 38fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * through one of the factory methods. 39fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 40fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang// New version of Rating with following change 41fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang// - Don't implement Parcelable for updatable support. 42fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangpublic final class Rating2 { 43fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 44fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @hide 45fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 46fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @RestrictTo(LIBRARY_GROUP) 47fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @IntDef({RATING_NONE, RATING_HEART, RATING_THUMB_UP_DOWN, RATING_3_STARS, RATING_4_STARS, 48fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang RATING_5_STARS, RATING_PERCENTAGE}) 49fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @Retention(RetentionPolicy.SOURCE) 50fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public @interface Style {} 51fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 52fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 53fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @hide 54fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 55fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @RestrictTo(LIBRARY_GROUP) 56fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @IntDef({RATING_3_STARS, RATING_4_STARS, RATING_5_STARS}) 57fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @Retention(RetentionPolicy.SOURCE) 58fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public @interface StarStyle {} 59fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 60fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 61fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Indicates a rating style is not supported. A Rating2 will never have this 62fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * type, but can be used by other classes to indicate they do not support 63fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Rating2. 64fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 65fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int RATING_NONE = 0; 66fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 67fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 68fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A rating style with a single degree of rating, "heart" vs "no heart". Can be used to 69fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * indicate the content referred to is a favorite (or not). 70fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 71fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int RATING_HEART = 1; 72fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 73fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 74fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A rating style for "thumb up" vs "thumb down". 75fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 76fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int RATING_THUMB_UP_DOWN = 2; 77fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 78fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 79fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A rating style with 0 to 3 stars. 80fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 81fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int RATING_3_STARS = 3; 82fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 83fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 84fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A rating style with 0 to 4 stars. 85fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 86fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int RATING_4_STARS = 4; 87fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 88fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 89fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A rating style with 0 to 5 stars. 90fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 91fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int RATING_5_STARS = 5; 92fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 93fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 94fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * A rating style expressed as a percentage. 95fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 96fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static final int RATING_PERCENTAGE = 6; 97fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 98fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private static final String TAG = "Rating2"; 99fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 100fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private static final float RATING_NOT_RATED = -1.0f; 101fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private static final String KEY_STYLE = "android.media.rating2.style"; 102fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private static final String KEY_VALUE = "android.media.rating2.value"; 103fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 104fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private final int mRatingStyle; 105fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private final float mRatingValue; 106fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 107fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang private Rating2(@Style int ratingStyle, float rating) { 108fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mRatingStyle = ratingStyle; 109fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang mRatingValue = rating; 110fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 111fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 112fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @Override 113fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public String toString() { 114fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return "Rating2:style=" + mRatingStyle + " rating=" 115fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang + (mRatingValue < 0.0f ? "unrated" : String.valueOf(mRatingValue)); 116fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 117fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 118fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @Override 119fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public boolean equals(Object obj) { 120fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (!(obj instanceof Rating2)) { 121fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return false; 122fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 123fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang Rating2 other = (Rating2) obj; 124fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mRatingStyle == other.mRatingStyle && mRatingValue == other.mRatingValue; 125fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 126fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 127fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang @Override 128fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public int hashCode() { 129fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return ObjectsCompat.hash(mRatingStyle, mRatingValue); 130fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 131fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 132fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 133fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Create an instance from bundle object, previously created by {@link #toBundle()} 134fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 135fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param bundle bundle 136fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return new Rating2 instance or {@code null} for error 137fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 138fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static Rating2 fromBundle(@Nullable Bundle bundle) { 139fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (bundle == null) { 140fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return null; 141fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 142fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new Rating2(bundle.getInt(KEY_STYLE), bundle.getFloat(KEY_VALUE)); 143fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 144fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 145fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 146fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return bundle for this object to share across the process. 147fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return bundle of this object 148fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 149fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public Bundle toBundle() { 150fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang Bundle bundle = new Bundle(); 151fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang bundle.putInt(KEY_STYLE, mRatingStyle); 152fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang bundle.putFloat(KEY_VALUE, mRatingValue); 153fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return bundle; 154fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 155fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 156fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 157fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return a Rating2 instance with no rating. 158fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Create and return a new Rating2 instance with no rating known for the given 159fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * rating style. 160fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 161fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param ratingStyle one of {@link #RATING_HEART}, {@link #RATING_THUMB_UP_DOWN}, 162fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link #RATING_3_STARS}, {@link #RATING_4_STARS}, {@link #RATING_5_STARS}, 163fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * or {@link #RATING_PERCENTAGE}. 164fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return null if an invalid rating style is passed, a new Rating2 instance otherwise. 165fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 166fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static @Nullable Rating2 newUnratedRating(@Style int ratingStyle) { 167fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang switch(ratingStyle) { 168fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_HEART: 169fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_THUMB_UP_DOWN: 170fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_3_STARS: 171fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_4_STARS: 172fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_5_STARS: 173fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_PERCENTAGE: 174fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new Rating2(ratingStyle, RATING_NOT_RATED); 175fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang default: 176fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return null; 177fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 178fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 179fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 180fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 181fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return a Rating2 instance with a heart-based rating. 182fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Create and return a new Rating2 instance with a rating style of {@link #RATING_HEART}, 183fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * and a heart-based rating. 184fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 185fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param hasHeart true for a "heart selected" rating, false for "heart unselected". 186fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return a new Rating2 instance. 187fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 188fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static @Nullable Rating2 newHeartRating(boolean hasHeart) { 189fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new Rating2(RATING_HEART, hasHeart ? 1.0f : 0.0f); 190fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 191fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 192fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 193fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return a Rating2 instance with a thumb-based rating. 194fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Create and return a new Rating2 instance with a {@link #RATING_THUMB_UP_DOWN} 195fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * rating style, and a "thumb up" or "thumb down" rating. 196fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 197fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param thumbIsUp true for a "thumb up" rating, false for "thumb down". 198fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return a new Rating2 instance. 199fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 200fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static @Nullable Rating2 newThumbRating(boolean thumbIsUp) { 201fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new Rating2(RATING_THUMB_UP_DOWN, thumbIsUp ? 1.0f : 0.0f); 202fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 203fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 204fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 205fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return a Rating2 instance with a star-based rating. 206fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Create and return a new Rating2 instance with one of the star-base rating styles 207fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * and the given integer or fractional number of stars. Non integer values can for instance 208fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * be used to represent an average rating value, which might not be an integer number of stars. 209fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 210fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param starRatingStyle one of {@link #RATING_3_STARS}, {@link #RATING_4_STARS}, 211fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link #RATING_5_STARS}. 212fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param starRating a number ranging from 0.0f to 3.0f, 4.0f or 5.0f according to 213fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * the rating style. 214fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return null if the rating style is invalid, or the rating is out of range, 215fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * a new Rating2 instance otherwise. 216fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 217fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static @Nullable Rating2 newStarRating(@StarStyle int starRatingStyle, 218fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang float starRating) { 219fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang float maxRating; 220fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang switch(starRatingStyle) { 221fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_3_STARS: 222fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang maxRating = 3.0f; 223fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang break; 224fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_4_STARS: 225fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang maxRating = 4.0f; 226fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang break; 227fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_5_STARS: 228fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang maxRating = 5.0f; 229fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang break; 230fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang default: 231fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang Log.e(TAG, "Invalid rating style (" + starRatingStyle + ") for a star rating"); 232fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return null; 233fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 234fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if ((starRating < 0.0f) || (starRating > maxRating)) { 235fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang Log.e(TAG, "Trying to set out of range star-based rating"); 236fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return null; 237fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 238fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new Rating2(starRatingStyle, starRating); 239fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 240fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 241fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 242fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return a Rating2 instance with a percentage-based rating. 243fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Create and return a new Rating2 instance with a {@link #RATING_PERCENTAGE} 244fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * rating style, and a rating of the given percentage. 245fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 246fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param percent the value of the rating 247fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return null if the rating is out of range, a new Rating2 instance otherwise. 248fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 249fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public static @Nullable Rating2 newPercentageRating(float percent) { 250fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if ((percent < 0.0f) || (percent > 100.0f)) { 251fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang Log.e(TAG, "Invalid percentage-based rating value"); 252fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return null; 253fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } else { 254fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return new Rating2(RATING_PERCENTAGE, percent); 255fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 256fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 257fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 258fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 259fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return whether there is a rating value available. 260fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return true if the instance was not created with {@link #newUnratedRating(int)}. 261fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 262fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public boolean isRated() { 263fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mRatingValue >= 0.0f; 264fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 265fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 266fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 267fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return the rating style. 268fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return one of {@link #RATING_HEART}, {@link #RATING_THUMB_UP_DOWN}, 269fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link #RATING_3_STARS}, {@link #RATING_4_STARS}, {@link #RATING_5_STARS}, 270fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * or {@link #RATING_PERCENTAGE}. 271fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 272fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public @Style int getRatingStyle() { 273fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mRatingStyle; 274fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 275fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 276fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 277fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return whether the rating is "heart selected". 278fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return true if the rating is "heart selected", false if the rating is "heart unselected", 279fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * if the rating style is not {@link #RATING_HEART} or if it is unrated. 280fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 281fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public boolean hasHeart() { 282fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mRatingStyle == RATING_HEART && mRatingValue == 1.0f; 283fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 284fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 285fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 286fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return whether the rating is "thumb up". 287fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return true if the rating is "thumb up", false if the rating is "thumb down", 288fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * if the rating style is not {@link #RATING_THUMB_UP_DOWN} or if it is unrated. 289fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 290fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public boolean isThumbUp() { 291fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mRatingStyle == RATING_THUMB_UP_DOWN && mRatingValue == 1.0f; 292fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 293fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 294fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 295fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return the star-based rating value. 296fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return a rating value greater or equal to 0.0f, or a negative value if the rating style is 297fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * not star-based, or if it is unrated. 298fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 299fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public float getStarRating() { 300fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang switch (mRatingStyle) { 301fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_3_STARS: 302fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_4_STARS: 303fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang case RATING_5_STARS: 304fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if (isRated()) { 305fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mRatingValue; 306fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 307fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang // Fall through 308fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang default: 309fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return -1.0f; 310fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 311fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 312fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 313fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 314fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Return the percentage-based rating value. 315fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return a rating value greater or equal to 0.0f, or a negative value if the rating style is 316fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * not percentage-based, or if it is unrated. 317fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 318fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang public float getPercentRating() { 319fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang if ((mRatingStyle != RATING_PERCENTAGE) || !isRated()) { 320fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return -1.0f; 321fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } else { 322fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang return mRatingValue; 323fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 324fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 325fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang} 326