Android Open Source - evernote-sdk-android Search Notes






From Project

Back to project page evernote-sdk-android.

License

The source code is released under:

Apache License

If you think the Android project evernote-sdk-android 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

/*
 * Copyright 2012 Evernote Corporation/*w ww . ja  va2 s  .  co  m*/
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.evernote.android.sample;

import android.app.SearchManager;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.util.Pair;
import android.view.*;
import android.view.inputmethod.EditorInfo;
import android.widget.*;

import com.evernote.client.android.AsyncLinkedNoteStoreClient;
import com.evernote.client.android.OnClientCallback;
import com.evernote.edam.notestore.NoteFilter;
import com.evernote.edam.notestore.NoteMetadata;
import com.evernote.edam.notestore.NotesMetadataList;
import com.evernote.edam.notestore.NotesMetadataResultSpec;
import com.evernote.edam.type.LinkedNotebook;
import com.evernote.edam.type.NoteSortOrder;
import com.evernote.thrift.transport.TTransportException;
import java.util.ArrayList;
/**
 * This sample shows how to search Evernote notebooks.
 * <p/>
 * class created by @
 */
public class SearchNotes extends ParentActivity {

    /**
     * *************************************************************************
     * The following values and code are simply part of the demo application.  *
     * *************************************************************************
     */

    private static final String LOGTAG = "SearchNotes";

    //Views
    private ListView mResultsListView;
    private EditText mSearchEditText;
    private LinearLayout mSearchResultsParentLayout;
    private SearchView mSearchView;

    private ArrayList<String> notesNames;
    private ArrayAdapter<String> mAdapter;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_notes);

        // If User uses Android OS version 2.3 or earlier, implement a search form by editText
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){

            mSearchResultsParentLayout = (LinearLayout)findViewById(R.id.search_results_parent);
            LayoutInflater inf = getLayoutInflater();

            mSearchEditText = (EditText)inf.inflate(R.layout.search_form, null);
            mSearchResultsParentLayout.addView(mSearchEditText, 0);

            mSearchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                        findNotesByQuery(mSearchEditText.getText().toString());
                        return true;
                    }
                    return false;
                }
            });

        }

        notesNames = new ArrayList();
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, notesNames);
        mResultsListView = (ListView)findViewById(R.id.list);
        mResultsListView.setAdapter(mAdapter);

    }

    // If User uses Android OS version 3.0 or later, implement a search form by SearchView on ActionBar
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);

        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
          @Override
          public boolean onQueryTextChange(String newText) {
            return true;
          }

          @Override
          public boolean onQueryTextSubmit(String query) {
            findNotesByQuery(query);
            return true;
          }
        };

        mSearchView.setOnQueryTextListener(queryTextListener);
      }

      return true;
    }

    /**
     * Called when the user taps the "Search" key in the IME.
     * </p>
     * Search from all user's notebooks up to 10 notes,
     * display their titles on ListView in order of most recently updated.
     *
     */
    public void findNotesByQuery(String query) {
        final int offset = 0;
        final int pageSize = 10;

        final NoteFilter filter = new NoteFilter();
        filter.setOrder(NoteSortOrder.UPDATED.getValue());
        filter.setWords(query);
        final NotesMetadataResultSpec spec = new NotesMetadataResultSpec();
        spec.setIncludeTitle(true);

        mAdapter.clear();

        showDialog(DIALOG_PROGRESS);
        try{
          // Callback invoked asynchronously from the notes search.  Factored out here
          // so that it can be reused for a local or linked notebook search below
          final OnClientCallback<NotesMetadataList> callback = new OnClientCallback<NotesMetadataList>() {
            @Override
            public void onSuccess(NotesMetadataList data) {
              Toast.makeText(getApplicationContext(), R.string.notes_searched, Toast.LENGTH_LONG).show();
              removeDialog(DIALOG_PROGRESS);

              for (NoteMetadata note : data.getNotes()) {
                String title = note.getTitle();
                notesNames.add(title);
              }
              mAdapter.notifyDataSetChanged();
            }

            @Override
            public void onException(Exception exception) {
              onError(exception, "Error listing notes. ", R.string.error_listing_notes);
            }
          };


          if(!mEvernoteSession.isAppLinkedNotebook()) {
            // Normal, local notebook search
            mEvernoteSession.getClientFactory().createNoteStoreClient()
                .findNotesMetadata(filter, offset, pageSize, spec, callback);
          } else {
            // Linked notebook search
            super.invokeOnAppLinkedNotebook(new OnClientCallback<Pair<AsyncLinkedNoteStoreClient, LinkedNotebook>>() {
              @Override
              public void onSuccess(Pair<AsyncLinkedNoteStoreClient, LinkedNotebook> pair) {
                pair.first.findNotesMetadataAsync(filter, offset, pageSize, spec, callback);
              }

              @Override
              public void onException(Exception exception) {
                callback.onException(exception);
              }
            });
          }
        } catch (TTransportException exception){
            onError(exception, "Error creating notestore. ", R.string.error_creating_notestore);
        }
    }

    /**
     * Show log and toast and remove a dialog on Exceptions
     *
     */
    public void onError(Exception exception, String logstr, int id){
        Log.e(LOGTAG, logstr + exception);
        Toast.makeText(getApplicationContext(), id, Toast.LENGTH_LONG).show();
        removeDialog(DIALOG_PROGRESS);
    }
}




Java Source Code List

com.evernote.android.sample.HelloEDAM.java
com.evernote.android.sample.ImagePicker.java
com.evernote.android.sample.ParentActivity.java
com.evernote.android.sample.SearchNotes.java
com.evernote.android.sample.SimpleNote.java
com.evernote.client.android.AsyncBusinessNoteStoreClient.java
com.evernote.client.android.AsyncLinkedNoteStoreClient.java
com.evernote.client.android.AsyncNoteStoreClient.java
com.evernote.client.android.AsyncReflector.java
com.evernote.client.android.AsyncUserStoreClient.java
com.evernote.client.android.AuthenticationResult.java
com.evernote.client.android.BootstrapManager.java
com.evernote.client.android.ClientFactory.java
com.evernote.client.android.EvernoteOAuthActivity.java
com.evernote.client.android.EvernoteSession.java
com.evernote.client.android.EvernoteUtil.java
com.evernote.client.android.InvalidAuthenticationException.java
com.evernote.client.android.OnClientCallback.java
com.evernote.client.android.SessionPreferences.java
com.evernote.client.conn.mobile.DiskBackedByteStore.java
com.evernote.client.conn.mobile.FileDataException.java
com.evernote.client.conn.mobile.FileData.java
com.evernote.client.conn.mobile.TEvernoteHttpClient.java
com.evernote.client.oauth.EvernoteAuthToken.java
com.evernote.client.oauth.YinxiangApi.java