188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi/* 288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Copyright (C) 2013 The Android Open Source Project 388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * 488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * you may not use this file except in compliance with the License. 688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * You may obtain a copy of the License at 788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * 888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * 1088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 1188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 1288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * See the License for the specific language governing permissions and 1488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * limitations under the License. 1588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 1688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 1788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivipackage android.media; 1888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 1988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Triviimport android.graphics.Bitmap; 20edb158f55f48a1f7b2cbf30ddec9b8917dc9a619RoboErikimport android.media.session.MediaSession; 2188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Triviimport android.os.Bundle; 2288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Triviimport android.os.Parcelable; 2388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Triviimport android.util.Log; 2488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Triviimport android.util.SparseIntArray; 2588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 2688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi/** 2788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * An abstract class for editing and storing metadata that can be published by 2888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link RemoteControlClient}. See the {@link RemoteControlClient#editMetadata(boolean)} 2988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * method to instantiate a {@link RemoteControlClient.MetadataEditor} object. 30edb158f55f48a1f7b2cbf30ddec9b8917dc9a619RoboErik * 31edb158f55f48a1f7b2cbf30ddec9b8917dc9a619RoboErik * @deprecated Use {@link MediaMetadata} instead together with {@link MediaSession}. 3288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 33edb158f55f48a1f7b2cbf30ddec9b8917dc9a619RoboErik@Deprecated public abstract class MediaMetadataEditor { 3488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 3588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi private final static String TAG = "MediaMetadataEditor"; 3688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 3788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 3888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 3988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected MediaMetadataEditor() { 4088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 4188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 4288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // Public keys for metadata used by RemoteControlClient and RemoteController. 4388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // Note that these keys are defined here, and not in MediaMetadataRetriever 4488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // because they are not supported by the MediaMetadataRetriever features. 4588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 4688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * The metadata key for the content artwork / album art. 4788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 4888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public final static int BITMAP_KEY_ARTWORK = 4988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK; 5088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 5188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 5288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * The metadata key for the content's average rating, not the user's rating. 5388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * The value associated with this key is a {@link Rating} instance. 5488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @see #RATING_KEY_BY_USER 5588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 5688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public final static int RATING_KEY_BY_OTHERS = 101; 5788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 5888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 5988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * The metadata key for the content's user rating. 6088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * The value associated with this key is a {@link Rating} instance. 6188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * This key can be flagged as "editable" (with {@link #addEditableKey(int)}) to enable 6288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * receiving user rating values through the 6388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.RemoteControlClient.OnMetadataUpdateListener} interface. 6488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 6588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public final static int RATING_KEY_BY_USER = 0x10000001; 6688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 6788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 6888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 6988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Editable key mask 7088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 7188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public final static int KEY_EDITABLE_MASK = 0x1FFFFFFF; 7288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 7388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 7488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 7588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Applies all of the metadata changes that have been set since the MediaMetadataEditor instance 7688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * was created or since {@link #clear()} was called. 7788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 7888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public abstract void apply(); 7988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 8088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 8188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 8288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 8388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Mask of editable keys. 8488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 8588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected long mEditableKeys; 8688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 8788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 8888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 8988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 9088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected boolean mMetadataChanged = false; 9188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 9288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 9388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 9488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 9588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected boolean mApplied = false; 9688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 9788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 9888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 9988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 10088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected boolean mArtworkChanged = false; 10188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 10288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 10388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 10488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 10588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected Bitmap mEditorArtwork; 10688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 10788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 10888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 10988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 11088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected Bundle mEditorMetadata; 11188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 112f1372428f2df781c71c71caa2f6a4db6f847cf10RoboErik /** 113f1372428f2df781c71c71caa2f6a4db6f847cf10RoboErik * @hide 114f1372428f2df781c71c71caa2f6a4db6f847cf10RoboErik */ 115f1372428f2df781c71c71caa2f6a4db6f847cf10RoboErik protected MediaMetadata.Builder mMetadataBuilder; 11688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 11788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 11888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Clears all the pending metadata changes set since the MediaMetadataEditor instance was 11988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * created or since this method was last called. 12088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Note that clearing the metadata doesn't reset the editable keys 12188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * (use {@link #removeEditableKeys()} instead). 12288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 12388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized void clear() { 12488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mApplied) { 12588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Can't clear a previously applied MediaMetadataEditor"); 12688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return; 12788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 12888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditorMetadata.clear(); 12988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditorArtwork = null; 130f1372428f2df781c71c71caa2f6a4db6f847cf10RoboErik mMetadataBuilder = new MediaMetadata.Builder(); 13188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 13288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 13388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 13488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Flags the given key as being editable. 13588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * This should only be used by metadata publishers, such as {@link RemoteControlClient}, 13688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * which will declare the metadata field as eligible to be updated, with new values 13788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * received through the {@link RemoteControlClient.OnMetadataUpdateListener} interface. 13888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key the type of metadata that can be edited. The supported key is 13988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link #RATING_KEY_BY_USER}. 14088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 14188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized void addEditableKey(int key) { 14288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mApplied) { 14388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Can't change editable keys of a previously applied MetadataEditor"); 14488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return; 14588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 14688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // only one editable key at the moment, so we're not wasting memory on an array 14788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // of editable keys to check the validity of the key, just hardcode the supported key. 14888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (key == RATING_KEY_BY_USER) { 14988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditableKeys |= (KEY_EDITABLE_MASK & key); 15088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mMetadataChanged = true; 15188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 15288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Metadata key " + key + " cannot be edited"); 15388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 15488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 15588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 15688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 15788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Causes all metadata fields to be read-only. 15888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 15988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized void removeEditableKeys() { 16088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mApplied) { 16188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Can't remove all editable keys of a previously applied MetadataEditor"); 16288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return; 16388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 16488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mEditableKeys != 0) { 16588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditableKeys = 0; 16688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mMetadataChanged = true; 16788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 16888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 16988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 17088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 17188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Retrieves the keys flagged as editable. 17288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return null if there are no editable keys, or an array containing the keys. 17388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 17488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized int[] getEditableKeys() { 17588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // only one editable key supported here 17688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mEditableKeys == RATING_KEY_BY_USER) { 17788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi int[] keys = { RATING_KEY_BY_USER }; 17888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return keys; 17988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 18088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return null; 18188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 18288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 18388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 18488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 18588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Adds textual information. 18688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Note that none of the information added after {@link #apply()} has been called, 18788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * will be available to consumers of metadata stored by the MediaMetadataEditor. 18888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key The identifier of a the metadata field to set. Valid values are 18988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUM}, 19088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ALBUMARTIST}, 19188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_TITLE}, 19288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_ARTIST}, 19388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_AUTHOR}, 19488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPILATION}, 19588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_COMPOSER}, 19688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DATE}, 19788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_GENRE}, 19888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_WRITER}. 19988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param value The text for the given key, or {@code null} to signify there is no valid 20088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * information for the field. 20188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return Returns a reference to the same MediaMetadataEditor object, so you can chain put 20288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * calls together. 20388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 20488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized MediaMetadataEditor putString(int key, String value) 20588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 20688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mApplied) { 20788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Can't edit a previously applied MediaMetadataEditor"); 20888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 20988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 21088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (METADATA_KEYS_TYPE.get(key, METADATA_TYPE_INVALID) != METADATA_TYPE_STRING) { 21188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid type 'String' for key "+ key)); 21288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 21388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditorMetadata.putString(String.valueOf(key), value); 21488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mMetadataChanged = true; 21588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 21688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 21788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 21888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 21988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Adds numerical information. 22088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Note that none of the information added after {@link #apply()} has been called 22188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * will be available to consumers of metadata stored by the MediaMetadataEditor. 22288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key the identifier of a the metadata field to set. Valid values are 22388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_CD_TRACK_NUMBER}, 22488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DISC_NUMBER}, 22588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_DURATION} (with a value 22688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * expressed in milliseconds), 22788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link android.media.MediaMetadataRetriever#METADATA_KEY_YEAR}. 22888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param value The long value for the given key 22988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return Returns a reference to the same MediaMetadataEditor object, so you can chain put 23088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * calls together. 23188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @throws IllegalArgumentException 23288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 23388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized MediaMetadataEditor putLong(int key, long value) 23488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 23588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mApplied) { 23688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Can't edit a previously applied MediaMetadataEditor"); 23788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 23888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 23988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (METADATA_KEYS_TYPE.get(key, METADATA_TYPE_INVALID) != METADATA_TYPE_LONG) { 24088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid type 'long' for key "+ key)); 24188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 24288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditorMetadata.putLong(String.valueOf(key), value); 24388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mMetadataChanged = true; 24488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 24588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 24688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 24788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 24888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Adds image. 24988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key the identifier of the bitmap to set. The only valid value is 25088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link #BITMAP_KEY_ARTWORK} 25188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param bitmap The bitmap for the artwork, or null if there isn't any. 25288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return Returns a reference to the same MediaMetadataEditor object, so you can chain put 25388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * calls together. 25488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @throws IllegalArgumentException 25588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @see android.graphics.Bitmap 25688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 25788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized MediaMetadataEditor putBitmap(int key, Bitmap bitmap) 25888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 25988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mApplied) { 26088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Can't edit a previously applied MediaMetadataEditor"); 26188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 26288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 26388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (key != BITMAP_KEY_ARTWORK) { 26488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid type 'Bitmap' for key "+ key)); 26588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 26688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditorArtwork = bitmap; 26788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mArtworkChanged = true; 26888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 26988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 27088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 27188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 27288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Adds information stored as an instance. 27388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Note that none of the information added after {@link #apply()} has been called 27488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * will be available to consumers of metadata stored by the MediaMetadataEditor. 27588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key the identifier of a the metadata field to set. Valid keys for a: 27688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * <ul> 27788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * <li>{@link Bitmap} object are {@link #BITMAP_KEY_ARTWORK},</li> 27888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * <li>{@link String} object are the same as for {@link #putString(int, String)}</li> 27988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * <li>{@link Long} object are the same as for {@link #putLong(int, long)}</li> 28088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * <li>{@link Rating} object are {@link #RATING_KEY_BY_OTHERS} 28188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * and {@link #RATING_KEY_BY_USER}.</li> 28288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * </ul> 283f841d70155c991b6cf728dd41e6d37e051be453dJean-Michel Trivi * @param value the metadata to add. 28488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return Returns a reference to the same MediaMetadataEditor object, so you can chain put 28588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * calls together. 28688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @throws IllegalArgumentException 28788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 28888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized MediaMetadataEditor putObject(int key, Object value) 28988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 29088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mApplied) { 29188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi Log.e(TAG, "Can't edit a previously applied MediaMetadataEditor"); 29288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 29388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 29488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi switch(METADATA_KEYS_TYPE.get(key, METADATA_TYPE_INVALID)) { 29588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_LONG: 29688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (value instanceof Long) { 29788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return putLong(key, ((Long)value).longValue()); 29888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 29988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Not a non-null Long for key "+ key)); 30088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 30188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_STRING: 30288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if ((value == null) || (value instanceof String)) { 30388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return putString(key, (String) value); 30488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 30588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Not a String for key "+ key)); 30688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 30788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_RATING: 30888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mEditorMetadata.putParcelable(String.valueOf(key), (Parcelable)value); 30988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi mMetadataChanged = true; 31088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi break; 31188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_BITMAP: 31288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if ((value == null) || (value instanceof Bitmap)) { 31388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return putBitmap(key, (Bitmap) value); 31488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 31588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Not a Bitmap for key "+ key)); 31688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 31788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi default: 31888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid key "+ key)); 31988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 32088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return this; 32188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 32288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 32388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 32488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 32588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Returns the long value for the key. 32688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key one of the keys supported in {@link #putLong(int, long)} 32788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param defaultValue the value returned if the key is not present 32888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return the long value for the key, or the supplied default value if the key is not present 32988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @throws IllegalArgumentException 33088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 33188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized long getLong(int key, long defaultValue) 33288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 33388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (METADATA_KEYS_TYPE.get(key, METADATA_TYPE_INVALID) != METADATA_TYPE_LONG) { 33488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid type 'long' for key "+ key)); 33588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 33688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return mEditorMetadata.getLong(String.valueOf(key), defaultValue); 33788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 33888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 33988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 34088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Returns the {@link String} value for the key. 34188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key one of the keys supported in {@link #putString(int, String)} 34288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param defaultValue the value returned if the key is not present 34388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return the {@link String} value for the key, or the supplied default value if the key is 34488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * not present 34588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @throws IllegalArgumentException 34688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 34788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized String getString(int key, String defaultValue) 34888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 34988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (METADATA_KEYS_TYPE.get(key, METADATA_TYPE_INVALID) != METADATA_TYPE_STRING) { 35088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid type 'String' for key "+ key)); 35188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 35288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return mEditorMetadata.getString(String.valueOf(key), defaultValue); 35388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 35488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 35588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 35688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Returns the {@link Bitmap} value for the key. 35788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key the {@link #BITMAP_KEY_ARTWORK} key 35888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param defaultValue the value returned if the key is not present 35988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return the {@link Bitmap} value for the key, or the supplied default value if the key is 36088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * not present 36188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @throws IllegalArgumentException 36288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 36388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized Bitmap getBitmap(int key, Bitmap defaultValue) 36488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 36588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (key != BITMAP_KEY_ARTWORK) { 36688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid type 'Bitmap' for key "+ key)); 36788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 36888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return (mEditorArtwork != null ? mEditorArtwork : defaultValue); 36988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 37088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 37188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 37288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * Returns an object representation of the value for the key 37388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param key one of the keys supported in {@link #putObject(int, Object)} 37488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @param defaultValue the value returned if the key is not present 37588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @return the object for the key, as a {@link Long}, {@link Bitmap}, {@link String}, or 37688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * {@link Rating} depending on the key value, or the supplied default value if the key is 37788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * not present 37888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @throws IllegalArgumentException 37988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 38088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi public synchronized Object getObject(int key, Object defaultValue) 38188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throws IllegalArgumentException { 38288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi switch (METADATA_KEYS_TYPE.get(key, METADATA_TYPE_INVALID)) { 38388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_LONG: 38488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mEditorMetadata.containsKey(String.valueOf(key))) { 38588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return mEditorMetadata.getLong(String.valueOf(key)); 38688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 38788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return defaultValue; 38888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 38988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_STRING: 39088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mEditorMetadata.containsKey(String.valueOf(key))) { 39188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return mEditorMetadata.getString(String.valueOf(key)); 39288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 39388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return defaultValue; 39488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 39588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_RATING: 39688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (mEditorMetadata.containsKey(String.valueOf(key))) { 39788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return mEditorMetadata.getParcelable(String.valueOf(key)); 39888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } else { 39988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return defaultValue; 40088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 40188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi case METADATA_TYPE_BITMAP: 40288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // only one key for Bitmap supported, value is not stored in mEditorMetadata Bundle 40388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi if (key == BITMAP_KEY_ARTWORK) { 40488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi return (mEditorArtwork != null ? mEditorArtwork : defaultValue); 40588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } // else: fall through to invalid key handling 40688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi default: 40788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi throw(new IllegalArgumentException("Invalid key "+ key)); 40888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 40988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 41088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 41188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 41288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 41388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 41488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 41588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected static final int METADATA_TYPE_INVALID = -1; 41688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 41788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 41888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 41988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected static final int METADATA_TYPE_LONG = 0; 42088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 42188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 42288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 42388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 42488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected static final int METADATA_TYPE_STRING = 1; 42588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 42688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 42788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 42888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 42988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected static final int METADATA_TYPE_BITMAP = 2; 43088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 43188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 43288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 43388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 43488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected static final int METADATA_TYPE_RATING = 3; 43588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 43688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi /** 43788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi * @hide 43888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi */ 43988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi protected static final SparseIntArray METADATA_KEYS_TYPE; 44088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi 44188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi static { 44288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE = new SparseIntArray(17); 44388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // NOTE: if adding to the list below, make sure you increment the array initialization size 44488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // keys with long values 44588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put( 44688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER, METADATA_TYPE_LONG); 44788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_DISC_NUMBER, METADATA_TYPE_LONG); 44888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_DURATION, METADATA_TYPE_LONG); 44988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_YEAR, METADATA_TYPE_LONG); 45088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // keys with String values 45188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_ALBUM, METADATA_TYPE_STRING); 45288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put( 45388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST, METADATA_TYPE_STRING); 45488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_TITLE, METADATA_TYPE_STRING); 45588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_ARTIST, METADATA_TYPE_STRING); 45688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_AUTHOR, METADATA_TYPE_STRING); 45788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put( 45888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi MediaMetadataRetriever.METADATA_KEY_COMPILATION, METADATA_TYPE_STRING); 45988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_COMPOSER, METADATA_TYPE_STRING); 46088183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_DATE, METADATA_TYPE_STRING); 46188183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_GENRE, METADATA_TYPE_STRING); 46288183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(MediaMetadataRetriever.METADATA_KEY_WRITER, METADATA_TYPE_STRING); 46388183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // keys with Bitmap values 46488183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(BITMAP_KEY_ARTWORK, METADATA_TYPE_BITMAP); 46588183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi // keys with Rating values 46688183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(RATING_KEY_BY_OTHERS, METADATA_TYPE_RATING); 46788183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi METADATA_KEYS_TYPE.put(RATING_KEY_BY_USER, METADATA_TYPE_RATING); 46888183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi } 46988183e67d4628e8c8a3310af0076b6f33f955cb2Jean-Michel Trivi} 470