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; 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.ContentValues; 22792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.database.Cursor; 23792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.media.AudioManager; 24792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.os.Bundle; 25792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.provider.MediaStore; 26792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.text.Editable; 27792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.text.TextWatcher; 28792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.util.Log; 29792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.View; 30792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.Window; 31792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.WindowManager; 32792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.Button; 33792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.EditText; 34792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.TextView; 35792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.widget.Toast; 36792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 37792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpublic class RenamePlaylist extends Activity 38792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project{ 39792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private EditText mPlaylist; 40792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private TextView mPrompt; 41792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private Button mSaveButton; 42792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private long mRenameId; 43792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String mOriginalName; 44792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 45792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 46792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onCreate(Bundle icicle) { 47792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onCreate(icicle); 48792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setVolumeControlStream(AudioManager.STREAM_MUSIC); 49792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 50792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 51792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setContentView(R.layout.create_playlist); 525ae9f47a834282a745852f7ad22232878e9d378eRomain Guy getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, 53792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project WindowManager.LayoutParams.WRAP_CONTENT); 54792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 55792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPrompt = (TextView)findViewById(R.id.prompt); 56792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist = (EditText)findViewById(R.id.playlist); 57792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mSaveButton = (Button) findViewById(R.id.create); 58792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mSaveButton.setOnClickListener(mOpenClicked); 59792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 60792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ((Button)findViewById(R.id.cancel)).setOnClickListener(new View.OnClickListener() { 61792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onClick(View v) { 62792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project finish(); 63792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 64792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }); 65792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 66792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mRenameId = icicle != null ? icicle.getLong("rename") 67792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project : getIntent().getLongExtra("rename", -1); 68792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mOriginalName = nameForId(mRenameId); 69792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String defaultname = icicle != null ? icicle.getString("defaultname") : mOriginalName; 70792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 71792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mRenameId < 0 || mOriginalName == null || defaultname == null) { 72792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Log.i("@@@@", "Rename failed: " + mRenameId + "/" + defaultname); 73792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project finish(); 74792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return; 75792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 76792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 77792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String promptformat; 78792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (mOriginalName.equals(defaultname)) { 79792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project promptformat = getString(R.string.rename_playlist_same_prompt); 80792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 81792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project promptformat = getString(R.string.rename_playlist_diff_prompt); 82792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 83792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 84792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String prompt = String.format(promptformat, mOriginalName, defaultname); 85792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPrompt.setText(prompt); 86792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist.setText(defaultname); 87792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist.setSelection(defaultname.length()); 88792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mPlaylist.addTextChangedListener(mTextWatcher); 89792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setSaveButton(); 90792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 91792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 92792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project TextWatcher mTextWatcher = new TextWatcher() { 93792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void beforeTextChanged(CharSequence s, int start, int count, int after) { 94792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // don't care about this one 95792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 96792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onTextChanged(CharSequence s, int start, int before, int count) { 97792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // check if playlist with current name exists already, and warn the user if so. 98792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setSaveButton(); 99792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 100792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void afterTextChanged(Editable s) { 101792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project // don't care about this one 102792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 103792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 104792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 105792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private void setSaveButton() { 106538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen String typedname = mPlaylist.getText().toString(); 107538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen if (typedname.trim().length() == 0) { 108538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setEnabled(false); 109792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 110538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setEnabled(true); 111538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen if (idForplaylist(typedname) >= 0 112538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen && ! mOriginalName.equals(typedname)) { 113538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setText(R.string.create_playlist_overwrite_text); 114538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen } else { 115538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen mSaveButton.setText(R.string.create_playlist_create_text); 116538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen } 117792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 118538837ba749c5a8dafd157b17e66ad2584a5a856Marco Nelissen 119792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 120792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 121792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private int idForplaylist(String name) { 122792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = MusicUtils.query(this, MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 123792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] { MediaStore.Audio.Playlists._ID }, 124792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME + "=?", 125792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] { name }, 126792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME); 127792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project int id = -1; 128792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (c != null) { 129792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.moveToFirst(); 130792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (!c.isAfterLast()) { 131792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project id = c.getInt(0); 132792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 133792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 134792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.close(); 135792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return id; 136792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 137792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 138792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private String nameForId(long id) { 139792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor c = MusicUtils.query(this, MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 140792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] { MediaStore.Audio.Playlists.NAME }, 141792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists._ID + "=?", 142792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] { Long.valueOf(id).toString() }, 143792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME); 144792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String name = null; 145792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (c != null) { 146792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.moveToFirst(); 147792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (!c.isAfterLast()) { 148792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project name = c.getString(0); 149792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 150792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 151792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project c.close(); 152792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return name; 153792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 154792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 155792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 156792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 157792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onSaveInstanceState(Bundle outcicle) { 158792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project outcicle.putString("defaultname", mPlaylist.getText().toString()); 159792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project outcicle.putLong("rename", mRenameId); 160792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 161792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 162792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 163792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onResume() { 164792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.onResume(); 165792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 166792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 167792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private View.OnClickListener mOpenClicked = new View.OnClickListener() { 168792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void onClick(View v) { 169792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String name = mPlaylist.getText().toString(); 170792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (name != null && name.length() > 0) { 171792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ContentResolver resolver = getContentResolver(); 172792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ContentValues values = new ContentValues(1); 173792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project values.put(MediaStore.Audio.Playlists.NAME, name); 174792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project resolver.update(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 175792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project values, 176792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists._ID + "=?", 177792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project new String[] { Long.valueOf(mRenameId).toString()}); 178792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 179792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project setResult(RESULT_OK); 180792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Toast.makeText(RenamePlaylist.this, R.string.playlist_renamed_message, Toast.LENGTH_SHORT).show(); 181792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project finish(); 182792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 183792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 184792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 185792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project} 186