Android Open Source - android-class Wiki Notes






From Project

Back to project page android-class.

License

The source code is released under:

MIT License

If you think the Android project android-class 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 (C) 2008 Google Inc.//  w w w. ja v a2  s  . c  o m
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy
 * of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package com.google.android.wikinotes;

import java.util.regex.Pattern;

import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.text.util.Linkify;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import com.google.android.wikinotes.db.WikiNote;

/**
 * The WikiNotes activity is the default handler for displaying individual
 * wiki notes. It takes the wiki note name to view from the intent data URL
 * and defaults to a page name defined in R.strings.start_page if no page name
 * is given. The lifecycle events store the current content URL being viewed.
 * It uses Linkify to turn wiki words in the body of the wiki note into
 * clickable links which in turn call back into the WikiNotes activity from
 * the Android operating system. If a URL is passed to the WikiNotes activity
 * for a page that does not yet exist, the WikiNoteEditor activity is
 * automatically started to place the user into edit mode for a new wiki note
 * with the given name.
 */
public class WikiNotes extends Activity {
    private static final String TAG = "WikiNotes";

  /**
     * The view URL which is prepended to a matching wikiword in order to fire
     * the WikiNotes activity again through Linkify
     */

    private static final String KEY_URL = "wikiNotesURL";

    public static final int EDIT_ID = Menu.FIRST;
    public static final int HOME_ID = Menu.FIRST + 1;
    public static final int LIST_ID = Menu.FIRST + 3;
    public static final int DELETE_ID = Menu.FIRST + 4;
    public static final int ABOUT_ID = Menu.FIRST + 5;
    public static final int EXPORT_ID = Menu.FIRST + 6;
    public static final int IMPORT_ID = Menu.FIRST + 7;
    public static final int EMAIL_ID = Menu.FIRST + 8;

    private TextView mNoteView;
    Cursor mCursor;
    private Uri mURI;
    String mNoteName;
    private static final Pattern WIKI_WORD_MATCHER;
    private WikiActivityHelper mHelper;

    static {
  // Compile the regular expression pattern that will be used to
  // match WikiWords in the body of the note
  WIKI_WORD_MATCHER = Pattern
      .compile("\\b[A-Z]+[a-z0-9]+[A-Z][A-Za-z0-9]+\\b");
    }

