MusicList.java :  » Game » mchairs » miecak » chairs » Android Open Source

Android Open Source » Game » mchairs 
mchairs » miecak » chairs » MusicList.java
package miecak.chairs;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SectionIndexer;
import android.widget.AdapterView.OnItemClickListener;

public class MusicList extends Activity{

  private ListView musicList;
  private String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
  private Cursor cursor;
  private List<String> songs = new ArrayList<String>();
  private String [] projection = {  
        MediaStore.Audio.Media._ID,  
        MediaStore.Audio.Media.ARTIST,  
        MediaStore.Audio.Media.TITLE,  
        MediaStore.Audio.Media.DATA,  
        MediaStore.Audio.Media.DISPLAY_NAME,  
        MediaStore.Audio.Media.DURATION  
  }; 
  
   /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.musiclist);
          
      //initialize the cursor
      //The query results are sorted, so no need
      //to do that again
      cursor = this.managedQuery(  
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,  
            projection,  
            selection,  
            null,  
            MediaStore.Audio.Media.ARTIST);
      
      //iterate through all the sonds and add them
      //to our song list
      while(cursor.moveToNext()){  
        songs.add(cursor.getString(1) + "-" +   cursor.getString(2));  
      }
          
      //create a custom arrayAdapter for our music list
      MyIndexerAdapter<String> adapter = new MyIndexerAdapter<String>(this,
          android.R.layout.simple_list_item_1, songs);
      
      //get the music list and set the adapter
      musicList = (ListView)findViewById(R.id.musicListView);
      //enable fastScroll
      musicList.setFastScrollEnabled(true);
      musicList.setAdapter(adapter);
      
      //add an onItemClickListener to our list to handle the selection
      //of a song
      musicList.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
      cursor.moveToPosition(position);
      Uri songPath = Uri.parse(cursor.getString(3));
      Intent intent = new Intent(null,songPath);
      setResult(Activity.RESULT_OK, intent);
      finish();
    }
      });
      
    }
    
    class MyIndexerAdapter<T> extends ArrayAdapter<T> implements SectionIndexer {
      
        //ArrayList<String> myElements;
        HashMap<String, Integer> alphaIndexer;

        String[] sections;

        public MyIndexerAdapter(Context context, int textViewResourceId,
                        List<T> objects) {
                super(context, textViewResourceId, objects);
                //myElements = (ArrayList<String>) objects;
                // here is the tricky stuff
                alphaIndexer = new HashMap<String, Integer>();
                // in this hashmap we will store here the positions for
                // the sections

                int size = songs.size();
                for (int i = size - 1; i >= 0; i--) {
                        String element = songs.get(i);
                        alphaIndexer.put(element.substring(0, 1).toUpperCase(), i);
                //We store the first letter of the word, and its index.
                //The Hashmap will replace the value for identical keys are putted in
                }

                // now we have an hashmap containing for each first-letter
                // sections(key), the index(value) in where this sections begins

                // we have now to build the sections(letters to be displayed)
                // array .it must contains the keys, and must (I do so...) be
                // ordered alphabetically

                Set<String> keys = alphaIndexer.keySet(); // set of letters ...sets
                // cannot be sorted...

                Iterator<String> it = keys.iterator();
                ArrayList<String> keyList = new ArrayList<String>(); // list can be
                // sorted

                while (it.hasNext()) {
                        String key = it.next();
                        keyList.add(key);
                }

                Collections.sort(keyList);

                sections = new String[keyList.size()]; // simple conversion to an
                // array of object
                keyList.toArray(sections);
        }

        @Override
        public int getPositionForSection(int section) {
                String letter = sections[section];
                return alphaIndexer.get(letter);
        }

        @Override
        public int getSectionForPosition(int position) {
                Log.v("getSectionForPosition", "called");
                return 0;
        }

        @Override
        public Object[] getSections() {
                return sections; // to string will be called each object, to display
                // the letter
        }

    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.