I have this ContentProvider:
public class UserContentProvider extends ContentProvider {
    private static final String BASE_AUTHORITY = "com.myapp.providers.";
    private static final String AUTHORITY = BASE_AUTHORITY + "UserContentProvider";
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/users");
    public static final String[] PROJECTION = {
        "_id",
        "name"
    };
    private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
    static {
        URI_MATCHER.addURI(AUTHORITY, "users", 1);
    }
    private DatabaseAdapter dbAdapter;
    @Override
    public boolean onCreate() {
        dbAdapter = new DatabaseAdapter(getContext());
        return true;
    }
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
        builder.setTables("users");
        SQLiteDatabase db = dbAdapter.getReadableDatabase();
        Cursor cursor = builder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
        cursor.setNotificationUri(getContext().getContentResolver(), uri);
        return cursor;
    }
    //Other overrides removed for readability
}
I'm using this content provider only for querying the db.
I also have a DialogFragment:
public class UserSearchDialog extends DialogFragment implements LoaderManager.LoaderCallbacks<Cursor> {
    private EditText editTextSearch;
    private ListView listViewUsers;
    private SimpleCursorAdapter adapter;
    public UserSearchDialog () {}
    public static UserSearchDialog newInstance() {
        return new UserSearchDialog ();
    }
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //dialog creation code removed for readability...
        editTextSearch= (EditText)view.findViewById(R.id.editText_search);
        editTextSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
                String text = new String(s.toString());
                if (text== null || text.length() < 2)
                    return;
                getLoaderManager().restartLoader(1, null, UserSearchDialog.this);
            }
        });
        adapter = new SimpleCursorAdapter(getActivity(),
                                          android.R.layout.simple_list_item_2,
                                          null,
                                          new String[] { "_id", "name" },
                                          new int[] { android.R.id.text1, android.R.id.text2 },
                                          0);
        listViewUsers = (ListView)view.findViewById(R.id.listView_users);
        listViewUsers.setAdapter(adapter);
        getLoaderManager().initLoader(1, null, this);
        return alertDialogBuilder.create();
    }
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        if (id != 1)
            return null;
        return new CursorLoader(getActivity(),
                                UserContentProvider.CONTENT_URI,
                                UserContentProvider.PROJECTION_SIMPLE, null, null, null);
    }
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        if (adapter != null && data != null)
            adapter.swapCursor(data);
    }
    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        if (adapter != null)
            adapter.swapCursor(null);
    }
}
However, the above is not working. Whilst debugging, the content provider' onCreate and query method are never reached.
in the manifest I have:
<provider android:authorities="com.myapp.providers"
    android:exported="false"
    android:name="com.myapp.providers.UserContentProvider">
</provider>
What am I missing?