In general I am trying to create a Suggestion provider that would be
able to pickup emails from the contacts list.

These are my sources:

AnroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android";
      package="com.sphericbox.xmail"
      android:versionCode="1"
      android:versionName="1.0.0">

    <application android:icon="@drawable/icon" android:label="@string/
app_name">
        <activity android:name=".XMailActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category
android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category
android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                       android:resource="@xml/searchable" /
>
        </activity>

        <provider
android:name="com.sphericbox.xmail.XMailSuggestionProvider"
 
android:authorities="com.sphericbox.xmail.XMailSuggestionProvider"/>
    </application>
<uses-permission android:name="android.permission.READ_CONTACTS"></
uses-permission>
</manifest>

res/xml/searchable.xml

<?xml version="1.0" encoding="UTF-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android";
     android:label="@string/search_label"
     android:hint="@string/search_hint"
 
android:searchSuggestAuthority="com.sphericbox.xmail.XMailSuggestionProvider"
     android:searchSuggestIntentAction="android.intent.action.VIEW"/>

XMailActivity.java

package com.sphericbox.xmail;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class XMailActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Button btn = (Button) findViewById(R.id.find);
        btn.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(final View arg0) {
                                onSearchRequested();
                        }

        });
    }
}

XMailSuggestionProvider.java

package com.sphericbox.xmail;

import android.app.SearchManager;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.provider.Contacts.ContactMethods;
import android.util.Log;

public class XMailSuggestionProvider extends ContentProvider {

        private static final String TAG = "XMailSuggestionProvider";

        @Override
        public int delete(final Uri arg0, final String arg1, final String[]
arg2) {
                return 0;
        }

        @Override
        public String getType(final Uri arg0) {
                return null;
        }

        @Override
        public Uri insert(final Uri arg0, final ContentValues arg1) {
                return null;
        }

        @Override
        public boolean onCreate() {
                return false;
        }

        @Override
        public Cursor query(final Uri uri,
                        final String[] projection,
                        final String selection,
                        final String[] selectionArgs,
                        final String sortOrder) {
                Log.d(TAG, "uri: " + uri);
                final Uri baseUri = ContactMethods.CONTENT_EMAIL_URI;
                final Cursor c = 
getContext().getContentResolver().query(baseUri,
                                new String[] {"_id", "data"},
                                null,
                                null,
                                null);
                final MatrixCursor result = new MatrixCursor(new String[] {
                                SearchManager.SUGGEST_COLUMN_TEXT_1});
                try {
                        while (c.moveToNext()) {
                                for (int i = 0; i < c.getColumnCount(); i++) {
                                        Log.d(TAG, c.getColumnName(i) + " = " + 
c.getString(i));
                                }
                                final String resultText = c.getString(1);
                                result.addRow(new Object[] {resultText});
                        }
                } finally {
                        c.close();
                }
                return result;
        }

        @Override
        public int update(final Uri arg0,
                        final ContentValues arg1,
                        final String arg2,
                        final String[] arg3) {
                return 0;
        }
}

As I have written before no combination of columns/values for the
Cursor 'result' worked for me so far.. :( would appreciate any idea or
feedback

On Oct 26, 6:41 pm, shotwave <[EMAIL PROTECTED]> wrote:
> Hi, I am trying to implemente a custom suggestion provider which will
> allow to promt user in selecting email addresses. Unfortunately no
> matter what I do I keep getting the
>
> '10-26 22:22:02.871: WARN/SearchDialog(565): Suggestions cursor
> discarded due to missing required columns.'
>
> message in console, though looks like I have specified all the
> possible columns in the resulting cursor...
>
> final MatrixCursor result = new MatrixCursor(new String[] {
>                                 SearchManager.SUGGEST_COLUMN_FORMAT,
>                                 SearchManager.SUGGEST_COLUMN_TEXT_1,
>                                 SearchManager.SUGGEST_COLUMN_TEXT_2,
>                                 SearchManager.SUGGEST_COLUMN_ICON_1,
>                                 SearchManager.SUGGEST_COLUMN_ICON_2,
>                                 SearchManager.SUGGEST_COLUMN_INTENT_ACTION,
>                                 SearchManager.SUGGEST_COLUMN_INTENT_DATA,
>                                 SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID,
>                                 SearchManager.SUGGEST_COLUMN_QUERY,
>                                 SearchManager.SUGGEST_MIME_TYPE,
>                                 SearchManager.SUGGEST_URI_PATH_QUERY});
> // fill the cursor using addRow(Object[])
> return result;
>
> what am I doing wrong?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to