1792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/*
2792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project *
4792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * you may not use this file except in compliance with the License.
6792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * You may obtain a copy of the License at
7792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project *
8792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project *
10792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * See the License for the specific language governing permissions and
14792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * limitations under the License.
15792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */
16792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
17792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpackage com.android.music.tests.functional;
18792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
19792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.Activity;
20792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.*;
21792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.Instrumentation;
22792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.Instrumentation.ActivityMonitor;
23792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Intent;
24792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.test.ActivityInstrumentationTestCase;
25792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
26792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.KeyEvent;
27792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.provider.MediaStore;
28792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.ContentResolver;
29792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.database.Cursor;
30792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
31792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.CreatePlaylist;
32792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.MusicUtils;
33792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.PlaylistBrowserActivity;
34792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.TrackBrowserActivity;
35792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
36792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.tests.MusicPlayerNames;
37792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.tests.functional.TestSongs;
38792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
39792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/**
40792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Junit / Instrumentation test case for the PlaylistBrowserActivity
41792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * This test case need to run in the landscape mode and opened keyboard
42792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
43792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */
44792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpublic class TestPlaylist extends ActivityInstrumentationTestCase <PlaylistBrowserActivity>{
45792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private static String TAG = "musicplayertests";
46792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
47792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public TestPlaylist() {
48792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        super("com.android.music",PlaylistBrowserActivity.class);
49792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
50792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
51792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    @Override
52792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    protected void setUp() throws Exception {
53792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        super.setUp();
54792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
55792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
56792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    @Override
57792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    protected void tearDown() throws Exception {
58792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        super.tearDown();
59792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
60792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
61792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
62792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    private void clearSearchString(int length){
63792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Instrumentation inst = getInstrumentation();
64792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        for (int j=0; j< length; j++)
65792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DEL);
66792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
67792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    /**
68792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     * Remove playlist
69792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     */
70792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void deletePlaylist(String playlistname) throws Exception{
71792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Instrumentation inst = getInstrumentation();
72792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendStringSync(playlistname);
73792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME);
74792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
75792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.invokeContextMenuAction(getActivity(), MusicUtils.Defs.CHILD_MENU_BASE + 1, 0);
76792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME);
77792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        clearSearchString(playlistname.length());
78792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
79792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
80792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
81792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    /**
82792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     *  Start the trackBrowserActivity and add the new playlist
83792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     */
84792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void addNewPlaylist(String playListName) throws Exception{
85792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Instrumentation inst = getInstrumentation();
86792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Activity trackBrowserActivity;
87792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        ActivityMonitor trackBrowserMon = inst.addMonitor("com.android.music.TrackBrowserActivity",
88792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                null, false);
89792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Intent intent = new Intent();
90792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        intent.setAction(Intent.ACTION_PICK);
91792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        intent.setClassName("com.android.music", "com.android.music.TrackBrowserActivity");
92792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        getActivity().startActivity(intent);
93792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
94792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        trackBrowserActivity = trackBrowserMon.waitForActivityWithTimeout(2000);
95792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.invokeContextMenuAction(trackBrowserActivity, MusicUtils.Defs.NEW_PLAYLIST, 0);
96792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME);
97792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        //Remove the default playlist name
98792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        clearSearchString(MusicPlayerNames.DEFAULT_PLAYLIST_LENGTH);
99792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendStringSync(playListName);
100792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
101792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
102792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
103792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        trackBrowserActivity.finish();
104792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        clearSearchString(playListName.length());
105792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
106792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
107792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
108792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    /**
109792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     * Rename playlist
110792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     */
111792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void renamePlaylist(String oldPlaylistName, String newPlaylistName) throws Exception{
112792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Instrumentation inst = getInstrumentation();
113792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendStringSync(oldPlaylistName);
114792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME);
115792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
116792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.invokeContextMenuAction(getActivity(), MusicUtils.Defs.CHILD_MENU_BASE + 3, 0);
117792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME);
118792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        //Remove the old playlist name
119792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        clearSearchString(oldPlaylistName.length());
120792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendStringSync(newPlaylistName);
121792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
122792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
123792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME);
124792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        clearSearchString(oldPlaylistName.length());
125792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
126792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
127792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public boolean verifyPlaylist(String playlistname) throws Exception{
128792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        Cursor mCursor;
129792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        boolean isEmptyPlaylist = true;
130792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        String[] cols = new String[] {
131792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                MediaStore.Audio.Playlists.NAME
132792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        };
133792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        ContentResolver resolver = getActivity().getContentResolver();
134792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        if (resolver == null) {
135792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            System.out.println("resolver = null");
136792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            assertNull(TAG, resolver);
137792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        } else {
138792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            String whereclause = MediaStore.Audio.Playlists.NAME + " = '" + playlistname +"'";
139792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            mCursor = resolver.query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,
140792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    cols, whereclause, null,
141792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project                    MediaStore.Audio.Playlists.NAME);
142792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project            isEmptyPlaylist = mCursor.moveToFirst();
143792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        }
144792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        return isEmptyPlaylist;
145792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
146792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
147792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    /**
148792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     * Test case 1: Add a playlist and delet the playlist just added.
149792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     * Verification: The mediastore playlist should be empty
150792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     */
151792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    @LargeTest
152792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void testDeletePlaylist() throws Exception{
153792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        boolean isEmptyPlaylist = true;
154792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        addNewPlaylist(MusicPlayerNames.DELETE_PLAYLIST_NAME);
155792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        deletePlaylist(MusicPlayerNames.DELETE_PLAYLIST_NAME);
156792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        isEmptyPlaylist = verifyPlaylist(MusicPlayerNames.DELETE_PLAYLIST_NAME);
157792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        assertFalse("testDeletePlaylist", isEmptyPlaylist);
158792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
159792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
160792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    /**
161792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     * Test case 2: Add playlist and rename the playlist just added.
162792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     * Verification: The mediastore playlist should contain the updated name.
163792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project     */
164792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    @LargeTest
165792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    public void testRenamePlaylist() throws Exception{
166792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        boolean isEmptyPlaylist = true;
167792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        addNewPlaylist(MusicPlayerNames.ORIGINAL_PLAYLIST_NAME);
168792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        renamePlaylist(MusicPlayerNames.ORIGINAL_PLAYLIST_NAME, MusicPlayerNames.RENAMED_PLAYLIST_NAME);
169792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        isEmptyPlaylist = verifyPlaylist(MusicPlayerNames.RENAMED_PLAYLIST_NAME);
170792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        deletePlaylist(MusicPlayerNames.RENAMED_PLAYLIST_NAME);
171792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project        assertTrue("testDeletePlaylist", isEmptyPlaylist);
172792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project    }
173792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project
174792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project}
175