Android Open Source - downtown Keyword Provider






From Project

Back to project page downtown.

License

The source code is released under:

GNU General Public License

If you think the Android project downtown 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 org.dklisiaris.downtown.providers;
//  www .  j a  v a 2 s  .com

import java.util.HashMap;

import org.dklisiaris.downtown.db.DBHandler;
import org.dklisiaris.downtown.db.DBInterface;
import org.dklisiaris.downtown.providers.KeywordContract.Keywords;

import android.app.SearchManager;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
import android.util.SparseArray;

public class KeywordProvider extends ContentProvider {
  private DBHandler dbHandler;
  private Context ctx;
  
  // helper constants for use with the UriMatcher
  private static final int KEYWORD_LIST = 1;
  private static final int KEYWORD_ID = 2;
  private static final int SEARCH_SUGGEST = 3;
  private static final UriMatcher URI_MATCHER;
  public static final int TYPE_NONE = 0;
  public static final int TYPE_CATEGORY = 1;
  public static final int TYPE_COMPANY = 2;
  public static final int TYPE_BOTH = 3;
  private SparseArray<String> catKeyIndex = null;
  private SparseArray<String> comKeyIndex = null;
  
  
  // prepare the UriMatcher
  static {
    URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
    URI_MATCHER.addURI(KeywordContract.AUTHORITY, "keywords", KEYWORD_LIST);
    URI_MATCHER.addURI(KeywordContract.AUTHORITY, "keywords/#", KEYWORD_ID);  
    // to get suggestions...
    URI_MATCHER.addURI(KeywordContract.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH_SUGGEST);
    URI_MATCHER.addURI(KeywordContract.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH_SUGGEST);
  }
  
  @Override
  public boolean onCreate() {
    ctx = getContext();
    dbHandler = DBHandler.getInstance(ctx);
    catKeyIndex = dbHandler.getCategoryKeywordsSparse();
    comKeyIndex = dbHandler.getCompanyKeywordsSparse();
    
    return false;
  }

  @Override
  public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {
        
    switch (URI_MATCHER.match(uri)) {
          case SEARCH_SUGGEST:
              if (selectionArgs == null) {
                throw new IllegalArgumentException(
                    "selectionArgs must be provided for the Uri: " + uri);
              }
              return getSuggestions(selectionArgs[0]);
      case KEYWORD_LIST:
                if (selectionArgs == null) {
                    throw new IllegalArgumentException(
                        "selectionArgs must be provided for the Uri: " + uri);
                }
                return getSuggestions(selectionArgs[0]);
      case KEYWORD_ID:
        break;
      default:
        throw new IllegalArgumentException("Unsupported URI: " + uri);
    }
        return null;
  }
  
  @Override
  public String getType(Uri uri) {
    switch (URI_MATCHER.match(uri)) {
      case SEARCH_SUGGEST:
              return SearchManager.SUGGEST_MIME_TYPE;
      case KEYWORD_LIST:
        return Keywords.CONTENT_TYPE;
      case KEYWORD_ID:
        return Keywords.CONTENT_ITEM_TYPE;
      default:
        throw new IllegalArgumentException("Unsupported URI: " + uri);
    }
  }
  
    private Cursor getSuggestions(String query) {
        query = prepareQuery(query);
        //Log.d("PROVIDER QUERY: ",query);
        String[] qTokens = query.split(" ");
        HashMap<String,Integer> queryHash = new HashMap<String,Integer>();
        if(qTokens.length>0 && qTokens[0].length()>1){          
            for(String q : qTokens){
              int type = evaluateQuery(q);
              //Log.d("qTOKEN",q+": "+type);
              queryHash.put(q, type);
            }          
        }

        String[] columns = new String[] {
        DBInterface.KEY_ID,
        SearchManager.SUGGEST_COLUMN_TEXT_1,    
            //SearchManager.SUGGEST_COLUMN_TEXT_2,
         /* SearchManager.SUGGEST_COLUMN_SHORTCUT_ID,
                          (only if you want to refresh shortcuts)*/
            SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID};

        return dbHandler.getSuggestionsMatches(query, columns, queryHash);
      }
  
