1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.provider.cts; 18 19 20 import android.content.ContentResolver; 21 import android.content.ContentValues; 22 import android.database.Cursor; 23 import android.net.Uri; 24 import android.os.Environment; 25 import android.provider.MediaStore.Audio.Media; 26 import android.provider.cts.MediaStoreAudioTestHelper.Audio1; 27 import android.provider.cts.MediaStoreAudioTestHelper.Audio2; 28 import android.test.InstrumentationTestCase; 29 30 public class MediaStore_Audio_MediaTest extends InstrumentationTestCase { 31 private ContentResolver mContentResolver; 32 33 @Override 34 protected void setUp() throws Exception { 35 super.setUp(); 36 37 mContentResolver = getInstrumentation().getContext().getContentResolver(); 38 } 39 40 public void testGetContentUri() { 41 assertNotNull(mContentResolver.query( 42 Media.getContentUri(MediaStoreAudioTestHelper.INTERNAL_VOLUME_NAME), null, null, 43 null, null)); 44 assertNotNull(mContentResolver.query( 45 Media.getContentUri(MediaStoreAudioTestHelper.EXTERNAL_VOLUME_NAME), null, null, 46 null, null)); 47 48 // can not accept any other volume names 49 String volume = "faveVolume"; 50 assertNull(mContentResolver.query(Media.getContentUri(volume), null, null, null, null)); 51 } 52 53 public void testGetContentUriForPath() { 54 String externalPath = Environment.getExternalStorageDirectory().getPath(); 55 assertNotNull(mContentResolver.query(Media.getContentUriForPath(externalPath), null, null, 56 null, null)); 57 58 String internalPath = 59 getInstrumentation().getTargetContext().getFilesDir().getAbsolutePath(); 60 assertNotNull(mContentResolver.query(Media.getContentUriForPath(internalPath), null, null, 61 null, null)); 62 } 63 64 public void testStoreAudioMediaInternal() { 65 testStoreAudioMedia(true); 66 } 67 68 public void testStoreAudioMediaExternal() { 69 testStoreAudioMedia(false); 70 } 71 72 private void testStoreAudioMedia(boolean isInternal) { 73 Audio1 audio1 = Audio1.getInstance(); 74 ContentValues values = audio1.getContentValues(isInternal); 75 //insert 76 Uri mediaUri = isInternal ? Media.INTERNAL_CONTENT_URI : Media.EXTERNAL_CONTENT_URI; 77 Uri uri = mContentResolver.insert(mediaUri, values); 78 assertNotNull(uri); 79 80 try { 81 // query 82 // the following columns in the table are generated automatically when inserting: 83 // _ID, DATE_ADDED, ALBUM_ID, ALBUM_KEY, ARTIST_ID, ARTIST_KEY, TITLE_KEY 84 // the column DISPLAY_NAME will be ignored when inserting 85 Cursor c = mContentResolver.query(uri, null, null, null, null); 86 assertEquals(1, c.getCount()); 87 c.moveToFirst(); 88 long id = c.getLong(c.getColumnIndex(Media._ID)); 89 assertTrue(id > 0); 90 String expected = isInternal ? Audio1.INTERNAL_DATA : Audio1.EXTERNAL_DATA; 91 assertEquals(expected, c.getString(c.getColumnIndex(Media.DATA))); 92 assertTrue(c.getLong(c.getColumnIndex(Media.DATE_ADDED)) > 0); 93 assertEquals(Audio1.DATE_MODIFIED, c.getLong(c.getColumnIndex(Media.DATE_MODIFIED))); 94 assertEquals(Audio1.IS_DRM, c.getInt(c.getColumnIndex(Media.IS_DRM))); 95 assertEquals(Audio1.FILE_NAME, c.getString(c.getColumnIndex(Media.DISPLAY_NAME))); 96 assertEquals(Audio1.MIME_TYPE, c.getString(c.getColumnIndex(Media.MIME_TYPE))); 97 assertEquals(Audio1.SIZE, c.getInt(c.getColumnIndex(Media.SIZE))); 98 assertEquals(Audio1.TITLE, c.getString(c.getColumnIndex(Media.TITLE))); 99 assertEquals(Audio1.ALBUM, c.getString(c.getColumnIndex(Media.ALBUM))); 100 String albumKey = c.getString(c.getColumnIndex(Media.ALBUM_KEY)); 101 assertNotNull(albumKey); 102 long albumId = c.getLong(c.getColumnIndex(Media.ALBUM_ID)); 103 assertTrue(albumId > 0); 104 assertEquals(Audio1.ARTIST, c.getString(c.getColumnIndex(Media.ARTIST))); 105 String artistKey = c.getString(c.getColumnIndex(Media.ARTIST_KEY)); 106 assertNotNull(artistKey); 107 long artistId = c.getLong(c.getColumnIndex(Media.ARTIST_ID)); 108 assertTrue(artistId > 0); 109 assertEquals(Audio1.COMPOSER, c.getString(c.getColumnIndex(Media.COMPOSER))); 110 assertEquals(Audio1.DURATION, c.getLong(c.getColumnIndex(Media.DURATION))); 111 assertEquals(Audio1.IS_ALARM, c.getInt(c.getColumnIndex(Media.IS_ALARM))); 112 assertEquals(Audio1.IS_MUSIC, c.getInt(c.getColumnIndex(Media.IS_MUSIC))); 113 assertEquals(Audio1.IS_NOTIFICATION, c.getInt(c.getColumnIndex(Media.IS_NOTIFICATION))); 114 assertEquals(Audio1.IS_RINGTONE, c.getInt(c.getColumnIndex(Media.IS_RINGTONE))); 115 assertEquals(Audio1.TRACK, c.getInt(c.getColumnIndex(Media.TRACK))); 116 assertEquals(Audio1.YEAR, c.getInt(c.getColumnIndex(Media.YEAR))); 117 String titleKey = c.getString(c.getColumnIndex(Media.TITLE_KEY)); 118 assertNotNull(titleKey); 119 c.close(); 120 121 // update 122 // the column DISPLAY_NAME will not be ignored when updating 123 Audio2 audio2 = Audio2.getInstance(); 124 values = audio2.getContentValues(isInternal); 125 126 int result = mContentResolver.update(uri, values, null, null); 127 assertEquals(1, result); 128 c = mContentResolver.query(uri, null, null, null, null); 129 assertEquals(1, c.getCount()); 130 c.moveToFirst(); 131 long id2 = c.getLong(c.getColumnIndex(Media._ID)); 132 assertTrue(id == id2); 133 expected = isInternal ? Audio2.INTERNAL_DATA : Audio2.EXTERNAL_DATA; 134 assertEquals(expected, c.getString(c.getColumnIndex(Media.DATA))); 135 assertEquals(Audio2.DATE_MODIFIED, c.getLong(c.getColumnIndex(Media.DATE_MODIFIED))); 136 assertEquals(Audio2.IS_DRM, c.getInt(c.getColumnIndex(Media.IS_DRM))); 137 assertEquals(Audio2.DISPLAY_NAME, c.getString(c.getColumnIndex(Media.DISPLAY_NAME))); 138 assertEquals(Audio2.MIME_TYPE, c.getString(c.getColumnIndex(Media.MIME_TYPE))); 139 assertEquals(Audio2.SIZE, c.getInt(c.getColumnIndex(Media.SIZE))); 140 assertEquals(Audio2.TITLE, c.getString(c.getColumnIndex(Media.TITLE))); 141 assertEquals(Audio2.ALBUM, c.getString(c.getColumnIndex(Media.ALBUM))); 142 assertFalse(albumKey.equals(c.getString(c.getColumnIndex(Media.ALBUM_KEY)))); 143 assertTrue(albumId != c.getLong(c.getColumnIndex(Media.ALBUM_ID))); 144 assertEquals(Audio2.ARTIST, c.getString(c.getColumnIndex(Media.ARTIST))); 145 assertFalse(artistKey.equals(c.getString(c.getColumnIndex(Media.ARTIST_KEY)))); 146 assertTrue(artistId != c.getLong(c.getColumnIndex(Media.ARTIST_ID))); 147 assertEquals(Audio2.COMPOSER, c.getString(c.getColumnIndex(Media.COMPOSER))); 148 assertEquals(Audio2.DURATION, c.getLong(c.getColumnIndex(Media.DURATION))); 149 assertEquals(Audio2.IS_ALARM, c.getInt(c.getColumnIndex(Media.IS_ALARM))); 150 assertEquals(Audio2.IS_MUSIC, c.getInt(c.getColumnIndex(Media.IS_MUSIC))); 151 assertEquals(Audio2.IS_NOTIFICATION, 152 c.getInt(c.getColumnIndex(Media.IS_NOTIFICATION))); 153 assertEquals(Audio2.IS_RINGTONE, c.getInt(c.getColumnIndex(Media.IS_RINGTONE))); 154 assertEquals(Audio2.TRACK, c.getInt(c.getColumnIndex(Media.TRACK))); 155 assertEquals(Audio2.YEAR, c.getInt(c.getColumnIndex(Media.YEAR))); 156 assertTrue(titleKey.equals(c.getString(c.getColumnIndex(Media.TITLE_KEY)))); 157 c.close(); 158 159 // test filtering 160 Uri baseUri = isInternal ? Media.INTERNAL_CONTENT_URI : Media.EXTERNAL_CONTENT_URI; 161 Uri filterUri = baseUri.buildUpon() 162 .appendQueryParameter("filter", Audio2.ARTIST).build(); 163 c = mContentResolver.query(filterUri, null, null, null, null); 164 assertEquals(1, c.getCount()); 165 c.moveToFirst(); 166 long fid = c.getLong(c.getColumnIndex(Media._ID)); 167 assertTrue(id == fid); 168 c.close(); 169 170 filterUri = baseUri.buildUpon().appendQueryParameter("filter", "xyzfoo").build(); 171 c = mContentResolver.query(filterUri, null, null, null, null); 172 assertEquals(0, c.getCount()); 173 c.close(); 174 } finally { 175 // delete 176 int result = mContentResolver.delete(uri, null, null); 177 assertEquals(1, result); 178 } 179 } 180 } 181