1792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/* 2792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Copyright (C) 2007 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; 18792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 19792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.Activity; 20792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.ContentResolver; 21792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.ContentUris; 22792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.ContentValues; 23792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Intent; 24792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.database.Cursor; 25792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.media.AudioManager; 26792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.net.Uri; 27792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.os.Bundle; 28792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.provider.MediaStore; 29792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.text.Editable; 30792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.text.TextWatcher; 31792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.View; 32792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.Window; 33792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.WindowManager; 34792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.Button; 35792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.EditText; 36792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.TextView; 37792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 38792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpublic class CreatePlaylist extends Activity 39792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project{ 40792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private EditText mPlaylist; 41792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private TextView mPrompt; 42792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private Button mSaveButton; 43792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 44792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 45792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onCreate(Bundle icicle) { 46792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onCreate(icicle); 47792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setVolumeControlStream(AudioManager.STREAM_MUSIC); 48792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 49792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 50792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setContentView(R.layout.create_playlist); 515ae9f47a834282a745852f7ad22232878e9d378eRomain Guy getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, 52792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project WindowManager.LayoutParams.WRAP_CONTENT); 53792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 54792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPrompt = (TextView)findViewById(R.id.prompt); 55792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist = (EditText)findViewById(R.id.playlist); 56792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mSaveButton = (Button) findViewById(R.id.create); 57792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mSaveButton.setOnClickListener(mOpenClicked); 58792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 59792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ((Button)findViewById(R.id.cancel)).setOnClickListener(new View.OnClickListener() { 60792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onClick(View v) { 61792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project finish(); 62792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 63792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }); 64792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 65792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String defaultname = icicle != null ? icicle.getString("defaultname") : makePlaylistName(); 66792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (defaultname == null) { 67792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project finish(); 68792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return; 69792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 70792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String promptformat = getString(R.string.create_playlist_create_text_prompt); 71792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String prompt = String.format(promptformat, defaultname); 72792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPrompt.setText(prompt); 73792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist.setText(defaultname); 74792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist.setSelection(defaultname.length()); 75792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist.addTextChangedListener(mTextWatcher); 76792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 77792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 78792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project TextWatcher mTextWatcher = new TextWatcher() { 79792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void beforeTextChanged(CharSequence s, int start, int count, int after) { 80792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // don't care about this one 81792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 82792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onTextChanged(CharSequence s, int start, int before, int count) { 83538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen String newText = mPlaylist.getText().toString(); 84538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen if (newText.trim().length() == 0) { 85538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setEnabled(false); 86792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 87538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setEnabled(true); 88538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen // check if playlist with current name exists already, and warn the user if so. 89538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen if (idForplaylist(newText) >= 0) { 90538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setText(R.string.create_playlist_overwrite_text); 91538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen } else { 92538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setText(R.string.create_playlist_create_text); 93538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen } 94792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 95792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 96792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void afterTextChanged(Editable s) { 97792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // don't care about this one 98792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 99792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 100792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 101792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private int idForplaylist(String name) { 102792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = MusicUtils.query(this, MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 103792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] { MediaStore.Audio.Playlists._ID }, 104792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME + "=?", 105792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] { name }, 106792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME); 107792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int id = -1; 108792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (c != null) { 109792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.moveToFirst(); 110792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (!c.isAfterLast()) { 111792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project id = c.getInt(0); 112792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 11345c9ca38df9d6b799f2f66ad307edb496c8b512aMarco Nelissen c.close(); 114792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 115792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return id; 116792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 117792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 118792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 119792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onSaveInstanceState(Bundle outcicle) { 120792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project outcicle.putString("defaultname", mPlaylist.getText().toString()); 121792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 122792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 123792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 124792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onResume() { 125792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onResume(); 126792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 127792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 128792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String makePlaylistName() { 129792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 130792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String template = getString(R.string.new_playlist_name_template); 131792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int num = 1; 132792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 133792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String[] cols = new String[] { 134792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME 135792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 136792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ContentResolver resolver = getContentResolver(); 137792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String whereclause = MediaStore.Audio.Playlists.NAME + " != ''"; 138792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = resolver.query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 139792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project cols, whereclause, null, 140792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME); 141792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 142792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (c == null) { 143792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return null; 144792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 145792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 146792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String suggestedname; 147792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project suggestedname = String.format(template, num++); 148792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 149792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // Need to loop until we've made 1 full pass through without finding a match. 150792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // Looping more than once shouldn't happen very often, but will happen if 151792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // you have playlists named "New Playlist 1"/10/2/3/4/5/6/7/8/9, where 152792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // making only one pass would result in "New Playlist 10" being erroneously 153792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // picked for the new name. 154792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project boolean done = false; 155792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project while (!done) { 156792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project done = true; 157792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.moveToFirst(); 158792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project while (! c.isAfterLast()) { 159792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String playlistname = c.getString(0); 160792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (playlistname.compareToIgnoreCase(suggestedname) == 0) { 161792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project suggestedname = String.format(template, num++); 162792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project done = false; 163792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 164792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.moveToNext(); 165792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 166792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 167792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.close(); 168792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return suggestedname; 169792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 170792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 171792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private View.OnClickListener mOpenClicked = new View.OnClickListener() { 172792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onClick(View v) { 173792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String name = mPlaylist.getText().toString(); 174792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (name != null && name.length() > 0) { 175792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ContentResolver resolver = getContentResolver(); 176792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int id = idForplaylist(name); 177792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Uri uri; 178792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (id >= 0) { 179792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project uri = ContentUris.withAppendedId(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, id); 180792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MusicUtils.clearPlaylist(CreatePlaylist.this, id); 181792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 182792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ContentValues values = new ContentValues(1); 183792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project values.put(MediaStore.Audio.Playlists.NAME, name); 184792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project uri = resolver.insert(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, values); 185792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 186792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setResult(RESULT_OK, (new Intent()).setData(uri)); 187792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project finish(); 188792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 189792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 190792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 191792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project} 192