Suggest Url Provider : Url « Network « Android






Suggest Url Provider

 
package app.test;
import android.app.Activity;
import android.app.SearchManager;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Intent;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

class SuggestUrlProvider extends ContentProvider 
{
    public static String AUTHORITY = "app.test.suggesturlprovider";
    final int SEARCH_SUGGEST = 0;
    private static final int SHORTCUT_REFRESH = 1;
    private static final UriMatcher sURIMatcher = buildUriMatcher();

    private static final String[] COLUMNS = {
            "_id",  // must include this column
            SearchManager.SUGGEST_COLUMN_TEXT_1,
            SearchManager.SUGGEST_COLUMN_TEXT_2,
            SearchManager.SUGGEST_COLUMN_INTENT_DATA,
            SearchManager.SUGGEST_COLUMN_INTENT_ACTION,
            SearchManager.SUGGEST_COLUMN_SHORTCUT_ID
            };
    
    private static UriMatcher buildUriMatcher() {
        UriMatcher matcher =  new UriMatcher(UriMatcher.NO_MATCH);
        matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT, SHORTCUT_REFRESH);
        matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT + "/*", SHORTCUT_REFRESH);
        return matcher;
    }

    @Override
    public boolean onCreate() {
        return true;
    }
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
            String sortOrder) {
      String query = selectionArgs[0];
        switch (sURIMatcher.match(uri)) {
            case SEARCH_SUGGEST:
              return getSuggestions(query);
            case SHORTCUT_REFRESH:
              return null;
            default:
                throw new IllegalArgumentException("Unknown URL " + uri);
        }
    }
    private Cursor getSuggestions(String query) 
    {
      if (query == null) return null;
      String word = getWord(query);
      if (word == null)
        return null;
        MatrixCursor cursor = new MatrixCursor(COLUMNS);
        cursor.addRow(createRow1(word));
        cursor.addRow(createRow2(word));
        return cursor;
    }
    private Object[] createRow1(String query)
    {
        return columnValuesOfQuery(query,
            "android.intent.action.VIEW",
            "http://www.thefreedictionary.com/" + query,
            "Look up in freedictionary.com for",
            query);
    }

    private Object[] createRow2(String query)
    {
        return columnValuesOfQuery(query,
            "android.intent.action.VIEW",
            "http://www.google.com/search?hl=en&source=hp&q=define%3A" + query,
            "Look up in google.com for",
            query);
    }
    private Object[] columnValuesOfQuery(String query,
        String intentAction,
        String url, 
        String text1, 
        String text2) 
    {
        return new String[] {
                query,     // _id
                text1,     // text1
                text2,     // text2
                url,       // intent_data (included when clicking on item)
                intentAction, //action
                SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT
        };
    }

    private Cursor refreshShortcut(String shortcutId, String[] projection) {
        return null;
    }

    public String getType(Uri uri) {
        switch (sURIMatcher.match(uri)) {
            case SEARCH_SUGGEST:
                return SearchManager.SUGGEST_MIME_TYPE;
            case SHORTCUT_REFRESH:
                return SearchManager.SHORTCUT_MIME_TYPE;
            default:
                throw new IllegalArgumentException("Unknown URL " + uri);
        }
    }

    public Uri insert(Uri uri, ContentValues values) {
        throw new UnsupportedOperationException();
    }

    public int delete(Uri uri, String selection, String[] selectionArgs) {
        throw new UnsupportedOperationException();
    }

    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        throw new UnsupportedOperationException();
    }
    
    private String getWord(String query)
    {
      int dotIndex = query.indexOf('.'); 
      if (dotIndex < 0)
        return null;
      return query.substring(0,dotIndex);
    }
}

public class Test extends Activity 
{
  private final static String tag ="SearchActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Intent queryIntent = getIntent();
        final String queryAction = queryIntent.getAction();
        final String queryString = queryIntent.getStringExtra(SearchManager.QUERY);
        if (Intent.ACTION_SEARCH.equals(queryAction)) 
        {
          this.doSearchQuery(queryIntent);
        }
        else if (Intent.ACTION_VIEW.equals(queryAction)) 
        {
          this.doView(queryIntent);
        }
        return;
    }
    @Override
    public void onNewIntent(final Intent newIntent) 
    {
        super.onNewIntent(newIntent);
        final Intent queryIntent = newIntent;
        final String queryAction = queryIntent.getAction();
        final String queryString = queryIntent.getStringExtra(SearchManager.QUERY);
        if (Intent.ACTION_SEARCH.equals(queryAction)) {
          this.doSearchQuery(queryIntent);
        }else if (Intent.ACTION_VIEW.equals(queryAction)){
          this.doView(queryIntent);
        }
        return;
    }
    private void doSearchQuery(final Intent queryIntent) 
    {
        final String queryString = queryIntent.getStringExtra(SearchManager.QUERY);
        appendText("You are searching for:" + queryString);
    }
    private void appendText(String msg)
    {
        TextView tv = (TextView)this.findViewById(R.id.text1);
        tv.setText(tv.getText() + "\n" + msg);
    }
    private void doView(final Intent queryIntent) 
    {
        Uri uri = queryIntent.getData();
        String action = queryIntent.getAction();
        Intent i = new Intent(action);
        i.setData(uri);
        i.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
        startActivity(i);
        this.finish();
    }
}

   
  








Related examples in the same category

1.Using Intent to open a URL
2.Process xml document from a Url
3.Showing android:autoLink property, which linkifies things like URLs and phone numbers found in the text.
4.extends ArrayAdapter to create URL history
5.Used to compress URL using the bit.ly service.
6.URL encode and decode
7.Is valid URL
8.Download from URLConnection
9.Request from an URL
10.Get Url From Img Tag
11.Returns the contents of the given URL as an array of strings
12.Read from a URL
13.Pull the raw text content of the given URL.
14.Get Video from URL
15.Gets data from URL
16.get Url Response
17.URL Encode Utils
18.Downloads a file given URL to specified destination
19.get Host From Url
20.encode Url
21.decode Url
22.Convert a byte array to a URL encoded string
23.get Url content with max retries
24.get Url By Post
25.Take a base url and a {@link Map} of parameters to build a valid url