  /**
   * The following method should not be used anywhere in the app
   * since this provider is only for search suggestions queries.
   */
  @Override
  public int delete(Uri uri, String selection, String[] selectionArgs) {
    throw new UnsupportedOperationException();
  }

  /**
   * The following method should not be used anywhere in the app
   * since this provider is only for search suggestions queries.
   */
  @Override
  public Uri insert(Uri uri, ContentValues values) {
    throw new UnsupportedOperationException();
  }

  /**
   * The following method should not be used anywhere in the app
   * since this provider is only for search suggestions queries.
   */
  @Override
  public int update(Uri uri, ContentValues values, String selection,
      String[] selectionArgs) {
    throw new UnsupportedOperationException();
  }
  
  private String prepareQuery(String query){
    String q = query;
    if(q.length()>48)
        q = q.substring(0,47); 
    q=q.trim();
    q = q.toLowerCase();
        q=q.replace('?', '?');
        q=q.replace('?', '?');
        q=q.replace('?', '?');
        q=q.replace('??', '?');
        q=q.replace('?', '?');
        q=q.replace('?', '?');
        q=q.replace('?', '?');
        q=q.replace('?', '?');
    q=q.toUpperCase();
    
    return q;
  }
  
  private int evaluateQuery(String word){
    boolean isCatKey = isCategoryKeyword(word);
    boolean isComKey = isCompanyKeyword(word);
    
    if(isCatKey && isComKey){
      return TYPE_BOTH;
    }
    else if(isCatKey){
      return TYPE_CATEGORY;
    }
    else if(isComKey){
      return TYPE_COMPANY;
    }
    else{
      return TYPE_NONE;
    }

  }
  
  private boolean isCategoryKeyword(String word){
    if(catKeyIndex == null){
      catKeyIndex = dbHandler.getCategoryKeywordsSparse();
    }
    
    for(int i = 0; i < catKeyIndex.size(); i++) {
      int id = catKeyIndex.keyAt(i);          
      String kword = catKeyIndex.get(id);
      if (kword.contains(word)){
        return true;
      }           
    }
    return false;
  }
  
  private boolean isCompanyKeyword(String word){
    if(comKeyIndex == null){
      comKeyIndex = dbHandler.getCompanyKeywordsSparse();
    }
    
    for(int i = 0; i < comKeyIndex.size(); i++) {
      int id = comKeyIndex.keyAt(i);          
      String kword = comKeyIndex.get(id);
      if (kword.contains(word)){
        Log.d("this is com key", kword+" "+word);
        return true;
      }           
    }
    return false;
  }

}




Java Source Code List

