diff options
| author | Marco Nelissen <marcone@google.com> | 2010-04-05 14:59:45 -0700 |
|---|---|---|
| committer | Marco Nelissen <marcone@google.com> | 2010-04-05 15:53:43 -0700 |
| commit | 3021e718e2cea50b88f3121a5b3a39c2fd32cc03 (patch) | |
| tree | cb949cb6de5830d0a53af3c0c2d6bc773b23d447 /apps/Development/src/com/android | |
| parent | c125ef209b3e15e94e967a6639bf700b46fd6a1c (diff) | |
| download | android_development-3021e718e2cea50b88f3121a5b3a39c2fd32cc03.tar.gz android_development-3021e718e2cea50b88f3121a5b3a39c2fd32cc03.tar.bz2 android_development-3021e718e2cea50b88f3121a5b3a39c2fd32cc03.zip | |
Rename the "Media Scanner" DevTool to "Media Provider", and add
functionality to insert random filler data in to the database.
Change-Id: I632c7c8fea8aceca7b71dab88f3b01ed7ae49a92
Diffstat (limited to 'apps/Development/src/com/android')
| -rw-r--r-- | apps/Development/src/com/android/development/MediaScannerActivity.java | 215 |
1 files changed, 199 insertions, 16 deletions
diff --git a/apps/Development/src/com/android/development/MediaScannerActivity.java b/apps/Development/src/com/android/development/MediaScannerActivity.java index f78910ac4..04f641422 100644 --- a/apps/Development/src/com/android/development/MediaScannerActivity.java +++ b/apps/Development/src/com/android/development/MediaScannerActivity.java @@ -17,56 +17,239 @@ package com.android.development; import android.app.Activity; +import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.BroadcastReceiver; +import android.database.sqlite.SQLiteConstraintException; import android.net.Uri; +import android.os.Bundle; import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.provider.MediaStore; +import android.provider.MediaStore.Audio; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; import android.widget.TextView; +import java.util.Random; + public class MediaScannerActivity extends Activity { + private TextView mTitle; + private int mNumToInsert = 20; + private int mArtists; + private int mAlbums; + private int mSongs; + private ContentResolver mResolver; + private Uri mAudioUri; + ContentValues mValues[] = new ContentValues[10]; + Random mRandom = new Random(); + StringBuilder mBuilder = new StringBuilder(); + public MediaScannerActivity() { } - + /** Called when the activity is first created or resumed. */ @Override - public void onResume() { - super.onResume(); - + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + setContentView(R.layout.media_scanner_activity); - + IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); intentFilter.addDataScheme("file"); registerReceiver(mReceiver, intentFilter); - - sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" - + Environment.getExternalStorageDirectory()))); - + + EditText t = (EditText) findViewById(R.id.numsongs); + t.addTextChangedListener(new TextWatcher() { + + public void afterTextChanged(Editable s) { + String text = s.toString(); + try { + mNumToInsert = Integer.valueOf(text); + } catch (NumberFormatException ex) { + mNumToInsert = 20; + } + setInsertButtonText(); + } + + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + }); mTitle = (TextView) findViewById(R.id.title); - mTitle.setText("Sent ACTION_MEDIA_MOUNTED to trigger the Media Scanner."); + mResolver = getContentResolver(); + mAudioUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + + for (int i = 0; i < 10; i++) { + mValues[i] = new ContentValues(); + } + setInsertButtonText(); } /** Called when the activity going into the background or being destroyed. */ @Override - public void onPause() { - super.onPause(); + public void onDestroy() { unregisterReceiver(mReceiver); + mInsertHandler.removeMessages(0); + super.onDestroy(); } - + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) { - mTitle.setText("Media Scanner started scanning " + intent.getData().getPath()); + mTitle.setText("Media Scanner started scanning " + intent.getData().getPath()); } else if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) { - mTitle.setText("Media Scanner finished scanning " + intent.getData().getPath()); + mTitle.setText("Media Scanner finished scanning " + intent.getData().getPath()); } } }; - private TextView mTitle; + public void startScan(View v) { + sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + + Environment.getExternalStorageDirectory()))); + + mTitle.setText("Sent ACTION_MEDIA_MOUNTED to trigger the Media Scanner."); + } + + private void setInsertButtonText() { + String label = getString(R.string.insertbutton, Integer.valueOf(mNumToInsert)); + Button b = (Button) findViewById(R.id.insertbutton); + b.setText(label); + } + + + public void insertItems(View v) { + if (mInsertHandler.hasMessages(0)) { + mInsertHandler.removeMessages(0); + setInsertButtonText(); + } else { + mInsertHandler.sendEmptyMessage(0); + } + } + + Handler mInsertHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + + if (mNumToInsert-- > 0) { + addAlbum(); + runOnUiThread(mDisplayUpdater); + + if (!isFinishing()) { + sendEmptyMessage(0); + } + } + } + }; + + Runnable mDisplayUpdater = new Runnable() { + public void run() { + mTitle.setText("Added " + mArtists + " artists, " + mAlbums + " albums, " + + mSongs + " songs."); + } + }; + + // Add one more album (with 10 songs) to the database. This will be a compilation album, + // with one album artist for the album, and a separate artist for each song. + private void addAlbum() { + try { + String albumArtist = "Various Artists"; + String albumName = getRandomWord(3); + int baseYear = 1969 + mRandom.nextInt(30); + for (int i = 0; i < 10; i++) { + mValues[i].clear(); + String artist = getRandomName(); + final ContentValues map = mValues[i]; + map.put(MediaStore.MediaColumns.DATA, + "http://bogus/" + albumName + "/" + artist + "_" + i); + map.put(MediaStore.MediaColumns.TITLE, + getRandomWord(4) + " " + getRandomWord(2) + " " + (i + 1)); + map.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); + + map.put(Audio.Media.ARTIST, artist); + map.put("album_artist", albumArtist); + map.put(Audio.Media.ALBUM, albumName); + map.put(Audio.Media.TRACK, i + 1); + map.put(Audio.Media.DURATION, 4*60*1000); + map.put(Audio.Media.IS_MUSIC, 1); + map.put(Audio.Media.YEAR, baseYear + mRandom.nextInt(10)); + } + mResolver.bulkInsert(mAudioUri, mValues); + mSongs += 10; + mAlbums++; + mArtists += 11; + } catch (SQLiteConstraintException ex) { + Log.d("@@@@", "insert failed", ex); + } + } + + /** + * Some code to generate random names. This just strings together random + * syllables, and randomly inserts a modifier between the first + * and last name. + */ + private String[] elements = new String[] { + "ab", "am", + "bra", "bri", + "ci", "co", + "de", "di", "do", + "fa", "fi", + "ki", + "la", "li", + "ma", "me", "mi", "mo", + "na", "ni", + "pa", + "ta", "ti", + "vi", "vo" + }; + + private String getRandomWord(int len) { + int max = elements.length; + mBuilder.setLength(0); + for (int i = 0; i < len; i++) { + mBuilder.append(elements[mRandom.nextInt(max)]); + } + char c = mBuilder.charAt(0); + c = Character.toUpperCase(c); + mBuilder.setCharAt(0, c); + return mBuilder.toString(); + } + + private String getRandomName() { + boolean longfirst = mRandom.nextInt(5) < 3; + String first = getRandomWord(longfirst ? 3 : 2); + String last = getRandomWord(3); + switch (mRandom.nextInt(6)) { + case 1: + if (!last.startsWith("Di")) { + last = "di " + last; + } + break; + case 2: + last = "van " + last; + break; + case 3: + last = "de " + last; + break; + } + return first + " " + last; + } + + + } |
