Home | History | Annotate | Download | only in cts
      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