    @Override
    public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);

  mNoteView = (TextView) findViewById(R.id.noteview);

  // get the URL we are being asked to view
  Uri uri = getIntent().getData();

  if ((uri == null) && (icicle != null)) {
      // perhaps we have the URI in the icicle instead?
      uri = Uri.parse(icicle.getString(KEY_URL));
  }

  // do we have a correct URI including the note name?
  if ((uri == null) || (uri.getPathSegments().size() < 2)) {
      // if not, build one using the default StartPage name
      uri = Uri.withAppendedPath(WikiNote.Notes.ALL_NOTES_URI,
               getResources()
             .getString(R.string.start_page));
  }

  // can we find a matching note?
  Cursor cursor = managedQuery(uri, WikiNote.WIKI_NOTES_PROJECTION,
             null, null, null);

  boolean newNote = false;
  if ((cursor == null) || (cursor.getCount() == 0)) {
      // no matching wikinote, so create it
      uri = getContentResolver().insert(uri, null);
      if (uri == null) {
    Log.e(TAG, "Failed to insert new wikinote into " +
           getIntent().getData());
    finish();
    return;
      }
      // make sure that the new note was created successfully, and
      // select
      // it
      cursor = managedQuery(uri, WikiNote.WIKI_NOTES_PROJECTION, null,
          null, null);
      if ((cursor == null) || (cursor.getCount() == 0)) {
    Log.e(TAG, "Failed to open new wikinote: " +
           getIntent().getData());
    finish();
    return;
      }
      newNote = true;
  }

  mURI = uri;
  mCursor = cursor;
  cursor.moveToFirst();
  mHelper = new WikiActivityHelper(this);

  // get the note name
  String noteName = cursor.getString(cursor
      .getColumnIndexOrThrow(WikiNote.Notes.TITLE));
  mNoteName = noteName;

  // set the title to the name of the page
  setTitle(getResources().getString(R.string.wiki_title, noteName));

  // If a new note was created, jump straight into editing it
  if (newNote) {
      mHelper.editNote(noteName, null);
  } else if (!getSharedPreferences(Eula.PREFERENCES_EULA,
           Activity.MODE_PRIVATE)
      .getBoolean(Eula.PREFERENCE_EULA_ACCEPTED, false)) {
      Eula.showEula(this);
  }

  // Set the menu shortcut keys to be default keys for the activity as
  // well
  setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
  
  Log.i(TAG, "Exiting onCreate()");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  // Put the URL currently being viewed into the icicle
  outState.putString(KEY_URL, mURI.toString());
    }

    @Override
    protected void onResume() {
  super.onResume();
  Cursor c = mCursor;
  if (c.getCount() < 1) {
      // if the note can't be found, don't try to load it -- bail out
      // (probably means it got deleted while we were frozen;
      // thx to joe.bowbeer for the find)
      finish();
      return;
  }
  c.requery();
  c.moveToFirst();
  showWikiNote(c
      .getString(c.getColumnIndexOrThrow(WikiNote.Notes.BODY)));
    }

    /**
     * Show the wiki note in the text edit view with both the default Linkify
     * options and the regular expression for WikiWords matched and turned
     * into live links.
     * 
     * @param body
     *            The plain text to linkify and put into the edit view.
     */
    private void showWikiNote(CharSequence body) {
  TextView noteView = mNoteView;
  noteView.setText(body);

  // Add default links first - phone numbers, URLs, etc.
  Linkify.addLinks(noteView, Linkify.ALL);

  // Now add in the custom linkify match for WikiWords
  Linkify.addLinks(noteView, WIKI_WORD_MATCHER,
       WikiNote.Notes.ALL_NOTES_URI.toString() + "/");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
  super.onCreateOptionsMenu(menu);
  menu.add(0, EDIT_ID, 0, R.string.menu_edit).setShortcut('1', 'e')
      .setIcon(R.drawable.icon_delete);
  menu.add(0, HOME_ID, 0, R.string.menu_start).setShortcut('4', 'h')
      .setIcon(R.drawable.icon_start);
  menu.add(0, LIST_ID, 0, R.string.menu_recent).setShortcut('3', 'r')
      .setIcon(R.drawable.icon_recent);
  menu.add(0, DELETE_ID, 0, R.string.menu_delete).setShortcut('2', 'd')
      .setIcon(R.drawable.icon_delete);
  menu.add(0, ABOUT_ID, 0, R.string.menu_about).setShortcut('5', 'a')
      .setIcon(android.R.drawable.ic_dialog_info);
  menu.add(0, EXPORT_ID, 0, R.string.menu_export).setShortcut('7', 'x')
      .setIcon(android.R.drawable.ic_dialog_info);
  menu.add(0, IMPORT_ID, 0, R.string.menu_import).setShortcut('8', 'm')
      .setIcon(android.R.drawable.ic_dialog_info);  
  menu.add(0, EMAIL_ID, 0, R.string.menu_email).setShortcut('6', 'm')
      .setIcon(android.R.drawable.ic_dialog_info);
  return true;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
  switch (item.getItemId()) {
  case EDIT_ID:
      mHelper.editNote(mNoteName, mCursor);
      return true;
  case HOME_ID:
      mHelper.goHome();
      return true;
  case DELETE_ID:
      mHelper.deleteNote(mCursor);
      return true;
  case LIST_ID:
      mHelper.listNotes();
      return true;
  case WikiNotes.ABOUT_ID:
      Eula.showEula(this);
      return true;
  case WikiNotes.EXPORT_ID:
      mHelper.exportNotes();
      return true;
  case WikiNotes.IMPORT_ID:
      mHelper.importNotes();
      return true;
  case WikiNotes.EMAIL_ID:
      mHelper.mailNote(mCursor);
      return true;
  default:
      return false;
  }
    }

    /**
     * If the note was edited and not canceled, commit the update to the
     * database and then refresh the current view of the linkified note.
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode,
            Intent result) {
  super.onActivityResult(requestCode, resultCode, result);
  if ((requestCode == WikiActivityHelper.ACTIVITY_EDIT) &&
      (resultCode == RESULT_OK)) {
      // edit was confirmed - store the update
      Cursor c = mCursor;
      c.requery();
      c.moveToFirst();
      Uri noteUri = ContentUris
    .withAppendedId(WikiNote.Notes.ALL_NOTES_URI, c.getInt(0));
      ContentValues values = new ContentValues();
      values.put(WikiNote.Notes.BODY, result
    .getStringExtra(WikiNoteEditor.ACTIVITY_RESULT));
      values.put(WikiNote.Notes.MODIFIED_DATE, System
    .currentTimeMillis());
      getContentResolver().update(noteUri, values,
          "_id = " + c.getInt(0), null);
      showWikiNote(c.getString(c
    .getColumnIndexOrThrow(WikiNote.Notes.BODY)));
  }
    }
}




Java Source Code List

com.android.alarmclock.AnalogAppWidgetProvider.java
com.android.alarmclock.DigitalAppWidgetProvider.java
com.android.alarmclock.DigitalAppWidgetService.java
com.android.alarmclock.DigitalWidgetViewsFactory.java
com.android.alarmclock.WidgetUtils.java
com.android.deskclock.AlarmAlertFullScreen.java
com.android.deskclock.AlarmAlertWakeLock.java
com.android.deskclock.AlarmAlert.java
com.android.deskclock.AlarmClock.java
com.android.deskclock.AlarmDatabaseHelper.java
com.android.deskclock.AlarmInitReceiver.java
com.android.deskclock.AlarmKlaxon.java
com.android.deskclock.AlarmListeners.java
com.android.deskclock.AlarmPreference.java
com.android.deskclock.AlarmProvider.java
com.android.deskclock.AlarmReceiver.java
com.android.deskclock.AlarmTimePickerDialogFragment.java
com.android.deskclock.AlarmUtils.java
com.android.deskclock.Alarm.java
com.android.deskclock.Alarms.java
com.android.deskclock.AnalogClock.java
com.android.deskclock.AndroidClockTextView.java
com.android.deskclock.AsyncHandler.java
com.android.deskclock.CircleButtonsLinearLayout.java
com.android.deskclock.CircleTimerView.java
com.android.deskclock.ClockFragment.java
com.android.deskclock.DeskClockFragment.java
com.android.deskclock.DeskClock.java
com.android.deskclock.DigitalClock.java
com.android.deskclock.DontPressWithParentLayout.java
com.android.deskclock.HandleSetAlarm.java
com.android.deskclock.LabelDialogFragment.java
com.android.deskclock.Log.java
com.android.deskclock.RepeatPreference.java
com.android.deskclock.ScreensaverActivity.java
com.android.deskclock.ScreensaverSettingsActivity.java
com.android.deskclock.Screensaver.java
com.android.deskclock.SetAlarm.java
com.android.deskclock.SettingsActivity.java
com.android.deskclock.SnoozeLengthDialog.java
com.android.deskclock.TimePicker.java
com.android.deskclock.TimerRingService.java
com.android.deskclock.TimerSetupView.java
com.android.deskclock.ToastMaster.java
com.android.deskclock.Utils.java
com.android.deskclock.ZeroTopPaddingTextView.java
com.android.deskclock.stopwatch.StopwatchFragment.java
com.android.deskclock.stopwatch.StopwatchService.java
com.android.deskclock.stopwatch.Stopwatches.java
com.android.deskclock.timer.CountingTimerView.java
com.android.deskclock.timer.TimerAlertFullScreen.java
com.android.deskclock.timer.TimerFragment.java
com.android.deskclock.timer.TimerListItem.java
com.android.deskclock.timer.TimerObj.java
com.android.deskclock.timer.TimerReceiver.java
com.android.deskclock.timer.TimerView.java
com.android.deskclock.timer.Timers.java
com.android.deskclock.widget.ActionableToastBar.java
com.android.deskclock.widget.EllipsizeLayout.java
com.android.deskclock.widget.multiwaveview.Ease.java
com.android.deskclock.widget.multiwaveview.GlowPadView.java
com.android.deskclock.widget.multiwaveview.PointCloud.java
com.android.deskclock.widget.multiwaveview.TargetDrawable.java
com.android.deskclock.widget.multiwaveview.Tweener.java
com.android.deskclock.widget.swipeablelistview.LogTag.java
com.android.deskclock.widget.swipeablelistview.LogUtils.java
com.android.deskclock.widget.swipeablelistview.SwipeHelper.java
com.android.deskclock.widget.swipeablelistview.SwipeLayout.java
com.android.deskclock.widget.swipeablelistview.SwipeableListView.java
com.android.deskclock.widget.swipeablelistview.Utils.java
com.android.deskclock.worldclock.CitiesActivity.java
com.android.deskclock.worldclock.Cities.java
com.android.deskclock.worldclock.CityObj.java
com.android.deskclock.worldclock.WorldClockAdapter.java
com.google.android.wikinotes.Eula.java
com.google.android.wikinotes.WikiActivityHelper.java
com.google.android.wikinotes.WikiNoteEditor.java
com.google.android.wikinotes.WikiNotesList.java
com.google.android.wikinotes.WikiNotes.java
com.google.android.wikinotes.db.WikiNote.java
com.google.android.wikinotes.db.WikiNotesProvider.java
com.mamlambo.article.simplecalc.MainActivity.java
course.examples.theanswer.TheAnswer.java
course.examples.theanswer.TheAnswer.java
us.clanryan.coursera.myfirstapp.MainActivity.java
us.clanryan.paceconverter.MainActivity.java