Android Open Source - PlayTunes Search Songs Adapter






From Project

Back to project page PlayTunes.

License

The source code is released under:

Copyright (c) 2014, Impeccable Labs, LLC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions ar...

If you think the Android project PlayTunes listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.ideabag.playtunes.adapter.search;
/*  w w  w .j  a va2 s .  c  om*/
import com.ideabag.playtunes.adapter.SongListAdapter;
import com.ideabag.playtunes.database.MediaQuery;
import com.ideabag.playtunes.util.ISearchableAdapter;

import android.content.Context;
import android.provider.MediaStore;
import android.view.View.OnClickListener;

public class SearchSongsAdapter extends SongListAdapter implements ISearchableAdapter {
  
  private static final String SEPARATORS = ":|;|,|.|-|_|\"|'|\\s|";
  
  public static final String TAG = "SongSearchAdapter";
  
  private int mTruncateAmount;
  
  public SearchSongsAdapter( Context context, OnClickListener menuClickListener, String searchTerms, int truncated, MediaQuery.OnQueryCompletedListener listener ) {
    super(context, menuClickListener);
    
    mTruncateAmount = truncated;
    
    setOnQueryCompletedListener( listener );
    
    if ( null != searchTerms && searchTerms.length() > 0 ) {
      
      setSearchTerms( searchTerms );
        
    }
    
  }
  
  //
  // This is where the search query is generated using the SQL LIKE operator, we use a dumb algorithm to determine a 'best' match
  // If a term is anywhere in the title, artist, or album ('%term%') it gets 3 points,
  // if a term is at the beginning of the title, artist, or album ('term%') it gets 30 points
  // if a term is in the title, artist, or album and is preceded by whitespace (' +term%') it gets 9 points
  // 
  
  @Override public void setSearchTerms( String searchTerms ) {
    
    String[] terms = searchTerms.split( "\\s+" );
    
    String mRelevance = "("; 
    
    for ( int i = 0, count = terms.length; i < count; i++ ) {
      
      String term = terms[ i ];
      
      if ( i > 0 ) {
        
        mRelevance += "+";
        
      }
      
      mRelevance += "3 * (" + MediaStore.Audio.Media.TITLE + " LIKE '%" + term + "%' )";
      mRelevance += "+ 30 * (" + MediaStore.Audio.Media.TITLE + " LIKE '" + term + "%' )";
      mRelevance += "+ 9 * (" + MediaStore.Audio.Media.TITLE + " LIKE '% +" + term + "%' )";
      
      mRelevance += "+ (" + MediaStore.Audio.Media.ARTIST + " LIKE '%" + term + "%' )";
      mRelevance += "+ 10 * (" + MediaStore.Audio.Media.ARTIST + " LIKE '" + term + "%' )";
      mRelevance += "+ 3 * (" + MediaStore.Audio.Media.ARTIST + " LIKE '% +" + term + "%' )";
      
      mRelevance += "+ (" + MediaStore.Audio.Media.ALBUM + " LIKE '%" + term + "%' )";
      mRelevance += "+ 10 * (" + MediaStore.Audio.Media.ALBUM + " LIKE '" + term + "%' )";
      mRelevance += "+ 3 * (" + MediaStore.Audio.Media.ALBUM + " LIKE '% +" + term + "%' )";
      
    }
    
    mRelevance += ") WEIGHT";
    
      String[] songSearchSelection = new String[] {
          
          MediaStore.Audio.Media._ID,
          
          MediaStore.Audio.Media.TITLE,
          MediaStore.Audio.Media.ARTIST,
          MediaStore.Audio.Media.ALBUM,
          MediaStore.Audio.Media.TRACK,
          MediaStore.Audio.Media.DATA,
          MediaStore.Audio.Media.ALBUM_ID,
          MediaStore.Audio.Media.ARTIST_ID,
          mRelevance
          
        };
      
      //android.util.Log.i( TAG + "@setQuery", "Weight projection: " + mRelevance );
    
      mQuery = new MediaQuery(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        songSearchSelection,
        MediaStore.Audio.Media.IS_MUSIC + " != 0 AND WEIGHT > 0",
        null,
        "WEIGHT DESC"
        );
      
      //setMediaQuery( mQuery );
      requery();
      
  }
  
  @Override public int getCount() {
    
    int count = 0;
    
    if ( null != mCursor ) {
      
      if ( mTruncateAmount <= 0 ) {
        
        count = mCursor.getCount();
        
      } else {
        
        count = ( mCursor.getCount() > mTruncateAmount ? mTruncateAmount : mCursor.getCount() );
        
      }
      
    }
    
    return count;
    
  }
  
  public int hasMore() {
    
    return ( mCursor != null && mTruncateAmount > 0 && mCursor.getCount() > mTruncateAmount ? mCursor.getCount() - mTruncateAmount : 0 );
    
  }
  
  public void setTruncateAmount( int mAmt ) {
    
    mTruncateAmount = mAmt;
    notifyDataSetChanged();
    
  }
  
}




Java Source Code List