com.google.maps.android.BuildConfig.java
com.google.maps.android.BuildConfig.java
com.google.maps.android.MarkerManager.java
com.google.maps.android.MathUtil.java
com.google.maps.android.PolyUtil.java
com.google.maps.android.SphericalUtil.java
com.google.maps.android.clustering.ClusterItem.java
com.google.maps.android.clustering.ClusterManager.java
com.google.maps.android.clustering.Cluster.java
com.google.maps.android.clustering.algo.Algorithm.java
com.google.maps.android.clustering.algo.GridBasedAlgorithm.java
com.google.maps.android.clustering.algo.NonHierarchicalDistanceBasedAlgorithm.java
com.google.maps.android.clustering.algo.PreCachingAlgorithmDecorator.java
com.google.maps.android.clustering.algo.StaticCluster.java
com.google.maps.android.clustering.view.ClusterRenderer.java
com.google.maps.android.clustering.view.DefaultClusterRenderer.java
com.google.maps.android.geometry.Bounds.java
com.google.maps.android.geometry.Point.java
com.google.maps.android.projection.Point.java
com.google.maps.android.projection.SphericalMercatorProjection.java
com.google.maps.android.quadtree.PointQuadTree.java
com.google.maps.android.ui.BubbleIconFactory.java
com.google.maps.android.ui.IconGenerator.java
com.google.maps.android.ui.RotationLayout.java
com.google.maps.android.ui.SquareTextView.java
com.sothree.slidinguppanel.SlidingUpPanelLayout.java
com.sothree.slidinguppanel.library.BuildConfig.java
com.sothree.slidinguppanel.library.BuildConfig.java
org.dklisiaris.downtown.Addresses.java
org.dklisiaris.downtown.BuildConfig.java
org.dklisiaris.downtown.FavsActivity.java
org.dklisiaris.downtown.GlobalData.java
org.dklisiaris.downtown.Intro.java
org.dklisiaris.downtown.MainActivity.java
org.dklisiaris.downtown.Manifest.java
org.dklisiaris.downtown.MapActivity.java
org.dklisiaris.downtown.MoreActivity.java
org.dklisiaris.downtown.Products.java
org.dklisiaris.downtown.SearchActivity.java
org.dklisiaris.downtown.Search.java
org.dklisiaris.downtown.SingleListItem.java
org.dklisiaris.downtown.Subcategories.java
org.dklisiaris.downtown.SubcatsAndFilters.java
org.dklisiaris.downtown.Tabs.java
org.dklisiaris.downtown.TestActivity.java
org.dklisiaris.downtown.WebViewActivity.java
org.dklisiaris.downtown.Websites.java
org.dklisiaris.downtown.actionbar.ActionBar.java
org.dklisiaris.downtown.actionbar.ScrollingTextView.java
org.dklisiaris.downtown.adapters.AddressFilterAdapter.java
org.dklisiaris.downtown.adapters.CustomAdapter.java
org.dklisiaris.downtown.adapters.CustomStringAdapter.java
org.dklisiaris.downtown.adapters.CustomSuggestionsAdapter.java
org.dklisiaris.downtown.adapters.MultiSelectionAdapter.java
org.dklisiaris.downtown.adapters.SubcatsAdapter.java
org.dklisiaris.downtown.db.Banner.java
org.dklisiaris.downtown.db.Category.java
org.dklisiaris.downtown.db.Company.java
org.dklisiaris.downtown.db.DBHandler.java
org.dklisiaris.downtown.db.DBInterface.java
org.dklisiaris.downtown.db.Image.java
org.dklisiaris.downtown.db.InitData.java
org.dklisiaris.downtown.db.Keyword.java
org.dklisiaris.downtown.db.Mapping.java
org.dklisiaris.downtown.db.Product.java
org.dklisiaris.downtown.db.QueryBuilder.java
org.dklisiaris.downtown.downloader.DownloadTask.java
org.dklisiaris.downtown.downloader.NotificationHelper.java
org.dklisiaris.downtown.helper.AccessAssets.java
org.dklisiaris.downtown.helper.AlertDialogManager.java
org.dklisiaris.downtown.helper.ConnectionDetector.java
org.dklisiaris.downtown.helper.FileCache.java
org.dklisiaris.downtown.helper.ImageLoader.java
org.dklisiaris.downtown.helper.InfoHelper.java
org.dklisiaris.downtown.helper.KeyboardUtil.java
org.dklisiaris.downtown.helper.MemoryCache.java
org.dklisiaris.downtown.helper.ShareHelper.java
org.dklisiaris.downtown.helper.UpdateConfirmDialog.java
org.dklisiaris.downtown.helper.UpdateHelper.java
org.dklisiaris.downtown.helper.Utils.java
org.dklisiaris.downtown.helper.XMLParser.java
org.dklisiaris.downtown.maps.AbstractMapActivity.java
org.dklisiaris.downtown.maps.CompanyMarker.java
org.dklisiaris.downtown.maps.DirectionsInfo.java
org.dklisiaris.downtown.maps.GMapV2Direction.java
org.dklisiaris.downtown.maps.Nearby.java
org.dklisiaris.downtown.maps.PopupAdapter.java
org.dklisiaris.downtown.providers.KeywordContract.java
org.dklisiaris.downtown.providers.KeywordProvider.java
org.dklisiaris.downtown.widgets.AspectRatioImageView.java
org.dklisiaris.downtown.widgets.CheckableRelativeLayout.java
org.dklisiaris.downtown.widgets.CustomScrollView.java
org.dklisiaris.downtown.widgets.FlipAnimator.java
org.dklisiaris.downtown.widgets.InertCheckBox.java
org.dklisiaris.downtown.widgets.MultiSpinner.java