com.ideabag.playtunes.PlaylistManager.java
com.ideabag.playtunes.DragNDrop.DragListener.java
com.ideabag.playtunes.DragNDrop.DragNDropListView.java
com.ideabag.playtunes.DragNDrop.DropListener.java
com.ideabag.playtunes.DragNDrop.RemoveListener.java
com.ideabag.playtunes.activity.MainActivity.java
com.ideabag.playtunes.activity.NowPlayingActivity.java
com.ideabag.playtunes.activity.SettingsActivity.java
com.ideabag.playtunes.adapter.AlbumListAdapter.java
com.ideabag.playtunes.adapter.AlbumsAllAdapter.java
com.ideabag.playtunes.adapter.AlbumsOneAdapter.java
com.ideabag.playtunes.adapter.ArtistAlbumsAdapter.java
com.ideabag.playtunes.adapter.ArtistAllSongsAdapter.java
com.ideabag.playtunes.adapter.ArtistListAdapter.java
com.ideabag.playtunes.adapter.ArtistSinglesAdapter.java
com.ideabag.playtunes.adapter.ArtistsAllAdapter.java
com.ideabag.playtunes.adapter.AsyncQueryAdapter.java
com.ideabag.playtunes.adapter.GenresAllAdapter.java
com.ideabag.playtunes.adapter.GenresOneAdapter.java
com.ideabag.playtunes.adapter.NavigationListAdapter.java
com.ideabag.playtunes.adapter.PlaylistsAllAdapter.java
com.ideabag.playtunes.adapter.PlaylistsOneAdapter.java
com.ideabag.playtunes.adapter.SongListAdapter.java
com.ideabag.playtunes.adapter.SongsAllAdapter.java
com.ideabag.playtunes.adapter.search.SearchAlbumsAdapter.java
com.ideabag.playtunes.adapter.search.SearchArtistsAdapter.java
com.ideabag.playtunes.adapter.search.SearchSongsAdapter.java
com.ideabag.playtunes.database.MediaQuery.java
com.ideabag.playtunes.dialog.AddToPlaylistDialogFragment.java
com.ideabag.playtunes.dialog.CreatePlaylistDialogFragment.java
com.ideabag.playtunes.dialog.FeedbackDialogFragment.java
com.ideabag.playtunes.dialog.PlaylistDeleteDialogFragment.java
com.ideabag.playtunes.dialog.PlaylistMenuDialogFragment.java
com.ideabag.playtunes.dialog.PlaylistRenameDialogFragment.java
com.ideabag.playtunes.dialog.RateAppDialogFragment.java
com.ideabag.playtunes.dialog.SongMenuDialogFragment.java
com.ideabag.playtunes.fragment.AlbumsAllFragment.java
com.ideabag.playtunes.fragment.AlbumsOneFragment.java
com.ideabag.playtunes.fragment.ArtistSinglesFragment.java
com.ideabag.playtunes.fragment.ArtistsAllFragment.java
com.ideabag.playtunes.fragment.ArtistsOneFragment.java
com.ideabag.playtunes.fragment.FooterControlsFragment.java
com.ideabag.playtunes.fragment.GenresAllFragment.java
com.ideabag.playtunes.fragment.GenresOneFragment.java
com.ideabag.playtunes.fragment.MusicBrowserFragment.java
com.ideabag.playtunes.fragment.NavigationDrawerFragment.java
com.ideabag.playtunes.fragment.NavigationFragment.java
com.ideabag.playtunes.fragment.PlaylistsAllFragment.java
com.ideabag.playtunes.fragment.PlaylistsOneFragment.java
com.ideabag.playtunes.fragment.SaveScrollListFragment.java
com.ideabag.playtunes.fragment.SongsFragment.java
com.ideabag.playtunes.fragment.TrackProgressFragment.java
com.ideabag.playtunes.fragment.search.SearchAlbumsFragment.java
com.ideabag.playtunes.fragment.search.SearchAllFragment.java
com.ideabag.playtunes.fragment.search.SearchArtistsFragment.java
com.ideabag.playtunes.fragment.search.SearchFragment.java
com.ideabag.playtunes.fragment.search.SearchSongsFragment.java
com.ideabag.playtunes.fragment.search.SearchSuggestionsFragment.java
com.ideabag.playtunes.media.AudioFocusHelper.java
com.ideabag.playtunes.media.MusicFocusable.java
com.ideabag.playtunes.media.MusicIntentReceiver.java
com.ideabag.playtunes.media.PlaylistMediaPlayer.java
com.ideabag.playtunes.media.RemoteControlClientCompat.java
com.ideabag.playtunes.media.RemoteControlHelper.java
com.ideabag.playtunes.service.LockscreenManager.java
com.ideabag.playtunes.service.MusicPlayerService.java
com.ideabag.playtunes.service.PlaybackNotification.java
com.ideabag.playtunes.util.AdmobUtil.java
com.ideabag.playtunes.util.AlbumSongsCountTask.java
com.ideabag.playtunes.util.AsyncDrawable.java
com.ideabag.playtunes.util.BitmapWorkerTask.java
com.ideabag.playtunes.util.CheckRemoteVersionFileTask.java
com.ideabag.playtunes.util.DrawerLayout.java
com.ideabag.playtunes.util.GAEvent.java
com.ideabag.playtunes.util.IMusicBrowser.java
com.ideabag.playtunes.util.ISearchableAdapter.java
com.ideabag.playtunes.util.LoadAlbumStackTask.java
com.ideabag.playtunes.util.MergeAdapter.java
com.ideabag.playtunes.util.QueryCountTask.java
com.ideabag.playtunes.util.SackOfViewsAdapter.java
com.ideabag.playtunes.util.SearchHistory.java
com.ideabag.playtunes.util.StarToggleTask.java
com.ideabag.playtunes.util.TrackerSingleton.java